From patchwork Thu Jul 23 17:23:26 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taruntej Kanakamalla X-Patchwork-Id: 93376 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 B64B3C531F7 for ; Thu, 23 Jul 2026 19:50:02 +0000 (UTC) Received: from mailer231.gate185.sl.smtp.com (mailer231.gate185.sl.smtp.com [192.40.185.231]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.2082.1784827461437080937 for ; Thu, 23 Jul 2026 10:24:22 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@centricular.com header.s=201701 header.b=LenGvmdf; dkim=pass header.i=@smtpsendemail.com header.s=smtpcustomer header.b=RaSNyFlw; spf=pass (domain: centricular.com, ip: 192.40.185.231, 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.173] (unknown [10.138.12.189]) by mtl-mta04-out1 (Halon) with ESMTP id d0e1ee29-7684-4183-b885-0c089d1b3c17; Thu, 23 Jul 2026 17:24:20 +0000 (UTC) Received: Received from 10.138.12.155 by Caffeine (s0-aws-app2-swarm-manager-1) with SMTP id e2f2ec29-582e-414b-8df6-b9787eb93258 for openembedded-core@lists.openembedded.org; Thu, 23 Jul 2026 17:24:00 +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 e2f2ec29-582e-414b-8df6-b9787eb93258; Thu, 23 Jul 2026 17:24:00 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 050869CB05; Thu, 23 Jul 2026 19:23:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=centricular.com; s=201701; t=1784827438; h=from:subject:date:message-id:to:cc:mime-version: content-transfer-encoding:in-reply-to:references; bh=QHR6lCrK+OgKh1yyuYej2ygsEKqohY4EPQVbVIMLozM=; b=LenGvmdf0G+rADpDmm1rLJxZFbMnBq7ULOGO1km6rLGYlkEFM+2b/HKnVl29wmZ+AGWRY3 fQ7AtHFN9U2+2WTZd0LjbkapBS7Q0Ay9tZLsrOPoIqY4I211ndV4uknOeyWoqzFpxtn62j +ACvvJ6ZQH4j9muWtdTQi1Wxhk41bwy6zKp+ZAuKdg6iyOJKkstAG93UWNh2DYX6LXJVYM h5gW3lhYef20xXfW3IdpkVg5eJ/u59l5jU8C6ivRAdJUP05B25gS+MSt1I+6BUerEeA4J0 yZloHyicbQTUVoGEsFo3wHaIB91loGDRIbY4el4VFCvERbVyGPCsmTxn5/QHUQ== From: Taruntej Kanakamalla To: openembedded-core@lists.openembedded.org Cc: sebastian@centricular.com, nirbheek@centricular.com, jan@centricular.com, Taruntej Kanakamalla Subject: [PATCH v6] gstreamer1.0-plugins-rs: add new package Date: Thu, 23 Jul 2026 22:53:26 +0530 Message-ID: <20260723172326.3104509-1-tarun@centricular.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260714105541.2812170-2-tarun@centricular.com> References: <20260714105541.2812170-2-tarun@centricular.com> MIME-Version: 1.0 X-Last-TLS-Session-Version: TLSv1.3 X-SMTPCOM-Sender-ID: 9075006 X-SMTPCOM-Tracking-Number: e2f2ec29-582e-414b-8df6-b9787eb93258 X-SMTPCOM-Message-ID: 872a3b60-530b-463d-9d5e-c5efdd27425d X-SMTPCOM-Payload: A0pRyOQi0t6nWADAdRjMGAKxHAQuvIuzIhhXMHSB75-A0p6K1wDL04_2U-AZOwfcHk8iXwwqltiQ0yCgMcokEMTXcsr4fZmt19I_50WZ2dpPMfHruXTM8AOf_lo4ntHW93z7CvX4_VcJMbi7amNSx2IcpSKmTAx9iN6scAOUaqQSeMnj_O9Hn-5NyK4Nof6yEDZ86znJvoczhm-wb54PvQ== 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=1784827449; 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=IJEDeOlNrdrW3X+OQ9mC1v1u5SxQUB2zrhMkm4hIqxA=; b=RaSNyFlwVjKw1kwmINmYTKWHFVGvXTRXfZNM+y1qQIQSLxkf9bwDo2Hl7bH4yjJiiss+I yB0z1BNV/fpm4FD3V6NqcA9Zg4mxF6PhUQwvR5CG/CuoepDcAkRF+kknYQX5bCQGxEMe87F mgX+BKnnVe93IuhtBrCg/Klgl8lc76aawrr/xnUOGZX3jUehryGhJjbBoiEhH+93CciARNG wQZpcSeFEEXAPCZtuC+cNrXIDgYMKKZvcyZULMNwMYnoTwvgnSgkQH4JeGmBjsXzqwnDOfU IDek7gipoqmCbV5MSTrY4KUujFj4of48ysnFf1jIH+rYiIMliIzk9NGiMp/g== 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 ; Thu, 23 Jul 2026 19:50:02 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/241867 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 v6: - Add SRCREV - Change LICENSE format as per the new syntax meta/conf/distro/include/maintainers.inc | 1 + meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs-crates.inc | 2202 ++++++++++++++++++++++++++++++++++++++++++ meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-rs_0.15.3.bb | 205 ++++ 3 files changed, 2408 insertions(+) diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index b49386a27d..e0edfdef7e 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -258,6 +258,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 '')) +}