videoconvertscale: ensure writable caps when fixating format
authorMatthew Waters <matthew@centricular.com>
Mon, 4 Jul 2022 07:27:50 +0000 (17:27 +1000)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 4 Jul 2022 19:57:10 +0000 (19:57 +0000)
gst_video_convert_scale_get_fixed_format() receives 'othercaps' from
basetransforms' fixate_caps() vmethod which explicitly mentions that
'`othercaps` may not be writable'.

The gst_caps_intersect() call just before may or may not produce new
caps. Particularly in cases like EMPTY or ANY caps on either of the
inputs, only a ref is taken and returned to the caller.

As a result, gst_video_convert_scale_fixate_format() may have attempted
to modify a non-writable caps structure.

Fix by adding a gst_caps_make_writable().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2709>

subprojects/gst-plugins-base/gst/videoconvertscale/gstvideoconvertscale.c

index fabc63c..7c10252 100644 (file)
@@ -1249,6 +1249,7 @@ gst_video_convert_scale_get_fixed_format (GstBaseTransform * trans,
     result = gst_caps_copy (othercaps);
   }
 
+  result = gst_caps_make_writable (result);
   gst_video_convert_scale_fixate_format (trans, caps, result);
 
   /* fixate remaining fields */