mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
appsink: unref gstbuffer in prev sample early
Appsink will unref prev sample in dispose function. Which is later when V4L2 video decoder link with appsink as V4L2 video decoder will close V4L2 device fd during GST_STATE_CHANGE_READY_TO_NULL. If the video buffer return to V4L2 video decoder after the decoder closed V4L2 device fd, V4L2 can't release the video frame buffer which allocated with MMAP mode as application can't call VIDIOC_REQBUFS 0 to release the video frame buffer by V4L2 driver. The memory of the video frame will leak. Unref the gstbuffer in stop() function, so V4L2 video decoder can received all video frame buffers and release it before close V4L2 device fd. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4820>
This commit is contained in:
parent
cdc502f524
commit
e8f9bd1649
1 changed files with 5 additions and 0 deletions
|
@ -775,6 +775,11 @@ gst_app_sink_stop (GstBaseSink * psink)
|
||||||
gst_caps_replace (&priv->last_caps, NULL);
|
gst_caps_replace (&priv->last_caps, NULL);
|
||||||
gst_segment_init (&priv->preroll_segment, GST_FORMAT_UNDEFINED);
|
gst_segment_init (&priv->preroll_segment, GST_FORMAT_UNDEFINED);
|
||||||
gst_segment_init (&priv->last_segment, GST_FORMAT_UNDEFINED);
|
gst_segment_init (&priv->last_segment, GST_FORMAT_UNDEFINED);
|
||||||
|
priv->sample = gst_sample_make_writable (priv->sample);
|
||||||
|
gst_sample_set_buffer (priv->sample, NULL);
|
||||||
|
gst_sample_set_buffer_list (priv->sample, NULL);
|
||||||
|
gst_sample_set_caps (priv->sample, NULL);
|
||||||
|
gst_sample_set_segment (priv->sample, NULL);
|
||||||
g_mutex_unlock (&priv->mutex);
|
g_mutex_unlock (&priv->mutex);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in a new issue