+2005-11-16 Wim Taymans <wim@fluendo.com>
+
+ * gst-libs/gst/audio/gstbaseaudiosink.c:
+ (gst_base_audio_sink_provide_clock),
+ (gst_base_audio_sink_change_state):
+ Set ringbuffer to non-flushing when going to PAUSED, set to
+ flushing again when going to READY.
+
+ * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_init),
+ (gst_ring_buffer_stop):
+ Start in flushing mode by default.
+ Don't set flushing in the _stop method, let the app call
+ this explicitly.
+
2005-11-16 Julien MOUTTE <julien@moutte.net>
* gst-libs/gst/video/gstvideosink.c: (gst_video_sink_center_rect):
gst_base_audio_sink_provide_clock (GstElement * elem)
{
GstBaseAudioSink *sink;
+ GstClock *clock;
sink = GST_BASE_AUDIO_SINK (elem);
- return GST_CLOCK (gst_object_ref (sink->clock));
+#if 1
+ clock = GST_CLOCK_CAST (gst_object_ref (sink->clock));
+#else
+ clock = gst_system_clock_obtain ();
+#endif
+
+ return clock;
}
static GstClockTime
sink->next_sample = 0;
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
+ gst_ring_buffer_set_flushing (sink->ringbuffer, FALSE);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
break;
gst_ring_buffer_pause (sink->ringbuffer);
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
+ gst_ring_buffer_set_flushing (sink->ringbuffer, TRUE);
gst_ring_buffer_stop (sink->ringbuffer);
- gst_pad_set_caps (GST_BASE_SINK_PAD (sink), NULL);
gst_ring_buffer_release (sink->ringbuffer);
+ gst_pad_set_caps (GST_BASE_SINK_PAD (sink), NULL);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
gst_ring_buffer_close_device (sink->ringbuffer);
ringbuffer->cond = g_cond_new ();
ringbuffer->waiting = 0;
ringbuffer->empty_seg = NULL;
+ ringbuffer->flushing = TRUE;
}
static void
GST_DEBUG_OBJECT (buf, "stopping");
GST_LOCK (buf);
- buf->flushing = TRUE;
/* if started, set to stopped */
res = g_atomic_int_compare_and_exchange (&buf->state,