LINUX.ORG.RU

Ffmpeg h264 аппаратный декодер для amd

 ,


0

2

Сабж - кто пользует ffmpeg для декодирования (не кодирования!) н264 аппаратного - подскажите как вы инициализируете декодер - под нвидией прекрасно стартует h264_cuvid и активно нагружает аппаратный блок декодирования, под амд h264_vaapi с 9060 упорно прикидывается работающим (в дебаге никакого выхлопа) но и все декодирование делает центральный проц

Пробовал:

  • принудительно указывать hwaccel vaapi и декодер как h264_vaapi
  • указывать все что видит /dev/dri

Системно поддержка декодирования на карте есть 👨🏿‍🔧

★★★★★
ffmpeg -i test.mp4 -benchmark -f null -
video:1148KiB audio:1770KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 2773 fps=784 q=-0.0 Lsize=N/A time=00:01:53.28 bitrate=N/A speed=  32x elapsed=0:00:03.53    
bench: utime=18.871s stime=0.298s rtime=3.536s
bench: maxrss=316920KiB
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -i test.mp4 -benchmark -f null -

video:1148KiB audio:1770KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 2773 fps=496 q=-0.0 Lsize=N/A time=00:01:53.28 bitrate=N/A speed=20.3x elapsed=0:00:05.59    
bench: utime=1.596s stime=1.739s rtime=5.591s
bench: maxrss=278268KiB
ffmpeg -hwaccel vulkan -init_hw_device vulkan=vk:1 -i test.mp4 -benchmark -f null -
video:1148KiB audio:1770KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 2773 fps=365 q=-0.0 Lsize=N/A time=00:01:53.28 bitrate=N/A speed=14.9x elapsed=0:00:07.58    
bench: utime=0.313s stime=0.583s rtime=7.589s
bench: maxrss=270964KiB

т.е. amd 9950x в полтора раза шустрее чем vaapi декодер на 9060 и в два раза быстрее чем на встроенном гпу

на дискретном 9060 вулкан отваливается с

[h264 @ 0x56134dfe40c0] Device does not support the VK_KHR_video_decode_queue extension!
[h264 @ 0x56134dfe40c0] Failed setup for format vulkan: hwaccel initialisation returned error.

и судя по тому что vulkaninfo упоминает декодер только один раз, то видимо дебиан 13 в него не умеет

vulkaninfo | grep KHR_video
WARNING: radv is not a conformant Vulkan implementation, testing use only.
        VK_KHR_video_decode_av1                       : extension revision 1
        VK_KHR_video_decode_h264                      : extension revision 9
        VK_KHR_video_decode_h265                      : extension revision 8
        VK_KHR_video_decode_queue                     : extension revision 8
        VK_KHR_video_encode_h264                      : extension revision 14
        VK_KHR_video_encode_h265                      : extension revision 14
        VK_KHR_video_encode_queue                     : extension revision 12
        VK_KHR_video_maintenance1                     : extension revision 1
        VK_KHR_video_queue                            : extension revision 8

Покупай амуде, говорили они, у нее отличная поддержка под линухом, говорили они
скам какой-то :-D

rukez ★★★★★
() автор топика

Для того, чтобы декодирование работало, надо чтобы драйвера видео были собраны с поддержкой декодирования (mesa-libva или как это в вашем дистрибутиве называется). В Fedora, например, собирают без поддержки кодирования/декодирования из-за патентных ограничений в США.

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

Когда я со своими АМД плясал с декодированием на Вулкане, то без вот этой переменной окружения:

export RADV_PERFTEST=video_decode

оно точно так же не хотело работать.

Сейчас попробовал h264 vaapi, но в арче ffmpeg поставляется без декодеров vaapi :)

> ffmpeg -hide_banner -decoders | grep 264
 VFS..D h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
 V..... h264_v4l2m2m         V4L2 mem2mem H.264 decoder wrapper (codec h264)
 V....D h264_qsv             H264 video (Intel Quick Sync Video acceleration) (codec h264)
 V..... h264_cuvid           Nvidia CUVID H264 decoder (codec h264)

Щас у меня дособерётся ffmpeg-amd-full из АУРа, посмотрю там.

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

Не, я фигню, написал, видимо. Специалисты сказали, что vaapi в списке декодеров и не должен появляться.

Прогнал тестовый файл с ffmpeg из реп арча и с ffmpeg-amd-full из аура, результат одинаковый: GPU декодит, судя по amdgpu_top с загрузкой декодера до 100%, цпу отдыхает при этом.

В логах вот такое есть:

[AVHWDeviceContext @ 0x5653ab2f1e40] libva: VA-API version 1.22.0
[AVHWDeviceContext @ 0x5653ab2f1e40] libva: Trying to open /usr/lib/dri/radeonsi_drv_video.so
[AVHWDeviceContext @ 0x5653ab2f1e40] libva: Found init function __vaDriverInit_1_22
[AVHWDeviceContext @ 0x5653ab2f1e40] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x5653ab2f1e40] Initialised VAAPI connection: version 1.22
[AVHWDeviceContext @ 0x5653ab2f1e40] VAAPI driver: Mesa Gallium driver 25.2.2-arch1.1 for AMD Radeon RX Vega (radeonsi, vega10, ACO, DRM 3.63, 6.15.4-arch2-1).
[AVHWDeviceContext @ 0x5653ab2f1e40] Driver not found in known nonstandard list, using standard behaviour.
[h264 @ 0x5653ab4ac4c0] Reinit context to 3840x2160, pix_fmt: yuv420p
Selecting decoder 'h264' because of requested hwaccel method vaapi

...

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sample_3840x2160.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:28.24, start: 0.000000, bitrate: 37573 kb/s
  Stream #0:0[0x1](und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(progressive, left), 3840x2160, 37570 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
      Metadata:
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
[out#0/null @ 0x5653ab34ff00] No explicit maps, mapping streams automatically...
[vost#0:0/wrapped_avframe @ 0x5653ab4d26c0] Created video stream from input stream 0:0
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
[vost#0:0/wrapped_avframe @ 0x5653ab4d26c0] Starting thread...
[vf#0:0 @ 0x5653ab373500] Starting thread...
[vist#0:0/h264 @ 0x5653ab4d1f00] [dec:h264 @ 0x5653ab36a040] Starting thread...
[in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 0x5653ab4ab300] Starting thread...
Press [q] to stop, [?] for help
[h264 @ 0x5653ab4bee40] Reinit context to 3840x2160, pix_fmt: vaapi
[graph -1 input from stream 0:0 @ 0x7f74fc002f00] w:3840 h:2160 pixfmt:vaapi tb:1/24000 fr:24000/1001 sar:0/1 csp:unknown range:unknown
[graph -1 input from stream 0:0 @ 0x7f74fc002f00] video frame properties congruent with link at pts_time: 0

kixx09
()
Последнее исправление: kixx09 (всего исправлений: 2)
Ответ на: комментарий от Khnazile

из-за патентных ограничений

по крайней мере вулкан точно не по патентам ограничен - на встройке он декодер видит

но видимо меса на момент фиксации дебиана 13 не умела в 9060

сейчас попробую rocm навернуть но это довольно забавная процедура на 13ом - часть пакетиков пришлось качать ручками ибо амд конечно драйвера под 13шку не обновила (и судя по тому что они вообще для убунты то и не планирует) - П-поддержка :-D

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

Специалисты сказали, что vaapi в списке декодеров и не должен появляться.

да, я в начале тоже думал что у меня ffmpeg не умеет в такое ожидая увидеть h264_vaapi в списке но видимо он в просто h264 воткнут

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

т.е. amd 9950x в полтора раза шустрее чем vaapi декодер на 9060

Так основной смысл в энергопотреблении, а не производительности.
Естественно, что современный шестнадцати ядерный проц будет быстрее.
У меня на 5950 и 6700 разница между cpu и vaapi вообще почти в три раза.
А вот с vulkan там какая то беда, при его использовании декодер видяхи только наполовину нагружается, так что он еще в два раза медленнее чем vaapi.

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

Есть деб-мультимедия, там пепесобирают ffmpeg, имеет смысл попробовать его.

у меня ffmpeg собран и с ваапи и с вулканом

configuration: --prefix=/home/orlovsn/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/orlovsn/ffmpeg_build/include --extra-ldflags=-L/home/orlovsn/ffmpeg_build/lib --extra-libs='-lpthread -lm' --ld=g++ --bindir=/home/orlovsn/bin --enable-chromaprint --enable-frei0r --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libdav1d --enable-libfdk-aac --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libmp3lame --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-nonfree --enable-opengl --enable-openssl --enable-version3 --enable-librubberband --enable-libharfbuzz --enable-libwebp --enable-libzimg --enable-libzvbi --enable-libgsm --enable-libvvenc --enable-vaapi --enable-vulkan

проблема явно где-то на стороне вулкана, который не может цепануть быстрое ГПУ (но может чахлика) и ваапи который видимо падает на софтовый дефолт

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

сейчас попробую rocm навернуть

а не, это я в себя слишком поверил :-D

*** dma_resv->seq is missing. exit…. Stop.

и судя по багтрекеру это уже годами на дебиане по разным причинам, для 13 обещают починить «когда-нить в составе рокм7»

Ну точно скам :-D

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

Так основной смысл в энергопотреблении, а не производительности.

не совсем - на соседней машине rtx 4060 в два раза быстрее декодирует чем 14900 на h264_cuvid
мне просто много потоков надо паралелльно декодировать - смысл декодера разгрузить цпу и сразу свалить на гпу как минимум ресайз (ффмпег из коробки умеет судя по докам в ресайс в вгпу) и потом еще по возможности сразу как мат для opencv пользовать не гоняя в основную озу но это следующий шаг, хотелось бы для начала сам декодер оживить

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

Тестинг пришлось ставить с нуля ибо попытка воткнуть amdgpu не прошла незаметно и обвалила графоний от слова совсем
На чистеньком свеженьком тестинге с 6.16 ядром я так же печально не узрел декодера для вулкана на 9060 и профита от ваапи.
Видимо не судьба, радеон придется менять на правоверную невидию 🫤

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

Нет смысла на бинарных дистрах сидеть — у них там непонятно с какими флагами собран софт.

ffmpeg рассказывает по дефолту при запуске какие были флаги сборки, меса вроде давно везде с вулканом собирается, в 6.16 радеон есть и дебиан на удивление даже сам подтянул для него firmware т.е. проблема скорее глобальна чем дебиана

rukez ★★★★★
() автор топика