X-Video Motion Compensation (XvMC), является расширением расширения X video (Xv) для X Window System. XvMC API позволяет видеопрограммам выгружать части процесса декодирования видео на видеооборудование GPU. Теоретически этот процесс также должен снизить требования к пропускной способности шины. В настоящее время поддерживаемые части, которые XvMC выгружают на графический процессор, - это компенсация движения (mo comp) и обратное дискретное косинусное преобразование (iDCT) для MPEG-2 видео. XvMC также поддерживает декодирование с выгрузкой mo comp, iDCT и VLD («декодирование переменной длины», более известное как «ускорение уровня среза») для не только MPEG-2, но также и MPEG-4 ASP видео на аппаратном обеспечении VIA Unichrome (S3 Graphics Chrome Series).
XvMC был первым UNIX-эквивалентом Microsoft Windows DirectX Video Acceleration (DxVA) API. Популярные программные приложения, использующие преимущества XvMC, включают MPlayer, MythTV и xine.
Для каждого аппаратного видео GPU, поддерживающего ускорение видео XvMC, требуется X11 программное обеспечение драйвер устройства для включения этих функций.
В настоящее время доступно три драйвера X11 Nvidia: только 2D-драйвер с открытым исходным кодом, но скрытый драйвер, поддерживаемый Nvidia, который называется nv., проприетарный бинарный драйвер от Nvidia и драйвер с открытым исходным кодом, основанный на обратном проектировании бинарного драйвера, разработанного сообществом Linux под названием Nouveau. Nouveau не преследует поддержку XvMC, драйвер 2D nv не поддерживает XvMC, а официальный проприетарный бинарный драйвер от Nvidia поддерживает только разгрузку MPEG-2 (mo comp и iDCT) на оборудовании вплоть до GeForce серии 7000.
VIA предоставляет драйверы устройств с открытым исходным кодом для некоторых из своего оборудования VIA Unichrome (S3 Graphics Chrome Series), поддерживая выгрузку MPEG-2 и MPEG-4 ASP видео. Благодаря уровню декодирования VLD VIA снимает с ЦП гораздо больше задач декодирования, чем графические процессоры, поддерживающие только уровни iDCT или mo comp. Имейте в виду, что не все устройства поддерживаются, и есть некоторые другие предостережения. t
Intel предоставляет официальные драйверы устройств с открытым исходным кодом, которые поддерживают разгрузку MPEG-2 (mo comp и iDCT) на линейке интегрированных графических чипов Intel 8xx / 9xx.
Хотя ATI была первым производителем, обеспечившим ускорение MPEG2 на своих графических платах с помощью графического процессора Rage 128, она никогда не предоставляла документации по его использованию. Так что XvMC недоступен и, вероятно, никогда не будет. XvMC поддерживается на картах Radeon -4000 (которые имеют UVD ) драйвером Catalyst начиная с версии 8.10 и выше на экспериментальном уровне (что означает, что он не работает. «из коробки ».) (См. Также X-Video Bitstream Acceleration ). Поддержка компенсации движения в другом оборудовании ATI / AMD планируется в будущем. (Теперь все оборудование поддерживает ускорение MPEG-2 на уровнях iDCT и mo comp).
Нет драйверов устройств, поддерживающих XvMC на оборудовании Matrox (хотя оборудование Matrox Parhelia поддерживает ускорение MPEG-2 на уровне mo comp).
Драйвер двоичного устройства от S3 поддерживает выгрузку MPEG-2 только в исходном драйвере 2.0.16 на графических процессорах Chrome 20.
Это из спецификации X-Video Motion Compensation - API v. 1.0
XvMC расширяет X video extension (Xv) и использует знакомую концепцию порта XvPort. У портов есть атрибуты, которые можно установить и запросить через Xv. В портах XvMC также могут быть созданы контексты аппаратной компенсации движения для использования с ними. Порты, которые поддерживают XvImages (т.е. они имеют кодировку порта «XV_IMAGE», как описано в приложении к API Xv версии 2.2), можно запросить список поддерживаемых ими типов XvMCSurface. Если они поддерживают какие-либо типы XvMCSurface, для этого порта можно создать XvMCContext.
XvMCContext описывает состояние конвейера компенсации движения. Можно создать отдельный XvMCContext для использования с одним портом, типом поверхности, типом компенсации движения, комбинацией ширины и высоты. Например, контекст может быть создан для конкретного порта, который выполняет компенсацию движения MPEG-2 на поверхностях 720 x 480 4: 2: 0. Как только контекст создан, ссылка на него подразумевает порт, тип поверхности, размер и тип компенсации движения. Контексты могут быть «прямыми» или «косвенными». Для косвенных контекстов сервер отображения X отображает все видео, используя данные, переданные ему клиентом. Для прямых контекстов клиентские библиотеки визуализируют видео практически без взаимодействия с сервером X-дисплея.
XvMCSurfaces - это буферы, в которых может выполнять рендеринг аппаратное обеспечение компенсации движения. Данные в самих буферах недоступны для клиентов и могут храниться в аппаратно-зависимом формате. Может быть создано любое количество буферов для использования с определенным контекстом (если позволяют ресурсы).
XvMC обеспечивает ускорение видео, начиная с одного из двух мест в конвейере видео . Ускорение, начинающееся с первой точки, которую мы назовем уровнем «компенсации движения», начинается после и IDCT в том месте, где должна применяться компенсация движения. Вторая точка, которую мы назовем уровнем «IDCT», начинается перед IDCT сразу после обратного квантования.
Рендеринг выполняется путем представления библиотеки с целевой XvMCSurface и до двух эталонных XvMCSurfaces для компенсации движения, буфером блоков 8x8 и буфером команд, который описывает, как использовать Блоки 8x8 вместе с векторами компенсации движения для построения данных в целевой XvMCSurface. Когда конвейер запускается на уровне iDCT, Xv будет выполнять IDCT для блоков перед выполнением компенсации движения. Предоставляется функция для копирования / наложения части XvMCSurface на чертеж с произвольным масштабированием.
XvMCSubpictures - это отдельные поверхности, которые могут смешиваться с целевой поверхностью. Любое количество XvMCSubpictures может быть создано для использования с контекстом (если позволяют ресурсы). Поддерживаются как «внутренние», так и «внешние» режимы субтитров.
Ускорение XvMC поддерживается в:
Несмотря на то, что в настоящее время XvMC поддерживает только аппаратное ускорение компенсации движения (mo comp) и обратного дискретного косинусного преобразования (iDCT) (и декодирования переменной длины для VIA Unichrome GPU), дополнительные процессы декодирования видео можно было передать современным GPU, которые можно было ускорить с помощью программ фрагментов GPU. В будущем XvMC может быть расширен для поддержки тех же процессов, что и новые конкурирующие API-интерфейсы аппаратного ускорения видео, такие как VDPAU, XvBA и VAAPI :
Кроме того, что не все функции и функции DxVA (который является Microsoft эквивалент API для Windows ) и отсутствие поддержки других видеоформатов, кроме MPEG-2 в драйверах устройств Linux от Intel и NVIDIA, версия 1.0 спецификации XvMC API в настоящее время также имеет следующие ограничения:
В настоящее время разрабатывается проект под названием VA API по разработке более современного API ускорения видео, который будет поддерживать функции ускорения видео современных графических процессоров.
Xvideo