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

Philipp B philippb.ontour at gmail.com
Mon Mar 7 16:51:47 UTC 2022


Thanks that was helpful!

GST_REGISTRY= pointed me in the right direction. vaapi plugin was just
blacklisted from an older test run, deleting
~/.cache/gstreamer-1.0/registry.x86_64.bin fixed it.
(now I'm back to another problem with my pipeline, but Ill post
another question if required...)

Am Mo., 7. März 2022 um 16:46 Uhr schrieb Victor Jaquez via
gstreamer-devel <gstreamer-devel at lists.freedesktop.org>:
>
> Hi,
>
> Answers inlined, but first you can refer to
> https://blogs.igalia.com/vjaquez/2018/03/28/gstreamer-va-api-troubleshooting/
> for a preamble.
>
> On Sun, 06 Mar 2022 at 21:20, Philipp B via gstreamer-devel wrote:
> > 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).
>
> I won't be that sure. VA utils might work but 3rd party code might not
> because it doesn't know the driver path or the driver name. Read the
> blog post.
>
> >
> > 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?
>
> It's a runtime problem.
>
> The mentioned log messages, iiuc, belongs to ffmpeg compilation, where
> all non-sofware-based codecs are disabled, because their buffers
> cannot be processed outside of ffmpeg.
>
> Run
>
> $ GST_REGISTRY= GST_DEBUG=va*:8 gst-inspect-1.0 path/to/libgstvaapi.so
>
> And you'll get a the log when gstreamer-vaapi tries to register its
> elements and how it fails in your case.
>
> > - Is gstreamer expected to work with VA-API version: 1.15 ?
>
> Yes.
>
> > 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.
>
> Sorry, I don't understand this paragraph.
>
> > - 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?
>
> It should work with 1.15.
>
> > Should I use a corresponding libav version?
>
> did you mean libva?
>
>
> > - If this is a configure-time problem, how can I debug best, what the
> > actual problem is
>
> It's a problem in runtime, when the plugin tries to register the
> elements that the driver can handle.
>
> > - if this is a run-time problem, how can I debug best why a module
> > does not initialize as expected?
>
> Run the gst-inspect-1.0 command above and check for erro logs.
>
> vmjl


More information about the gstreamer-devel mailing list