diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-03-16 12:03:53 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-03-16 12:03:53 +0200 |
commit | 0acdcc1b37ea986a56f8749206e77772dc258824 (patch) | |
tree | d32ea17809a8979719b4ea8efa185e00f16d34df | |
parent | a032347c77e2f4c57a06471d63167055e3c2df69 (diff) | |
download | gstreamer-plugins-bad-0acdcc1b37ea986a56f8749206e77772dc258824.tar.gz |
openslesringbuffer: Warn if the position reported by OpenSL is higher than what we queued up so far
This would hint at wrong position reporting, and apparently sometimes happens
after a seek.
-rw-r--r-- | sys/opensles/openslesringbuffer.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/opensles/openslesringbuffer.c b/sys/opensles/openslesringbuffer.c index 085baa55e..77937fed7 100644 --- a/sys/opensles/openslesringbuffer.c +++ b/sys/opensles/openslesringbuffer.c @@ -973,7 +973,14 @@ gst_opensles_ringbuffer_delay (GstAudioRingBuffer * rb) playedpos = gst_util_uint64_scale_round (position, rb->spec.info.rate, 1000); queuedpos = g_atomic_int_get (&thiz->segqueued) * rb->samples_per_seg; - res = queuedpos - playedpos; + if (queuedpos < playedpos) { + res = 0; + GST_ERROR_OBJECT (thiz, + "Queued position smaller than playback position (%" G_GUINT64_FORMAT + " < %" G_GUINT64_FORMAT ")", queuedpos, playedpos); + } else { + res = queuedpos - playedpos; + } } GST_LOG_OBJECT (thiz, "queued samples %" G_GUINT64_FORMAT " position %u ms " |