LINUX.ORG.RU

VDPAU-frontend для VAAPI ищу (чтобы ускорять flash и mplayer)

 , ,


1

3

В общем, у flash-плеер тормозит в полноэкранном режиме. Я слышал, что у него есть поддержка ускорения через VDPAU, но у меня нет nvidia. У меня только intel'овское встроенное видео и оно умеет только VA-API.

Ищу прослойку, которая будет прикидываться VDPAU, под капотом используя VAAPI.

Я гуглил, но нашёл только обратное: VAAPI-frontend для VDPAU. Собственно именно этот frontend и надоумил меня заняться поиском. Если можно сделать преобразование в одну сторону, есть ненулевая вероятность, что и обратное возможно.

Заодно и изкоробочный mplayer будет декодирование видео ускорять.

★★★★★

Я гуглил, но нашёл только обратное: VAAPI-frontend для VDPAU. Собственно именно этот frontend и надоумил меня заняться поиском. Если можно сделать преобразование в одну сторону, есть ненулевая вероятность, что и обратное возможно.

Об «обратном решении» я не слышал. Но судя по тому, что VAAPI-frontend для VDPAU не даёт практически никакого результата (проверял в VLC, само же VDPAU при этом работает), то думаю, что если VDPAU-frontend и существует, то толку от него будет не больше.

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

VAAPI-frontend для VDPAU не даёт практически никакого результата

Это плохая новость. Я думал, он работает.

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

У кого-то, возможно, и работает. Я проверял на всех своих машинах. Карточки были: Nvidia ION (GT 9400M), GTS 250, 310M (на двух ноутах), GT 520, GT 520M. Везде результат примерно одинаков: нагрузка на процессор если и снижается, то весьма незначительно.

carasin ★★★★★
()

Собрать ffmpeg с vaapi
Получить libavcodec с кодеками, работающими через vaapi
mplayer -vc help | grep vaapi
?????
PROFIT!

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

У меня больше проблема с Flash. Жрёт процессор и тормозит. И html5 видео тоже тормозит. perf top показывает, что тормоза и там и там в небольшом куске кода, причём у Flash этот кусок занимается масштабированием картинки.

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

А это всегда так было [ничего не поделаешь, это flash] А есть ли вообще это аппаратное декодирование?
Там есть мой пост со ссылкой на ещё более древний тред, в нём я меряю десятый флеш с vdpau и без со скриншотами экрана и графиками ЦП.

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

Ты там переживаешь из-за 50-70% загрузки на 1080p, а у меня тормозит 480p на полном экране, отжирая 100% одного ядра. Я всё же надеюсь на аппаратную поддержку масштабирования, оно у меня тормозит.

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

А проц-то кто?

Я всё же надеюсь на аппаратную поддержку масштабирования, оно у меня тормозит.

По-моему, её ждать бессмыссленно, но всё равно подпишусь.

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

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

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

Ещё б такой 1080p тянул во флеше.

во флеше.

А без флеша спокойно тянет и в софтовом декодере. Так что тут где-то проблема и я ищу решение, как могу.

Раньше флеш оставлял файлы в /tmp, потом стал их удалять; а теперь, он, похоже, смотрит, не пытается ли что-то его обмануть и заставить не удалять файлы. Огрызается.

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

у меня тормозит 480p на полном экране, отжирая 100% одного ядра

Раньше я думал, что вывод картинок во flash под linux писали наспех и кое-как, только чтобы работало. И считал, что, например, libswscale работал бы лучше. Похоже, это не так, потому как flash масштабирует быстрее чем тот vdpau backend, что я склепал. Скорее всего, это оттого что мне приходится вызывать скейлинг два раза, тогда как можно обойтись одним, комбинированым, что flash и делает.

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

А ты какие версии флеша уже пробовал?

Текущую в deb-multimedia, сейчас 11.2.202.261.

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

а почему не через xvideo?

Я его не осилил ещё. Там можно отмасштабированную картинку обратно забирать?

На примере youtube'а там примерно так: картинка в YV12 преобразуется в RGBA того же разрешения (например, 640x360), затем отдельно рисуется управляющие элементы плеера, сразу в RGBA и в том разрешении, что на экран выводится (1366x768). Потом видео в RGBA апскейлится в ещё одну поверхность 1366x768, поверх накладывается интерфейс, и уже этот бутерброд отправляется на экран. Судя по mplayer'у, что xv, что x11+xshm имеют примерно одинаковую скорость, только xv может масштабировать. Но mplayer рисует только YUV, ему проще.

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

ну вот я и делал драйвер vdpau, который рисует через cairo+x11+xshm и масштабирует через libswscale.

А почему не через opengl/sdl/...? Чтоб видюха занималась масштабированием.

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

А почему не через opengl/sdl/...? Чтоб видюха занималась масштабированием.

Потому я ничего из этого не знаю. SDL не очень подходит, из поверхностного гугления я выяснил, что он с X11 как-то слабо дружит, а мне надо выводить в указанный X11 Drawable. OpenGL вроде подходит, но надо копать. Я больше смотрю в сторону VAAPI, ведь его назначение схоже, стало быть и прицепиться будет проще.

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

флеш у тебя будет тормозить и ни чего ты с этим не сделаешь. Ты просто не туда копаешь, вывод флеша нельзя полностью пересадить на аппаратное ускорение, от того что аппаратное ускорение - это НЕКОТОРЫЕ (не все) операции кодирования\декодирования видео, а вся остальная работа по выводу флеш ролика на экран это забота процессора. При том что как правило на вэб странице кроме самого флеша есть еще всякие анимированые картинки рендерит которые тоже твои процессор. А процессор у тебя какой? никакой собственно отсюда у тебя и тормоза.

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

флеш у тебя будет тормозить и ни чего ты с этим не сделаешь.

Нельзя сделать что-то, не начав делать.

Ты просто не туда копаешь, вывод флеша нельзя полностью пересадить на аппаратное ускорение, от того что аппаратное ускорение - это НЕКОТОРЫЕ (не все) операции кодирования\декодирования видео, а вся остальная работа по выводу флеш ролика на экран это забота процессора.

Если это не конфиденциальная информация, скажи, откуда у тебя эти сведения? Потому как в реальности всё наоборот, декодирование видео полностью программное, а отрисовка по возможности аппаратная, включая масштабирование и преобразование цвета:

[VDPSOFT] {part} VdpVideoSurfacePutBitsYCbCr surface=24, source_ycbcr_format=VDP_YCBCR_FORMAT_YV12
[VDPSOFT] {part} VdpGenerateCSCMatrix standard=1
[VDPSOFT] {part} VdpVideoMixerSetAttributeValues mixer=23, attribute_count=1
[VDPSOFT]    attribute 1 (VDP_VIDEO_MIXER_ATTRIBUTE_CSC_MATRIX)
         1,063635  -0,028848   1,373421  -0,672286
         1,066708  -0,405980  -0,715586   0,560783
         1,143980   1,660892  -0,022393  -0,819249
[VDPSOFT] {part} VdpVideoMixerRender
      mixer=23, background_surface=-1, background_source_rect=NULL,
      current_picture_structure=VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME,
      no_video_surface_past, video_surface_current=24, no_video_surface_future,
      video_source_rect=NULL, destination_surface=22,
      destination_rect=NULL, video_surface_current=24, no_layers
[VDPSOFT] {dirty impl} VdpOutputSurfaceRenderOutputSurface destination_surface=33, source_surface=22
      destination_rect=(0,0,854,480), source_rect=(0,0,426,240)
      colors=(nil), flags=0
      blend_state.blend_factor_source_color=VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE
      blend_state.blend_factor_destination_color=VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ZERO
      blend_state.blend_factor_source_alpha=VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE
      blend_state.blend_factor_destination_color=VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ZERO
      blend_state.blend_equation_color=VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD
      blend_state.blend_equation_alpha=VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD
      blend_constant = (   0,000000,    0,000000,    0,000000,    0,000000)
[VDPSOFT] {part} VdpOutputSurfaceRenderBitmapSurface destination_surface=33, source_surface=30
      destination_rect=(0,0,854,510), source_rect=(0,0,854,510)
      colors=(nil), flags=0
      blend_state.blend_factor_source_color=VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE
      blend_state.blend_factor_destination_color=VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
      blend_state.blend_factor_source_alpha=VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE
      blend_state.blend_factor_destination_color=VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
      blend_state.blend_equation_color=VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD
      blend_state.blend_equation_alpha=VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD
      blend_constant = (   0,000000,    0,000000,    0,000000,    0,000000)
[VDPSOFT] {part} VdpPresentationQueueDisplay presentation_queue=32, surface=33, clip_width=0, clip_height=0
[VDPSOFT] {full} VdpPresentationQueueBlockUntilSurfaceIdle presentation_queue=32, surface=34
[VDPSOFT] {full} VdpPresentationQueueGetTime presentation_queue=32

Я флешу, когда он спрашивает про точки входа для декодера, сообщаю, что они все есть. Но он их никогда не вызывает.

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

У меня есть профайлер, меня так просто не запугаешь :)

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

http://ru.wikipedia.org/wiki/DirectX_Video_Acceleration
http://en.wikipedia.org/wiki/VDPAU
http://en.wikipedia.org/wiki/Video_Acceleration_API

Прочитай самое первое (или нулевое, как считать) сообщение темы, пожалуйста.

Ну и по всем тем ссылкам нет информации о том, что flashplayer не умеет аппаратную отрисовку, а использует только аппаратное декодирование и то частично. Я оспариваю это утверждение.

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

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

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

Отрисовка принципиально только аппаратная и это не переделать

Вот здесь ошибка. Аппаратная означает не «сделанная на логике», а «происходящая отдельно от CPU». GPU — это своего рода процессор, только специализированный.

Не думаю, что стоит разводить здесь лекции об устройстве GPU, просто хочу сказать, что не надо бросаться громкими утверждениями, если не можешь их подтвердить.

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

Вы как-то не ответили, а почему всякие ролики с ютуба Вы хотите проигрывать только во флеше. А не через плагины открывать в mplayer? Хотя я не программист, даже я осилил написать легкий хук для emacs-w3m, и мой emacs проигрывает ролики с ютуба.

RCV ★★★★
()

Смотри порно ролики не через это УГ.

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

а почему всякие ролики с ютуба Вы хотите проигрывать только во флеше. А не через плагины открывать в mplayer?

Потому что кроме youtube бывают другие плееры. Иногда там бывают дополнительные субтитры (я на слух не всё понимаю). Или встроенные в видео вопросы, когда проигрывание останавливается и надо выбрать правильный вариант.

мой emacs проигрывает ролики с ютуба.

А ещё есть minitube, youtube-dl, nomnom, их с десяток наберётся. Но иногда недостаточно просто выдрать видео.

i-rinat ★★★★★
() автор топика
sudo apt-get install nvidia-latest libvdpau1
sudo mkdir /etc/adobe
echo -e "EnableLinuxHWVideoDecode=1\nOverrideGPUValidation=true" | sudo tee /etc/adobe/mms.cfg > /dev/null
vo=vdpau,xv,
vc=ffh264vdpau,ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,
etwrq ★★★★★
()
Ответ на: комментарий от etwrq

nvidia-latest

У меня intel.

EnableLinuxHWVideoDecode=1\nOverrideGPUValidation=true

Я сначала думал, что flash не будет декодировать видео через vdpau (комментарий от сотрудника adobe на багтрекере). Собственно flash спрашивал VdpVideoSurfaceQueryCapabilities, заглушка ему отвечала, что функция не реализована, и на этом всё останавливалось. Я наскоро набросал реализацию, которая на всё отвечает согласием, флеш спросил ещё про VdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities, а потом начал пробовать создать декодер. Не думал я, что отсутствие побочной функции его останавливало, ибо выводил он вообще не спрашивая, поддерживается формат или нет.

Некоторая надежда есть.

vo=vdpau,xv,

Я и пытаюсь сделать так, чтобы на intel'е работало vdpau.

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

У меня intel

facepalm.intel

afaik, если у тебя не hd 4000, то можно спать спокойно.

ибо только в hd4000 запили нормальное ускорение(по крайней мере посредством dxva) offtopic-proof.

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

facepalm.intel afaik, если у тебя не hd 4000, то можно спать спокойно.

Я не знаю как называется видеоядро, но процессор называется Celeron P4500 и

$ 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
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointVLD

VLC успешно декодирует и воспроизводит через VA-API.

может поможет и еще

Спасибо. Я там уже смотрел (это же первая страница в выдаче гугла), мне же надо понимать и как VDPAU устроен, и как использовать VA-API. Первое надо реализовать на уровне драйвера, с программной реализацией всех плюшек, а второе использовать для ускорения тяжёлых операций типа декодирования. И, хочу отметить, у VA-API документация куцая. Либо я просто её не нашёл. У VDPAU не в пример лучше.

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

нет, аппаратная таки и означает сделанная на логике. А отдельно от цпу только бред который ты несешь генерируется. Я тебе кинул ссылки.

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

во всей серии HD ускорение нормально, hd2500 1080p загрузка 20%. у автора скорее всего gma450

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

нет, аппаратная таки и означает сделанная на логике.

Чисто технически ты, конечно, прав, ибо процессоры сделаны на логике. Но столь упорное отстаивание своей позиции без понимания вопроса поражает.

А отдельно от цпу только бред который ты несешь генерируется. Я тебе кинул ссылки.

Кладезь знаний. Особенно учитывая то, что изначально я все эти понятия упомянул в заглавном сообщении.

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

Оказалось, что libswscale использовал неоптимизированные функции из-за того что я скейлил RGBA в RGBA. Если скейлить BGRA в BGRA эффект будет такой же, но скорость повыше. Итог: 60-65% загрузка CPU при 360p->WXGA на «поддельном» vdpau драйвере против 100-108% загрузка на внутреннем скейлере флеша. Это на youtube'е. На vimeo флеш отказывается рендерить через vdpau без видео-декодера.

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

Я больше смотрю в сторону VAAPI, ведь его назначение схоже, стало быть и прицепиться будет проще.

Гиблое дело. С обработкой изображений у VAAPI беда. Я даже не нашёл способа вывести на экран BRGA картинку без перевода её в YUV420 (где она снова переводится в BGRA).

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

Да такая версия flash player'а 10,2 действительно существовала. И была представлена intel, но вскоре была удаленна(либо по просьбе adobe либо из-за того что устарела и небезопасна), и приназначалась специально для cedartrail, но возможно и в твоем случае она бы подошла ибо именно в ней была поддержка vaapi
Скачать ее можно было по адресу: https://registrationcenter.intel.com/RegCenter/ComForm.aspx?ProductID=1618
Пакеты назывались flash-plugin-10.2.0-Meego_Release.rpm или flash-plugin-10.2.0-Meego_CDT_Alpha2.rpm
К сожалению в данный момент в гугле их не найти, по крайней мере мне не удалось. Если у кого-то осталось, то конечно было бы круто если бы он поделился, хотя бы просто на посмотреть. Если сам найдешь, обязательно поделись. Да споддержкой intel и просьбой просто выложить данные пакеты, мне так связаться не удалось, если кто поможет, то было бы неплохо.

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

Было бы интересно на неё взглянуть, но я её тоже не смог найти. Хотя постоянно использавать её было бы стрёмно, старая уж очень.

Я больше склоняюсь к драйверу vdpau, использующему софт/OpenGL/VA для выполнения задач масштабирования и декодирования. Пока есть только софтовая реализация, но с ней масштабирование 360p на 1366x768 уже не тормозит (< 100% cpu), тогда как с голым плагином лагает (>100%).

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

Так как код уже частично работает, я перебираюсь в новую тему: libvdpau-va-gl

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