v4l2slh264dec: Hold on picture buffers
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 4 Mar 2020 02:22:52 +0000 (21:22 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 31 Mar 2020 13:34:05 +0000 (09:34 -0400)
These buffers should not be reused for decoding until they are no longer
referenced.

sys/v4l2codecs/gstv4l2codech264dec.c

index 70660b3..24922e8 100644 (file)
@@ -548,10 +548,12 @@ finish_frame:
   gst_v4l2_request_set_done (request);
   frame = gst_video_decoder_get_frame (GST_VIDEO_DECODER (self),
       picture->system_frame_number);
-
   g_return_val_if_fail (frame, GST_FLOW_ERROR);
+  g_return_val_if_fail (frame->output_buffer, GST_FLOW_ERROR);
 
-  gst_h264_picture_set_user_data (picture, NULL, NULL);
+  /* Hold on reference buffers for the rest of the picture lifetime */
+  gst_h264_picture_set_user_data (picture,
+      gst_buffer_ref (frame->output_buffer), (GDestroyNotify) gst_buffer_unref);
   return gst_video_decoder_finish_frame (GST_VIDEO_DECODER (self), frame);
 }