aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0005-pipewiresink-set-a-default-channel-map-if-the-number.patch77
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.43.bbappend1
2 files changed, 78 insertions, 0 deletions
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0005-pipewiresink-set-a-default-channel-map-if-the-number.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0005-pipewiresink-set-a-default-channel-map-if-the-number.patch
new file mode 100644
index 000000000..3b1b2a490
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0005-pipewiresink-set-a-default-channel-map-if-the-number.patch
@@ -0,0 +1,77 @@
+From ee2e6412d37d012fbf8d25bd37271a5ee92b3ad4 Mon Sep 17 00:00:00 2001
+From: George Kiagiadakis <george.kiagiadakis@collabora.com>
+Date: Thu, 3 Feb 2022 15:08:57 +0200
+Subject: [PATCH] pipewiresink: set a default channel map if the number of
+ channels is fixed
+
+This allows remaping streams using pipewiresink to match the channel layout
+of the target device
+Upstream-Status: Backport [from master/0.3.46]
+---
+ src/gst/gstpipewireformat.c | 42 ++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 41 insertions(+), 1 deletion(-)
+
+diff --git a/src/gst/gstpipewireformat.c b/src/gst/gstpipewireformat.c
+index dca90267c..c8ce7ba62 100644
+--- a/src/gst/gstpipewireformat.c
++++ b/src/gst/gstpipewireformat.c
+@@ -445,6 +445,44 @@ handle_video_fields (ConvertData *d)
+ return TRUE;
+ }
+
++static void
++set_default_channels (struct spa_pod_builder *b, uint32_t channels)
++{
++ uint32_t position[SPA_AUDIO_MAX_CHANNELS] = {0};
++ gboolean ok = TRUE;
++
++ switch (channels) {
++ case 8:
++ position[6] = SPA_AUDIO_CHANNEL_SL;
++ position[7] = SPA_AUDIO_CHANNEL_SR;
++ SPA_FALLTHROUGH
++ case 6:
++ position[5] = SPA_AUDIO_CHANNEL_LFE;
++ SPA_FALLTHROUGH
++ case 5:
++ position[4] = SPA_AUDIO_CHANNEL_FC;
++ SPA_FALLTHROUGH
++ case 4:
++ position[2] = SPA_AUDIO_CHANNEL_RL;
++ position[3] = SPA_AUDIO_CHANNEL_RR;
++ SPA_FALLTHROUGH
++ case 2:
++ position[0] = SPA_AUDIO_CHANNEL_FL;
++ position[1] = SPA_AUDIO_CHANNEL_FR;
++ break;
++ case 1:
++ position[0] = SPA_AUDIO_CHANNEL_MONO;
++ break;
++ default:
++ ok = FALSE;
++ break;
++ }
++
++ if (ok)
++ spa_pod_builder_add (b, SPA_FORMAT_AUDIO_position,
++ SPA_POD_Array(sizeof(uint32_t), SPA_TYPE_Id, channels, position), 0);
++}
++
+ static gboolean
+ handle_audio_fields (ConvertData *d)
+ {
+@@ -538,8 +576,10 @@ handle_audio_fields (ConvertData *d)
+ }
+ if (i > 0) {
+ choice = spa_pod_builder_pop(&d->b, &f);
+- if (i == 1)
++ if (i == 1) {
+ choice->body.type = SPA_CHOICE_None;
++ set_default_channels (&d->b, v);
++ }
+ }
+ }
+ return TRUE;
+--
+2.34.1
+
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.43.bbappend b/meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.43.bbappend
index e2bc0d2bb..8d3df64cb 100644
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.43.bbappend
+++ b/meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.43.bbappend
@@ -11,6 +11,7 @@ SRC_URI += "\
file://0002-Revert-treewide-meson.build-use-dependency-variable-.patch \
file://0003-Revert-meson-declare-spa_dep-and-override_dependency.patch \
file://0004-Revert-systemd-correctly-prefix-systemd-system-units.patch \
+ file://0005-pipewiresink-set-a-default-channel-map-if-the-number.patch \
"
do_install:append() {