From 6e41e31e6cd52ed2bef6b252206c093fc88ca70e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 9 Nov 2011 15:46:02 +0100 Subject: [PATCH] omxvideodec: Always flush the ports and make sure no processing is happening in ::reset This fixes a race condition that happened when seeking very often in a short period of time. --- omx/gstomxvideodec.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c index 0c32256..4b3dbaf 100644 --- a/omx/gstomxvideodec.c +++ b/omx/gstomxvideodec.c @@ -1206,23 +1206,19 @@ gst_omx_video_dec_reset (GstBaseVideoDecoder * decoder) g_list_free (GST_BASE_VIDEO_CODEC (self)->frames); GST_BASE_VIDEO_CODEC (self)->frames = NULL; - if (self->started) { - self->started = FALSE; - - gst_omx_port_set_flushing (self->in_port, TRUE); - gst_omx_port_set_flushing (self->out_port, TRUE); + gst_omx_port_set_flushing (self->in_port, TRUE); + gst_omx_port_set_flushing (self->out_port, TRUE); - /* Wait until the srcpad loop is finished, - * unlock GST_BASE_VIDEO_CODEC_STREAM_LOCK to prevent deadlocks - * caused by using this lock from inside the loop function */ - GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (self); - GST_PAD_STREAM_LOCK (GST_BASE_VIDEO_CODEC_SRC_PAD (self)); - GST_PAD_STREAM_UNLOCK (GST_BASE_VIDEO_CODEC_SRC_PAD (self)); - GST_BASE_VIDEO_CODEC_STREAM_LOCK (self); + /* Wait until the srcpad loop is finished, + * unlock GST_BASE_VIDEO_CODEC_STREAM_LOCK to prevent deadlocks + * caused by using this lock from inside the loop function */ + GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (self); + GST_PAD_STREAM_LOCK (GST_BASE_VIDEO_CODEC_SRC_PAD (self)); + GST_PAD_STREAM_UNLOCK (GST_BASE_VIDEO_CODEC_SRC_PAD (self)); + GST_BASE_VIDEO_CODEC_STREAM_LOCK (self); - gst_omx_port_set_flushing (self->in_port, FALSE); - gst_omx_port_set_flushing (self->out_port, FALSE); - } + gst_omx_port_set_flushing (self->in_port, FALSE); + gst_omx_port_set_flushing (self->out_port, FALSE); /* Start the srcpad loop again */ self->eos = FALSE; -- 2.7.4