videoflip: fix critical when tag list is not writable
authorGuillaume Desmottes <guillaume.desmottes@onestream.live>
Fri, 7 Jul 2023 10:33:37 +0000 (12:33 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 7 Jul 2023 13:59:33 +0000 (14:59 +0100)
Fix this pipeline where the tag list is not writable:

gst-launch-1.0 videotestsrc ! taginject tags="image-orientation=rotate-90" ! videoflip video-direction=auto \
  ! autovideosink

GStreamer-CRITICAL **: 12:34:36.310: gst_tag_list_add: assertion 'gst_tag_list_is_writable (list)' failed

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

subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c

index 003a79e..bd7cbeb 100644 (file)
@@ -1791,8 +1791,18 @@ gst_video_flip_sink_event (GstBaseTransform * trans, GstEvent * event)
 
         if (vf->method == GST_VIDEO_ORIENTATION_AUTO) {
           /* update the orientation tag as we rotate the video accordingly */
-          gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, "image-orientation",
-              "rotate-0", NULL);
+          if (gst_tag_list_is_writable (taglist)) {
+            gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
+                "image-orientation", "rotate-0", NULL);
+          } else {
+            taglist = gst_tag_list_copy (taglist);
+
+            gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
+                "image-orientation", "rotate-0", NULL);
+
+            gst_event_unref (event);
+            event = gst_event_new_tag (taglist);
+          }
         }
       }
       break;