audiobasesrc: Always resync the ringbuffer on the first buffer
authorThiago Santos <thiago.sousa.santos@collabora.co.uk>
Tue, 2 Aug 2011 13:11:14 +0000 (10:11 -0300)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 17 Dec 2012 10:47:34 +0000 (11:47 +0100)
In SKEW mode, use next_sample == -1 to check for the first sample
when starting to read samples so it resyncs the ringbuffer and
timestamps are ok.

Suggestion from Teemu Katajisto <teemu.katajisto@digia.com>

https://bugzilla.gnome.org/show_bug.cgi?id=648359

gst-libs/gst/audio/gstaudiobasesrc.c

index f594f51..99d5827 100644 (file)
@@ -766,6 +766,7 @@ gst_audio_base_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
   GstClockTime rb_timestamp = GST_CLOCK_TIME_NONE;
   GstClock *clock;
   gboolean first;
+  gboolean first_sample = src->next_sample == -1;
 
   ringbuffer = src->ringbuffer;
   spec = &ringbuffer->spec;
@@ -938,7 +939,7 @@ gst_audio_base_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
          *    the first time we are ran.
          */
         if ((segment_skew >= ringbuffer->spec.segtotal) ||
-            (last_read_segment == 0)) {
+            (last_read_segment == 0) || first_sample) {
           gint new_read_segment;
           gint segment_diff;
           guint64 new_sample;