textoverlay: ensure text buffer has writable metadata when modifying
authorMark Nauwelaerts <mnauw@users.sourceforge.net>
Sat, 1 Jul 2017 15:45:19 +0000 (17:45 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 4 Jul 2017 09:44:45 +0000 (10:44 +0100)
ext/pango/gstbasetextoverlay.c
tests/check/elements/textoverlay.c

index 44f5f529e3e8a62f53f847f0448550d22d575509..240a5dc935a8e839265e1e0a24cd7997ecb91528 100644 (file)
@@ -2581,6 +2581,8 @@ gst_base_text_overlay_text_chain (GstPad * pad, GstObject * parent,
   }
 
   if (in_seg) {
+    /* about to change metadata */
+    buffer = gst_buffer_make_writable (buffer);
     if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
       GST_BUFFER_TIMESTAMP (buffer) = clip_start;
     else if (GST_BUFFER_DURATION_IS_VALID (buffer))
index 359eca879fbc47f45a41bdb6f5cc19123f7c591e..a39bd6cc4f6978b94a80a04c7277383a2136485b 100644 (file)
@@ -894,7 +894,7 @@ GST_START_TEST (test_video_waits_for_text)
   fail_unless_equals_int (g_list_length (buffers), 1);
 
   /* text should still be stuck in textoverlay */
-  ASSERT_BUFFER_REFCOUNT (tbuf, "tbuf", 2);
+  ASSERT_MINI_OBJECT_REFCOUNT (gst_buffer_peek_memory (tbuf, 0), "tbuf-mem", 2);
 
   /* there should be no text rendered */
   outbuffer = GST_BUFFER_CAST (buffers->data);
@@ -917,7 +917,7 @@ GST_START_TEST (test_video_waits_for_text)
   fail_unless_equals_int (g_list_length (buffers), 2);
 
   /* text should still be stuck in textoverlay */
-  ASSERT_BUFFER_REFCOUNT (tbuf, "tbuf", 2);
+  ASSERT_MINI_OBJECT_REFCOUNT (gst_buffer_peek_memory (tbuf, 0), "tbuf-mem", 2);
 
   /* there should be text rendered */
   outbuffer = GST_BUFFER_CAST (buffers->next->data);
@@ -945,7 +945,7 @@ GST_START_TEST (test_video_waits_for_text)
   fail_unless (gst_pad_push (myvideosrcpad, inbuffer) == GST_FLOW_OK);
 
   /* but the text should no longer be stuck in textoverlay */
-  ASSERT_BUFFER_REFCOUNT (tbuf, "tbuf", 1);
+  ASSERT_MINI_OBJECT_REFCOUNT (gst_buffer_peek_memory (tbuf, 0), "tbuf-mem", 1);
 
   /* video buffer should have gone through after newsegment event */
   fail_unless_equals_int (g_list_length (buffers), 3);