v4l2videoenc: Skip negotiation of profiles/level if no codec
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Thu, 25 Jun 2020 20:47:42 +0000 (16:47 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 26 Jun 2020 17:37:21 +0000 (13:37 -0400)
The codec structure is optional and not used for fwht test codec. This
was leading to a crash dereferencing NULL pointer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/650>

sys/v4l2/gstv4l2videoenc.c

index ea574de..39f6a3a 100644 (file)
@@ -530,6 +530,9 @@ gst_v4l2_video_enc_negotiate (GstVideoEncoder * encoder)
   if (self->input_state)
     return TRUE;
 
+  if (!codec)
+    goto done;
+
   allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
 
   if (allowed_caps) {
@@ -581,6 +584,7 @@ gst_v4l2_video_enc_negotiate (GstVideoEncoder * encoder)
   if (codec->level_cid)
     gst_structure_set (s, "level", G_TYPE_STRING, ctx.level, NULL);
 
+done:
   if (!GST_VIDEO_ENCODER_CLASS (parent_class)->negotiate (encoder))
     return FALSE;