mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-23 07:38:16 +00:00
vaapidecode: unref video codec frame twice
We get one reference when the frame is passed to decode_handle_frame() and create another one in gst_vaapi_decoder_push_frame(). Usually the frame is handled in gst_vaapidecode_push_decoded_frame(). Here the frame is always released twice: gst_video_decoder_finish_frame() + gst_video_codec_frame_unref() or gst_video_decoder_drop_frame() + gst_video_codec_frame_unref(). In gst_vaapidecode_reset_full() both references to the frame must be released as well. Signed-off-by: Víctor Manuel Jáquez Leal <vjaquez@igalia.com> https://bugzilla.gnome.org/show_bug.cgi?id=743226
This commit is contained in:
parent
93d0141cc2
commit
a314b682b2
1 changed files with 2 additions and 0 deletions
|
@ -636,6 +636,7 @@ gst_vaapidecode_reset_full (GstVaapiDecode * decode, GstCaps * caps,
|
|||
|
||||
/* Reset timers if hard reset was requested (e.g. seek) */
|
||||
if (hard) {
|
||||
GstVideoDecoder *const vdec = GST_VIDEO_DECODER (decode);
|
||||
GstVideoCodecFrame *out_frame = NULL;
|
||||
|
||||
gst_vaapi_decoder_flush (decode->decoder);
|
||||
|
@ -643,6 +644,7 @@ gst_vaapidecode_reset_full (GstVaapiDecode * decode, GstCaps * caps,
|
|||
/* Purge all decoded frames as we don't need them (e.g. seek) */
|
||||
while (gst_vaapi_decoder_get_frame_with_timeout (decode->decoder,
|
||||
&out_frame, 0) == GST_VAAPI_DECODER_STATUS_SUCCESS) {
|
||||
gst_video_decoder_drop_frame (vdec, out_frame);
|
||||
gst_video_codec_frame_unref (out_frame);
|
||||
out_frame = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue