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)
Ответ на: комментарий от ihanick

течёт eщё plugin-container когда включен vaapi

Примерно на 3-4 МБ на каждую смену видео. Это из-за неправильного порядка удаления объектов flash'ем. Буду думать, как обойти.

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

В смысле течёт без переключения видео, только с одной вкладкой

ihanick
()
Ответ на: комментарий от i-rinat
 VIRT  RES  SHR S %CPU %MEM    TIME+ 
1982m 483m  60m R   96 12.4  35:16.34

А потом дохнет на 32битной, когда кончается адресное пространство, или уходит в жёсткий своп на 64битной.

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

Ну, дубль два. Я нашёл ещё одну причину утечек. Отправил исправление в ветку master на github'е.

Согласно документации, va драйвер должен самостоятельно разбираться с обработанными буферами, но почему-то он с этим не справляется в данном случае. Хотя в mplayer-vaapi шаблон использования такой же, а утечек нет.

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

Если бы они утекали, за пять минут больше 7000 было. Может у флеша есть какой-то внутренний кэш, либо он хранит в памяти весь сжатый поток.

В общем, я пока не могу воспроизвести.

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

Убрал ещё одну причину тормозов.

Оказалось, если цеплять GL контекст к разным окнам, это приводит к серьёзным утечкам в dri2. Видимо, так никто никогда не делает, оттого и использована простая, но тормозная реализация. К счастью, нашёлся способ не цеплять контекст к разным окнам.

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

отпиши им баг

Там нет бага, как такового. Ресурсы управляются подсчётом ссылок, поэтому при выключении приложения всё вычищается (но видео подвисает на несколько секунд). Хотя это не запрещено, так никто не делает.

В общем, мне лень. :)

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

Оказалось, что такой баг уже открыт: https://bugs.freedesktop.org/show_bug.cgi?id=55675

Добавил я туда свой вариант кода для воспроизведения. Но что-то мне кажется, что он долго ещё открытым простоит, ибо такой код кривой и нарушает все рекомендации.

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