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)

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

ln -s в необходимые каталоги на этапе установки? всем по порции счастья!

Они разные в разных дистрибутивах.

i-rinat ★★★★★
() автор топика

Выкатил v0.2.0, обновил шапку темы.

i-rinat ★★★★★
() автор топика
15 ноября 2013 г.
Ответ на: комментарий от i-rinat

Спасибо, обновился, работает на intel hd3000 более менее. Правда, при включении аппаратного ускорения в настройках флэш плеера в опере лица становятся синими, при этом в фоксе все норм. Если отключить аппаратное ускорение, то и в опере и в фоксе все нормально.За исключением, этой мелочи, все остальное работает хорошо.

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

лица становятся синими

Это такой баг, он в разных версиях flashplayer'а то есть, то нет. Лечится изменением параметра enable_flash_uv_swap в /etc/vdpau_wrapper.cfg на «противоположное». Если было 1, поставить 0, и наоборот.

А так как баг проявляется только при загрузке в видеоадаптер уже декодированных данных, его наличие означает, что аппаратное ускорение декодирования не задействовано. Включить можно, если добавить параметр EnableLinuxHWVideoDecode=1 в /etc/adobe/mms.cfg

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

О, спасибо, последний совет с добавлением

EnableLinuxHWVideoDecode=1
в
/etc/adobe/mms.cfg
помог, теперь и в опере проблемы нету. Спасибо.

anonymous
()
19 января 2014 г.

v0.3.0

Yo dawg! I heard like workarounds, so we put workarounds in your workarounds, so you can workaround while you workaround.

А ещё выяснилось, почему происходил сегфолт в XCloseDisplay на проприетарных драйверах. Они (барабанная дробь) вызывают деструкторы у загруженных библиотек. Посреди работы.

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

Изображение распадается на квадраты, при этом первый кадр похоже нормальный, а затем быстрый распад.

OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile 
OpenGL version string: 3.0 Mesa 8.0.5
OpenGL shading language version string: 1.30
libva: VA-API version 0.32.0
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva: va_openDriver() returns 0
[VS] warning (vdpDeviceDestroy): non-zero reference count (12). Trying to free child objects.

http://pastebin.com/YvAnURj9 продолжение http://pastebin.com/czAGYcMe

http://www.picpaste.com/libvdpau-va-gl_bug-72WwjCCn.png

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

Было бы здорово иметь ссылку на то видео. Или такое на всех? Версия v0.2.1 нормально работает?

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

любое youtube-видео

скомпилировано под Wheezy

v0.2.1 - вечером попробую

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

Удалось воспроизвести. Там какая-то магия, я её ещё не понял, но вот этот коммит (уже в master ветке) исправляет ситуацию на моём ноуте. Кстати, если обновить i965-va-driver до версии 1.2.2 (из jessie), попутно пересобрав libdrm и libva, баг исправляется и без патчей.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat
[int13h@d500 ~]$ vdpauinfo
display: :0   screen: 0
[VS] Software VDPAU backend library initialized
libva info: VA-API version 0.34.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_34
libva error: /usr/lib/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
API version: 1
Information string: OpenGL/VAAPI/libswscale backend for VDPAU

и

[int13h@d500 ~]$ vainfo 
libva info: VA-API version 0.34.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_34
libva error: /usr/lib/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

В чем может быть проблема?

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

может быть из-за драйвера xf86-video-intel 2.21.15-1?

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

Intel GMA X3100

Там вроде как аппаратных декодеров и нет вовсе.

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

сильно тормозит флэш на 720

1) Покажи вывод perf top (во время проигрывания 720p).

2) Запусти с VDPAU_LOG=1, в консоль должно вываливаться много сообщений, если драйвер действительно используется.

3) В плеере youtube'а в контекстном меню выбери «статистика для сисадминов». Там должно быть «accelerated video rendering».

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

accelerated video rendering

В линуксе и accelerated video rendering и декодирование пишет ускорено, а в другой оси, которую тут не любят только декодинг ускорен, а рендеринг не ускоряется, пока не откроешь видео на весь экран
Версия Флеша 11.7
Все это в хроме, какой плагин там юзается я уже не помню(пепер флеш или от адоба )
Там разница вроде какая есть
Никак нельзя заставить отрисовывать видео с ускорением не разворачивая на весь экран ?

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

моя карта действительно не поддерживает аппаратной декодирование, хотя mplayer кушает mkv без тормозов (загрузка в фуллскрине 30-40%) :

[int13h@d500 Lordoftherings]$ mplayer The.Lord.of.the.Rings.The.Fellowship.of.the.Ring.720p.2001.\[element-team\].mkv 
MPlayer SVN-r36498-snapshot-4.8.2 (C) 2000-2013 MPlayer Team
206 audio & 433 video codecs
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 The.Lord.of.the.Rings.The.Fellowship.of.the.Ring.720p.2001.[element-team].mkv.
libavformat version 55.19.104 (internal)
libavformat file format detected.
[lavf] stream 0: video (h264), -vid 0, h264
[lavf] stream 1: audio (ac3), -aid 0, Дубляж (со вставками MVO "Позитив-мультимедиа")
VIDEO:  [H264]  1280x528  0bpp  23.976 fps    0.0 kbps ( 0.0 kbyte/s)
Clip info:
 title: Rip by constman [ELEMENT-TEAM.ORG]
 creation_time: 2011-08-20 17:25:21
Load subtitles in ./
[VS] Software VDPAU backend library initialized
libva info: VA-API version 0.34.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_34
libva error: /usr/lib/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
libavcodec version 55.39.100 (internal)
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================

int13h ★★★★★
()
Ответ на: комментарий от anonymous
[int13h@d500 Lordoftherings]$ pacman -Ss  libva
extra/libva 1.2.1-1 [установлен]
    Video Acceleration (VA) API for Linux
extra/libva-intel-driver 1.2.2-2 [установлен]
    VA-API implementation for Intel G45 and HD Graphics family
extra/libva-vdpau-driver 0.7.4-1 [установлен]
    VDPAU backend for VA API
int13h ★★★★★
()
Ответ на: комментарий от int13h

драйвер не используется

Ты как запускаешь браузер? Переменная VDPAU_DRIVER установлена? Попробуй вот так:

VDPAU_DRIVER=va_gl VDPAU_QUIRKS=ShowWatermark firefox
Если заработало, в правом нижнем углу видео должно быть видно надпись «va_gl». Проверять надо на youtube, на многих других сайтах флеш ролики не сконфигурированы на использование ускорения.

драйвер не используется

Тут ещё путаница. libvdpau-va-gl — это VDPAU драйвер, он, в свою очередь, использует VA-API драйвер, если тот есть. На твоём железе не будет аппаратно ускоренного декодирования видео, но возможно аппаратно ускоренное масштабирование через OpenGL. И libvdpau-va-gl может в этом помочь.

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

какой плагин там юзается я уже не помню

У меня libastral не собралось, не могу ответить. Тут в одной-то ОС разобраться с флешем не можем, а ты ещё сборную солянку притащил. Смысла гадать на кофейной гуще нет.

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

Как правило,если Хром, то гугловский пеппер флеш. В Хромиум можно запихнуть или то или другое

Twissel ★★★★★
()
5 мая 2014 г.

Устанавливал из GIT в ноябре, увидел что сжирает память. Решил пожаловаться, но решил сначала обновиться. Только что установил из GIT бранч 2e87179332cc889faf31977932c09a85b149ade7 и словил:

$ VDPAU_DRIVER=va_gl LIBVA_DRIVER_NAME=i965 firefox
[VS] Software VDPAU backend library initialized
[VS] {full} vdp_imp_device_create_x11 display=0x7f556129d000, screen=0
[VS] error (glx_ctx_ref_glc_hash_table): glXChooseVisual failed

* Много ожидания, Firefox "висит"*

###!!! [Parent][RPCChannel] Error: Channel timeout: cannot send/recv

Тогда установил последний релиз, 0.3.4. Ошибка тоже есть.

$ VDPAU_DRIVER=va_gl LIBVA_DRIVER_NAME=i965 firefox
[VS] Software VDPAU backend library initialized
[VS] {full} vdp_imp_device_create_x11 display=0x7f30ad59d000, screen=0
[VS] error (glx_ctx_ref_glc_hash_table): glXChooseVisual failed

###!!! [Parent][RPCChannel] Error: Channel timeout: cannot send/recv
ZenitharChampion ★★★★★
()

А я даже как-то смог запустить это с cedartrail блобом. И оно заработало, но с ним нагрузило процессор еще на 30% больше при проигрывание видео с ютуба.
Впрочем я ничего удивительного и не ждал.

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

но с ним нагрузило процессор еще на 30% больше при проигрывание видео с ютуба.

Да, такое тоже случается. Как повезёт.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat
glxinfo
name of display: :0.0
Error: couldn't find RGB GLX visual or fbconfig
Error: couldn't find RGB GLX visual or fbconfig

Перезагружусь. Дополнено: разлогинился и залогинился, теперь OpenGL работает. vdpau_va_gl работает, но сыпит что-то в консоль. Прошлая версия не была такой болтливой. http://paste.org.ru/?pcjxnz

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

но сыпет что-то в консоль. Прошлая версия не была такой болтливой

Контролируется значением (0/1) переменной среды VDPAU_LOG. По умолчанию в отладочной версии трейс включен, а в релизной [1] — выключен.

[1] cmake -DCMAKE_BUILD_TYPE=Release ..

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

Конечно немного странный вопрос, но стоит ли переходить на блоб и использовать это или оставаться на ati-dri с vdpau? Основной ориентир: стабильность флеша. Флеш с настоящим вдпау довольно частенько падает где-то кроме ютуба.

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

стоит ли переходить на блоб и использовать это или оставаться на ati-dri с vdpau?

Я не пользовался длительное время такой связкой, но на тестовых машинах, где были глюки, они проявлялись очень быстро, практически сразу. Лично я бы предпочёл открытый стек, его хоть есть шанс отлаживать. Плюс есть шанс, что кто-нибудь из разработчиков открытого драйвера поможет с крашами vdpau. В крайнем случае можно отключить аппаратное декодирование, оставив только презентацию.

стабильность флеша

Flash сам любит опрокидывать стол и устраивать дебош, если что-то идёт хоть чуть-чуть неправильно. Так что тут как повезёт.

i-rinat ★★★★★
() автор топика
5 июля 2014 г.

Большое спасибо! Случайно обнаружил, что

~> vdpauinfo 
display: :0   screen: 0
Failed to open VDPAU backend libvdpau_i965.so: cannot open shared object file: No such file or directory
Error creating VDPAU device: 1
Собрал по твоей инструкции, закинул симлинк, и всё взлетело! :)

Hertz ★★★★★
()

Поставил это дело на «попробовать», результат такой: http://pastebin.com/iihmNCnN

В итоге - черный экран. Звук есть, видео нет.

Если запускать без vdpau кодека, то всё ок, но декодирование естественно не аппаратное.

В firefox флэш при первой загрузке падает. После перезагрузки работает, рендеринг accelerated, декодирование software.

Куда копать?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Куда копать?

Если версия не из git'а, то для начала поставить её. Если с ней продолжает падать, то нужно вставить XSynchronize после XOpenDisplay:

diff --git a/src/handle-storage.c b/src/handle-storage.c
index d6276bf..7cdd5d7 100644
--- a/src/handle-storage.c
+++ b/src/handle-storage.c
@@ -158,6 +158,7 @@ handle_xdpy_ref(void *dpy_orig)
     Display *dpy = g_hash_table_lookup(xdpy_copies, dpy_orig);
     if (NULL == dpy) {
         dpy = XOpenDisplay(XDisplayString(dpy_orig));
+        XSynchronize(dpy, True);
         if (!dpy)
             goto quit;
         g_hash_table_replace(xdpy_copies, dpy_orig, dpy);

А потом написать в эмуляторе терминала ulimit -c unlimited, чтобы core файлы создавались, и запустить оттуда программу, в которой падает. Далее gdb /path/to/binary core, а в нём «thread apply all bt». Так можно попробовать выяснить, где оно падает и почему.

i-rinat ★★★★★
() автор топика
13 сентября 2014 г.
Ответ на: комментарий от Black_Roland

libva info: Trying to open /usr/lib64/dri/i915_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

наблюдаю практически то же самое. следовательно VA-API для декодирования видео мне недоступно.

видеокарта встроенная (Intel Corporation 82G33/G31 Express Integrated Graphics Controller). а вообще эта видеокарта должна иметь аппаратное ускорение.

vdpauinfo выдает кучу строк: http://pastebin.com/7zxdNHgH

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

а вообще эта видеокарта должна иметь аппаратное ускорение.

В i915 аппаратные декодеры не поддерживаются intel, даже если есть. Тем не менее масштабирование производится через OpenGL.

vdpauinfo выдает кучу строк

В вывод попали трассировочные сообщения от libvdpau-va-gl, так быть не должно. Сообщения выключаются либо сборкой в Release или RelWithDebInfo, либо переменной среды VDPAU_LOG=0.

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

В i915 аппаратные декодеры не поддерживаются intel, даже если есть. Тем не менее масштабирование производится через OpenGL.

Производиться-то оно может и должно, но запускаю я так:

VDPAU_DRIVER=va_gl VDPAU_QUIRKS=ShowWatermark VDPAU_LOG=1 firefox
и при просмотре видео никакой надписи я поверх него не вижу, и вдобавок в консоли вижу такое:

NOT SANDBOXED
libEGL warning: failed to create a pipe screen for i915
[fresh 28994] [PPB] {fake} ppb_video_capture_dev_enumerate_devices
[fresh 28994] [PPB] {fake} ppb_audio_input_dev_enumerate_devices
[fresh 28994] [PPB] {zilch} ppb_network_monitor_update_network_list
[fresh 28994] [PPB] {zilch} ppb_text_input_dev_interface_set_text_input_type instance=10, type=PP_TEXTINPUT_TYPE_DEV_NONE
[fresh 28994] [PPB] {fake} ppb_video_capture_dev_close

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

Вчера гугл мне сказал, что я вроде как должен пересобрать mesa для того, чтобы заработало. Но я когда-то собрал mesa сам и потом долго жил с багами. Больше что-то не особо хочется. Другой ответ гугла заключался в том, что разработчики OpenGL решили не поддерживать мою видеокарту ибо она старая, примитивная, никому нафиг не нужна, а их время не безлимитно. Еще один ответ гугла заключался в том, что я должен попробовать пересобрать mesa с ключом --disable-gallium-egl .

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