From 3ea71a63f674e4fb01006f4c43ddef19e080187a Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Thu, 21 May 2020 17:12:55 -0400 Subject: [PATCH] v4l2: videodec: Fix broken template caps The profiles and levels were applied to the common caps instead of the copy. That had the side effect of setting profiles/level from one CODEC onto another. Leaving to encoder not being registered or not-negotiated errors. Part-of: --- sys/v4l2/gstv4l2videoenc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sys/v4l2/gstv4l2videoenc.c b/sys/v4l2/gstv4l2videoenc.c index f89d021963..ea574de6ac 100644 --- a/sys/v4l2/gstv4l2videoenc.c +++ b/sys/v4l2/gstv4l2videoenc.c @@ -1176,20 +1176,20 @@ gst_v4l2_video_enc_register (GstPlugin * plugin, GType type, GstV4l2VideoEncCData *cdata; GValue value = G_VALUE_INIT; + filtered_caps = gst_caps_intersect (src_caps, codec_caps); + if (codec != NULL && video_fd != -1) { if (gst_v4l2_codec_probe_levels (codec, video_fd, &value)) { - gst_caps_set_value (src_caps, "level", &value); + gst_caps_set_value (filtered_caps, "level", &value); g_value_unset (&value); } if (gst_v4l2_codec_probe_profiles (codec, video_fd, &value)) { - gst_caps_set_value (src_caps, "profile", &value); + gst_caps_set_value (filtered_caps, "profile", &value); g_value_unset (&value); } } - filtered_caps = gst_caps_intersect (src_caps, codec_caps); - cdata = g_new0 (GstV4l2VideoEncCData, 1); cdata->device = g_strdup (device_path); cdata->sink_caps = gst_caps_ref (sink_caps);