audiobasesrc: Always resync the ringbuffer on the first buffer

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
This commit is contained in:
Thiago Santos 2011-08-02 10:11:14 -03:00 committed by Sebastian Dröge
parent 53072a4326
commit 929edc2572

View 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;