Page 1 of 1

lossless H264 hardware decoding fails on Intel UHD 630

Posted: 30 May 2024 12:22
by rugdeporter
Given:

Code: Select all

VGA compatible controller: Intel Corporation CoffeeLake-S GT2 [UHD Graphics 630] Kernel 6.9.2 $ vainfo Trying display: wayland vainfo: VA-API version: 1.21 (libva 2.21.0) vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.2.3 () [...] VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileH264High : VAEntrypointFEI VAProfileH264High : VAEntrypointEncSliceLP $ vlc --version VLC media player 3.0.20 Vetinari (revision 3.0.20-0-g6f0d0ab126b) VLC-Version 3.0.20 Vetinari (3.0.20-0-g6f0d0ab126b)
Testsample was created like this:

Code: Select all

#video source is https://commons.wikimedia.org/wiki/File:Hubble_Maps_Jupiter_in_4k_Ultra_HD.webm # #ffmpeg version n6.1.1 Copyright (c) 2000-2023 the FFmpeg developers #built with gcc 13.2.1 (GCC) 20230801 #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-libfreetype --enable-libfribidi --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-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-vapoursynth --enable-version3 --enable-vulkan #libavutil 58. 29.100 / 58. 29.100 #libavcodec 60. 31.102 / 60. 31.102 #libavformat 60. 16.100 / 60. 16.100 #libavdevice 60. 3.100 / 60. 3.100 #libavfilter 9. 12.100 / 9. 12.100 #libswscale 7. 5.100 / 7. 5.100 #libswresample 4. 12.100 / 4. 12.100 #libpostproc 57. 3.100 / 57. 3.100 wget "https://upload.wikimedia.org/wikipedia/commons/5/5a/Hubble_Maps_Jupiter_in_4k_Ultra_HD.webm" ffmpeg -y -i Hubble_Maps_Jupiter_in_4k_Ultra_HD.webm -to 00:10 -map 0:v:0 -filter:v "scale=400:224" -c:v libx264 -crf 0 out_crf_0.mkv ffmpeg -y -i Hubble_Maps_Jupiter_in_4k_Ultra_HD.webm -to 00:10 -map 0:v:0 -filter:v "scale=400:224" -c:v libx264 -crf 1 out_crf_1.mkv
Samples are here:

https://files.catbox.moe/y04qo0.mkv - out_crf_0.mkv - lossless
https://files.catbox.moe/x5dumz.mkv - out_crf_1.mkv - not lossless

CRF 1 plays properly:

Image

CRF 0 does not:

Image

Playing this media in MPV e.g. gives us the following warning from libav about hardware decoding when playing crf_0:

Code: Select all

[vd] Trying hardware decoding via h264-vaapi. [vd] Pixel formats supported by decoder: vdpau vulkan cuda vaapi yuv420p [vd] Codec profile: High 4:4:4 Predictive (0xf4) [vd] Hardware decoding of this stream is unsupported? [vd] Requesting pixfmt 'yuv420p' from decoder. [vd] Selected codec: H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 [vf] User filter list: [vf] (empty) [cplayer] Starting playback... [vd] Attempting next decoding method after failure of h264-vaapi. [vd] Using software decoding.
For comparison, playing crf_1 works:

Code: Select all

[vd] Trying hardware decoding via h264-vaapi. [vd] Pixel formats supported by decoder: vdpau vulkan cuda vaapi yuv420p [vd] Codec profile: High (0x64) [vd] Requesting pixfmt 'vaapi' from decoder. [vd] Selected codec: H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 [vf] User filter list: [vf] (empty) [cplayer] Starting playback...
VLC unfortunately wouldn't be more verbose than...

Code: Select all

main debug: using hw decoder module "vaapi" avcodec: Using Intel iHD driver for Intel(R) Gen Graphics - 24.2.3 () for hardware decoding main debug: Received first picture
The expected behaviour would be for VLC to fall back to a software decoder as MPV did.