From 1d413ace640c679ba7fbecec07f2bea3d98360b2 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Mon, 2 Jul 2012 14:26:50 +0200 Subject: [PATCH] videooverlaycomposition: ensure proper buffer copy This is only temporary and could and should be modified to use regular buffer copy once https://bugzilla.gnome.org/show_bug.cgi?id=679145 is resolved. --- gst-libs/gst/video/video-overlay-composition.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/video/video-overlay-composition.c b/gst-libs/gst/video/video-overlay-composition.c index d614ba045f..f712d9d503 100644 --- a/gst-libs/gst/video/video-overlay-composition.c +++ b/gst-libs/gst/video/video-overlay-composition.c @@ -1015,6 +1015,22 @@ gst_video_overlay_rectangle_apply_global_alpha (GstVideoOverlayRectangle * rect, rect->applied_global_alpha = global_alpha; } +/* need real independent buffer copy; + * see also https://bugzilla.gnome.org/show_bug.cgi?id=679145 */ +static GstBuffer * +__gst_buffer_copy (GstBuffer * buf) +{ + GstBuffer *newb; + GstMapInfo map; + + newb = gst_buffer_new_and_alloc (gst_buffer_get_size (buf)); + gst_buffer_map (buf, &map, GST_MAP_READ); + gst_buffer_fill (newb, 0, map.data, map.size); + gst_buffer_unmap (buf, &map); + + return newb; +} + static GstBuffer * gst_video_overlay_rectangle_get_pixels_argb_internal (GstVideoOverlayRectangle * rectangle, guint * stride, GstVideoOverlayFormatFlags flags, @@ -1096,7 +1112,7 @@ gst_video_overlay_rectangle_get_pixels_argb_internal (GstVideoOverlayRectangle * } else { /* if we don't have to scale, we have to modify the alpha values, so we * need to make a copy of the pixel memory (and we take ownership below) */ - buf = gst_buffer_copy (rectangle->pixels); + buf = __gst_buffer_copy (rectangle->pixels); } new_flags = rectangle->flags;