Building gstreamer-vaapi headless, against current libva/i965 build

Philipp B philippb.ontour at gmail.com
Sun Mar 6 20:20:42 UTC 2022


Hi!

I am trying to build gstreamer 1.20 from source with gstreamer-vaapi,
in headless mode (drm only), against all required vaapi dependencies
built from source, provided in non-system directories.

vainfo seems happy so far:

-------------------------------------------------------------------------------
libva info: VA-API version 1.15.0
libva info: User environment variable requested driver 'i965'
libva info: Trying to open
/home/ubuntu/streamer-bot/build/install_libva/lib/dri//i965_drv_video.so
libva info: Found init function __vaDriverInit_1_15
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.15 (libva 2.15.0.pre1)
vainfo: Driver version: Intel i965 driver for Intel(R) Haswell Mobile
- 2.4.0.pre1 (2.4.0.pre1)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264MultiviewHigh      : VAEntrypointVLD
      VAProfileH264MultiviewHigh      : VAEntrypointEncSlice
      VAProfileH264StereoHigh         : VAEntrypointVLD
      VAProfileH264StereoHigh         : VAEntrypointEncSlice
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileJPEGBaseline           : VAEntrypointVLD
-------------------------------------------------------------------------------

For gstreamer build, I am pointing meson to the correct path via
PKG_CONFIG_PATH. I set -Dvaapi=enabled.

However, gstreamer-vaapi seems not to work. I do see libgstvaapi.so
that has been build.

All tests are done with proper LD_LIBRARY_PATH set. VA driver path has
been set at libva built time, so that libva finds the driver without
LIBVA_DRIVERS_PATH being set at runtime. (I tested with and without
LIBVA_DRIVERS_PATH set).

gst-inspect-1.0 does not list anything containing vaapi, no matter if
I add -a option or not.

At runtime of my application (that kinda worked, to some point, with
outdated drivers, but never really rendered frames), I spot
> Added plugin 'libgstvaapi.so' plugin with 0 features from binary registry
(with verbose logs, grepping for vaapi).

Is this a clear indication that libgstvaapi.so is just something like
an empty shell?

Looking in the meson logs, I see


-------------------------------------------------------------------------------
Determining dependency 'libva' with pkg-config executable '/usr/bin/pkg-config'
env[PKG_CONFIG_PATH]:
/home/ubuntu/streamer-bot/build/install_libva/lib/pkgconfig
Called `/usr/bin/pkg-config --modversion libva` -> 0
1.15.0
env[PKG_CONFIG_PATH]:
/home/ubuntu/streamer-bot/build/install_libva/lib/pkgconfig
Called `/usr/bin/pkg-config --cflags libva` -> 0
-I/home/ubuntu/streamer-bot/build/install_libva/include
env[PKG_CONFIG_PATH]:
/home/ubuntu/streamer-bot/build/install_libva/lib/pkgconfig
env[PKG_CONFIG_ALLOW_SYSTEM_LIBS]: 1
Called `/usr/bin/pkg-config --libs libva` -> 0
-L/home/ubuntu/streamer-bot/build/install_libva/lib -lva
env[PKG_CONFIG_PATH]:
/home/ubuntu/streamer-bot/build/install_libva/lib/pkgconfig
Called `/usr/bin/pkg-config --libs libva` -> 0
-L/home/ubuntu/streamer-bot/build/install_libva/lib -lva
Run-time dependency libva found: YES 1.15.0
Pkg-config binary for 1 is cached.
Determining dependency 'libva-drm' with pkg-config executable
'/usr/bin/pkg-config'
env[PKG_CONFIG_PATH]:
/home/ubuntu/streamer-bot/build/install_libva/lib/pkgconfig
Called `/usr/bin/pkg-config --modversion libva-drm` -> 0
1.15.0
env[PKG_CONFIG_PATH]:
/home/ubuntu/streamer-bot/build/install_libva/lib/pkgconfig
Called `/usr/bin/pkg-config --cflags libva-drm` -> 0
-I/home/ubuntu/streamer-bot/build/install_libva/include
env[PKG_CONFIG_PATH]:
/home/ubuntu/streamer-bot/build/install_libva/lib/pkgconfig
env[PKG_CONFIG_ALLOW_SYSTEM_LIBS]: 1
Called `/usr/bin/pkg-config --libs libva-drm` -> 0
-L/home/ubuntu/streamer-bot/build/install_libva/lib -lva-drm -lva
env[PKG_CONFIG_PATH]:
/home/ubuntu/streamer-bot/build/install_libva/lib/pkgconfig
Called `/usr/bin/pkg-config --libs libva-drm` -> 0
-L/home/ubuntu/streamer-bot/build/install_libva/lib -lva-drm -lva
Run-time dependency libva-drm found: YES 1.15.0
Pkg-config binary for 1 is cached.
-------------------------------------------------------------------------------

but also

h264_vaapi_encoder=0
h264_vaapi_hwaccel=0
...
vaapi_1=0
...
h264_vaapi_encoder=cbs_h264,cbs
h264_vaapi_hwaccel=h264_decoder,atsc_a53,cabac,golomb,h264chroma,h264dsp,h264parse,h264pred,h264qpel,videodsp,error_resilience,me_cmp
...
gstreamer-vaapi           : YES 1 warnings
-------------------------------------------------------------------------------

(h264enc is what I want to use)

A few questions here:
- am I correct this is a configure-time problem?
- Is gstreamer expected to work with VA-API version: 1.15 ?
previous (bad) builds I tried were configured against outdated system
libs, trying to load current driver with them ended in symbol
__vaDriverInit_1_15 not being used, because gstreamer looked for
__vaDriverInit_1_0 (although the matching libva version was loaded
fine).
 am not a gstreamer expert, but with with that experience, seeing
"vaapi_1=0" in the configure logs made me suspicous, meson still looks
for 1_0.
- in case gstreamer is not expected to work with api version 1.15,
whats the latest version of
https://github.com/intel/intel-vaapi-driver gstreamer is expected to
work with? Should I use a corresponding libav version?
- If this is a configure-time problem, how can I debug best, what the
actual problem is
- if this is a run-time problem, how can I debug best why a module
does not initialize as expected?

Thanks for any help!
Philipp


More information about the gstreamer-devel mailing list