From 7b31c89f25329839959e2e634f559c1b74f6aece Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Fri, 7 Jul 2023 12:33:37 +0200 Subject: [PATCH] videoflip: fix critical when tag list is not writable 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: --- .../gst/videofilter/gstvideoflip.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c b/subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c index d8b9dacf88..5cb7542d43 100644 --- a/subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c +++ b/subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c @@ -1804,8 +1804,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); + } } } else { // no orientation in tag