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)

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

ты предлагаешь скачать непонятно какую библиотеку и юзать её? :)

Там исходник. Ну и как обычно — никто не заставляет же.

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

о, гляну на досуге, может быть очень полезной штукой.

я правда уже давно делаю lsof |grep 'deleted' |grep '/tmp/Flash', копирую flv куда-нибудь и смотрю mplayer`ом.

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

можно в тред больше подробностей для ъ?

У меня встроенное видео intel, в нём есть зачатки 3d и ускорение декодирования видео через VAAPI. С другой стороны есть flashplayer, который умеет аппаратное ускорение отрисовки и декодирования, но умеет это только через API VDPAU, предложенное nVidia. (И теперь я понимаю, почему они выбрали его).

Давным-давно я натравил на браузер с вкладкой youtuba'а профайлер и обнаружил, что всё время съедает флеш, а в нём всё время съедает кусочек в триста с чем-то байт. Если этот кусок отключить, полноэкранный режим показывает чёрный экран (или вертикальную полоску видео шириной в один пиксель), но в оконном режиме всё хорошо. Пока не изменишь масштаб страницы. Итог: flashplayer в целом не тормозной, тормозное в нём масштабирование. Стало быть, если его ускорить, всё станет намного веселее.

Во всех трёх API ускорения есть разделение на обёртку и собственно драйвер. Приложения линкуются с обёрткой, которая ищет и загружает usermode-драйвер. Специфичный драйвер уже дёргает ядро, а через него железо. Драйвер — это просто библиотека с именем libvdpau_{yourname}.so.1. Например, для intel'а она могла бы называться libvdpau_intel.so.1. Пользователь устанавливает переменную окружения VDPAU_DRIVER, сообщая таким образом обёртке, какой файл грузить. Если переменная не установлена, грузится libvdpau_nvidia.so.1, то есть считается, что VDPAU_DRIVER=nvidia.

По ссылке в заглавном сообщении — частичная реализация такого драйвера. Используется OpenGL для масштабирования, смешивания и вывода на экран. Названия я не придумал, так что это будет libvdpau_fake.so.1, это ведь не полноценная реализация. Сейчас работает только для очень ограниченного числа форматов, но для флеша хватает. В mplayer'е тоже картинка выводится, но там есть пара глюков.

Я ещё планирую прикрутить декодирование видео, чтобы можно было HD-видео смотреть без тормозов. Как бонус — дистрибутивный mplayer получит аппаратное ускорение.

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

звучит многообещающе. у меня радеон но драйвера не стоят, пробовал, не получилось, забил. впринципе видео не тормозит в полный экран, но и не скажу что комфортно работает, иногда лагает. пробовать есть смысл?

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

но драйвера не стоят

Нужно аппаратное OpenGL, иначе тормоза будут адские.

пробовать есть смысл?

Вряд ли. Если нет проблемы, незачем её решать.

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

Использую Fedora. Сделал всё по инструкции, mplayer пишет:

Failed to open VDPAU backend libvdpau_fake.so: cannot open shared object file: No such file or directory.
однако:
$ ls /usr/local/lib/libvdpau_fake.so*
/usr/local/lib/libvdpau_fake.so  /usr/local/lib/libvdpau_fake.so.1

ЧЯДНТ?

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

Как бонус — дистрибутивный mplayer получит аппаратное ускорение.

аппаратное ускорение для масштабирования работает и на стандартном XVideo.

dikiy ★★☆☆☆
()

Firefox 18.0.2
Flash 11.2.202.270
CPU intel i5-2435M

http://www.youtube.com/watch?v=6v2L2UGZJAM

[VS] Software VDPAU backend library initialized

http://www.youtube.com/watch?v=6v2L2UGZJAM
accelerated video rendering, software video decoding
60% от одного ядра используется на 480p

software video rendering, software video decoding
80% от одного ядра используется на 480p

Т.е. вроде как работает, но т.к.

vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileH264Baseline           :	VAEntrypointVLD
      VAProfileH264Baseline           :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
остаётся не используемым, 1080p всё равно подёргивается и жрёт одно ядро по-максимуму.

ihanick
()

JFYI, под фрю собирается, в т.ч. clang'ом. Даже без варнингов. Не тестил, ибо флеш не нужен.

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

Как бонус — дистрибутивный mplayer получит аппаратное ускорение.

аппаратное ускорение для масштабирования работает и на стандартном XVideo.

Если прикрутить декодирование, то будет лучше. Правда у меня сейчас yuv->rgb делается через libswscale, а не железно, так что сейчас даже медленнее, чем через XVideo.

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

причем не только в фуллскрине.

А это не эффект плацебо? Я не представляю, как оно поможет в случае, когда масштабирование не нужно.

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

Я не представляю, как оно поможет в случае, когда масштабирование не нужно.

По htop смотрел.
Кстати, масштабирование там используется почти всегда, даже не в фуллскрине.

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

Я ещё планирую прикрутить декодирование видео, чтобы можно было HD-видео смотреть без тормозов. Как бонус — дистрибутивный mplayer получит аппаратное ускорение.

Годная идея! Сейчас использовать vaapi на интеле проблематично, потому что на некоторых фильмах mplaer-vaapi внезапно падает. Может быть другая реализация обойдёт этот баг.

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

Глянь по

# perf top
что больше всего проц кушает. В случаях с библиотекой и без.

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

Не помогло.

Попробуй положить библиотеку в /usr/lib или где там в fedora библиотеки лежат.

Кстати, я перечитал твой пост ещё раз. Вынужден огорчить, в mplayer пока никакой пользы от этой библиотеки, декодирования нету, а масштабирование немного глючит и попросту медленнее, чем через -vo xv.

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

В /etc/ld.so.conf.d/ добавь файл с путём библиотеки.

Например так

echo "/usr/local/lib/" > /etc/ld.so.conf.d/local_lib.conf

и затем ldconfig -a

и всё.

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

Попробуй положить библиотеку в /usr/lib или где там в fedora библиотеки лежат.

Сделал, как сказал BeerSeller, но теперь mplayer вот что пишет:

[VS] Software VDPAU backend library initialized
[vdpau] Error when calling vdp_preemption_callback_register: VDP_STATUS_NO_IMPLEMENTATION
Error opening/initializing the selected video_out (-vo) device.

в mplayer пока никакой пользы от этой библиотеки

Я изначально это понял, но всё равно решил потестить. :)

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

Error when calling vdp_preemption_callback_register: VDP_STATUS_NO_IMPLEMENTATION

У меня mplayer2, он это проглатывал без ругани. Вообще мне не ясно, как preemption должен работать, так что я его не реализовывал. Но если очень хочется попробовать, просто замени в функции softVdpPreemptionCallbackRegister возвращаемое значение с VDP_STATUS_NO_IMPLEMENTATION на VDP_STATUS_OK. Этого должно хватить.

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

Запустилось, но видео выглядит так, будто у него разрешение не 720p, а 240. Вдобавок ещё и тормозит. Так и должно быть?

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

Так и должно быть?

Да, там глюк, проявляется, когда окно разворачиваешь или размер меняешь. mplayer пользуется хитрой возможностью и не пересоздаёт поверхности. Я ещё не смотрел в подробностях, что и как.

Вдобавок ещё и тормозит.

Это потому что yuv->rgb софтово выполняется. Надо будет через шейдер сделать.

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

Я как раз купил долбожелезку с radeon 6300 на борту и теперь наслаждаюсь vaapi. Насколько там все плохо?

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

Насколько там все плохо?

Не понял вопроса.

Документация у VAAPI мне не очень нравится. Она... непонятная.

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

Я впервые столкнулся с картами radeon под линуксом и попытался завести хардварное ускорение видео. Оно завелось с блобом, но на некоторых видео артефачит. Вот хотел узнать, насколько есть смысл пытаться туда лезть и что-то ковырять.

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

А что мешает mesa собрать с поддержкой vdpau?

А и я собрал. Как раз по ней и разбирался, как библиотека внутри устроена должна быть; прояснял некоторые мутные моменты. Но сама реализация от mesa жутко тормозит, libswscale не в пример быстрее.

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

Оно завелось с блобом, но на некоторых видео артефачит.

На radeon'ах используется прослойка vaapi->xvba. И эта прослойка в консоль пишет предупреждение, когда профиль не поддерживается. Так что на высоких профилях, оно выплёвывает артефакты. Просто железо не может, например, больше 10 ссылок на кадры в H264.

насколько есть смысл пытаться туда лезть и что-то ковырять.

Только если реализовывать декодирование на шейдерах.

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

Интересные штуки ты ковыряешь

Расчёсываю ЧСВ.

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

Нашел сообщение «xvba_video: driver does not support H.264 content over HP@L4.1. Please upgrade.» и уже гуглю. Судя по похожей теме на лоре, виновата киношка, а не драйвера/железка.

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

У меня от этого в ютуб-плеере шрифты стали мылом :)

Ну я подозревал, что это произойдёт, но я разницы не замечаю. Мне нужно вглядываться и держать два варианта рядом, чтобы разницу почувствовать. Это в из-за смещений в пол-пикселя (путаю границы с центрами). По идее, должно быть не сложно поправить.

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

Добро пожаловать во времена поиска rpm'ок по названию в гугле -)

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

Потрясает, на Intel i5-2435M, при частоте 800MHz рисует fullhd (25-30% одного ядра)

на некоторых видео падает (на рекламе в youtube например). error: no implementation for profile

~/src/libvdpau-va-gl/build$ vainfo 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 vainfo: VA-API version: 0.32 (libva 1.0.15) vainfo: Driver version: Intel i965 driver - 1.0.17 vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointVLD VAProfileH264Baseline : VAEntrypointVLD VAProfileH264Baseline : VAEntrypointEncSlice VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD

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

Потрясает

Ага, сам тащусь.

на некоторых видео падает

А не должно вроде бы. Попробуй убрать «OverrideGPUValidation=true» из /etc/adobe/mms.cfg.

error: no implementation for profile

Интересно, что это за видео и что за профиль. Я вроде все профили H.264 охватил.

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

например: http://ru.twitch.tv/

Или реклама на youtube если отключить adblock

VDP_DECODER_PROFILE_H264_BASELINE в softVdpDecoderRender

может дебаг какой добавить чтобы я его скопировал сюда или на багтрекер/почту?

После добавления VDP_DECODER_PROFILE_H264_BASELINE в

    if (VDP_DECODER_PROFILE_H264_MAIN == decoderData->profile ||
        VDP_DECODER_PROFILE_H264_HIGH == decoderData->profile
        || VDP_DECODER_PROFILE_H264_BASELINE == decoderData->profile
        )
    {
        VdpPictureInfoH264 const *vdppi = (void *)picture_info;

Ошибка исчезает, но вместо видео показывает зелёный экран и дохнет, либо сразу дохнет.

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

может дебаг какой добавить

Он там есть, надо с CMAKE_BUILD_TYPE=Debug собирать, но здесь это не поможет

зелёный экран

Этот баг я и с mplayer'ом вижу: на некоторых видео картинка рассыпается. Не знаю пока, в чём именно баг. Возможно я смещение неправильно считаю. Я сейчас с битмапами застрял: субтитры криво отрисовываются.

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

Ошибка исчезает, но вместо видео показывает зелёный экран и дохнет, либо сразу дохнет.

Добрался до ноута, проверил ru.twitch.tv. Тут вот в чём дело. На некоторых сайтах flash и не пытается использовать VDPAU для вывода на экран. Если его заставить параметрами в /etc/adobe/mms.cfg, он пытается декодировать, но хочет обратно забирать картинки, чтобы масштабировать и показывать их самостоятельно. А я эту функцию не реализовывал пока. На этом сайте именно так.

Почему падает — не ясно. Может я как-то неправильно контекст закрываю.

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

Правильно ли понял, что эта штука позволяет частично использовать vdpau не только с картами nvidia?

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

позволяет использовать апаратное декодирование видео во флеше. Какие форматы/профили поддерживаются видеокартой можно посмотреть через vainfo

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