From f20c73684b3a980c9d4f425e9cc1a1e9e6cc99d6 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Mon, 12 Oct 2009 09:06:37 +0300 Subject: [PATCH] jack: ensure segtotal is at least 2 Not only adjust buffer-time and avoid segtotal=0, but instead ensure segtotal is atleast 2. Do same change on jacksrc. We could also check the latency and buffer time configured by the client and adjust buffer-time so that we get to the same number of segments. --- ext/jack/gstjackaudiosink.c | 8 +++----- ext/jack/gstjackaudiosrc.c | 12 ++++++++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/ext/jack/gstjackaudiosink.c b/ext/jack/gstjackaudiosink.c index 4c48ab9..0e75f16 100644 --- a/ext/jack/gstjackaudiosink.c +++ b/ext/jack/gstjackaudiosink.c @@ -440,10 +440,9 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec) spec->segsize = buffer_size * sizeof (gfloat) * channels; spec->latency_time = gst_util_uint64_scale (spec->segsize, (GST_SECOND / GST_USECOND), spec->rate * spec->bytes_per_sample); - if (spec->latency_time < spec->buffer_time) { - /* segtotal based on buffer-time latency */ - spec->segtotal = spec->buffer_time / spec->latency_time; - } else { + /* segtotal based on buffer-time latency */ + spec->segtotal = spec->buffer_time / spec->latency_time; + if (spec->segtotal < 2) { spec->segtotal = 2; spec->buffer_time = spec->latency_time * spec->segtotal; } @@ -452,7 +451,6 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec) spec->buffer_time); GST_DEBUG_OBJECT (sink, "latency time: %" G_GINT64_FORMAT " usec", spec->latency_time); - GST_DEBUG_OBJECT (sink, "buffer_size %d, segsize %d, segtotal %d", buffer_size, spec->segsize, spec->segtotal); diff --git a/ext/jack/gstjackaudiosrc.c b/ext/jack/gstjackaudiosrc.c index ca4bf73..211e1d2 100644 --- a/ext/jack/gstjackaudiosrc.c +++ b/ext/jack/gstjackaudiosrc.c @@ -444,9 +444,17 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec) (GST_SECOND / GST_USECOND), spec->rate * spec->bytes_per_sample); /* segtotal based on buffer-time latency */ spec->segtotal = spec->buffer_time / spec->latency_time; + if (spec->segtotal < 2) { + spec->segtotal = 2; + spec->buffer_time = spec->latency_time * spec->segtotal; + } - GST_DEBUG_OBJECT (src, "segsize %d, segtotal %d", spec->segsize, - spec->segtotal); + GST_DEBUG_OBJECT (src, "buffer time: %" G_GINT64_FORMAT " usec", + spec->buffer_time); + GST_DEBUG_OBJECT (src, "latency time: %" G_GINT64_FORMAT " usec", + spec->latency_time); + GST_DEBUG_OBJECT (src, "buffer_size %d, segsize %d, segtotal %d", + buffer_size, spec->segsize, spec->segtotal); /* allocate the ringbuffer memory now */ buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize); -- 2.7.4