Auto Wide Aspect Control — плагин для BeholdTV

«Auto Wide Aspect Control» — плагин для BeholdTV, позволяющий автоматически переключать аспект для аналоговых телеканалов на широкоформатном мониторе с TV-тюнерами Beholder.

ТВ-кадр в аналоговом вещании до сих пор имеет формат 4:3. Так уж исторически сложилось, у старых телевизоров соотношение сторон экрана было 4:3.

Старый телевизор - пропорции экрана 4:3
Современные телевизоры (и большинство современных мониторов) рассчитанные на цифровое вещание — обычно имеют более широкий экран — с соотношением сторон экрана 16:9.

Современный телевизор - пропорции экрана 16:9
Современный видеоматериал как правило снимается на широкоформатные камеры, но транслируется в аналоговом ТВ с чёрными полями наверху и внизу — поскольку иначе вписать кадр 16:9 в экран 4:3 невозможно.

Вещание широкоформатного кадра
На экране 4:3 поля будут только наверху и внизу, но на экране 16:9 чёрные поля будут со всех сторон.

Широкоформатный фильм на широкоформатном экране, но вещание в режиме 4:3
BeholdTV имеет много разных вариантов коррекции соотношения сторон экрана.
Для стандартной телепередачи (4:3) в настройках BeholdTV следует задать режим аспекта кадра «По габаритам окна».
А для широкоформатного фильма (16:9) в настройках есть режим аспекта «16:9 PanScan» — верхнее и нижнее поле обрезается и кадр корректно вписывается в экран.

Обычный фильм Широкоформатный фильм
По габаритам окна Кадр вписан правильно Проблема - чёрные поля
16:9 PanScan Проблема - часть кадра потеряна Кадр обрезан правильно

В итоге приходилось постоянно переключать в BeholdTV режимы «По габаритам окна» и «16:9 PanScan»…

Но, поскольку BeholdTV поддерживает плагины — я придумал алгоритм анализа кадра и реализовал автоматическое переключение аспекта.

Зоны детекта в кадре
Принцип работы плагина — замер уровня яркости в зонах A…H.
Если в зоне H темно — то ничего не делать. Детект работает только если светло в зонах D и E — т.е. это позволяет с большой вероятность исключить просто темноту по сюжету. Далее — если тёмные A,B,C,F,G — то кадр детектируется как «16:9 PanScan». Если есть свет хоть в одном из A,B,C,F,G — то кадр детектируется как «По габаритам окна». Какие-либо остальные комбинации — игнорируются. Некоторые каналы внизу широкоформатного фильма (особенно на музыкальных) выводят всякий спам — для них можно включить режим «Auto (A…H, !F…G)» — это будет детект только по верхним зонам. Вплотную по границам кадра много шумов, поэтому надо делать отступы примерно по 5 пикселей. Зоны A-B-C разделены на 3 части (а не единая зона) для того чтобы обходить логотипы каналов (в идеале надо делать персональные настройки позиций зон для каждого канала, но мне лень, интересен был сам принцип).

Настройки Behold-плагина AWAC

Для защиты от шумов реализовано несколько уровней фильтрации. Сначала складываются по 4 кадра и из них выделяются самые тёмные каналы, а потом 4 кадра соединяются в 1 монохромный с выделением самого яркого из их RGB-каналов. Для каждой зоны выявляется уровень самой яркой точки и сумма всех яркостей. Зона считается светлой если превышено любое из двух условий — максимальная точка или сумма всех. Затем — настройка «Непрерывная последовательность кадров» — детект срабатывает только если все зоны A…H имеют стабильное состояние в течении этой продолжительности.
Для корректной работы размер потока должен быть 768*576 или 720*576 или 704*576. А координаты зон в любом случае должны быть относительно 768*576, при необходимости плагин сам их интерполирует на текущий размер потока.

Требования к системе: WinXP…Win10, BeholdTV v5.28, аналоговое ТВ (с DVB плагины не работают), процессор с набором команд SSE2 (и желательно с как минимум 2 полноценными ядрами).
Есть правда одна маленькая проблема. Beholder API не предоставляет функционала необходимого для работы этого плагина. Поэтому плагин использует недокументированные возможности (эмуляция меню для управления и прямое чтение памяти процесса для проверок состояний)…
Известные баги: при открытом окне настроек плагина попытка записи или скриншота приводит к падению — будет исправлено впоследствии. Список привязанных аспектов использует только номера каналов и при перемещении каналов местами — привязки нарушатся (решение то понятно — использовать ChnlIdx вместо ChnlOrder — но это существенно тормознее и потому не подходит). Плагин корректно работает только с дефолтной яркостью и контрастностью — в будущем может сделаю корректирующие коэффициенты.


История развития программы:
v.1.5.28.3 (2016.03.03) Многочисленные доработки, подсветка областей детекта, стыковка с современной версией BeholdTV 5.28.
v.1.5.17.0 (2012.12.10) Первая публичная версия, только для BeholdTV 5.17;

Скачать “BPP_AWAC_v20160303.rar” – 11,69 КБВерсия 1.5.28.3, 2016-03-03 17:32