Расширение X video
Расширение X video, чаще сокращаемое до XVideo или Xv обеспечивает механизм вывода видео в X Window System. Изначально протокол был разработан Девидом Карвером, а его текущая версия (вторая) была написана в Июле 1991 года. Основным его назначением и по нынешний день остаётся аппаратное масштабирование (в качестве аппаратуры подразумеваются видеокарты) воспроизводимого видео для просмотра его в полноэкранном режиме. Без XVideo эту работу пришлось бы целиком выполнять центральному процессору, что требовало бы больше ресурсов и могло бы приводить в ряде случаев к замедлению воспроизведения или ухудшению изображения. Кроме того расширение X video использует видеокарту для преобразования цветового пространства. С его помощью можно аппаратно регулировать яркость, контрастность и тон отображаемого видеопотока.
Для того чтобы использовать это расширение необходимы и достаточны три вещи:
- Видеокарта должна поддерживать необходимые функции;
- Её драйвер и X-сервер поддерживает интерфейс XVideo;
- Воспроизводящая видео программа написана с возможностью использования этого интерфейса.
Большинство современных видеокарт обеспечивают необходимые для XVideo функции. Обычно их называют аппаратной поддержкой масштабирования и ускорения преобразования YUV или просто аппаратным ускорением 2D графики. X server XFree86 (операционных систем UNIX, Linux, и частично в Mac OS X) поддерживает расширение XVideo начиная с версии 4.0.2. Чтобы убедиться, что ваш X server поддерживает это расширение можно воспользоваться утилитой xdpyinfo. А для проверки, что текущая видеокарта поддерживает необходимые функции можно использовать программу xvinfo.
Воспроизведение и обработка
[править | править код]Популярные программы для воспроизведения видео, используемые в X Window, такие как MPlayer, MythTV или xine обычно уже имеют поддержку вывода видео через XVideo. Поэтому разумно использовать это расширение везде, где это позволяет установленная видеокарта и поддерживают драйверы. Ускорение будет ощутимо даже на компьютерах с быстрыми процессорами.
Несмотря на то, что протокол предоставляет возможности чтения и записи видеопотока с и на видеокарты, на сегодняшний день самыми востребованными функциями остаются XvPutImage и XvShmPutImage. Клиенты поочерёдно декодируют кадры и передают их видеокарте для аппаратного масштабирования, преобразования и отображения.
Отображение
[править | править код]После того, как изображение было отмасштабировано и подготовлено, остаётся только отобразить его. Существует несколько способов обеспечить ускорение вывода видео на этом этапе. И так как полное ускорение подразумевает, что видеокарта ответственна за масштабирование, преобразование и вывод видео, конкретный способ будет зависеть от того куда именно будет выводиться изображение.
Роль композитного оконного менеджера
[править | править код]В Linux конкретный способ отображения сильно зависит от используемого оконного менеджера. С правильно установленными драйверами GPU видеокарт от Intel, ATI или nVidia могут использоваться некоторыми оконными менеджерами, называемыми композитными оконными менеджерами, для того чтобы обрабатывать каждое отображаемое окно независимо от других. Это обеспечивается путём вывода содержимого каждого окна в специальный буфер и последующего объединения в единое изображение. В тот момент, когда отдельные окна обрабатываются в их собственном буфере, обработанное видеокартой видео может быть добавлено к ним на этом этапе посредством текстурного фильтра, до того момента, как окно будет окончательно нарисовано. XVideo может быть использован для ускорения вывода видео через расширения OpenGL Framebuffer Object или pbuffer.
Оконный менеджер Metacity реализует этот способ. Смешение реализуется с использованием функции аппаратного ускорения 3D графики, например GLX_EXT_texture_from_pixmap. Кроме всего прочего, это позволяет независимо друг от друга выводить на один экран несколько потоков видео. Другие композитные менеджеры Beryl, Compiz и Compiz Fusion поступают аналогичным образом. Compiz Fusion включён в Ubuntu Linux 7.10 и более поздние версии. Он автоматически активируется, если система обнаруживает поддерживающее его оборудование.
Тем не менее, на компьютерах с ограниченной аппаратной поддержкой OpenGL, с отсутствующей поддержкой Framebuffer Object или pbuffer, как на системах использующих XGL, расширение Xv будет недоступно.
Проблемы с цветовым ключом
[править | править код]Причина, по которой оконные менеджеры не поддерживают смешение непосредственно, связана с тем, что очень трудно определить куда необходимо выводить видео поток, поскольку за время ускорения, содержимое экрана превращается в единое изображение. Единственным способом обеспечить вывод видео становится использование аппаратного оверлея с применением цветового ключа. После того, как все окна нарисованы, единственная доступная информация об окнах — это их размеры и координаты. Но для отображения видео так же необходима информация о том, как и какие окна друг друга перекрывают. Для этого программы, воспроизводящие видео, закрашивают область вывода сплошным цветом (допустим, зелёным). Затем, когда все окна выведены, перекрывающие окна могут закрыть часть окна проигрывателя видео, но видеокарте будет достаточно лишь просканировать определённые координаты экрана и если там находятся точки зелёного цвета, то в этом месте необходимо отобразить видео поток. Аналогичный способ использовался для вывода видео с аппаратным ускорением в операционной системе Microsoft Windows XP (и более ранних версиях), потому что её оконный менеджер был столь сильно интегрирован с операционной системой, что ускорить его самого не представлялось возможным.
Таким образом, если оконный менеджер не является композитным, то для вывода видео используется аппаратный оверлей с цветовым ключом, как это описано в параграфе выше. Однако применение этого способа может сделать невозможным получение правильного снимка экрана с использующими Xvideo приложениями. Так же может оказаться невозможным вывод видео на второй монитор, если поддерживается только один аппаратный оверлей.
Проблемы с новыми видеокартами
[править | править код]Из-за выхода DirectX 10 ряд современных графических карт урезал или изменил поддержку текстурного оверлея. Это коснулось и видеокарт nVidia GeForce 8 серии. Все видеокарты GeForce 8800, включая 8800GT и 8800GTS теперь поддерживают только один текстурный оверлей на главном мониторе. Благодаря этому они не могут должным образом обеспечить вывод более одного потока видео с использованием аппаратного ускорения, вне зависимости от платформы.
Результатом стало плохое воспроизведение видео на операционных системах не поддерживающих DirectX 10, включая Windows XP и Linux с использованием XVideo. Эти изменения также навредили многим композитным менеджерам, включая Compiz и отчасти Metacity.
См. также
[править | править код]Ссылки
[править | править код]- Глава «Воспроизведение видео» из руководства FreeBSD
- Официальная спецификация XVideo, версия 2.0 (англ.)
- Дополнения спецификации XVideo, версия 2.2 (англ.)
- страница руководства Xv (англ.)
- testxv.c пример программы (на большинстве дистрибутивов компилируется командой «gcc -o testxv testxv.c -L/usr/X11R6/lib -lX11 -lXext -lXv») (англ.)
- testxv2.cc ещё пример программы на c++ (англ.)