+2007-12-17 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst-libs/gst/audio/gstbaseaudiosrc.c:
+ (gst_base_audio_src_create), (gst_base_audio_src_change_state):
+ Add debug info.
+ When going from PLAYING to PAUSED, pause the ringbuffer before calling
+ the parent state change function, just like the audiosink, because the
+ parent waits for the element to finish its processing before completing
+ the state change. This makes going to PAUSED a lot snappier.
+ When going from READY to PAUSED, don't allow the ringbuffer to start
+ yet.
+
2007-12-17 Edward Hervey <edward.hervey@collabora.co.uk>
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
break;
/* else something interrupted us and we wait for playing again. */
+ GST_DEBUG_OBJECT (src, "wait playing");
if (gst_base_src_wait_playing (bsrc) != GST_FLOW_OK)
goto stopped;
+ GST_DEBUG_OBJECT (src, "continue playing");
+
/* read next samples */
sample += read;
samples -= read;
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
+ GST_DEBUG_OBJECT (src, "NULL->READY");
if (src->ringbuffer == NULL) {
src->ringbuffer = gst_base_audio_src_create_ringbuffer (src);
}
goto open_failed;
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
+ GST_DEBUG_OBJECT (src, "READY->PAUSED");
src->next_sample = -1;
gst_ring_buffer_set_flushing (src->ringbuffer, FALSE);
+ gst_ring_buffer_may_start (src->ringbuffer, FALSE);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ GST_DEBUG_OBJECT (src, "PAUSED->PLAYING");
gst_ring_buffer_may_start (src->ringbuffer, TRUE);
break;
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ GST_DEBUG_OBJECT (src, "PLAYING->PAUSED");
+ gst_ring_buffer_may_start (src->ringbuffer, FALSE);
+ gst_ring_buffer_pause (src->ringbuffer);
+ break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
+ GST_DEBUG_OBJECT (src, "PAUSED->READY");
gst_ring_buffer_set_flushing (src->ringbuffer, TRUE);
break;
default:
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
switch (transition) {
- case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
- gst_ring_buffer_may_start (src->ringbuffer, FALSE);
- gst_ring_buffer_pause (src->ringbuffer);
- break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
+ GST_DEBUG_OBJECT (src, "PAUSED->READY");
gst_ring_buffer_release (src->ringbuffer);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
+ GST_DEBUG_OBJECT (src, "READY->NULL");
gst_ring_buffer_close_device (src->ringbuffer);
gst_object_unparent (GST_OBJECT_CAST (src->ringbuffer));
src->ringbuffer = NULL;