summaryrefslogtreecommitdiff
path: root/gst/playback/gststreamsynchronizer.c
diff options
context:
space:
mode:
authorSong Bing <b06498@freescale.com>2015-06-17 18:03:09 +0800
committerSebastian Dröge <sebastian@centricular.com>2015-06-23 15:28:49 +0200
commitd2e942ac02d770e1d0cc96cc6d95c85648b4efd9 (patch)
tree276c07008048678110bdc838ac75fc6eeed3582f /gst/playback/gststreamsynchronizer.c
parentbd508a343f1ee729a71fecce9df18b4321aea2ee (diff)
streamsynchronizer: Unblock EOS wait when track switching.
sink_event () will blocked on EOS event. which will cause can't send event when switch EOS track to non-EOS one. https://bugzilla.gnome.org/show_bug.cgi?id=750761
Diffstat (limited to 'gst/playback/gststreamsynchronizer.c')
-rw-r--r--gst/playback/gststreamsynchronizer.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
index d41767037..b55e328a9 100644
--- a/gst/playback/gststreamsynchronizer.c
+++ b/gst/playback/gststreamsynchronizer.c
@@ -513,6 +513,25 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent,
GST_STREAM_SYNCHRONIZER_UNLOCK (self);
break;
}
+ /* unblocking EOS wait when track switch. */
+ case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:{
+ if (gst_event_has_name (event, "playsink-custom-video-flush")
+ || gst_event_has_name (event, "playsink-custom-audio-flush")
+ || gst_event_has_name (event, "playsink-custom-subtitle-flush")) {
+ GstStream *stream;
+
+ GST_STREAM_SYNCHRONIZER_LOCK (self);
+ stream = gst_pad_get_element_private (pad);
+ if (stream) {
+ stream->is_eos = FALSE;
+ stream->eos_sent = FALSE;
+ stream->wait = FALSE;
+ g_cond_broadcast (&stream->stream_finish_cond);
+ }
+ GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+ }
+ break;
+ }
case GST_EVENT_EOS:{
GstStream *stream;
GList *l;