From patchwork Tue Jul 14 10:55:41 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taruntej Kanakamalla X-Patchwork-Id: 92407 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD757C44508 for ; Tue, 14 Jul 2026 12:21:41 +0000 (UTC) Received: from mailer53.gate186.sl.smtp.com (mailer53.gate186.sl.smtp.com [192.40.186.53]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.7601.1784027799754575318 for ; Tue, 14 Jul 2026 04:16:40 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@centricular.com header.s=201701 header.b=QhdWhZEL; dkim=pass header.i=@smtpsendemail.com header.s=smtpcustomer header.b=P2idpjtU; spf=pass (domain: centricular.com, ip: 192.40.186.53, mailfrom: tarun@centricular.com) X-Report-Abuse: SMTP.com is an email service provider. Our abuse team cares about your feedback. Please contact abuse@smtp.com for further investigation. Received: from [10.0.16.142] (unknown [10.138.12.245]) by mtl-mta01-out1 (Halon) with ESMTP id d1293711-1217-4fda-b37a-5f743785e4a5; Tue, 14 Jul 2026 10:56:36 +0000 (UTC) Received: Received from 10.138.12.155 by Caffeine (s0-aws-app2-swarm-manager-2) with SMTP id 67a7d4fa-2b82-461f-8164-b8d390d49a84 for openembedded-core@lists.openembedded.org; Tue, 14 Jul 2026 10:55:58 +0000 (UTC) Feedback-ID: 9075006:SMTPCOM Received: from hermes.centricular.com (unknown [138.201.245.53]) by s0-aws-app2-mta-in-1 (Halon) with ESMTPSA id 67a7d4fa-2b82-461f-8164-b8d390d49a84; Tue, 14 Jul 2026 10:55:58 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id EDAF69CE97; Tue, 14 Jul 2026 12:55:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=centricular.com; s=201701; t=1784026556; h=from:subject:date:message-id:to:cc:mime-version: content-transfer-encoding:in-reply-to:references; bh=7bWqW7KVyuDnUPqkumRsCbkZh1UtGfPKZZK4cGLj04k=; b=QhdWhZELPIkvTClCEKOQoVyTdX5EDedr/5FN+N8ZSyhiv2cGtZfrWhGbO6qXJCywfJQ/eD jft7hCLlw81VPxIrWda/kiKQwHzSfUnf85yrPgLMPmlVuF4Xec2k/BdxnnMDbm8XEGgC5P Jiic8VEjBQ90AOZroPOM78bqwzmoXx0Za92kOcvPzD8LvXdRDP3IneV2LD/FLbsbHPKpn5 DCKqNZPbEwV+uVZXYYxmwqIdAL9dkM5U6wJTo1BR5JlM/Dj4w6p/LvFKAmCdofYKj+jNzE 78eTeVVkJMOHUevBKbzrQHsmYGDkwo++pryvqjwFUA5aFi6izuANVWHLRWKHuA== From: Taruntej Kanakamalla To: openembedded-core@lists.openembedded.org Cc: sebastian@centricular.com, nirbheek@centricular.com, Taruntej Kanakamalla Subject: [PATCH v5 2/2] gstreamer1.0-plugins-rs: add new package Date: Tue, 14 Jul 2026 16:25:41 +0530 Message-ID: <20260714105541.2812170-2-tarun@centricular.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260714105541.2812170-1-tarun@centricular.com> References: <20260707081701.1525114-1-tarun@centricular.com> <20260714105541.2812170-1-tarun@centricular.com> MIME-Version: 1.0 X-Last-TLS-Session-Version: TLSv1.3 X-SMTPCOM-Sender-ID: 9075006 X-SMTPCOM-Tracking-Number: 67a7d4fa-2b82-461f-8164-b8d390d49a84 X-SMTPCOM-Message-ID: 061493eb-35e4-4cf9-93dd-afa9b93f74be X-SMTPCOM-Payload: LXXVz9ZvLC0jv9KQsfDezVFsyMBEjOZBn4Urpy-2-vHrq5coMa8zTeVGYYkP7pTSBHhZwFqPyHsDGjUQL-_5KZ2ov7FEcqDq-x_tnJRF2gd8WnUNBfEhS7MKSIxcIqw4hir8dxNay1-RaE3K4-9LE5La1g-8WumBc6rAs8A2uGNFESksEqQVXOQGYtVYX_k591Y2erOMSjOjI7JyVJH8Xg== List-Unsubscribe: , List-Unsubscribe-Post: List-Unsubscribe=One-Click DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=smtpsendemail.com; i=@smtpsendemail.com; q=dns/txt; s=smtpcustomer; t=1784026584; h=feedback-id : from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : list-unsubscribe : list-unsubscribe-post : from : to : cc : subject : date; bh=R4jPFqgDUyjFfXRv5s1/FxAZMAPkeu5jPFD4rgzMdh8=; b=P2idpjtUL5i5ph4lhVAA4qJ5cc1pVtWSvRaiHoKMKe1UI9KW2pJqxR+Gc3e8REI3T3pPZ VwyhffhcRevvJVz0MDTTIuHiChT+4kftkxrnh1O3G4VfNa7yrM8WHYswAGGDv3V2sfl335y /YBuyBbTTIHxJuyAJsvam2Q/hgSjKxxh7dnQtAulDrXxV0bhOPqisfF2PqpE8oHoWIk7b// J81TqrIsxgrr7/wQKxACWeMxHDtF+xryRBLJhd8RL0P7fY66dHmGIwNiPy7Wq/Y8fGWju8s TBSrIRlQGA94oh52WK8S9RTF8Hmgez1GqEXVgdx46e6Mik/HKTL7/4yJp5Wg== List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 14 Jul 2026 12:21:41 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/240882 Adapted from an existing patch: https://patchwork.yoctoproject.org/project/oe-core/patch/20220606132653.60232-5-brgl@bgdev.pl Update the recipe to track the latest upstream release of the official GStreamer Rust plugins. Remove the `flavors` and `ffv1` plugins from local manifest file because they depend on packages that are not published on crates.io and also they are not actively maintained in the gst-plugins-rs upstream anyway. Skip the recipe if building for x86 without SSE support. 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 Signed-off-by: Taruntej Kanakamalla --- Changes in v5: - add maintainer entry to maintainers.inc - add --libdir fix to cargo_c.bbclass (new patch) - skip the recipe on 32-bit x86 tunes without SSE2 meta/conf/distro/include/maintainers.inc | 1 + .../gstreamer1.0-plugins-rs-crates.inc | 2202 +++++++++++++++++ .../gstreamer1.0-plugins-rs_0.15.3.bb | 204 ++ 3 files changed, 2407 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.3.bb diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index f98305e930..01c7189856 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -257,6 +257,7 @@ RECIPE_MAINTAINER:pn-gstreamer1.0-meta-base = "Unassigned ${PN}-file instead of ${PN}-rsfile) +python split_gstreamer10_packages () { + gst_libdir = d.expand('${libdir}/gstreamer-1.0') + postinst = d.getVar('plugin_postinst') + + do_split_packages(d, gst_libdir, r'libgst(?:rs)?(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer 1.0 Rust plugin for %s', postinst=postinst, extra_depends='') + + # GstValidate plugins are installed in a separate subdirectory + # i.e., 'gstreamer-1.0/validate' + do_split_packages(d, gst_libdir + '/validate', r'libgst(?:rs)?(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer 1.0 Rust validate plugin for %s', postinst=postinst, extra_depends='') +} + +DEPENDS = " \ + glib-2.0 \ + gstreamer1.0 \ + gstreamer1.0-plugins-good \ + gstreamer1.0-plugins-bad \ + gstreamer1.0-plugins-base \ + gst-devtools \ + gtk4 \ +" + +S = "${UNPACKDIR}" + +# Remove the `flavors` and `ffv1` plugins that are not actively maintained in the +# gst-plugins-rs upstream +CARGO_MANIFEST_PATH = "${S}/${CARGO_SRC_DIR}/${BPN}-${PV}/Cargo.toml" +do_configure:prepend() { + sed -i '/"mux\/flavors"/d' ${CARGO_MANIFEST_PATH} + sed -i '/"video\/ffv1"/d' ${CARGO_MANIFEST_PATH} +} + +# For the purpose of reproducibility, modification of Cargo.lock is disabled +# by default by the cargo_common class using the --frozen flag. +# +# However, the `flavors` and `ffv1` plugins depend on the packages that are not +# published on crates.io and can only be fetched from the git. Also, as mentioned above, +# these plugins are not actively maintained in the gst-plugins-rs upstream, and it is not +# recommended to use them. +# +# So we remove them from the workspace members in the manifest file locally and this will trigger +# a change in the Cargo.lock file. +# +# To allow this exception, disable the --frozen flag so Cargo.lock can be modified, +# but still prevent network access by using the --offline flag in CARGO_BUILD_FLAGS. +CARGO_BUILD_FLAGS:remove = "--frozen" +CARGO_BUILD_FLAGS:append = " --offline" + +# cargo_c.bbclass does not pass PACKAGECONFIG_CONFARGS to build and install +# command so without this the whole workspace gets built by default instead of +# specific packages(plugins) +CARGO_BUILD_FLAGS:append = " ${PACKAGECONFIG_CONFARGS}" + +# 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" +# FIXME build errors +# 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" +# FIXME build errors +# 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" +# FIXME failing to download skia from +# https://codeload.github.com/rust-skia/skia/tar.gz/m145-0.92.0 +# PACKAGECONFIG[skia] = "-p gst-plugin-skia" +PACKAGECONFIG[videofx] = "-p gst-plugin-videofx" +# TODO no vvdec recipe +# PACKAGECONFIG[vvdec] = "-p gst-plugin-vvdec" +PACKAGECONFIG[webp] = "-p gst-plugin-webp" + +# Default members +PACKAGECONFIG ??= " \ + audiofx \ + closedcaption \ + file \ + fallbackswitch \ + tracers \ + threadshare \ + rtp \ + inter \ + isobmff \ + hlssink3 \ + mpegtslive \ + reqwest \ + rtsp \ + webrtc \ + webrtc-signalling \ + videofx \ + webp \ +" + +# The 'ring' crate (pulled in transitively by plugins such as reqwest, +# webrtc, quinn, etc.) requires SSE2 on 32-bit x86. +# +# rust-target-config.bbclass only enables sse2 (or a superset) in the +# generated rust target if TARGET_CC_ARCH carries an explicit -msse* +# flag; -march= values are not parsed. +# +# Skip the recipe for 32-bit x86 tunes that do not guarantee SSE2 +# (x86, i586, i586-nlp, i686, c3). SSE2-capable tunes (core2-32, +# corei7-32, all x86-64 variants) are unaffected. +python () { + if (d.getVar('TRANSLATED_TARGET_ARCH') or '') not in ('i386', 'i486', 'i586', 'i686'): + return + cc_flags = (d.getVar('TARGET_CC_ARCH') or '').split() + sse2_flags = ('-msse2', '-msse3', '-mssse3', '-msse4.1', '-msse4.2', '-msse4a') + if not any(f in cc_flags for f in sse2_flags): + raise bb.parse.SkipRecipe( + "Depends transitively on the 'ring' crate which requires SSE2, " + "not guaranteed by this tune (TUNE_FEATURES='%s'). Use an " + "SSE2-capable x86 tune such as core2-32 or corei7-32." + % (d.getVar('TUNE_FEATURES') or '')) +}