Автор (ы) исходного текста | X.Org Foundation |
---|---|
Стабильный выпуск | 2.0 / 25 июля 1991 г.; 29 лет назад (1991-07-25) |
Расширение видео X, часто сокращенно XVideo или Xv, представляет собой механизм вывода видео для X Window System. Протокол был разработан Дэвидом Карвером; спецификация для версии 2 протокола была написана в июле 1991 года. Сегодня он в основном используется для изменения размера видеоконтента в аппаратных средствах видеоконтроллера, чтобы увеличить данное видео или просмотреть его в полноэкранном режиме. Без XVideo X пришлось бы выполнять это масштабирование на основном процессоре. Это требует значительной вычислительной мощности, которая может замедлить или ухудшить видеопоток; видеоконтроллеры специально разработаны для такого рода вычислений, поэтому могут делать это гораздо дешевле. Точно так же расширение X video может заставить видеоконтроллер выполнять преобразования цветового пространства и изменять контраст, яркость и оттенок отображаемого видеопотока.
Для того, чтобы это работало, необходимо объединить три вещи:
Большинство современных видеоконтроллеров предоставляют функции требуется для XVideo; эта функция известна как аппаратное масштабирование и ускорение YUV или иногда как аппаратное ускорение 2D. Сервер отображения XFree86 X использует XVideo, начиная с версии 4.0.2. Чтобы проверить, поддерживает ли данный сервер X Display XVideo, можно использовать утилиту xdpyinfo. Чтобы проверить, предоставляет ли видеоконтроллер необходимые функции и реализует ли драйвер устройства X XVideo для какой-либо из них, можно использовать программу xvinfo.
Программы воспроизведения видео, работающие в системе X Window, такие как MPlayer, MythTV или xine, обычно имеют возможность включить XVideo выход. Рекомендуется включать эту опцию, если система GPU видеооборудование и драйверы устройств поддерживают XVideo, а более современные системы рендеринга, такие как OpenGL и VDPAU, недоступны - ускорение очень заметно даже на быстром CPU.
Хотя сам протокол имеет функции для чтения и записи видеопотоков с и на видеоадаптеры, на практике сегодня используются только функции XvPutImageи XvShmPutImage: Клиентская программа постоянно подготавливает изображения и передает их графическому оборудованию для масштабирования, преобразования и отображения.
После того, как видео было масштабировано и подготовлено для отображения на видеокарте, его необходимо отобразить. На этом этапе есть несколько возможных способов отображения ускоренного видео. Поскольку полное ускорение означает, что видеоконтроллер отвечает за масштабирование, преобразование и отрисовку видео, используемый метод полностью зависит от того, на что видео рисуется.
В X, то, как окончательно отрисовывается видео, во многом зависит от используемого X оконного менеджера. При правильно установленных драйверах и оборудовании GPU, таком как поддерживаемые наборы микросхем Intel, ATI и nVidia, некоторые оконные менеджеры, называемый составными оконными менеджерами, позволяет отдельно обрабатывать окна и затем визуализировать (или компоновать). Это подразумевает, что все окна сначала отображаются в отдельные буферы вывода в памяти, а затем объединяются в законченный графический интерфейс. Находясь в (видео) памяти, отдельные окна могут быть преобразованы отдельно, и ускоренное видео может быть добавлено на этом этапе с использованием фильтра текстуры до того, как окно будет составлено и отрисовано. XVideo также можно использовать для ускорения воспроизведения видео во время рисования окон с помощью OpenGL Framebuffer Object или pbuffer.
Metacity, менеджер окон X использует композицию таким образом. Компоновка также может использовать ускорения 3D-конвейеров, такие как GLX_EXT_texture_from_pixmap. Помимо прочего, этот процесс позволяет множеству видеовыходов использовать один и тот же экран, не мешая друг другу. Другие оконные менеджеры композитинга, такие как Compiz, также используют композитинг.
Однако в системе с ограниченной функцией ускорения OpenGL, в частности отсутствием OpenGL Framebuffer Object или pbuffer, использование среды OpenGL, например Xgl делает невозможным аппаратное ускорение xv.
В том случае, если оконный менеджер не поддерживает композитинг напрямую, труднее определить, где должен отображаться видеопоток, потому что к тому времени он можно ускорить вывод уже преобразован в единое изображение. Единственный способ сделать это, как правило, - использовать аппаратный оверлей с постобработкой с использованием кодирования цветности. После того, как все окна уже нарисованы, единственная доступная информация - это размер и положение холста видеоокна. Третья часть информации требуется, чтобы указать, какие части холста видеоокна закрыты другими окнами, а какие нет. Таким образом, видеоплеер рисует свой холст сплошным цветом (назовем его зеленым), и этот цвет становится временным третьим измерением. Когда все окна нарисованы, окна, закрывающие видеоплеер, будут блокировать зеленый цвет. Когда видеопоток добавляется к выходу, видеокарта может просто сканировать координаты холста. Когда он встречает зеленый цвет, он знает, что обнаружил видимую часть видеоокна, и рисует только эти части видео. Этот же процесс был также единственным доступным вариантом для рендеринга видео с аппаратным ускорением в Microsoft Windows XP и ранее, поскольку его функции управления окнами были настолько глубоко встроены в операционную систему, что их ускорение могло бы было невозможно.
Если оконный менеджер не поддерживает композитинг, постобработка аппаратных оверлеев с использованием цветного ключа, как описано в предыдущем абзаце, может сделать невозможным создание правильного скриншоты приложений Xvideo. Это также может сделать невозможным просмотр такого воспроизведения на дополнительном дисплее, когда на аппаратном уровне разрешено только одно наложение.
gcc -o testxv testxv.c -L / usr / X11R6 / lib -lX11 -lXext - lXv
"