diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2014-06-19 11:26:41 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2014-06-19 18:34:05 +0200 |
commit | aee9d12b863ca3faa266b611e70b1bbeaeebb010 (patch) | |
tree | b88594bbb104a00ed6879d96685475e412ccc450 /sys/androidmedia/gstamcvideodec.c | |
parent | 880f3d8a185f0b126ebc2b0ad0b0c12969683053 (diff) | |
download | gstreamer-plugins-bad-aee9d12b863ca3faa266b611e70b1bbeaeebb010.tar.gz |
androidmedia: Also don't report warnings for queue/dequeue errors during flushing in error cases
... and fix a case where we released an invalid buffer index.
Diffstat (limited to 'sys/androidmedia/gstamcvideodec.c')
-rw-r--r-- | sys/androidmedia/gstamcvideodec.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c index d47bad6b7..dc9a5cd08 100644 --- a/sys/androidmedia/gstamcvideodec.c +++ b/sys/androidmedia/gstamcvideodec.c @@ -707,8 +707,9 @@ retry: if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err)) GST_ERROR_OBJECT (self, "Failed to release output buffer index %d", idx); - if (err) + if (err && !self->flushing) GST_ELEMENT_WARNING_FROM_ERROR (self, err); + g_clear_error (&err); goto invalid_buffer; } @@ -723,8 +724,9 @@ retry: if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err)) GST_ERROR_OBJECT (self, "Failed to release output buffer index %d", idx); - if (err) + if (err && !self->flushing) GST_ELEMENT_WARNING_FROM_ERROR (self, err); + g_clear_error (&err); goto flow_error; } @@ -735,8 +737,9 @@ retry: if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err)) GST_ERROR_OBJECT (self, "Failed to release output buffer index %d", idx); - if (err) + if (err && !self->flushing) GST_ELEMENT_WARNING_FROM_ERROR (self, err); + g_clear_error (&err); goto invalid_buffer; } @@ -1197,8 +1200,9 @@ gst_amc_video_dec_handle_frame (GstVideoDecoder * decoder, if (self->downstream_flow_ret != GST_FLOW_OK) { memset (&buffer_info, 0, sizeof (buffer_info)); gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info, &err); - if (err) + if (err && !self->flushing) GST_ELEMENT_WARNING_FROM_ERROR (self, err); + g_clear_error (&err); goto downstream_error; } @@ -1363,8 +1367,13 @@ gst_amc_video_dec_drain (GstAmcVideoDec * self, gboolean at_eos) ret = GST_FLOW_OK; } else { GST_ERROR_OBJECT (self, "Failed to queue input buffer"); - GST_ELEMENT_WARNING_FROM_ERROR (self, err); - ret = GST_FLOW_ERROR; + if (self->flushing) { + g_clear_error (&err); + ret = GST_FLOW_FLUSHING; + } else { + GST_ELEMENT_WARNING_FROM_ERROR (self, err); + ret = GST_FLOW_ERROR; + } } g_mutex_unlock (&self->drain_lock); |