Решения тех проблем, с которым мне приходилось сталкиваться.

суббота, 1 декабря 2007 г.

"Гладкое" (билинейное) масштабирование видео в totem

Для просмотра видео я почти всегда использую totem. Почему? It just works! :) Единственное что мне не нравилось, что при полноэкранном просмотре картинка масштабируется некрасиво. Видимо, по принципу "ближайший сосед" (nearest neighbour), и, таким образом, присутствует эффект "пикселизации" изображения. Меня это обстоятельство перестало устраивать, и я начал копать.
Оказалось, что несмотря на то, что "движок" GStreamer поддерживает "гладкое" масштабирование, включить его не так-то просто. В-принципе, можно сформировать конвеер комманд напрямую:


gst-launch-0.10 filesrc location=video.avi ! avidemux !
xviddec ! ffmpegcolorspace ! videoscale method=1 ! ximagesink

(это пример для Xvid-фильмов)
Тогда все работает. Но вот как объяснить totem'у, что он должен передать в конвеер videoscale method=1? Вроде бы можно переопределить подсистему вывода видео, прописав там тоже конвеер комманд. Т.е. запускаем gstreamer-properties, выбираем в модуле вывода видео "Другой" и пишем в строке "Канал"
videoscale method=1 ! ximagesink

Но у меня это почему-то не заработало.
Все это я нашел на launchpad'е.

Есть еще один способ, использовать для вывода видео xvimagesink (настраивается в тех же gstreamer-properties). Тогда задействуется аппаратный overlay и масштабирует картинку уже видеокарточка. Но, оказалось, что этот оверлей еще надо и включить.
Проверить включен этот режим или нет можно командой:
xvinfo

У меня был выключен. Чтобы включить нужно в секцию Device файла конфигурации xorg (/etc/X11/xorg.conf) прописать строчку:
Option          "VideoOverlay" "on"

Ну и перезапустить X'ы. Наверное, не все карточки/драйверы такое поддерживают, но у меня ATI и все заработало. Картинка стала гладкой.