summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStéphane Cerveau <scerveau@collabora.com>2020-04-07 19:59:12 +0200
committerStéphane Cerveau <scerveau@collabora.com>2020-04-08 16:54:24 +0200
commit84e99060760ee0d9b1e02d2bd98f333428102fdb (patch)
tree50acbd1a90a5d1474c3d92bedd62a0b9e548eb01
parent7d5175a80f55cee98f8d0dee40b2db2601e4b138 (diff)
downloadgst-omx-84e99060760ee0d9b1e02d2bd98f333428102fdb.tar.gz
omxh26xenc: fix coverity with frame test
Coverity was complaining with: Null pointer dereferences (REVERSE_INULL) Null-checking "frame" suggests that it may be null, but it has already been dereferenced on all paths leading to the check. The frame == NULL has been removed as 'frame' is actively used in the code above without any change of dereferencing and setting its value to NULL before the test. CID: 1461287
-rw-r--r--omx/gstomxh264enc.c4
-rw-r--r--omx/gstomxh265enc.c5
-rw-r--r--omx/gstomxvideo.c3
-rw-r--r--omx/gstomxvideoenc.c10
4 files changed, 13 insertions, 9 deletions
diff --git a/omx/gstomxh264enc.c b/omx/gstomxh264enc.c
index 94963e1..51d84a8 100644
--- a/omx/gstomxh264enc.c
+++ b/omx/gstomxh264enc.c
@@ -879,9 +879,7 @@ gst_omx_h264_enc_handle_output_frame (GstOMXVideoEnc * enc, GstOMXPort * port,
frame->output_buffer = hdrs;
flow_ret =
gst_video_encoder_finish_subframe (GST_VIDEO_ENCODER (self), frame);
-
- if (frame)
- gst_video_codec_frame_unref (frame);
+ gst_video_codec_frame_unref (frame);
return flow_ret;
} else if (self->headers) {
diff --git a/omx/gstomxh265enc.c b/omx/gstomxh265enc.c
index aaddd5f..3fd8c0d 100644
--- a/omx/gstomxh265enc.c
+++ b/omx/gstomxh265enc.c
@@ -730,13 +730,10 @@ gst_omx_h265_enc_handle_output_frame (GstOMXVideoEnc * enc, GstOMXPort * port,
buf->omx_buf->nFilledLen);
gst_buffer_unmap (hdrs, &map);
self->headers = g_list_append (self->headers, gst_buffer_ref (hdrs));
-
frame->output_buffer = hdrs;
flow_ret =
gst_video_encoder_finish_subframe (GST_VIDEO_ENCODER (self), frame);
-
- if (frame)
- gst_video_codec_frame_unref (frame);
+ gst_video_codec_frame_unref (frame);
return flow_ret;
} else if (self->headers) {
diff --git a/omx/gstomxvideo.c b/omx/gstomxvideo.c
index 28d7bd1..a761e70 100644
--- a/omx/gstomxvideo.c
+++ b/omx/gstomxvideo.c
@@ -225,7 +225,8 @@ gst_omx_video_find_nearest_frame (GstElement * element, GstOMXBuffer * buf,
GST_TIME_FORMAT ") seems too high (%" GST_TIME_FORMAT ")",
GST_TIME_ARGS (timestamp), best->system_frame_number,
GST_TIME_ARGS (best->pts), GST_TIME_ARGS (best_diff));
- }
+ } else
+ GST_WARNING_OBJECT (element, "No best frame has been found");
g_list_foreach (frames, (GFunc) gst_video_codec_frame_unref, NULL);
g_list_free (frames);
diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c
index 42a8db4..5da6085 100644
--- a/omx/gstomxvideoenc.c
+++ b/omx/gstomxvideoenc.c
@@ -1707,7 +1707,15 @@ gst_omx_video_enc_loop (GstOMXVideoEnc * self)
gst_video_encoder_get_frames (GST_VIDEO_ENCODER (self)));
g_assert (klass->handle_output_frame);
- flow_ret = klass->handle_output_frame (self, self->enc_out_port, buf, frame);
+
+ if (frame)
+ flow_ret =
+ klass->handle_output_frame (self, self->enc_out_port, buf, frame);
+ else {
+ gst_omx_port_release_buffer (self->enc_out_port, buf);
+ goto flow_error;
+ }
+
GST_DEBUG_OBJECT (self, "Finished frame: %s", gst_flow_get_name (flow_ret));