> -----Original Message----- > From: [email protected] > <[email protected]> On Behalf Of Taruntej Kanakamalla > via lists.openembedded.org > Sent: den 11 maj 2026 15:35 > To: [email protected] > Cc: [email protected]; [email protected]; Taruntej Kanakamalla > <[email protected]> > Subject: [OE-core] [PATCH] gstreamer1.0-plugins-rs: add new package > > Adapted from an existing patch: > https://patchwork.yoctoproject.org/project/oe-core/patch/[email protected] > > Update the recipe to track the latest upstream release of the official > GStreamer Rust plugins. > > Extend do_configure to handle the virtual manifest, as this is a > Cargo workspace project. > > Unlike the other GStreamer submodules, the Rust plugins follow a > separate release cycle and versioning scheme. These plugins are fully > stable and required for a fully-featured GStreamer installation, as most > new features and plugins are being written in Rust. They are also shipped > by multiple Linux distributions such as Fedora. > > Based on patch by: Bartosz Golaszewski <[email protected]> > > Signed-off-by: Taruntej Kanakamalla <[email protected]> > --- > .../gstreamer1.0-plugins-rs-crates.inc | 1940 +++++++++++++++++ > .../gstreamer1.0-plugins-rs_0.15.2.bb | 339 +++ > 2 files changed, 2279 insertions(+) > create mode 100644 > meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs-crates.inc > create mode 100644 > meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs_0.15.2.bb > > diff --git > a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs-crates.inc > b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs-crates.inc > new file mode 100644 > index 0000000000..6440360a5d > --- /dev/null > +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs-crates.inc > @@ -0,0 +1,1940 @@ > +# Autogenerated with 'bitbake -c update_crates gstreamer1.0-plugins-rs' > + > +# from Cargo.lock > +SRC_URI += " \
[cut] > +" > + > +SRC_URI[addr2line-0.25.1.sha256sum] = > "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" [cut] > +SRC_URI[zstd-sys-2.0.16+zstd.1.5.7.sha256sum] = > "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" > diff --git > a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs_0.15.2.bb > b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs_0.15.2.bb > new file mode 100644 > index 0000000000..f3bdb51e4e > --- /dev/null > +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs_0.15.2.bb > @@ -0,0 +1,339 @@ > +SUMMARY = "GStreamer Rust Plugins" > +HOMEPAGE = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs" > +LICENSE = "MIT & MPL-2.0 & Apache-2.0" > + > +LIC_FILES_CHKSUM = " \ > + file://LICENSE-MIT;md5=b377b220f43d747efdec40d69fcaa69d \ > + file://LICENSE-MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad \ > + file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ > +" > + > +SRC_URI = " \ > + > git://gitlab.freedesktop.org/gstreamer/gst-plugins-rs;protocol=https;branch=0.15;name=default > \ > + > git://github.com/gtk-rs/gtk4-rs;protocol=https;branch=0.11;name=gtk4-rs;destsuffix=gtk4-rs > \ > + > git://github.com/gtk-rs/gtk-rs-core;protocol=https;branch=0.22;name=gtk-rs-core;destsuffix=gtk-rs-core > \ > + > git://github.com/rust-av/ffv1.git;protocol=https;nobranch=1;name=ffv1;destsuffix=ffv1 > \ > + > git://github.com/rust-av/flavors;protocol=https;nobranch=1;name=flavors;destsuffix=flavors > \ > + > git://gitlab.freedesktop.org/gstreamer/gstreamer-rs;protocol=https;branch=0.25;name=gstreamer-rs;destsuffix=gstreamer-rs > \ > +" > + > +SRCREV_default = "1d5931d5f28d4f7bc9dc53e53f2852c3d716044c" > +SRCREV_gtk4-rs = "12259c689cf3278ace2b82452cbcaba8c4942020" > +SRCREV_gtk-rs-core = "484fbe01e74fc880cf9d5ed10c33a38747044a42" > +SRCREV_ffv1 = "bd9eabfc14c9ad53c37b32279e276619f4390ab8" > +SRCREV_flavors = "833508af656d298c269f2397c8541a084264d992" > +SRCREV_gstreamer-rs = "3d56963cfca15dffd2a34d2be91ceefa6ad3fc40" > + > +SRCREV_FORMAT = "default_gtk4-rs_gtk-rs-core_ffv1_flavors_gstreamer-rs" > + > +inherit cargo cargo-update-recipe-crates pkgconfig > + > +require ${BPN}-crates.inc > + > +DEPENDS = " \ > + glib-2.0 \ > + gstreamer1.0 \ > + gstreamer1.0-plugins-good \ > + gstreamer1.0-plugins-bad \ > + gstreamer1.0-plugins-base \ > + gst-devtools \ > + gtk4 \ > +" > + > +# This fix appends to the cargo_common_do_patch_paths to correctly handle > +# workspace git dependencies (repos with virtual manifests). > +# > +# The default cargo_common.bbclass generates [patch] entries that point > +# to the workspace root, which causes: > +# "found a virtual manifest at ... instead of a package manifest" > +# > +# TODO: this logic could be added in the original cargo_common_do_patch_paths > +# function of cargo_common.bbclass file in a generic way. Some care needs to > +# be taken to make it traverse through all the subdirectories (like > +# gstreamer-rs/gstreamer-gl/x11, gstreamer-rs/gstreamer-gl/wayland etc) and > fetch the > +# package names and their paths correctly > +# > +python cargo_common_do_patch_paths:append() { > + import re > + > + cargo_config = os.path.join(d.getVar("CARGO_HOME"), "config.toml") > + workdir = d.getVar("UNPACKDIR") > + > + with open(cargo_config, 'r') as f: > + content = f.read() > + > + # Remove auto-generated [patch] sections for workspace repos > + content = > re.sub(r'\[patch\."https://gitlab\.freedesktop\.org/gstreamer/gstreamer-rs"\][^\[]*', > '', content) > + content = > re.sub(r'\[patch\."https://github\.com/gtk-rs/gtk-rs-core"\][^\[]*', '', > content) > + content = > re.sub(r'\[patch\."https://github\.com/gtk-rs/gtk4-rs"\][^\[]*', '', content) > + content = > re.sub(r'\[patch\."https://github\.com/rust-av/ffv1\.git"\][^\[]*', '', > content) > + content = > re.sub(r'\[patch\."https://github\.com/rust-av/flavors"\][^\[]*', '', content) > + > + with open(cargo_config, 'w') as f: > + f.write(content) > + > + gst = workdir + "/gstreamer-rs" > + gtk_core = workdir + "/gtk-rs-core" > + gtk4 = workdir + "/gtk4-rs" > + > + with open(cargo_config, 'a') as f: > + > print(f'[patch."https://gitlab.freedesktop.org/gstreamer/gstreamer-rs"]', > file=f) > + print(f'gstreamer = {{ path = "{gst}/gstreamer" }}', file=f) > + print(f'gstreamer-allocators = {{ path = > "{gst}/gstreamer-allocators" }}', file=f) > + print(f'gstreamer-analytics = {{ path = "{gst}/gstreamer-analytics" > }}', file=f) > + print(f'gstreamer-app = {{ path = "{gst}/gstreamer-app" }}', file=f) > + print(f'gstreamer-audio = {{ path = "{gst}/gstreamer-audio" }}', > file=f) > + print(f'gstreamer-base = {{ path = "{gst}/gstreamer-base" }}', > file=f) > + print(f'gstreamer-check = {{ path = "{gst}/gstreamer-check" }}', > file=f) > + print(f'gstreamer-gl = {{ path = "{gst}/gstreamer-gl" }}', file=f) > + print(f'gstreamer-gl-egl = {{ path = "{gst}/gstreamer-gl/egl" }}', > file=f) > + print(f'gstreamer-gl-wayland = {{ path = > "{gst}/gstreamer-gl/wayland" }}', file=f) > + print(f'gstreamer-gl-x11 = {{ path = "{gst}/gstreamer-gl/x11" }}', > file=f) > + print(f'gstreamer-net = {{ path = "{gst}/gstreamer-net" }}', file=f) > + print(f'gstreamer-pbutils = {{ path = "{gst}/gstreamer-pbutils" }}', > file=f) > + print(f'gstreamer-rtp = {{ path = "{gst}/gstreamer-rtp" }}', file=f) > + print(f'gstreamer-sdp = {{ path = "{gst}/gstreamer-sdp" }}', file=f) > + print(f'gstreamer-tag = {{ path = "{gst}/gstreamer-tag" }}', file=f) > + print(f'gstreamer-utils = {{ path = "{gst}/gstreamer-utils" }}', > file=f) > + print(f'gstreamer-validate = {{ path = "{gst}/gstreamer-validate" > }}', file=f) > + print(f'gstreamer-video = {{ path = "{gst}/gstreamer-video" }}', > file=f) > + print(f'gstreamer-webrtc = {{ path = "{gst}/gstreamer-webrtc" }}', > file=f) > + > + print(f'[patch."https://github.com/gtk-rs/gtk-rs-core"]', file=f) > + print(f'cairo-rs = {{ path = "{gtk_core}/cairo" }}', file=f) > + print(f'cairo-sys-rs = {{ path = "{gtk_core}/cairo/sys" }}', file=f) > + print(f'gdk-pixbuf = {{ path = "{gtk_core}/gdk-pixbuf" }}', file=f) > + print(f'gdk-pixbuf-sys = {{ path = "{gtk_core}/gdk-pixbuf/sys" }}', > file=f) > + print(f'gio = {{ path = "{gtk_core}/gio" }}', file=f) > + print(f'gio-sys = {{ path = "{gtk_core}/gio/sys" }}', file=f) > + print(f'glib = {{ path = "{gtk_core}/glib" }}', file=f) > + print(f'glib-macros = {{ path = "{gtk_core}/glib-macros" }}', file=f) > + print(f'glib-sys = {{ path = "{gtk_core}/glib/sys" }}', file=f) > + print(f'gobject-sys = {{ path = "{gtk_core}/glib/gobject-sys" }}', > file=f) > + print(f'graphene-rs = {{ path = "{gtk_core}/graphene" }}', file=f) > + print(f'graphene-sys = {{ path = "{gtk_core}/graphene/sys" }}', > file=f) > + print(f'pango = {{ path = "{gtk_core}/pango" }}', file=f) > + print(f'pango-sys = {{ path = "{gtk_core}/pango/sys" }}', file=f) > + print(f'pangocairo = {{ path = "{gtk_core}/pangocairo" }}', file=f) > + print(f'pangocairo-sys = {{ path = "{gtk_core}/pangocairo/sys" }}', > file=f) > + > + print(f'[patch."https://github.com/gtk-rs/gtk4-rs"]', file=f) > + print(f'gdk4 = {{ path = "{gtk4}/gdk4" }}', file=f) > + print(f'gdk4-wayland = {{ path = "{gtk4}/gdk4-wayland" }}', file=f) > + print(f'gdk4-x11 = {{ path = "{gtk4}/gdk4-x11" }}', file=f) > + print(f'gdk4-win32 = {{ path = "{gtk4}/gdk4-win32" }}', file=f) > + print(f'gsk4 = {{ path = "{gtk4}/gsk4" }}', file=f) > + print(f'gtk4 = {{ path = "{gtk4}/gtk4" }}', file=f) > + print(f'gtk4-macros = {{ path = "{gtk4}/gtk4-macros" }}', file=f) > + > + print(f'[patch."https://github.com/rust-av/flavors"]', file=f) > + print(f'flavors = {{ path = "{workdir}/flavors" }}', file=f) > + > + print(f'[patch."https://github.com/rust-av/ffv1.git"]', file=f) > + print(f'ffv1 = {{ path = "{workdir}/ffv1" }}', file=f) > +} > + > +do_configure:append() { > + > + # Remove any existing patch sections of gtk-rs-core > + sed -i > '/\[patch\."https:\/\/github\.com\/gtk-rs\/gtk-rs-core"\]/,/^$/d' > ${UNPACKDIR}/gstreamer-rs/Cargo.toml > + sed -i > '/\[patch\."https:\/\/github\.com\/gtk-rs\/gtk-rs-core"\]/,/^$/d' > ${UNPACKDIR}/gtk4-rs/Cargo.toml > + > + GTK_CORE_PATCH=" > +[patch.\"https://github.com/gtk-rs/gtk-rs-core\"] > +cairo-rs = { path = \"${UNPACKDIR}/gtk-rs-core/cairo\" } > +cairo-sys-rs = { path = \"${UNPACKDIR}/gtk-rs-core/cairo/sys\" } > +gdk-pixbuf = { path = \"${UNPACKDIR}/gtk-rs-core/gdk-pixbuf\" } > +gdk-pixbuf-sys = { path = \"${UNPACKDIR}/gtk-rs-core/gdk-pixbuf/sys\" } > +gio = { path = \"${UNPACKDIR}/gtk-rs-core/gio\" } > +gio-sys = { path = \"${UNPACKDIR}/gtk-rs-core/gio/sys\" } > +glib = { path = \"${UNPACKDIR}/gtk-rs-core/glib\" } > +glib-macros = { path = \"${UNPACKDIR}/gtk-rs-core/glib-macros\" } > +glib-sys = { path = \"${UNPACKDIR}/gtk-rs-core/glib/sys\" } > +gobject-sys = { path = \"${UNPACKDIR}/gtk-rs-core/glib/gobject-sys\" } > +graphene-rs = { path = \"${UNPACKDIR}/gtk-rs-core/graphene\" } > +graphene-sys = { path = \"${UNPACKDIR}/gtk-rs-core/graphene/sys\" } > +pango = { path = \"${UNPACKDIR}/gtk-rs-core/pango\" } > +pango-sys = { path = \"${UNPACKDIR}/gtk-rs-core/pango/sys\" } > +pangocairo = { path = \"${UNPACKDIR}/gtk-rs-core/pangocairo\" } > +pangocairo-sys = { path = \"${UNPACKDIR}/gtk-rs-core/pangocairo/sys\" }" > + > + echo "$GTK_CORE_PATCH" >> ${UNPACKDIR}/gstreamer-rs/Cargo.toml > + echo "$GTK_CORE_PATCH" >> ${UNPACKDIR}/gtk4-rs/Cargo.toml > +} > + > +# Tutorial > +PACKAGECONFIG[tutorial] = "-p gst-plugin-tutorial" > + > +# Version helper > +PACKAGECONFIG[version-helper] = "-p gst-plugin-version-helper" > + > +# Analytics > +PACKAGECONFIG[analytics] = "-p gst-plugin-analytics" > +PACKAGECONFIG[burn] = "-p gst-plugin-burn" > + > +# Audio > +PACKAGECONFIG[audioparsers] = "-p gst-plugin-audioparsers" > +PACKAGECONFIG[audiofx] = "-p gst-plugin-audiofx" > +PACKAGECONFIG[claxon] = "-p gst-plugin-claxon" > +PACKAGECONFIG[csound] = "-p gst-plugin-csound" > +PACKAGECONFIG[demucs] = "-p gst-plugin-demucs" > +PACKAGECONFIG[elevenlabs] = "-p gst-plugin-elevenlabs" > +PACKAGECONFIG[lewton] = "-p gst-plugin-lewton" > +PACKAGECONFIG[spotify] = "-p gst-plugin-spotify" > +PACKAGECONFIG[speechmatics] = "-p gst-plugin-speechmatics" > +PACKAGECONFIG[whisper] = "-p gst-plugin-whisper" > + > +# Generic > +PACKAGECONFIG[file] = "-p gst-plugin-file" > +PACKAGECONFIG[originalbuffer] = "-p gst-plugin-originalbuffer" > +PACKAGECONFIG[gopbuffer] = "-p gst-plugin-gopbuffer" > +PACKAGECONFIG[sodium] = "-p gst-plugin-sodium" > +PACKAGECONFIG[threadshare] = "-p gst-plugin-threadshare" > +PACKAGECONFIG[inter] = "-p gst-plugin-inter" > +PACKAGECONFIG[streamgrouper] = "-p gst-plugin-streamgrouper" > + > +# Mux > +PACKAGECONFIG[flavors] = "-p gst-plugin-flavors" > +PACKAGECONFIG[isobmff] = "-p gst-plugin-isobmff" > + > +# Net > +PACKAGECONFIG[aws] = "-p gst-plugin-aws" > +PACKAGECONFIG[deepgram] = "-p gst-plugin-deepgram" > +PACKAGECONFIG[hlsmultivariantsink] = "-p gst-plugin-hlsmultivariantsink" > +PACKAGECONFIG[hlssink3] = "-p gst-plugin-hlssink3" > +PACKAGECONFIG[icecast] = "-p gst-plugin-icecast" > +PACKAGECONFIG[mpegtslive] = "-p gst-plugin-mpegtslive" > +PACKAGECONFIG[ndi] = "-p gst-plugin-ndi" > +PACKAGECONFIG[onvif] = "-p gst-plugin-onvif" > +PACKAGECONFIG[raptorq] = "-p gst-plugin-raptorq" > +PACKAGECONFIG[reqwest] = "-p gst-plugin-reqwest" > +PACKAGECONFIG[rtsp] = "-p gst-plugin-rtsp" > +PACKAGECONFIG[rtp] = "-p gst-plugin-rtp" > +PACKAGECONFIG[webrtc] = "-p gst-plugin-webrtc" > +PACKAGECONFIG[webrtc-signalling] = "-p gst-plugin-webrtc-signalling" > +PACKAGECONFIG[webrtc-signalling-protocol] = "-p > gst-plugin-webrtc-signalling-protocol" > +PACKAGECONFIG[webrtchttp] = "-p gst-plugin-webrtchttp" > +PACKAGECONFIG[quinn] = "-p gst-plugin-quinn" > + > +# Text > +PACKAGECONFIG[textaccumulate] = "-p gst-plugin-textaccumulate" > +PACKAGECONFIG[textahead] = "-p gst-plugin-textahead" > +PACKAGECONFIG[json] = "-p gst-plugin-json" > +PACKAGECONFIG[regex] = "-p gst-plugin-regex" > +PACKAGECONFIG[textwrap] = "-p gst-plugin-textwrap" > + > +# Utils > +PACKAGECONFIG[fallbackswitch] = "-p gst-plugin-fallbackswitch" > +PACKAGECONFIG[livesync] = "-p gst-plugin-livesync" > +PACKAGECONFIG[debugseimetainserter] = "-p gst-plugin-debugseimetainserter" > +PACKAGECONFIG[togglerecord] = "-p gst-plugin-togglerecord" > +PACKAGECONFIG[tracers] = "-p gst-plugin-tracers" > +PACKAGECONFIG[uriplaylistbin] = "-p gst-plugin-uriplaylistbin" > +PACKAGECONFIG[validate] = "-p gst-plugin-validate" > + > +# Video > +PACKAGECONFIG[cdg] = "-p gst-plugin-cdg" > +PACKAGECONFIG[closedcaption] = "-p gst-plugin-closedcaption" > +# need dav1d recipe meta-openembedded/meta-multimedia > +PACKAGECONFIG[dav1d] = "-p gst-plugin-dav1d,,dav1d, dav1d" > +PACKAGECONFIG[ffv1] = "-p gst-plugin-ffv1" > +PACKAGECONFIG[gif] = "-p gst-plugin-gif" > +PACKAGECONFIG[gtk4] = "-p gst-plugin-gtk4" > +PACKAGECONFIG[hsv] = "-p gst-plugin-hsv" > +PACKAGECONFIG[png] = "-p gst-plugin-png" > +PACKAGECONFIG[rav1e] = "-p gst-plugin-rav1e" > +PACKAGECONFIG[skia] = "-p gst-plugin-skia" > +PACKAGECONFIG[videofx] = "-p gst-plugin-videofx" > +PACKAGECONFIG[vvdec] = "-p gst-plugin-vvdec" > +PACKAGECONFIG[webp] = "-p gst-plugin-webp" > + > + > +# Default members > +PACKAGECONFIG ??= " \ > + tutorial \ > + version-helper \ > + analytics \ > + burn \ > + audiofx \ > + audioparsers \ > + claxon \ > + demucs \ > + elevenlabs \ > + lewton \ > + speechmatics \ > + spotify \ > + file \ > + originalbuffer \ > + sodium \ > + threadshare \ > + rtp \ > + inter \ > + streamgrouper \ > + gopbuffer \ > + flavors \ > + isobmff \ > + aws \ > + deepgram \ > + hlsmultivariantsink \ > + hlssink3 \ > + icecast \ > + mpegtslive \ > + ndi \ > + onvif \ > + raptorq \ > + reqwest \ > + rtsp \ > + webrtchttp \ > + webrtc \ > + webrtc-signalling-protocol \ > + webrtc-signalling \ > + quinn \ > + textaccumulate \ > + textahead \ > + json \ > + regex \ > + textwrap \ > + fallbackswitch \ > + gtk4 \ > + livesync \ > + debugseimetainserter \ > + togglerecord \ > + tracers \ > + uriplaylistbin \ > + validate \ > + cdg \ > + closedcaption \ > + dav1d \ > + ffv1 \ > + gif \ > + hsv \ > + png \ > + rav1e \ > + videofx \ > + webp \ > +" > + > +# FIXME build errors > +# PACKAGECONFIG += " whisper csound" > + > +# FIXME failing to download skia from > +# https://codeload.github.com/rust-skia/skia/tar.gz/m145-0.92.0 > +# PACKAGECONFIG += " skia" > + > +# TODO no vvdec recipe > +# PACKAGECONFIG += " vvdec" > + > +do_install:append() { > + install -d ${D}${libdir}/gstreamer-1.0/ > + install -m 0755 ${B}/target/${CARGO_TARGET_SUBDIR}/*.so > ${D}${libdir}/gstreamer-1.0/ > +} > + > +FILES:${PN} += "${libdir}/gstreamer-1.0/*" > + > +# Silence package QA errors like: > +# ERROR: gstreamer1.0-plugins-rs-0.15.1-r0 do_package_qa: > +# QA Issue: File /usr/lib/gstreamer-1.0/.debug/libgstrswebrtc.so in > +# package gstreamer1.0-plugins-rs-dbg contains reference to TMPDIR > [buildpaths] > +# TODO: look for proper fix > +INSANE_SKIP:${PN}-dbg += "buildpaths" > -- > 2.54.0 AFAICT, there is no splitting of the individual plugins into separate packages as is done for the other GStreamer plugin recipes. Is this intentional? //Peter
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#236911): https://lists.openembedded.org/g/openembedded-core/message/236911 Mute This Topic: https://lists.openembedded.org/mt/119256407/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
