ТВ-кадр (в аналоговом ТВ) сам по себе в любом случае имеет формат 4:3. Однако сейчас большинство фильмов имеют формат 16:9 и при трансляции по ТВ идут с чёрной полосой вверху и внизу. Для тех у кого монитор 4:3 - это всё не принципиально - для такого монитора тоже нужны эти полосы. Но сейчас большинство мониторов широкоформатные - 16:9. И на них в режиме фуллскрина стандартный кадр 4:3 получается с чёрными полями слева и справа. А в случае широкоформатного фильма - с чёрными полями вообще со всех 4 сторон.
Вложение:

BPP_AWAC_f1.png [ 37.59 КБ | Просмотров: 47029 ]
BeholdTV имеет возможность выбора соотношения «16:9 PanScan» - с картинки обрезаются верхняя и нижняя часть кадра, и фильм корректно вписывается в фуллскрин на широкоформатном мониторе. Чёрных полос нет нигде. Однако выбирать соотношение - стандартное «4:3 Letterbox» или широкоформатное «16:9 PanScan» - приходится постоянно вручную. А с пульта вообще не удобно - ибо софт не позволяет назначать конкретную кнопку на выбор того или иного соотношения, соотношение перебираются циклически (из 4 варианта и это долго). Вдобавок есть каналы где соотношение «16:9 Anamorphic» (широкоформатный фильм растянут по вертикали) - его по умолчанию невозможно смотреть ни в «4:3 Letterbox» ни в «16:9 PanScan».
Вобщем, мне это надоело и я написал плагин «Auto Wide Aspect Control». Плагин позволяет следующее:
- задавать список каналов для которых будет постоянно устанавливаться ранее заданное соотношение (например Anamorphic);
- постоянный анализ картинки, и при обнаружении признаков широкоформатного фильма - автоматическое переключение в режим «16:9 PanScan»;
- опционально - детект только в режиме фуллскрина;
- опционально - принудительный возврат «4:3 Letterbox» в оконном режиме;
Принцип работы плагина - замер уровня яркости в зонах A…H.
Вложение:

BPP_AWAC_f2.png [ 55.47 КБ | Просмотров: 47029 ]
Если в зоне H темно - то ничего не делать. Детект работает только если светло в зонах D и E - т.е. это позволяет с большой вероятность исключить просто темноту по сюжету. Далее - если тёмные A,B,C,F,G - то кадр детектируется как «16:9 PanScan». Если есть свет хоть в одном из A,B,C,F,G - то кадр детектируется как «4:3 Letterbox». Какие-либо остальные комбинации - игнорируются. Некоторые каналы внизу широкоформатного фильма (особенно на музыкальных) выводят всякий спам - для них можно включить режим «Auto (A...H, !F...G)» - это будет детект только по верхним зонам. Вплотную по границам кадра много шумов, поэтому надо делать отступы примерно по 5 пикселей. Зоны A-B-C разделены на 3 части (а не единая зона) для того чтобы обходить логотипы каналов.
Для защиты от шумов реализовано несколько уровней фильтрации. Сначала складываются по 4 кадра и из них выделяются самые тёмные каналы, а потом 4 кадра соединяются в 1 монохромный с выделением самого яркого из их RGB-каналов. Для каждой зоны выявляется уровень самой яркой точки и сумма всех яркостей. Зона считается светлой если превышено любое из двух условий - максимальная точка или сумма всех. Затем - настройка «Непрерывная последовательность кадров» - детект срабатывает только если все зоны A…H имеют стабильное состояние в течении этой продолжительности.
Использование плагина показало что в оконном режиме постоянная смена аспекта не актуальна и отвлекает. Поэтому реализованы опции для автодетекта только в фуллскрине и принудительной установки «4:3 Letterbox» при выходе в оконный режим.
Координаты мыши выведены просто для удобства настройки координат зон.
Для корректной работы размер потока должен быть 768*576. А координаты зон в любом случае должны быть относительно 768*576, при необходимости плагин сам их пересчитывает.
Требования к системе: BeholdTV, аналоговое ТВ (с DVB-T плагины не работают), процессор с набором команд SSE2 (и желательно с как минимум 2 полноценными ядрами).
Вложение:
BPP_AWAC_v20121210sd.rar [9.83 КБ]
Скачиваний: 1947
Есть правда одна маленькая проблема. Beholder API не предоставляет функционала необходимого для работы этого плагина. У меня есть версия плагина которая использует недокументированные возможности (эмуляция меню для управления и прямое чтение памяти процесса для проверок состояний)… Но авторы BeholdTV
пишут что это неправильно. Поэтому, в опубликованной версии эти возможности удалены, и в итоге плагин не может управлять аспектом, а только показывает в окошке «Автодетект соотношения» какой аспект он вычислил…
Для работы плагина через документированное API не хватает возможности управлять аспектом через API, а так-же в получать в PROC_STR текущее состояние аспекта и фуллскрина (а лучше и экономичнее в INIT_STR - получать адреса соответствующих переменных в памяти).
Известные баги: при открытом окне настроек плагина попытка записи или скриншота приводит к падению - будет исправлено впоследствии. Список привязанных аспектов использует только номера каналов и при перемещении каналов местами - привязки нарушатся (решение то понятно - использовать ChnlIdx вместо ChnlOrder - но это существенно тормознее и потому не подходит). Плагин корректно работает только с дефолтной яркостью и контрастностью - в будущем может сделаю корректирующие коэффициенты.