vaapidecodebin should default to disable-vpp mode if vaapipostproc element is missing
On an Ubuntu 23.04 system with a Intel Kaby Lake CPU, I receive the following error when trying to play an MP4 video through Totem:
GStreamer element vaapipostproc is required to play the file, but it is not installed
This is using the VA-API drivers from the intel-media-va-driver package (i.e. intel media-driver compiled with ENABLE_NONFREE_KERNELS=OFF
). In this configuration, VA-API post processing is not supported for this generation of CPU, so the vaapipostproc
element is not made available by the plugin:
$ vainfo
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_17
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.17 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 23.1.2 ()
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
It seems the attempt to create the vaapipostproc
element occurs within vaapidecodebin
, where it goes on to post the missing element message:
This seems like an odd thing to do: there is no other GStreamer plugin I could install that would make the element available, since both elements belong to the same plugin.
The element includes a code path to run without vaapipostproc
, which I can force by setting GST_VAAPI_DISABLE_VPP=1
. Doing so lets Totem play the video correctly. It would seem sensible to default to this mode when the plugin knows that it won't be able to create the element instead of posting the missing element message.