FFmpeg Quicksync – Unable to Hardware Decode File

debianffmpegh.264intel graphics

I'm trying to convert a h264 video to h265 using hardware decoding/decoding of the iGPU (Quicksync). Decoding does not work throwing the error "Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'"

I'm using the most basic example from https://trac.ffmpeg.org/wiki/Hardware/QuickSync. Hardware encoding works (in this example it's software decoded)

ffmpeg -v verbose -hwaccel qsv -i VID_20230526_174925.mp4 -c:v hevc_qsv -b:v 5M output.mp4

but hardware decoding does not work:

ffmpeg -v verbose -hwaccel qsv -c:v h264_qsv -i VID_20230526_174925.mp4 -f null -

I'm out of ideas.

Full ffmpeg output:

ffmpeg version 4.3.6-0+deb11u1 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: --prefix=/usr --extra-version=0+deb11u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
[h264 @ 0x55d0c3b3bfc0] Reinit context to 1920x1088, pix_fmt: yuv420p
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VID_20230526_174925.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2023-05-26T15:49:25.000000Z
    com.android.version: 10
  Duration: 00:01:22.88, start: 0.000000, bitrate: 14784 kb/s
    Stream #0:0(eng): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(tv, bt709, left), 1920x1080 (1920x1088), 14517 kb/s, SAR 1:1 DAR 16:9, 29.69 fps, 29.75 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2023-05-26T15:49:25.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s (default)
    Metadata:
      creation_time   : 2023-05-26T15:49:25.000000Z
      handler_name    : SoundHandle
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (h264_qsv) -> wrapped_avframe (native))
  Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
[graph_1_in_0_1 @ 0x55d0c3ba67c0] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3
[format_out_0_1 @ 0x55d0c3b5f100] auto-inserting filter 'auto_resampler_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_1'
[auto_resampler_0 @ 0x55d0c3b81900] ch:2 chl:stereo fmt:fltp r:48000Hz -> ch:2 chl:stereo fmt:s16 r:48000Hz
[AVHWDeviceContext @ 0x55d0c3bb4640] Trying to use DRM render node for device 0, with matching kernel driver (i915).
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: VA-API version 1.10.0
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: User requested driver 'iHD'
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: Found init function __vaDriverInit_1_10
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x55d0c3bb4640] Initialised VAAPI connection: version 1.10
[AVHWDeviceContext @ 0x55d0c3bb4640] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 21.1.1 ().
[AVHWDeviceContext @ 0x55d0c3bb4640] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x55d0c3bbc080] Initialize MFX session: API version is 1.34, implementation version is 1.34
[AVHWDeviceContext @ 0x55d0c3d4d200] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 21.1.1 ().
[AVHWDeviceContext @ 0x55d0c3d4d200] Driver not found in known nonstandard list, using standard behaviour.
[h264_qsv @ 0x55d0c3b59940] Decoder: output is video memory surface
[AVHWDeviceContext @ 0x55d0c3d82640] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 21.1.1 ().
[AVHWDeviceContext @ 0x55d0c3d82640] Driver not found in known nonstandard list, using standard behaviour.
[h264_qsv @ 0x55d0c3b59940] Decoder: output is video memory surface
[graph 0 input from stream 0:0 @ 0x55d0c3da30c0] w:1920 h:1080 pixfmt:qsv tb:1/90000 fr:119/4 sar:1/1
[auto_scaler_0 @ 0x55d0c3d6f2c0] w:iw h:ih flags:'bicubic' interl:0
[transpose @ 0x55d0c3de3600] auto-inserting filter 'auto_scaler_0' between the filter 'graph 0 input from stream 0:0' and the filter 'transpose'
Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
[AVIOContext @ 0x55d0c3b43140] Statistics: 670703 bytes read, 3 seeks
Conversion failed!

Best Answer

It seems like this is just a good old ffmpeg bug.

The version in Debian bullseye is 4.3.5 and the upcoming version is 5.1.3 and with it all is working as expected except that the image is rotated which should not be the case :-D Cost me a day, super annoying.

Related Question