summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-03-16 12:03:53 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-03-16 12:03:53 +0200
commit0acdcc1b37ea986a56f8749206e77772dc258824 (patch)
treed32ea17809a8979719b4ea8efa185e00f16d34df
parenta032347c77e2f4c57a06471d63167055e3c2df69 (diff)
downloadgstreamer-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.c9
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 "