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

    Введение


    Когда у меня была карточка от 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

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 28

      0
      к xbmc подобное реально прикрутить?
        +1
        Спасибо, пригодилось)
          +1
          на днях прошел этот же квест на Арче. Результат — при открытии любого видео — «ошибка 1» и пустое поле после нажатия «сведения об ошибке». Победить не смог. Попробую пожалуй еще это
          Нужно добавить строку LIBVA_DRIVER_NAME=«fglrx» в /etc/enviroment, или можно добавить в ~/.bashrc: export LIBVA_DRIVER_NAME=fglrx (без этой переменной у меня не запускался mplayer)


          Ну а пока просто пользуюсь VLC — хоть и не люблю его, но аппаратное ускорение завелось путем установки 1 галочки в настройках. Драйвера проприетарные, catalyst.
            0
            А программное не устраивает?
              0
              Так ведь в community уже давно есть пакет mplayer-vaapi
                0
                Есть, но не помагает. Валится на «seek».
              +5
              вопросов с воспроизведением видео на ней не было: Скачиваешь последний snapshot с сайта mplayer, устанавливаешь проприетарные драйвера, собираешь с поддержкой vdpau, добавляешь соответствующие кодеки и устройство вывода, и всё работает

              мда…
                0
                Как в убунту проверить есть ли поддержка vdpau в mplayer>?
                  +3
                  mplayer -vo help |grep vdpau
                  mplayer -vc help|grep vdpau
                    +1
                    Благодарю!
                    0
                    mplayer -vo help
                    –7
                    А в Windows 7 вообще ничего не надо делать, запустил mp4 и готово.
                      0
                      Не всегда. Порой у создателей рипов расходятся мнения с производителем кодека в МС — какие должны быть HD фильмы. Приходится прикручивать альтернативные кодеки. Там шаманства поменьше конечно, но все же.
                        +1
                        Ещё ни разу не встречался с такой проблемой. Работает даже лучше чем тот что в MPC:HC.
                      +2
                      ┌─[bosha@bosha-pc]──(~)
                      └─[% >a s xvba
                      p xvba-va-driver - XvBA-based backend for VA API (AMD fglrx implementation)


                      Я как бы не совсем понимаю смысл собирать, если уже есть в репозиториях.
                        0
                        Пакет xvba-va-driver действительно есть в репозитории, однако с ним есть проблема.
                        Для сравнения, размер файла xvba_drv_video.so у меня составляет 608К, а в пакете всего 124К
                          0
                          > Пакет xvba-va-driver действительно есть в репозитории, однако с ним есть проблема.
                          Однако, у этой проблемы пакета для Natty есть решение в виде PPA, а с Oneiric (релиз ровно через два месяца, 13 октября) можно будет ставить версию из репозитория, ни о чём не задумываясь.

                          > Для сравнения, размер файла xvba_drv_video.so у меня составляет 608К, а в пакете всего 124К
                          С каких пор размер стал показателем работоспособности?
                            0
                            Вы сравниваете несравнимое. В исходном коде, в данном случае конечно будет меньший размер. В пакете ещё метаданные, документация и т.д.

                            Про проблему отписали уже ниже :)

                            В общем дело Барское :)
                              0
                              Я сравнил просто два файла (бинарных) я поделился наблюдением.
                          0
                            0
                            Основной целью статьи было добавить поддержку vaapi, причём описать это в форме готовой инструкции (поэтому и написано со всеми командами). Инструкция по сборке из исходных кодов, на мой взгляд, при небольшой доработке может быть использована и в других дистрибутивах. По ссылке статья даёт общие сведения, что нужно установить, я старался этот процесс описать подробно.
                              0
                              Тогда следует указать это в статье. Сейчас она выглядит как «в Linux всё нужно компилировать».
                              Ну и конечно нужно дать ссылку на вариант, который не требует компиляции, а позволяет воспользоваться уже готовыми пакетами: help.ubuntu.ru/wiki/аппаратная_поддержка_hd_видео#аппаратное_декодирование_видео_средствами_видеокарт_amd_va-api
                              И лучше это сделать в начале, чтобы пользователи, потратив время на компиляцию, не обнаруживали её, когда уже поздно. Мы ведь всё же в блоге «Убунтариум».
                                0
                                Статья находится в «Убунтариум» по той причине, что я делал её из под Убунты и подробно описывал каждый шаг, ориентируясь на неё. Если вы внимательно читали статью, то первый способ описывал установку именно из пакетов, где ничего компилировать не надо, кроме самого mplayer (для 64 бит). Я мог бы добавить в статью возможность использования репозитория предлагаемого в статье в 64 битной сборки mplayer, но я думаю это только запутает новичков.
                                  0
                                  > Если вы внимательно читали статью, то первый способ описывал установку именно из пакетов, где ничего компилировать не надо, кроме самого mplayer (для 64 бит).
                                  Во-первых, зачем компилировать mplayer? mplayer, собранный из этого же tar.gz (я специально сравнивал содержимое — разницы нет) уже лежит собранный на Ланчпаде? Во-вторых зачем качать пакет libva от Splitted Desktop, если в репозитори Ubuntu уже есть версия от FreeDesktop с массой доработок? (Как для Intel, так и для AMD.) И так далее.

                                  > Я мог бы добавить в статью возможность использования репозитория предлагаемого в статье в 64 битной сборки mplayer, но я думаю это только запутает новичков.
                                  Проще дать ссылку на инструкцию, где имеются необходимые рекомендации ещё и для SMPlayer, без которых у новичка, кстати говоря, аппаратного декодирования на UVD в SMPlayer просто не будет.
                                    0
                                    Я решил поделиться тем, как я делал. Да, соглашусь с тем, что под такие дистрибутивы правильнее всё устанавливать из пакетов.
                                    Замечу, что во втором способе в вики разделе предлагается использовать пакеты с Splitted Desktop
                                      0
                                      Это как раз старый способ, который был заменён на новый (первый). Да, где-то год назад иначе было нельзя, но сейчас-то это уже не актуально.
                                        0
                                        Обновил статью, указал, что это старый способ, и дал ссылку на новый.

                        Only users with full accounts can post comments. Log in, please.