LINUX.ORG.RU

libvdpau-va-gl

 , , ,


33

20

https://github.com/i-rinat/libvdpau-va-gl/releases

В двух словах, это VDPAU драйвер, который использует OpenGL для рисования и VA-API для декодирования видео.

VDPAU это открытый интерфейс, который подразумевает единую точку входа (libvdpau) и подключаемые драйверы; API не замкнуто накоротко на nVidia. Выбор конкретного драйвера осуществляется либо через переменную окружения VDPAU_DRIVER, либо спрашивается у X-сервера. Если так или иначе получить имя не удалось, считается, что оно есть «nvidia». Драйвер представляет собой разделяемую библиотеку с именем вида libvdpau_<drivername>.so.1. Программы линкуются с libvdpau, а она в свою очередь загружает нужный драйвер.

Чтобы использовать, нужно собрать, положить библиотеку в директорию, где её сможет найти компоновщик, и добавить в окружение переменную VDPAU_DRIVER=va_gl. Проверить, что драйвер работает, можно запустив vdpauinfo. А vainfo покажет, работает ли драйвер VA-API.

На видеокартах AMD по чудаковатым причинам происходят падения внутри XCloseDisplay. Чтобы обойти проблему, нужно в переменную VDPAU_QUIRKS добавить строку XCloseDisplay. Элементы в VDPAU_QUIRKS перечисляются через запятую, слитно, без пробелов и служат для тонкой настройки поведения драйвера. Кроме XCloseDisplay, есть ещё параметр ShowWatermark, включающий отображение строки va_gl в правом нижнем углу. Полный список можно найти в README.md.

Начиная с версии 2.99.908 xf86-video-intel сообщает переходнику libvdpau.so имя VDPAU драйвера. Символьных ссылок
libvdpau_i965.so.1libvdpau_va_gl.so.1
libvdpau_i915.so.1libvdpau_va_gl.so.1
достаточно для загрузки, и необходимости в использовании VDPAU_DRIVER больше нет.

★★★★★

Последнее исправление: i-rinat (всего исправлений: 12)

Ответ на: комментарий от mvitamin

libvdpau-va-gl и freshplayerplugin это два разных проекта, они не пересекаются по области применения.

Первый (эта тема) — драйвер VDPAU. Так уж вышло, что NPAPI версия Flash Player'а может использовать VDPAU для вывода на экран и декодирования видео, поэтому libvdpau-va-gl в некоторых случаях может для этого использоваться. Возможность зависит от параметра wmode. Исходя из него плеер выбирает, в каком режиме работать, windowed или windowless. VDPAU используется только в windowed. (Если wmode=transparent, VDPAU не работает).

Второй, freshplayerplugin — это обёртка для свежих версий Flash из Chrome. Они используют интерфейс PPAPI, так как Chrome запускает их в песочнице. Из-за обрезанного доступа к операционной системе, PPAPI Flash не может использовать VDPAU, поэтому libvdpau-va-gl никак не поможет. В PPAPI есть намёки на аппаратное декодирование, но эту часть я не трогал совсем, она не реализована.

Вторая процитированная строчка как бы говорит мне «фигвам для i915».

Не совсем, она то и дело появляется то тут, то там, но EGL, тем не менее, работает. У меня появляется аналогичная строчка, только с i965 вместо i915.

пересобрать mesa с ключом --disable-gallium-egl

Не знаю, как это повлияет на поддержку EGL для драйверов intel, но если оно сломается, то freshplayerplugin работать перестанет. Там используется EGL и GLESv2.

в консоли вижу такое

Если хочется подробностей, можно переконфигурировать freshwrapper с cmake -DTRACE_ALL=1 .. и пересобрать. Тогда в консоль будут вываливаться трассировки вызова всех функций. Этих сообщений может быть до сотен мегабайт в минуту.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

В общем попробовал удалить freshplayerplugin и увидеть надпись va_gl поверх видео. Подключился NPAPI плагин, но надпись увидеть не удалось там ни на ютюбе в режиме flash ни в других местах. Но это не важно. В итоге мне удалось увидеть эту надпись при запуске голого mplayer. В общем я убедился, что libvdpau-va-gl как-то все-таки работает. Этого достаточно, потому что видео у меня особо и не тормозило, CPU справляется, правда «пыхтит» иногда. Видимо 3GHz на 2 ядра хватает.

P.S.: freshplayerplugin установил обратно.

mvitamin
()

Был приятно удивлён упоминанием твоего проекта в самом серьёзном немецком IT издании: heise c't.

Da Intel nur das libva-Interface zur Videobeschleunigung anbietet, benötigen Sie hier noch die libvdpau-va-gl1.

Поздравляю!

gag ★★★★★
()
Ответ на: комментарий от gag

ещё б на этом можно было заработать

anonymous
()
22 декабря 2014 г.

Можно ли уточнить такой вопрос? Использую smplayer+libvdpau-va-gl на Intel HD, и наблюдаю такую ситуацию. При выводе видео через вдпау, mkv файлы играются нормально, аппаратное декодирование работает, avi - же файлы не играются. Для того чтоб игрались надо менять вывод в настройка SMplayer на xv. В консоли вижу такое:

Debug: Core::finishRestart: --- end ---
Debug: BaseGui::enterFullscreenOnPlay: arg_start_in_fullscreen: -1, pref->start_in_fullscreen: 0
Debug: BaseGui::newMediaLoaded
Debug: BaseGui::newMediaLoaded: mdat.stream_title: 
Debug: Recents::addItem: '/media/Video/Video/Other/Stand Up (2014.11.02).avi'
Debug: BaseGui::updateRecents
Debug: BaseGui::checkPendingActionsToRun
Debug: BaseGui::checkMplayerVersion
Debug: MplayerVersion::isMplayerAtLeast: comparing 25158 with 37150
Debug: Core::checkIfVideoIsHD
Debug: MplayerProcess::gotError: 4
Debug: MplayerLayer::playingStopped
Debug: Screen::playingStopped
Debug: Screen::setAutoHideCursor: 0
Debug: Screen::playingStopped
Debug: Screen::setAutoHideCursor: 0
Debug: BaseGui::showErrorFromMplayer
Debug: showErrorFromMplayer: not displaying error dialog
Debug: MyProcess::procFinished
Debug: MyProcess::procFinished: Bytes available:  0 
Debug: MplayerProcess::processFinished: exitCode: 0, status: 0
Debug: MplayerLayer::playingStopped
Debug: Screen::playingStopped
Debug: Screen::setAutoHideCursor: 0
Debug: Screen::playingStopped
Debug: Screen::setAutoHideCursor: 0
Debug: Core::processFinished
Debug: Core::processFinished: we_are_restarting: 0
Debug: Core::processFinished: play has finished!
Debug: Core::processFinished: exit_code: 0

Можно ли как-то сделать так чтоб ави через вдпау тоже проигрывалось?

klasik
()
Ответ на: комментарий от klasik

А просто через mplayer они воспроизводятся?

Изредка встречаются файлы, в которых используется цвет 4:2:2 или 4:4:4, а не 4:2:0. Для первых двух реализации в libvdpau-va-gl нет, и mplayer просто вываливается.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Да. Получаю такое:

[klasik@klasik-laptop Other]$ mplayer -vo vdpau "Stand Up (2014.11.02).avi"
MPlayer SVN-r37150-4.8.3 (C) 2000-2014 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing Stand Up (2014.11.02).avi.
libavformat version 55.19.104 (external)
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
VIDEO:  [XVID]  720x400  12bpp  25.000 fps  1944.7 kbps (237.4 kbyte/s)
Clip info:
 Software: VirtualDubModRus 1.5.10.2 (build 2542/release)
Load subtitles in ./
[VS] Software VDPAU backend library initialized
[VS] {full} vdp_imp_device_create_x11 display=0x7fe341e58f20, screen=0
libva info: VA-API version 0.34.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_34
libva info: va_openDriver() returns 0
[VS] libva (version 0.34) library initialized
[VS] {zilch/fake success} VdpPreemptionCallbackRegister device=1, callback=0x7fe340eda2a0, context=(nil)                                                                                       
==========================================================================                                                                                                                     
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family                                                                                                                               
libavcodec version 55.39.101 (external)                                                                                                                                                        
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)                                                                                                                                    
==========================================================================                                                                                                                     
==========================================================================
Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, III
AUDIO: 48000 Hz, 2 ch, s16le, 128.0 kbit/8.33% (ratio: 16000->192000)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)
==========================================================================
AO: [pulse] 48000Hz 2ch s16le (2 bytes per sample)
Starting playback...
Movie-Aspect is 1.80:1 - prescaling to correct movie aspect.
VO: [vdpau] 720x400 => 720x400 Planar YV12 

Другие ави через smplayer и vdpau аналогично не открываются..

klasik
()
Ответ на: комментарий от klasik

В настройках SMPlayer'а есть возможность указать, какие кодеки использовать (кнопка Configure рядом с выбором output driver). Выключи все, кроме ffh264vdpau.

i-rinat ★★★★★
() автор топика
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Спасибо большое, помогло! Теперь правда загрузка цп при просмотре avi через vdpau составляет ~12%, а когда выбираешь xv - падает до ~8%. На mkv же все ок, 20% против 55%.

klasik
()
Ответ на: комментарий от klasik

Теперь правда загрузка цп при просмотре avi через vdpau составляет ~12%, а когда выбираешь xv - падает до ~8%. На mkv же все ок, 20% против 55%.

Это потому что в libvdpau-va-gl преобразование цвета в RGB делается на процессоре (и довольно дубово), а в xv этим занимается специализированная схема в видеоадаптере. Когда используется аппаратное декодирование этот медленный код не вызывается, декодированные данные не покидают видеоадаптер, поэтому на H.264 этих накладных расходов нет.

i-rinat ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.