Pull to refresh

Аппаратное декодирование видео на AMD Radeon в Ubuntu (mplayer)

Reading time 5 min
Views 20K

Введение


Когда у меня была карточка от Nvidia, вопросов с воспроизведением видео на ней не было: Скачиваешь последний snapshot с сайта mplayer, устанавливаешь проприетарные драйвера, собираешь с поддержкой vdpau, добавляешь соответствующие кодеки и устройство вывода, и всё работает (стоит заметить, что в некоторых дистрибутивах поддержка vdpau уже есть в mplayer).
Не давно у меня появился AMD Radeon, при выборе видеокарты мысленные преграды существовали для использования Radeon'a, в том числе касающиеся настройки аппаратного декодирования. Но они были успешно сломлены финансовой стороной вопроса, так и появился у меня AMD Radeon HD с UVD3.
Данная статья появилась как результат поиска на тему: как заставить видеокарту декодировать видео + сохранить в качестве заметки на будущее. Итак приступим.
Примечание: В комментариях было указано, что это устаревший способ, новый способ описан по ссылке, а готовый скрипт лежит тут.


Немного о терминах


Unified Video Decoder (рус. Унифицированный видео декодер; ранее называемый Universal Video Decoder — рус. Универсальный видео декодер; сокращённо — UVD) — аппаратный компонент (блок) графических процессоров производства американской компании AMD, предназначенный для аппаратного декодирования битовых потоков видеоданных, сжатых видео кодеками H.264, VC-1 и MPEG-2.[1]
X-Video Bitstream Acceleration (XvBA), эквивалент DXVA для X Window System, поддерживающий MPEG-2, H.264 и VC-1.[2]

XvBA


Под linux для декодирования видео используются разные технологии, например NVIDIA- vdpau, AMD — XvBA. В данной статье описана установка XvBA. Его можно поставить из исходников, или из бинарников. Всё не обходимое есть на сайте: http://www.splitted-desktop.com/~gbeauchesne/. Ниже я сначала приведу пример установки из бинарных пакетов, а потом из исходных кодов. Отмечу, что все действия я производил под Ubuntu 11.04 (natty), 64 бит.

Установка из бинарных пакетов

Примечание 1: Так как я использую 64 битную версию ОС, поэтому дальнейшие действия будут именно для 64-х бит. Для 32-х битной ОС, будут соответствующие версии этих пакетов. (Например: libva1_0.32.0-1+sds2_i386.deb вместо libva1_0.32.0-1+sds2_amd64.deb)
Примечание 2: На сайте представлен собранный mplayer для 32 битных ОС ( последняя версия на текущий момент mplayer-vaapi-20110127.i686.tar.bz2). Поэтому если вы не собираетесь собирать mplayer, тогда можно воспользоваться этим, но необходимо будет до установить (возможно) некоторые пакеты.

1. Скачиваем пакеты

wget www.splitted-desktop.com/~gbeauchesne/xvba-video/xvba-video_0.8.0-1_amd64.deb www.splitted-desktop.com/~gbeauchesne/libva/pkgs/amd64/libva1_0.32.0-1+sds2_amd64.deb www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-latest-FULL.tar.bz2 www.splitted-desktop.com/~gbeauchesne/libva/pkgs/amd64/libva-dev_0.32.0-1+sds2_amd64.deb
Примечание: Если вы не будете собирать mplayer, то dev пакеты вам не нужны, как и файл mplayer-vaapi-latest-FULL.tar.bz2.

2. Устанавливаем

sudo apt-get install libdrm-dev #Необходим для установки пакетов
sudo dpkg -i libva1_0.32.0-1+sds2_amd64.deb xvba-video_0.8.0-1_amd64.deb libva-dev_0.32.0-1+sds2_amd64.deb

Проверить работоспособность xvba можно выполнив команду vainfo:
$ vainfo
libva: libva version 0.32.0-sds2
Xlib: extension "XFree86-DRI" missing on display ":0.0".
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/va/drivers/fglrx_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA API version: 0.32
vainfo: Driver version: Splitted-Desktop Systems XvBA backend for VA-API - 0.8.0
vainfo: Supported profile and entrypoints
VAProfileH264High : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD

Теперь ставим MPlayer.
Примечание: Если вы воспользуетесь уже собранным, его достаточно разархивировать и скопировать в папку, где его сможет найти bash, что бы можно было вызывать командой mplayer и не указывать весь путь(например в /usr/local/bin, т.е. cp mplayer /usr/local/bin), также ему будут необходимы библиотеки, их наличие можно посмотреть командой ldd $(which mplayer) и до установить при необходимости.
sudo apt-get build-dep mplayer #Этот шаг можно пропустить, но с другой стороны тогда вам придётся самим устанавливать то что вам понадобится
sudo apt-get install yasm # По какой-то причине не установился c build-dep пришлось устанавливать в ручную
tar xf mplayer-vaapi-latest-FULL.tar.bz2 #Распаковываем
cd mplayer-vaapi-20110127 # Переходим в каталог. Ваш каталог возможно будет называться по-другому
sh checkout-patch-build.sh # Устанавливаем
cd mplayer-vaapi # Переходим
sudo make install #Для установки

Теперь у вас работающий mplayer с поддержкой VAAPI!

Сборка из исходных кодов

wget www.splitted-desktop.com/~gbeauchesne/xvba-video/xvba-video-0.8.0.tar.gz www.splitted-desktop.com/~gbeauchesne/libva/libva_0.32.0-1+sds2.tar.gz www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-latest-FULL.tar.bz2 #Скачиваем исходные коды
sudo apt-get build-dep mplayer # Этот шаг можно пропустить, но с другой стороны тогда вам придётся самим устанавливать то что вам понадобится
sudo apt-get install autoconf libtool libxfixes-dev yasm #Зависимости
tar xf libva_0.32.0-1+sds2.tar.gz #Распаковываем архив с libva
cd libva-0.32.0/
for p in debian/patches/*.patch; do patch -p1 < $p; done # Ставим патчи
autoreconf -vif # Обновляем конфигурационный файл
./configure # Конфигурируем
make # Собираем
sudo make install # Устанавливаем
cd .. # Переходим вверх

wget developer.amd.com/downloads/xvba-sdk-0.74-404001.tar.gz # Необходимо для сборки xvba-video
tar xf xvba-sdk-0.74-404001.tar.gz include/amdxvba.h # Здесь нужен только один файл
sudo cp include/amdxvba.h /usr/local/include # Устанавливаем
sudo ln -s /usr/lib/fglrx/libXvBAW.so.1 /usr/local/lib/libXvBAW.so # Делаем ссылку на библиотеку

tar xf xvba-video-0.8.0.tar.gz # Распаковываем
cd xvba-video-0.8.0/
./configure
make
sudo make install # Устаналиваем
cd ..

tar xf mplayer-vaapi-latest-FULL.tar.bz2 # Распаковываем MPlayer
cd mplayer-vaapi-20110127/
sed -i 's\/usr/include/va/va.h\/usr/local/include/va/va.h\g' checkout-patch-build.sh # libva устанавила заголовочные файлы в /usr/local/include, а скрипт ищет в /usr/include
sh checkout-patch-build.sh # Собираем
cd mplayer-vaapi
sudo make install # Устанавливаем


В дополнение

Нужно добавить строку LIBVA_DRIVER_NAME="fglrx" в /etc/enviroment, или можно добавить в ~/.bashrc: export LIBVA_DRIVER_NAME=fglrx (без этой переменной у меня не запускался mplayer)
Для того что бы каждый раз в командной строке не вводить параметры, можно их поместить в ~/.mplayer/config:
va=vaapi
vo=vaapi

Для использования GL: vo=vaapi:gl

Заключение


В этой статье не хватает пожалуй только тестов, для размышлений приведу такие цифры: Для одного и того же видео при ЦПУ процент загрузки доходил до 80% потребление памяти до 28,2мб, в то время при ГПУ, загрузка ЦПУ 6%, редко 8% (стабильно внезависимости от сцены), потребление памяти 68-69мб. Загрузка ГПУ… хм… да он и не загружался!
На будущее надеюсь, что в следующих релизах Ubuntu поддержка XvBA будет из коробки.

Список литературы


  1. ru.wikipedia.org/wiki/Unified_Video_Decoder — UVD
  2. ru.wikipedia.org/wiki/DirectX_Video_Acceleration — DXVA
  3. help.ubuntu.ru/wiki/аппаратная_поддержка_hd_видео#аппаратное_декодирование_видео_средствами_видеокарт_amd_va-api — Инструкция в вики разделе сайта ubuntu.ru
Tags:
Hubs:
+36
Comments 28
Comments Comments 28

Articles