#11618: hwupload filter fails with "Cannot allocate memory" for VA-API on AMD RX
7900 XT (Navi 31) preventing H.264/HEVC hardware encoding initialization.
----------------------------------+----------------------------------
             Reporter:  CN        |                     Type:  defect
               Status:  new       |                 Priority:  normal
            Component:  ffmpeg    |                  Version:  7.1
             Keywords:  hwupload  |               Blocked By:
             Blocking:            |  Reproduced by developer:  0
Analyzed by developer:  0         |
----------------------------------+----------------------------------
 Summary of the bug: Fails to encode video files on Radeon hardware with
 various methods. Gemini says 'The problem is not necessarily with the
 h264_vaapi or hevc_vaapi encoder itself, but with the hwupload filter
 failing to allocate memory on your VA-API device. This is a lower-level
 issue than just a pixel format or encoder parameter problem.

 This "Cannot allocate memory" error for hwupload when dealing with VA-API
 on AMD GPUs (especially newer ones like Navi 3x) can indicate several
 things'
 How to reproduce:
 {{{
 see logs for versions and examples below:
 }}}
 --- FFmpeg Bug Report Log ---
 Generated on: Sat 31 May 22:00:14 BST 2025

 --- 1. vainfo output ---
 Command: vainfo --display drm --device /dev/dri/renderD128
 Trying display: drm
 vainfo: VA-API version: 1.22 (libva 2.22.0)
 vainfo: Driver version: Mesa Gallium driver 25.1.1-arch1.2 for AMD Radeon
 RX 7900 XT (radeonsi, navi31, LLVM 19.1.7, DRM 3.61, 6.14.7-arch2-1)
 vainfo: Supported profile and entrypoints
       VAProfileH264ConstrainedBaseline: VAEntrypointVLD
       VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
       VAProfileH264Main               : VAEntrypointVLD
       VAProfileH264Main               : VAEntrypointEncSlice
       VAProfileH264High               : VAEntrypointVLD
       VAProfileH264High               : VAEntrypointEncSlice
       VAProfileHEVCMain               : VAEntrypointVLD
       VAProfileHEVCMain               : VAEntrypointEncSlice
       VAProfileHEVCMain10             : VAEntrypointVLD
       VAProfileHEVCMain10             : VAEntrypointEncSlice
       VAProfileJPEGBaseline           : VAEntrypointVLD
       VAProfileVP9Profile0            : VAEntrypointVLD
       VAProfileVP9Profile2            : VAEntrypointVLD
       VAProfileAV1Profile0            : VAEntrypointVLD
       VAProfileAV1Profile0            : VAEntrypointEncSlice
       VAProfileNone                   : VAEntrypointVideoProc

 --- 2. pacman -Q mesa output ---
 Command: pacman -Q mesa
 mesa 1:25.1.1-2

 --- 3. uname -r output (Kernel Version) ---
 Command: uname -r
 6.14.7-arch2-1

 --- 4. lspci -k | grep -EA3 'VGA|3D|Display' output (GPU Info) ---
 Command: lspci -k | grep -EA3 'VGA|3D|Display'
 lspci: Unable to load libkmod resources: error -2
 0b:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI]
 Navi 31 [Radeon RX 7900 XT/7900 XTX/7900 GRE/7900M] (rev cc)
         Subsystem: Sapphire Technology Limited PULSE RX 7900 XTX
         Kernel driver in use: amdgpu
 0b:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Navi 31
 HDMI/DP Audio

 --- 5. FFmpeg Version and Configuration ---
 Command: ffmpeg -version
 ffmpeg version n7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
 built with gcc 15.1.1 (GCC) 20250425
 configuration: --prefix=/usr --disable-debug --disable-static --disable-
 stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto
 --enable-fontconfig --enable-frei0r --enable-gmp --enable-gnutls --enable-
 gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray
 --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libdvdnav
 --enable-libdvdread --enable-libfreetype --enable-libfribidi --enable-
 libglslang --enable-libgsm --enable-libharfbuzz --enable-libiec61883
 --enable-libjack --enable-libjxl --enable-libmodplug --enable-libmp3lame
 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg
 --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse
 --enable-librav1e --enable-librsvg --enable-librubberband --enable-
 libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-
 libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-
 libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-
 libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb
 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq
 --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-
 shared --enable-vapoursynth --enable-version3 --enable-vulkan
 libavutil      59. 39.100 / 59. 39.100
 libavcodec     61. 19.101 / 61. 19.101
 libavformat    61.  7.100 / 61.  7.100
 libavdevice    61.  3.100 / 61.  3.100
 libavfilter    10.  4.100 / 10.  4.100
 libswscale      8.  3.100 /  8.  3.100
 libswresample   5.  3.100 /  5.  3.100
 libpostproc    58.  3.100 / 58.  3.100

 --- 6. Output of the failing synthetic FFmpeg command ---
 Command: ffmpeg -v debug -init_hw_device vaapi=va:/dev/dri/renderD128 -f
 lavfi -i testsrc=s=1280x720:r=30:d=5 -vf
 'hwupload=derive_device=va,format=nv12' -c:v h264_vaapi -qp 24 -y
 output_test_synthetic.mp4
 ffmpeg version n7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
   built with gcc 15.1.1 (GCC) 20250425
   configuration: --prefix=/usr --disable-debug --disable-static --disable-
 stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto
 --enable-fontconfig --enable-frei0r --enable-gmp --enable-gnutls --enable-
 gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray
 --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libdvdnav
 --enable-libdvdread --enable-libfreetype --enable-libfribidi --enable-
 libglslang --enable-libgsm --enable-libharfbuzz --enable-libiec61883
 --enable-libjack --enable-libjxl --enable-libmodplug --enable-libmp3lame
 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg
 --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse
 --enable-librav1e --enable-librsvg --enable-librubberband --enable-
 libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-
 libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-
 libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-
 libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb
 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq
 --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-
 shared --enable-vapoursynth --enable-version3 --enable-vulkan
   libavutil      59. 39.100 / 59. 39.100
   libavcodec     61. 19.101 / 61. 19.101
   libavformat    61.  7.100 / 61.  7.100
   libavdevice    61.  3.100 / 61.  3.100
   libavfilter    10.  4.100 / 10.  4.100
   libswscale      8.  3.100 /  8.  3.100
   libswresample   5.  3.100 /  5.  3.100
   libpostproc    58.  3.100 / 58.  3.100
 Splitting the commandline.
 Reading option '-v' ... matched as option 'v' (set logging level) with
 argument 'debug'.
 Reading option '-init_hw_device' ... matched as option 'init_hw_device'
 (initialise hardware device) with argument 'vaapi=va:/dev/dri/renderD128'.
 Reading option '-f' ... matched as option 'f' (force container format
 (auto-detected otherwise)) with argument 'lavfi'.
 Reading option '-i' ... matched as input url with argument
 'testsrc=s=1280x720:r=30:d=5'.
 Reading option '-vf' ... matched as option 'vf' (alias for -filter:v
 (apply filters to video streams)) with argument
 'hwupload=derive_device=va,format=nv12'.
 Reading option '-c:v' ... matched as option 'c' (select encoder/decoder
 ('copy' to copy stream without reencoding)) with argument 'h264_vaapi'.
 Reading option '-qp' ... matched as AVOption 'qp' with argument '24'.
 Reading option '-y' ... matched as option 'y' (overwrite output files)
 with argument '1'.
 Reading option 'output_test_synthetic.mp4' ... matched as output url.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option v (set logging level) with argument debug.
 Applying option init_hw_device (initialise hardware device) with argument
 vaapi=va:/dev/dri/renderD128.
 [AVHWDeviceContext @ 0x562c9170b800] libva: VA-API version 1.22.0
 [AVHWDeviceContext @ 0x562c9170b800] libva: Trying to open
 /usr/lib/dri/radeonsi_drv_video.so
 [AVHWDeviceContext @ 0x562c9170b800] libva: Found init function
 __vaDriverInit_1_22
 [AVHWDeviceContext @ 0x562c9170b800] libva: va_openDriver() returns 0
 [AVHWDeviceContext @ 0x562c9170b800] Initialised VAAPI connection: version
 1.22
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x3231564e -> nv12.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x30313050 -> p010le.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x32313050 -> p012le.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x36313050 -> unknown.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x30323449 -> yuv420p.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x32315659 -> yuv420p.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x56595559 -> unknown.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x32595559 -> yuyv422.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x59565955 -> uyvy422.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x30303859 -> gray.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x50343434 -> yuv444p.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x56323234 -> yuv440p.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x50424752 -> unknown.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x41524742 -> bgra.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x41424752 -> rgba.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x42475241 -> argb.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x58524742 -> bgr0.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x58424752 -> rgb0.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x30335241 -> unknown.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x30334241 -> unknown.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x30335258 -> x2rgb10le.
 [AVHWDeviceContext @ 0x562c9170b800] Format 0x30334258 -> unknown.
 [AVHWDeviceContext @ 0x562c9170b800] VAAPI driver: Mesa Gallium driver
 25.1.1-arch1.2 for AMD Radeon RX 7900 XT (radeonsi, navi31, LLVM 19.1.7,
 DRM 3.61, 6.14.7-arch2-1).
 [AVHWDeviceContext @ 0x562c9170b800] Driver not found in known nonstandard
 list, using standard behaviour.
 Applying option y (overwrite output files) with argument 1.
 Successfully parsed a group of options.
 Parsing a group of options: input url testsrc=s=1280x720:r=30:d=5.
 Applying option f (force container format (auto-detected otherwise)) with
 argument lavfi.
 Successfully parsed a group of options.
 Opening an input file: testsrc=s=1280x720:r=30:d=5.
 [AVFilterGraph @ 0x562c91915cc0] Setting 's' to value '1280x720'
 [AVFilterGraph @ 0x562c91915cc0] Setting 'r' to value '30'
 [AVFilterGraph @ 0x562c91915cc0] Setting 'd' to value '5'
 detected 16 logical cores
 [Parsed_testsrc_0 @ 0x562c91918d80] size:1280x720 rate:30/1
 duration:5.000000 sar:1/1
 [AVFilterGraph @ 0x562c91915cc0] query_formats: 2 queried, 3 merged, 0
 already done, 0 delayed
 [lavfi @ 0x562c91915900] All info found
 Input #0, lavfi, from 'testsrc=s=1280x720:r=30:d=5':
   Duration: N/A, start: 0.000000, bitrate: N/A
   Stream #0:0, 1, 1/30: Video: wrapped_avframe, 1 reference frame, rgb24,
 1280x720 [SAR 1:1 DAR 16:9], 0/1, 30 fps, 30 tbr, 30 tbn
 Successfully opened the file.
 Parsing a group of options: output url output_test_synthetic.mp4.
 Applying option vf (alias for -filter:v (apply filters to video streams))
 with argument hwupload=derive_device=va,format=nv12.
 Applying option c:v (select encoder/decoder ('copy' to copy stream without
 reencoding)) with argument h264_vaapi.
 Successfully parsed a group of options.
 Opening an output file: output_test_synthetic.mp4.
 [out#0/mp4 @ 0x562c9191b780] No explicit maps, mapping streams
 automatically...
 [vost#0:0/h264_vaapi @ 0x562c9191c000] Created video stream from input
 stream 0:0
 [AVFilterGraph @ 0x562c9191ea40] Setting 'derive_device' to value 'va'
 [AVFilterGraph @ 0x562c9191ea40] Setting 'pix_fmts' to value 'nv12'
 [file @ 0x562c91921640] Setting default whitelist 'file,crypto,data'
 Successfully opened the file.
 Stream mapping:
   Stream #0:0 -> #0:0 (wrapped_avframe (native) -> h264 (h264_vaapi))
 [vost#0:0/h264_vaapi @ 0x562c9191c000] Starting thread...
 [vf#0:0 @ 0x562c9191e980] Starting thread...
 [vist#0:0/wrapped_avframe @ 0x562c917a3400] [dec:wrapped_avframe @
 0x562c91920140] Starting thread...
 [in#0/lavfi @ 0x562c91915040] Starting thread...
 Press [q] to stop, [?] for help
 [AVFilterGraph @ 0x7f8d58001000] Setting 'derive_device' to value 'va'
 [AVFilterGraph @ 0x7f8d58001000] Setting 'pix_fmts' to value 'nv12'
 [graph -1 input from stream 0:0 @ 0x7f8d58004a00] Setting 'video_size' to
 value '1280x720'
 [graph -1 input from stream 0:0 @ 0x7f8d58004a00] Setting 'pix_fmt' to
 value '2'
 [graph -1 input from stream 0:0 @ 0x7f8d58004a00] Setting 'time_base' to
 value '1/30'
 [graph -1 input from stream 0:0 @ 0x7f8d58004a00] Setting 'pixel_aspect'
 to value '1/1'
 [graph -1 input from stream 0:0 @ 0x7f8d58004a00] Setting 'colorspace' to
 value '0'
 [graph -1 input from stream 0:0 @ 0x7f8d58004a00] Setting 'range' to value
 '2'
 [graph -1 input from stream 0:0 @ 0x7f8d58004a00] Setting 'frame_rate' to
 value '30/1'
 [graph -1 input from stream 0:0 @ 0x7f8d58004a00] w:1280 h:720
 pixfmt:rgb24 tb:1/30 fr:30/1 sar:1/1 csp:gbr range:pc
 [format @ 0x7f8d58005640] Setting 'pix_fmts' to value 'vaapi'
 [format @ 0x7f8d58005640] Setting 'color_ranges' to value 'tv|pc'
 [Parsed_hwupload_0 @ 0x7f8d58004280] Query format failed for
 'Parsed_hwupload_0': Cannot allocate memory
 [vf#0:0 @ 0x562c9191e980] Error reinitializing filters!
 [vf#0:0 @ 0x562c9191e980] Task finished with error code: -12 (Cannot
 allocate memory)
 [vf#0:0 @ 0x562c9191e980] Terminating thread with return code -12 (Cannot
 allocate memory)
 [vost#0:0/h264_vaapi @ 0x562c9191c000] Encoder thread received EOF
 [vost#0:0/h264_vaapi @ 0x562c9191c000] Could not open encoder before EOF
 [vost#0:0/h264_vaapi @ 0x562c9191c000] Task finished with error code: -22
 (Invalid argument)
 [vost#0:0/h264_vaapi @ 0x562c9191c000] Terminating thread with return code
 -22 (Invalid argument)
 [vist#0:0/wrapped_avframe @ 0x562c917a3400] [dec:wrapped_avframe @
 0x562c91920140] Decoder returned EOF, finishing
 [vist#0:0/wrapped_avframe @ 0x562c917a3400] [dec:wrapped_avframe @
 0x562c91920140] Terminating thread with return code 0 (success)
 [vist#0:0/wrapped_avframe @ 0x562c917a3400] All consumers of this stream
 are done
 [in#0/lavfi @ 0x562c91915040] All consumers are done
 [in#0/lavfi @ 0x562c91915040] Terminating thread with return code 0
 (success)
 [out#0/mp4 @ 0x562c9191b780] Nothing was written into output file, because
 at least one of its streams received no packets.
 frame=    0 fps=0.0 q=0.0 Lsize=       0KiB time=N/A bitrate=N/A speed=N/A
 [AVIOContext @ 0x562c91921700] Statistics: 0 bytes written, 0 seeks, 0
 writeouts
 [in#0/lavfi @ 0x562c91915040] Input file #0 (testsrc=s=1280x720:r=30:d=5):
 [in#0/lavfi @ 0x562c91915040]   Input stream #0:0 (video): 3 packets read
 (1320 bytes); 2 frames decoded; 0 decode errors;
 [in#0/lavfi @ 0x562c91915040]   Total: 3 packets (1320 bytes) demuxed
 Conversion failed!
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/11618>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
_______________________________________________
FFmpeg-trac mailing list
FFmpeg-trac@avcodec.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-trac

To unsubscribe, visit link above, or email
ffmpeg-trac-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to