summaryrefslogtreecommitdiff
path: root/sys/androidmedia
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2012-09-17 13:46:15 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2012-10-15 16:28:41 +0200
commitf839a615a0888bd3dca7a81557688fa9c3c1ae56 (patch)
tree0b11cd5271e71f742e53d51a64fa8f2f84291df3 /sys/androidmedia
parentbc7d2006e3e1b30499ee5f8c1dd4d950bcb4c348 (diff)
downloadgstreamer-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.c3
-rw-r--r--sys/androidmedia/gstamcvideodec.c18
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;