aboutsummaryrefslogtreecommitdiffstats
path: root/meta-pipewire/recipes-multimedia/pipewire/pipewire/0011-gst-pwaudioringbuffer-make-the-buffer-size-sensitive.patch
blob: 5ffabb6de15bfbddea1707cc0945e97d4e4897cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
From 6e289d0058d71bc433d1918a8bbf3305f3e4f517 Mon Sep 17 00:00:00 2001
From: Julian Bouzas <julian.bouzas@collabora.com>
Date: Tue, 7 May 2019 10:36:35 -0400
Subject: [PATCH] gst/pwaudioringbuffer: make the buffer size sensitive to the
 number of channels

Upstream-Status: Submitted [https://github.com/PipeWire/pipewire/pull/140]
---
 src/gst/gstpwaudioringbuffer.c | 6 ++++--
 src/gst/gstpwaudioringbuffer.h | 1 +
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/gst/gstpwaudioringbuffer.c b/src/gst/gstpwaudioringbuffer.c
index 989b2cd7..181304e8 100644
--- a/src/gst/gstpwaudioringbuffer.c
+++ b/src/gst/gstpwaudioringbuffer.c
@@ -246,17 +246,18 @@ on_stream_format_changed (void *data, const struct spa_pod *format)
   const struct spa_pod *params[1];
   struct spa_pod_builder b = { NULL };
   uint8_t buffer[512];
+  const gint b_size = self->segsize * self->channels;
 
   spa_pod_builder_init (&b, buffer, sizeof (buffer));
   params[0] = spa_pod_builder_add_object (&b,
       SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers,
       SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(16, 1, INT32_MAX),
       SPA_PARAM_BUFFERS_blocks,  SPA_POD_Int(1),
-      SPA_PARAM_BUFFERS_size,    SPA_POD_Int(self->segsize),
+      SPA_PARAM_BUFFERS_size,    SPA_POD_Int(b_size),
       SPA_PARAM_BUFFERS_stride,  SPA_POD_Int(self->bpf),
       SPA_PARAM_BUFFERS_align,   SPA_POD_Int(16));
 
-  GST_DEBUG_OBJECT (self->elem, "doing finish format, buffer size:%d", self->segsize);
+  GST_DEBUG_OBJECT (self->elem, "doing finish format, buffer size:%d", b_size);
   pw_stream_finish_format (self->stream, 0, params, 1);
 }
 
@@ -402,6 +403,7 @@ gst_pw_audio_ring_buffer_acquire (GstAudioRingBuffer *buf,
   self->segsize = spec->segsize;
   self->bpf = GST_AUDIO_INFO_BPF (&spec->info);
   self->rate = GST_AUDIO_INFO_RATE (&spec->info);
+  self->channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
   self->segoffset = 0;
 
   /* connect stream */
diff --git a/src/gst/gstpwaudioringbuffer.h b/src/gst/gstpwaudioringbuffer.h
index f47f668a..f600f012 100644
--- a/src/gst/gstpwaudioringbuffer.h
+++ b/src/gst/gstpwaudioringbuffer.h
@@ -64,6 +64,7 @@ struct _GstPwAudioRingBuffer
   gint segsize;
   gint bpf;
   gint rate;
+  gint channels;
 
   /* on_stream_process() state */
   gint segoffset;
-- 
2.20.1