Первый же поисковой запрос, по аппаратному декодированию видео потока, отправил меня сюда. Всё просто и по пунктам:
- Установить проприетарный драйвер от AMD.
- Установить драйвер для поддержки XvBA.
- Profit!
Конечно, какие могут быть проблемы, если все пакеты есть в репозитории? Но это для Ubuntu. В репозиториях для Fedora, я нашел только проприетарный драйвер от AMD, он же fglrx. На XvBA не было и намёка.
Очередные поисковые запросы привели меня на страничку, на которой пользователь под ником canyon рассказывает где взять пакеты именно для Fedora17, и как их правильно установить. Он настаивал на установке драйвера fglrx именно с сайта AMD, так как по его опыту, тот, который в репозиториях — «сломан», в следствии чего, аппаратное декодирование не работает. С сайта, так с сайта. Тем более, что версия драйвера выгодно отличалась (13.1 vs 12.10). Загрузка прошла успешно:
$ wget -c http://www2.ati.com/drivers/linux/amd-driver-installer-catalyst-13.1-linux-x86.x86_64.zip $ unzip amd-driver-installer-catalyst-13.1-linux-x86.x86_64.zip $ chmod +x amd-driver-installer-catalyst-13.1-linux-x86.x86_64.run
И я приступил к выполнению пунктов мануала. Вся ирония его фразы «Quick How-To», была осознана мной в полной мере. Быстрый how-to, на практике оказался кратким how-to (видимо трудности перевода). Скажу сразу. Перед началом всех действий, в моей ОС, вместе с пакетом «mesa-libGL», стоял еще один пакет — «mesa-libGL-devel», который подтянул за собой многие зависимости (включая *.h файлы), требуемые для сборки XvBA драйвера с поддержкой GLX. И так, всё по порядку. Запуская установшик проприетарного драйвера от AMD:
$ sudo ./amd-driver-installer-catalyst-13.1-linux-x86.x86_64.run
Я получал крах за крахом. Зависимости наше всё! По итогу, лично моей системе, не хватало пакетов «kernel-headers» и «kernel-devel», но даже после их установки «/usr/share/ati/fglrx-install.log» был полон как никогда. Установщик ругался на отсутствие файла «/lib/modules/3.7.6-102.fc17.x86_64/build/include/linux/version.h». Рекурсивный поиск по папкам нашел «version.h» по адресу «/usr/include/linux/version.h». Убедившись, что этот файл принадлежит текущей версии ядра — я скопировал его по требуемому адресу.
$ uname -r $ rpm -qf /usr/include/linux/version.h $ sudo cp /usr/include/linux/version.h /lib/modules/3.7.6-102.fc17.x86_64/build/include/linux/version.h
После этого, драйвер всё-таки установился, но перезапускать систему я не рискнул, так как всё в том же «fglrx-install.log» была запись (выдержка):
/usr/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c ошибка: "VM_RESERVED" undeclared (first use in this function) [Error] Kernel Module : Failed to compile kernel module - please consult readme.
Переменная не определена — модуль ядра не собран. Беда! Поиск и ещё раз поиск. Вот оно. Пользователь под ником lx6544 перепостил мануал, в котором эта проблема решалась так:
В фале «/usr/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c», после 100-й строки, добавлялось определение переменной «VM_RESERVED»:
#ifndef VM_RESERVED #define VM_RESERVED (VM_DONTEXPAND | VM_DONTDUMP) #endif
Следом, пересобирался и устанавливался модуль ядра:
$ cd /lib/modules/fglrx/build_mod/ $ sudo ./make.sh
$ cd /lib/modules/fglrx/ $ sudo ./make_install.sh
Обе пары команд вернули мне «done» и я выполнил перезагрузку ОС.
$ sudo aticonfig --initial -f $ reboot
Проприетарный драйвер был установлен. Работал исправно. Далее, по мануалу от пользователя canyon, был rebuild и установка RPM пакета под текущую ОС:
$ sudo yum install rpm-build $ rpmbuild --rebuild ~/libva-xvba-driver-0.8.0-2.fc17.src.rpm
И тут крах. В окне терминала красовалось «очень» информативное сообщение:
checking for XvBA... no configure: error: you need XvBA to build this package
Не говорившее мне ничего особенного. В «~/rpmbuild/BUILD/xvba-driver-0.8.0/config.log» уже более конкретно было написано:
configure:13374: gcc -o conftest -O2 -g -I/usr/include -L/usr/lib64 conftest.c -lrt -lpthread -lm -lXvBAW -lX11 -lXext -lGL -ldl >&5 conftest.c:44:21: fatal error: amdxvba.h: No such file or directory compilation terminated.
Файл «amdxvba.h»? Я уже читал про него!
$ wget -c http://developer.amd.com/wordpress/media/2012/10/xvba-sdk-0.74-404001.tar.gz $ tar -xf xvba-sdk-0.74-404001.tar.gz include/amdxvba.h $ sudo cp include/amdxvba.h /usr/include/
Следом, на всякий случай, я проверил все библиотеки указанные для «gcc» в предыдущей строке лога. Не хватало только двух symlink’ов на «-lXvBAW»
$ sudo ln -s /usr/lib/libXvBAW.so.1 /usr/lib/libXvBAW.so $ sudo ln -s /usr/lib64/libXvBAW.so.1 /usr/lib64/libXvBAW.so
После создания symlink’ов конфигурация прошла успешно:
VA-API version ................... : 0.32.1 GLX support ...................... : yes Cg compiler ...................... : no Enable debugging information ..... : yes Enable XvBA tracer ............... : yes
А вот сборка нет. Компилятор ругался на неизвестный тип переменной (PFNGLMULTITEXCOORD2FPROC), указанной в файле «utils_glx.h». Первая же ссылка в поисковой выдаче прояснила ситуацию. Да, действительно:
В файле «/usr/include/GL/gl.h», переменная «GL_VERSION_1_3», была однозначно определена:
#define GL_VERSION_1_3 1
В следствии чего, в файле «/usr/include/GL/glext.h» (версия 85), определение типа «PFNGLMULTITEXCOORD2FPROC» пропускалось:
#define GL_GLEXT_VERSION = 85 ... #ifndef GL_VERSION_1_3 ... typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); ... #endif
Хорошо, файл «/usr/include/GL/glext.h» был поправлен, а RPM пакет успешно собран и установлен.
$ sudo yum install libva-utils ~/rpmbuild/RPMS/x86_64/libva-xvba-driver-0.8.0-2.fc17.x86_64.rpm
Вызов команды «vainfo» больше не выдавал ошибку, а запуск VLC плеера с параметром «—ffmpeg-hw» убедил меня в том, что аппаратное декодирование заработало:
$ vainfo
libva: va_getDriverName() returns 0 libva: Trying to open /usr/lib64/dri/fglrx_drv_video.so libva: va_openDriver() returns 0 vainfo: VA-API version: 0.32 (libva 1.0.16) vainfo: Driver version: Splitted-Desktop Systems XvBA backend for VA-API - 0.8.0 vainfo: Supported profile and entrypoints VAProfileH264High : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD
vlc --ffmpeg-hw ~/1080p.mkv
VLC media player 2.0.5 Twoflower (revision 2.0.5-0-g1661b7d) ... libva: VA-API version 0.32.1 Xlib: extension "XFree86-DRI" missing on display ":0". libva: va_getDriverName() returns 0 libva: Trying to open /usr/lib64/dri/fglrx_drv_video.so No accelerated IMDCT transform found libva: va_openDriver() returns 0 xvba_video: XVBA_GetSurface(): status 2 [0x7f5628c1ada8] avcodec decoder: Using VA API version 0.32 for hardware decoding.
Воспроизведение было четкое и плавное. Вот теперь точно — PROFIT!
Список литературы:
Unified Video Decoder
Video Acceleration API
X-Video Bitstream Acceleration
Воспроизведение HD-video
ссылка на оригинал статьи http://habrahabr.ru/post/169893/
Добавить комментарий