Введение

X Video Motion Compensation (XvMC) — это расширение X Video Extension (Xv) для X Window System. API XvMC позволяет видеопрограммам переносить часть процесса декодирования видео на видеоаппаратное обеспечение GPU. Теоретически, это также должно снизить требования к пропускной способности шины. В настоящее время XvMC поддерживает перенос на GPU компенсации движения (mo comp) и обратного дискретного косинусного преобразования (iDCT) для видео MPEG 2. XvMC также поддерживает перенос декодирования компенсации движения, iDCT и VLD ("декодирование переменной длины", более известное как "ускорение на уровне слайсов") для видео MPEG 2 и MPEG 4 ASP на аппаратном обеспечении VIA Unichrome (S3 Graphics Chrome Series). XvMC был первым UNIX-эквивалентом API Microsoft Windows DirectX Video Acceleration (DxVA). Популярные программные приложения, использующие XvMC, включают MPlayer, MythTV и xine.

Драйверы устройств

Каждый аппаратный графический процессор (GPU) для видео, поддерживающий аппаратное ускорение видео XvMC, требует программного драйвера устройства X11 для активации этих функций.

Nvidia

В настоящее время доступно три драйвера X11 для Nvidia: драйвер nv с открытым исходным кодом, поддерживаемый Nvidia, который работает только в 2D и имеет запутанный код, проприетарный двоичный драйвер от Nvidia, и драйвер с открытым исходным кодом Nouveau, разработанный сообществом Linux на основе обратной инженерии проприетарного двоичного драйвера. 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. Следует учитывать, что поддержка не всех устройств гарантирована, и существуют и другие ограничения.

Информация

Intel предоставляет официальные драйверы устройств с открытым исходным кодом, поддерживающие аппаратное ускорение MPEG 2 (mo comp и iDCT) на интегрированных графических чипах Intel серий 8xx/9xx.

ATI/AMD

Хотя ATI была первым производителем, предоставившим аппаратное ускорение MPEG 2 в своих графических платах с GPU Rage 128, компания никогда не публиковала документацию по его использованию. Поэтому XvMC недоступна и, скорее всего, никогда не будет. XvMC поддерживается на видеокартах Radeon 4000 (оснащенных UVD) драйвером Catalyst, начиная с версии 8.10, на экспериментальном уровне (то есть не работает сразу после установки). (См. также Ускорение видеопотока X Video). Поддержка компенсации движения в другом оборудовании ATI/AMD планируется в будущем. (В настоящее время все оборудование поддерживает ускорение MPEG 2 на уровнях iDCT и компенсации движения).

Матрокс

На аппаратном обеспечении Matrox отсутствуют драйверы устройств, поддерживающие XvMC, (хотя аппаратное обеспечение Matrox Parhelia поддерживает ускорение MPEG 2 на уровне mo comp).

S3

Драйвер двоичного устройства от S3 поддерживает аппаратное ускорение MPEG 2 только в исходном драйвере версии 2.0.16 для графических процессоров Chrome 20.

Технический обзор XvMC API

Это из спецификации API компенсации движения X Vxvideoideo, версия 1.0.

XvPort

XvMC расширяет расширение X видео (Xv) и использует знакомую концепцию XvPort. Порты имеют атрибуты, которые можно устанавливать и запрашивать через Xv. В XvMC для портов также могут создаваться аппаратные контексты компенсации движения для использования с ними. Порты, поддерживающие XvImages (то есть имеющие кодировку порта "XV IMAGE", как описано в приложении к API Xv версии 2.2), могут быть запрошены для получения списка поддерживаемых ими типов поверхностей XvMCSurface. Если они поддерживают какие-либо типы поверхностей XvMCSurface, для этого порта можно создать контекст XvMC.

XvMCCонтекст

XvMCContext описывает состояние конвейера компенсации движения. Индивидуальный XvMCContext можно создать для использования с одним портом, типом поверхности, типом компенсации движения, а также определенной шириной и высотой. Например, контекст может быть создан для конкретного порта, выполняющего компенсацию движения MPEG 2 на поверхностях 720x480 4:2:0. После создания контекста, обращение к нему подразумевает использование порта, типа поверхности, размера и типа компенсации движения. Контексты могут быть "прямыми" или "косвенными". В случае косвенных контекстов сервер отображения X отрисовывает все видео, используя данные, переданные клиентом. Для прямых контекстов клиентские библиотеки отрисовывают видео с минимальным или полным отсутствием взаимодействия с сервером отображения X.

XvMCSurfaces (поверхности)

XvMCSurfaces – это буферы, в которые аппаратное обеспечение компенсации движения может выполнять рендеринг. Данные, хранящиеся в этих буферах, недоступны для клиентских приложений и могут быть сохранены в формате, специфичном для используемого оборудования. Может быть создано любое количество буферов для использования с определенным контекстом (при наличии достаточных ресурсов).

Видео-проводка

XvMC обеспечивает аппаратное ускорение видео, начиная с одной из двух точек в конвейере обработки видео. Ускорение, начинающееся с первой точки, которую мы будем называть уровнем "компенсации движения", начинается после обратного квантования и IDCT, в месте, где применяется компенсация движения. Вторая точка, которую мы будем называть уровнем "IDCT", начинается до IDCT сразу после обратного квантования.

Рендаринг

Рендеринг выполняется путем предоставления библиотеке целевой поверхности XvMCS и до двух опорных поверхностей XvMCS для компенсации движения, буфера блоков 8x8 и буфера команд, описывающего, как использовать блоки 8x8 совместно с векторами компенсации движения для формирования данных в целевой поверхности XvMCS. Когда конвейер начинается с уровня iDCT, Xv выполняет обратное дискретное косинусное преобразование (IDCT) над блоками перед выполнением компенсации движения. Предоставляется функция для копирования/наложения части поверхности XvMCS на отрисовываемый объект с произвольным масштабированием.

XvMCSubpictures (подпись)

XvMCSubpictures — это отдельные поверхности, которые могут быть объединены с целевой поверхностью. Может быть создано любое количество субобразов XvMC для использования с контекстом (при наличии достаточных ресурсов). Поддерживается как поведение "backend", так и "frontend" для субобразов.