Задела меня эта тема, задела!
Решил прибегнуть исключительно к арифметике.
Итак, вооружившись ручкой, кусочком бумаги и знаниями о дробях и пропорциях из средней школы начал считать. Что получилось?
Всё плохо :-( IPBOX вообще неправильно показывает все каналы, которые 4:3, во всех режимах, если телевизор 16:9.
Начнем с того, что можно менять положение и увеличение картинки на экране командой
echo "vid_pig x y w h" >/dev/commander из командной строки в Telnet. При этом, весь экран разбит на сетку 720x576, с координатами 0,0 в левом верхнем углу (не зависимо от выхода 1080i или 720p), а параметры в команде выше означают следующее:
x и y - координаты верхнего левого угла картинки
w и h - ширина и высота картинки в этой координатной сетке
Дальше начинаем считать. Во первых, из-за того, что сетка имеет размеры 720x576, но телевизор имеет соотношение сторон 16:9, то пикселы в нашей сетке не квадратные, а вытянутые по горизонтали. Вычислим соотношение сторон одного такого прямоугольного пиксела ("коэффициент растяжки"):
16/9 = k * 720/576
k = 16 * 576 / 9 / 720 = 64/45
Теперь, считаем какая реальная должна быть ширина картинки 4:3 в нашей сетке координат, если высота уже дана и известна (576):
4/3 = x/576
x = 768
Поскольку у нас пикселы прямоугольные, то в нашей сетке координат 768 по горизонтали превращается в 768 / k = 768 * 45 / 64 =
540
Итак, мы имеем уже почти всё недостающее для правильной команды видеопроцессору:
echo "vid_pig x 0 540 576" >/dev/commander
Осталось вычислить x. Чтобы картинка была по центру телевизора:
x = (720 - 540) / 2 = 90
Финальная правильная команда для PillarBox:
echo "vid_pig 90 0 540 576" >/dev/commander
А сейчас в прошивке параметры "100 0 516 576". Получается, что ширина картинки сейчас 516 пикселов, вместо 540!!! Это значит, что
изображение в режиме pillarbox сплюснуто по горизонтали на 4.5%.
Идем дальше. Считаем теперь для режима Zoom.
Мы растягиваем нашу картинку в этом режиме по максимуму горизонтально. То есть 540 пикселов в сетке становятся 720. Остается только вычислить новый вертикальный размер, используя простую пропорцию:
540/576 = 720/y
y = 768
Центрируем изображение по вертикали и получаем, что нужно урезать (768 - 576) / 2 = 96 пикселов.
Финальная правильная команда для Zoom:
echo "vid_pig 0 -96 720 768" >/dev/commander
А сейчас у нас в прошивке параметры "0 -80 720 730". Это значит, что
в режиме zoom изображение сплюснуто по вертикали на 5%.
В довершение, хочу попросить корейцев сделать ещё один режим "половинного zoom", известный как 14:9.
Чтобы не надоедать вычислениями опять, команда для такого режима будет:
echo "vid_pig 45 -48 630 672" >/dev/commander
Что скажете по всему этому поводу?
Добавлено через 54 минуты
Вот, ещё. Склепал на коленке скриптец, который циклически переключает все известные ПРАВИЛЬНЫЕ режимы отображения каналов 4:3
Код:
#!/bin/bash
MODE=`cat /var/bin/videomode 2>/dev/null`
if [ "$MODE" = "1" ] ; then
echo "vid_pig 45 -48 630 672" >/dev/commander
echo 2 > /var/bin/videomode
elif [ "$MODE" = "2" ] ; then
echo "vid_pig 0 -96 720 768" >/dev/commander
echo 3 > /var/bin/videomode
else
echo "vid_pig 90 0 540 576" >/dev/commander
echo 1 > /var/bin/videomode
fi
Кладем этот скрипт, скажем, в /var/bin/green.sh, или red.sh или yellow.sh.
Меняем ему атрибут: chmod 0755 /var/bin/green.sh
Жмем зеленую кнопку несколько раз и балдеем от правильного зума.