GstBuffer * buffer);
static gboolean gst_audio_base_sink_event (GstBaseSink * bsink,
GstEvent * event);
+static GstFlowReturn gst_audio_base_sink_wait_eos (GstBaseSink * bsink,
+ GstEvent * event);
static void gst_audio_base_sink_get_times (GstBaseSink * bsink,
GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
static gboolean gst_audio_base_sink_setcaps (GstBaseSink * bsink,
gstbasesink_class->fixate = GST_DEBUG_FUNCPTR (gst_audio_base_sink_fixate);
gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_audio_base_sink_setcaps);
gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_audio_base_sink_event);
+ gstbasesink_class->wait_eos =
+ GST_DEBUG_FUNCPTR (gst_audio_base_sink_wait_eos);
gstbasesink_class->get_times =
GST_DEBUG_FUNCPTR (gst_audio_base_sink_get_times);
gstbasesink_class->preroll = GST_DEBUG_FUNCPTR (gst_audio_base_sink_preroll);
return TRUE;
}
+static GstFlowReturn
+gst_audio_base_sink_wait_eos (GstBaseSink * bsink, GstEvent * event)
+{
+ GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink);
+ GstFlowReturn ret;
+
+ ret = GST_BASE_SINK_CLASS (parent_class)->event (bsink, event);
+ if (ret != GST_FLOW_OK)
+ return ret;
+
+ /* now wait till we played everything */
+ gst_audio_base_sink_drain (sink);
+
+ return ret;
+}
+
static gboolean
gst_audio_base_sink_event (GstBaseSink * bsink, GstEvent * event)
{
if (sink->ringbuffer)
gst_audio_ring_buffer_set_flushing (sink->ringbuffer, FALSE);
break;
- case GST_EVENT_EOS:
- /* now wait till we played everything */
- gst_audio_base_sink_drain (sink);
- break;
default:
break;
}
- return TRUE;
+ return GST_BASE_SINK_CLASS (parent_class)->event (bsink, event);
}
static GstFlowReturn