videodecoder: Make sure we have an actually writable buffer when modifying metadata
authorSebastian Dröge <sebastian@centricular.com>
Mon, 24 Jul 2017 13:48:17 +0000 (16:48 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 24 Jul 2017 13:48:17 +0000 (16:48 +0300)
avviddec keeps references to the buffers internally for example, in
which case we need to do a shallow copy of the buffer.

gst-libs/gst/video/gstvideodecoder.c

index 7f0b569d61c578322ad8d6ad1eace3d6eab6de1d..d5d626364053875cbe6963d9854f677ac72a307f 100644 (file)
@@ -3010,7 +3010,9 @@ gst_video_decoder_finish_frame (GstVideoDecoder * decoder,
     goto done;
   }
 
-  output_buffer = frame->output_buffer;
+  /* We need a writable buffer for the metadata changes below */
+  output_buffer = frame->output_buffer =
+      gst_buffer_make_writable (frame->output_buffer);
 
   GST_BUFFER_FLAG_UNSET (output_buffer, GST_BUFFER_FLAG_DELTA_UNIT);
 
@@ -3040,9 +3042,7 @@ gst_video_decoder_finish_frame (GstVideoDecoder * decoder,
 
   /* Get an additional ref to the buffer, which is going to be pushed
    * downstream, the original ref is owned by the frame
-   *
-   * FIXME: clip_and_push_buf() changes buffer metadata but the buffer
-   * might have a refcount > 1 */
+   */
   output_buffer = gst_buffer_ref (output_buffer);
 
   /* Release frame so the buffer is writable when we push it downstream