summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2018-04-18 12:42:55 +0200
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2018-04-18 14:26:53 +0200
commit7f4949317970beeb2eb370656407b72c7593eac5 (patch)
tree2392f3a4a66d646387fce63263805716b4deedf2
parent89e04661f71fe4d3501cf7c2a2f54ec0c00af3fc (diff)
downloadgst-omx-7f4949317970beeb2eb370656407b72c7593eac5.tar.gz
omxvideoenc/dec: fix handling of component enabling failing
- Report the error from OMX if any (OMX_EventError) - If not report the failing to the application (GST_ELEMENT_ERROR) - return GST_FLOW_ERROR rather than FALSE - don't leak @frame https://bugzilla.gnome.org/show_bug.cgi?id=795352
-rw-r--r--omx/gstomxvideodec.c17
-rw-r--r--omx/gstomxvideoenc.c17
2 files changed, 32 insertions, 2 deletions
diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
index 1b4207f..812eb29 100644
--- a/omx/gstomxvideodec.c
+++ b/omx/gstomxvideodec.c
@@ -2733,7 +2733,7 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder,
if (gst_omx_port_is_flushing (self->dec_out_port)) {
if (!gst_omx_video_dec_enable (self, frame->input_buffer))
- return FALSE;
+ goto enable_error;
}
GST_DEBUG_OBJECT (self, "Starting task");
@@ -3001,6 +3001,21 @@ map_failed:
return GST_FLOW_ERROR;
}
+enable_error:
+ {
+ /* Report the OMX error, if any */
+ if (gst_omx_component_get_last_error (self->dec) != OMX_ErrorNone)
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to enable OMX decoder: %s (0x%08x)",
+ gst_omx_component_get_last_error_string (self->dec),
+ gst_omx_component_get_last_error (self->dec)));
+ else
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to enable OMX decoder"));
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_ERROR;
+ }
+
component_error:
{
gst_video_codec_frame_unref (frame);
diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c
index dfc6244..2079bba 100644
--- a/omx/gstomxvideoenc.c
+++ b/omx/gstomxvideoenc.c
@@ -2582,7 +2582,7 @@ gst_omx_video_enc_handle_frame (GstVideoEncoder * encoder,
if (!self->started) {
if (gst_omx_port_is_flushing (self->enc_out_port)) {
if (!gst_omx_video_enc_enable (self, frame->input_buffer))
- return FALSE;
+ goto enable_error;
}
GST_DEBUG_OBJECT (self, "Starting task");
@@ -2758,6 +2758,21 @@ flow_error:
return self->downstream_flow_ret;
}
+enable_error:
+ {
+ /* Report the OMX error, if any */
+ if (gst_omx_component_get_last_error (self->enc) != OMX_ErrorNone)
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to enable OMX encoder: %s (0x%08x)",
+ gst_omx_component_get_last_error_string (self->enc),
+ gst_omx_component_get_last_error (self->enc)));
+ else
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to enable OMX encoder"));
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_ERROR;
+ }
+
component_error:
{
GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),