Введение
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.
X Video Motion Compensation (XvMC), is an extension of the X video extension (Xv) for the X Window System. The XvMC API allows video programs to offload portions of the video decoding process to the GPU video hardware. In theory this process should also reduce bus bandwidth requirements. Currently, the supported portions to be offloaded by XvMC onto the GPU are motion compensation (mo comp) and inverse discrete cosine transform (iDCT) for MPEG 2 video. XvMC also supports offloading decoding of mo comp, iDCT, and VLD ("Variable Length Decoding", more commonly known as "slice level acceleration") for not only MPEG 2 but also MPEG 4 ASP video on VIA Unichrome (S3 Graphics Chrome Series) hardware. XvMC was the first UNIX equivalent of the Microsoft Windows DirectX Video Acceleration (DxVA) API. Popular software applications known to take advantage of XvMC include MPlayer, MythTV, and 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" для субобразов.