diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-09-17 13:46:15 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-10-15 16:28:41 +0200 |
commit | f839a615a0888bd3dca7a81557688fa9c3c1ae56 (patch) | |
tree | 0b11cd5271e71f742e53d51a64fa8f2f84291df3 /sys/androidmedia | |
parent | bc7d2006e3e1b30499ee5f8c1dd4d950bcb4c348 (diff) | |
download | gstreamer-plugins-bad-f839a615a0888bd3dca7a81557688fa9c3c1ae56.tar.gz |
Fix flushing logic to unbreak handling of flushing seeks
Diffstat (limited to 'sys/androidmedia')
-rw-r--r-- | sys/androidmedia/gstamcaudiodec.c | 3 | ||||
-rw-r--r-- | sys/androidmedia/gstamcvideodec.c | 18 |
2 files changed, 4 insertions, 17 deletions
diff --git a/sys/androidmedia/gstamcaudiodec.c b/sys/androidmedia/gstamcaudiodec.c index f51fbef5e..0b49935bc 100644 --- a/sys/androidmedia/gstamcaudiodec.c +++ b/sys/androidmedia/gstamcaudiodec.c @@ -928,10 +928,8 @@ gst_amc_audio_dec_flush (GstAudioDecoder * decoder, gboolean hard) return; } - gst_amc_audio_dec_drain (self); self->flushing = TRUE; gst_amc_codec_flush (self->codec); - self->flushing = FALSE; /* Wait until the srcpad loop is finished, * unlock GST_AUDIO_DECODER_STREAM_LOCK to prevent deadlocks @@ -940,6 +938,7 @@ gst_amc_audio_dec_flush (GstAudioDecoder * decoder, gboolean hard) GST_PAD_STREAM_LOCK (GST_AUDIO_DECODER_SRC_PAD (self)); GST_PAD_STREAM_UNLOCK (GST_AUDIO_DECODER_SRC_PAD (self)); GST_AUDIO_DECODER_STREAM_LOCK (self); + self->flushing = FALSE; /* Start the srcpad loop again */ self->last_upstream_ts = 0; diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c index 8f5826046..1185fce05 100644 --- a/sys/androidmedia/gstamcvideodec.c +++ b/sys/androidmedia/gstamcvideodec.c @@ -886,7 +886,7 @@ retry: /*} */ if (idx < 0) { - if (self->flushing) + if (self->flushing || self->downstream_flow_ret == GST_FLOW_WRONG_STATE) goto flushing; switch (idx) { @@ -996,7 +996,7 @@ retry: if ((flow_ret = gst_video_decoder_alloc_output_frame (GST_VIDEO_DECODER (self), frame)) != GST_FLOW_OK) { GST_ERROR_OBJECT (self, "Failed to allocate buffer"); - goto failed_allocate; + goto flow_error; } if (!gst_amc_video_dec_fill_buffer (self, idx, &buffer_info, @@ -1124,17 +1124,6 @@ invalid_buffer: GST_VIDEO_DECODER_STREAM_UNLOCK (self); return; } - -failed_allocate: - { - GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL), - ("Failed to allocate output buffer")); - gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ()); - gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); - self->downstream_flow_ret = GST_FLOW_ERROR; - GST_VIDEO_DECODER_STREAM_UNLOCK (self); - return; - } } static gboolean @@ -1299,10 +1288,8 @@ gst_amc_video_dec_reset (GstVideoDecoder * decoder, gboolean hard) return TRUE; } - gst_amc_video_dec_drain (self); self->flushing = TRUE; gst_amc_codec_flush (self->codec); - self->flushing = FALSE; /* Wait until the srcpad loop is finished, * unlock GST_VIDEO_DECODER_STREAM_LOCK to prevent deadlocks @@ -1311,6 +1298,7 @@ gst_amc_video_dec_reset (GstVideoDecoder * decoder, gboolean hard) GST_PAD_STREAM_LOCK (GST_VIDEO_DECODER_SRC_PAD (self)); GST_PAD_STREAM_UNLOCK (GST_VIDEO_DECODER_SRC_PAD (self)); GST_VIDEO_DECODER_STREAM_LOCK (self); + self->flushing = FALSE; /* Start the srcpad loop again */ self->last_upstream_ts = 0; |