From 6b339b5d3900b56089e39d9e8ec5b68d170df031 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Tue, 25 Jul 2023 15:15:58 +0200 Subject: [PATCH] videoflip: fix concurrent access when modifying the tag list We were checking if the tag list is writable, but it may actually be shared through the same event (tee upstream or multiple consumers). Fix a bug where multiple branches have a videoflip element checking the taglist. The first one was changing the orientation back to rotate-0 which was resetting the other instances. Part-of: --- .../gst/videofilter/gstvideoflip.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c b/subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c index 5cb7542d43..799513542b 100644 --- a/subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c +++ b/subprojects/gst-plugins-good/gst/videofilter/gstvideoflip.c @@ -1803,19 +1803,15 @@ 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 */ - 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); + /* Update the orientation tag as we rotate the video accordingly. + * The event (and so the tag list) can be shared so always copy both. */ + taglist = gst_tag_list_copy (taglist); - gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, - "image-orientation", "rotate-0", NULL); + gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, + "image-orientation", "rotate-0", NULL); - gst_event_unref (event); - event = gst_event_new_tag (taglist); - } + gst_event_unref (event); + event = gst_event_new_tag (taglist); } } else { // no orientation in tag