x264: Allow renegotiation but prefer current caps
authorOlivier Crête <olivier.crete@collabora.com>
Mon, 4 Jul 2011 22:03:49 +0000 (18:03 -0400)
committerOlivier Crête <olivier.crete@collabora.com>
Wed, 13 Jul 2011 18:02:26 +0000 (14:02 -0400)
ext/x264/gstx264enc.c

index 15dd190..f3377bd 100644 (file)
@@ -1655,10 +1655,6 @@ gst_x264_enc_sink_get_caps (GstPad * pad)
   GstPad *peer;
   GstCaps *caps;
 
-  /* If we already have caps return them */
-  if (GST_PAD_CAPS (pad))
-    return gst_caps_ref (GST_PAD_CAPS (pad));
-
   encoder = GST_X264_ENC (gst_pad_get_parent (pad));
   if (!encoder)
     return gst_caps_new_empty ();
@@ -1692,6 +1688,14 @@ gst_x264_enc_sink_get_caps (GstPad * pad)
     caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
   }
 
+  /* If we already have caps return them */
+  if (GST_PAD_CAPS (pad) && gst_caps_can_intersect (GST_PAD_CAPS (pad), caps)) {
+    GstCaps *tmpcaps = gst_caps_copy (GST_PAD_CAPS (pad));
+
+    gst_caps_merge (tmpcaps, caps);
+    caps = tmpcaps;
+  }
+
   gst_object_unref (encoder);
 
   return caps;