How to correctly install gstreamer plugins?

I am working on:
Dahlia Carrier Board
Verdin iMX8M Plus
Branch kirkstone-6.x.y

I wondered how I could correctly install the gstreamer plugins. Indeed, for my image, gst-inspect-1.0 shows this:

coreelements:  capsfilter: CapsFilter
coreelements:  clocksync: ClockSync
coreelements:  concat: Concat
coreelements:  dataurisrc: data: URI source element
coreelements:  downloadbuffer: DownloadBuffer
coreelements:  fakesink: Fake Sink
coreelements:  fakesrc: Fake Source
coreelements:  fdsink: Filedescriptor Sink
coreelements:  fdsrc: Filedescriptor Source
coreelements:  filesink: File Sink
coreelements:  filesrc: File Source
coreelements:  funnel: Funnel pipe fitting
coreelements:  identity: Identity
coreelements:  input-selector: Input selector
coreelements:  multiqueue: MultiQueue
coreelements:  output-selector: Output selector
coreelements:  queue: Queue
coreelements:  queue2: Queue 2
coreelements:  streamiddemux: Streamid Demux
coreelements:  tee: Tee pipe fitting
coreelements:  typefind: TypeFind
coreelements:  valve: Valve element
staticelements:  bin: Generic bin
staticelements:  pipeline: Pipeline object

Total count: 2 plugins, 24 features

And, find . -name "*libgst*" shows the plugin install folders:

./usr/lib/libgstbase-1.0.so.0
./usr/lib/libgstallocators-1.0.so.0.2000.0
./usr/lib/libgstvideo-1.0.so.0
./usr/lib/gstreamer-1.0/libgstcoreelements.so
./usr/lib/libgstreamer-1.0.so.0
./usr/lib/libgstvideo-1.0.so.0.2000.0
./usr/lib/libgstnet-1.0.so.0.2000.0
./usr/lib/libgstbase-1.0.so.0.2000.0
./usr/lib/libgstreamer-1.0.so.0.2000.0
./usr/lib/libgstapp-1.0.so.0.2000.0
./usr/lib/libgstnet-1.0.so.0
./usr/lib/libgstcheck-1.0.so.0
./usr/lib/libgstcheck-1.0.so.0.2000.0
./usr/lib/libgstallocators-1.0.so.0
./usr/lib/libgstcontroller-1.0.so.0
./usr/lib/libgstcontroller-1.0.so.0.2000.0
./usr/lib/libgstapp-1.0.so.0

As you can see, no plugins except core elements in the gstreamer-1.0/ folder. How would I go about getting all the plugins in there ?

I used a “packagegroup-tdx-graphical-no-vulkan.bb” which is the exact same as the “packagegroup-tdx-graphical.bb” without some vulkan packages (I did this for the toyota flutter embedder). I then have an image with:

IMAGE_INSTALL += " \
    (...) \
    packagegroup-tdx-graphical-no-vulkan \
    (...) \
"

I also tried by adding all packages directly to IMAGE_INSTALL:

gstreamer1.0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gst-examples \
imx-gst1.0-plugin \
imx-gst1.0-plugin-gplay \
imx-gst1.0-plugin-grecorder \
packagegroup-fsl-gstreamer1.0-full \

And now it works.

What am I missing when using this packagegroup-tdx-graphical-no-vulkan?

Thank you for your help.

Note:
I also tried with the reference multimedia image: Toradex Download Links (Torizon, Linux BSP, WinCE and Partner Demos) | Toradex Developer Center and the plugins are correctly installed inside the /usr/lib/gstreamer-1.0/ folder.

Hello @mnano
Can you please share with us your packagegroup-tdx-graphical-no-vulkan.bb recipe?

Best regards,
Josep

Here it is:

SUMMARY = "Packagegroups which provide graphical/display/multimedia releated packages"

PACKAGE_ARCH = "${MACHINE_ARCH}"

inherit packagegroup

PROVIDES = "${PACKAGES}"
PACKAGES += " \
    packagegroup-drm-utils-tdx-graphical \
    packagegroup-gstreamer-tdx-graphical \
    packagegroup-gpu-tdx-graphical \
    packagegroup-x11-components-tdx-graphical \
    packagegroup-x11-utils-tdx-graphical \
"

RRECOMMENDS:packagegroup-tdx-graphical = " \
    packagegroup-gstreamer-tdx-graphical \
    packagegroup-gpu-tdx-graphical \
    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '', \
       bb.utils.contains('DISTRO_FEATURES', 'x11', \
                         'packagegroup-x11-components-tdx-graphical \
                          packagegroup-x11-utils-tdx-graphical', \
                         '', d), d)} \
"
RRECOMMENDS:packagegroup-tdx-graphical:append:mx8-nxp-bsp = " \
    packagegroup-drm-utils-tdx-graphical \
"
RRECOMMENDS:packagegroup-tdx-graphical:append:upstream = " \
    packagegroup-drm-utils-tdx-graphical \
"

SUMMARY:packagegroup-drm-utils-tdx-graphical = "Utilities for DRM, Direct Rendering Manager"
RRECOMMENDS:packagegroup-drm-utils-tdx-graphical = " \
    libdrm-tests \
"

SUMMARY:packagegroup-gstreamer-tdx-graphical = "gstreamer packages"
RRECOMMENDS:packagegroup-gstreamer-tdx-graphical = "\
    gstreamer1.0 \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good \
    gstreamer1.0-plugins-bad \
    gst-examples \
"
GSTREAMER_MX6QDL = " \
    gstreamer1.0-plugins-base-ximagesink \
    gstreamer1.0-plugins-imx \
    imx-gst1.0-plugin \
    imx-gst1.0-plugin-gplay \
    imx-gst1.0-plugin-grecorder \
"
RRECOMMENDS:packagegroup-gstreamer-tdx-graphical:append:mx6dl-nxp-bsp = " ${GSTREAMER_MX6QDL}"
RRECOMMENDS:packagegroup-gstreamer-tdx-graphical:append:mx6q-nxp-bsp = " ${GSTREAMER_MX6QDL}"
RRECOMMENDS:packagegroup-gstreamer-tdx-graphical:colibri-imx6ull = ""
RRECOMMENDS:packagegroup-gstreamer-tdx-graphical:colibri-imx6ull-emmc = ""
RRECOMMENDS:packagegroup-gstreamer-tdx-graphical:append:mx7-nxp-bsp = " imx-gst1.0-plugin"
RRECOMMENDS:packagegroup-gstreamer-tdx-graphical:append:mx8-nxp-bsp = " \
    imx-gst1.0-plugin \
    imx-gst1.0-plugin-gplay \
    imx-gst1.0-plugin-grecorder \
    packagegroup-fsl-gstreamer1.0-full \
"

SUMMARY:packagegroup-gpu-utils-tdx-graphical = "Utilities for GPU (OpenGL...)"
IMAGE_INSTALL_OPENCL_IMX = " \
    clpeak \
    libopencl-imx \
"
RRECOMMENDS:packagegroup-gpu-tdx-graphical = " \
    glmark2 \
"
IMAGE_INSTALL_GPU_MX6QDL = " \
    packagegroup-fsl-gpu-libs \
"
RRECOMMENDS:packagegroup-gpu-tdx-graphical:append:mx6dl-nxp-bsp = " \
    ${IMAGE_INSTALL_GPU_MX6QDL} \
"
RRECOMMENDS:packagegroup-gpu-tdx-graphical:append:mx6q-nxp-bsp = " \
    ${IMAGE_INSTALL_GPU_MX6QDL} \
    ${IMAGE_INSTALL_OPENCL_IMX} \
"
RRECOMMENDS:packagegroup-gpu-tdx-graphical:colibri-imx6ull = ""
RRECOMMENDS:packagegroup-gpu-tdx-graphical:colibri-imx6ull-emmc = ""
RRECOMMENDS:packagegroup-gpu-tdx-graphical:append:mx8-nxp-bsp = " \
    tinycompress \
    libvdk-imx \
    vulkan-headers \
    ${IMAGE_INSTALL_OPENCL_IMX} \
"
RRECOMMENDS:packagegroup-gpu-tdx-graphical:remove:mx8mm-nxp-bsp = " \
    vulkan \
    ${IMAGE_INSTALL_OPENCL_IMX} \
"
RRECOMMENDS:packagegroup-gpu-tdx-graphical:append:mx8qm-nxp-bsp = " \
    libopenvx-imx \
"

SUMMARY:packagegroup-x11-components-tdx-graphical = "Components of X11"
RRECOMMENDS:packagegroup-x11-components-tdx-graphical = "\
    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '', \
       bb.utils.contains('DISTRO_FEATURES', 'x11', \
       'libxcursor \
        libxdamage \
        libxres \
        libxvmc \
        xcursor-transparent-theme \
        xorg-minimal-fonts \
        xrdb \
        xserver-xorg-extension-dbe \
        xserver-xorg-extension-extmod \
        xserver-xorg-multimedia-modules \
        xserver-xorg-utils', \
       '', d), d)} \
"

SUMMARY:packagegroup-x11-utils-tdx-graphical = "Utilities for X11"
RRECOMMENDS:packagegroup-x11-utils-tdx-graphical = " \
    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '', \
       bb.utils.contains('DISTRO_FEATURES', 'x11', \
       'scrot \
        setxkbmap \
        unclutter', \
       '', d), d)} \
"

Hi @mnano

Please note that the plugins you list are just listed as RRECOMMEND in packegroup-gstreamer-tdx-graphical. Here you might find some more information:
https://docs.yoctoproject.org/ref-manual/variables.html#term-RRECOMMENDS

I might not fully understand the problem. Another way to figure out the dependencies might be to use bitbake -g . This will create a dot file that shows the dependency chain.

Regards,
Stefan

Hello,

Your are 100% correct. I missed the obvious, this was just because of some missing RDEPENDS.

Thank you for your time.

Hello @mnano ,
We are glad that you were able to solve your problem.
May we ask you to describe the steps that you took, in case another user faces a similar problem?

Best regards,
Josep

Hello,

I just added:

RDPENDS:${PN} = "gstreamer1.0 gstreamer1.0-plugins-base (...)" # + all other packages

to the bitbake recipe of the package that needs it.