diff options
author | Seungha Yang <seungha@centricular.com> | 2021-05-27 16:20:09 +0900 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2021-06-01 10:37:30 +0100 |
commit | f008cb00f73ebca04c531b2dc2607b9f601ec885 (patch) | |
tree | 6624e26870e4351d2f7741e88135aa5b3f27dff2 | |
parent | 50aff43979944934252075facc8251db9bbef20d (diff) | |
download | gstreamer-plugins-base-f008cb00f73ebca04c531b2dc2607b9f601ec885.tar.gz |
audiobasesrc: Fix divide by zero assertion
GstAudioRingBufferSpec can be cleared from other thread, then
rate value will be zero
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1183>
-rw-r--r-- | gst-libs/gst/audio/gstaudiobasesrc.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/gst-libs/gst/audio/gstaudiobasesrc.c b/gst-libs/gst/audio/gstaudiobasesrc.c index 9bfee07df..3480ee7b8 100644 --- a/gst-libs/gst/audio/gstaudiobasesrc.c +++ b/gst-libs/gst/audio/gstaudiobasesrc.c @@ -305,21 +305,26 @@ gst_audio_base_src_get_time (GstClock * clock, GstAudioBaseSrc * src) guint64 raw, samples; guint delay; GstClockTime result; + GstAudioRingBuffer *ringbuffer; + gint rate; + + ringbuffer = src->ringbuffer; + if (!ringbuffer) + return GST_CLOCK_TIME_NONE; - if (G_UNLIKELY (src->ringbuffer == NULL - || src->ringbuffer->spec.info.rate == 0)) + rate = ringbuffer->spec.info.rate; + if (rate == 0) return GST_CLOCK_TIME_NONE; - raw = samples = gst_audio_ring_buffer_samples_done (src->ringbuffer); + raw = samples = gst_audio_ring_buffer_samples_done (ringbuffer); /* the number of samples not yet processed, this is still queued in the * device (not yet read for capture). */ - delay = gst_audio_ring_buffer_delay (src->ringbuffer); + delay = gst_audio_ring_buffer_delay (ringbuffer); samples += delay; - result = gst_util_uint64_scale_int (samples, GST_SECOND, - src->ringbuffer->spec.info.rate); + result = gst_util_uint64_scale_int (samples, GST_SECOND, rate); GST_DEBUG_OBJECT (src, "processed samples: raw %" G_GUINT64_FORMAT ", delay %u, real %" |