mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-06-08 09:09:26 +00:00
v4l2videodec: release decode only frame buffer from decoder input frame list
1. AV1 parse split every sub frame buffer and send to v4l2 video decoder, there are decode only frames and show frames, v4l2 video decoder only dequeue show frames, so the decode only frames are still in decoder input frame list, which lead warning log 'Too old frames, bug in decoder -- please file a bug'. 2.Release these decode only frames when dequeue next show frame.
This commit is contained in:
parent
3811894d9c
commit
c22208c469
|
@ -2446,6 +2446,10 @@ gst_video_decoder_chain_forward (GstVideoDecoder * decoder,
|
|||
|
||||
priv->input_offset += gst_buffer_get_size (buf);
|
||||
|
||||
if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DECODE_ONLY)) {
|
||||
GST_VIDEO_CODEC_FRAME_SET_DECODE_ONLY (priv->current_frame);
|
||||
}
|
||||
|
||||
if (priv->packetized) {
|
||||
GstVideoCodecFrame *frame;
|
||||
gboolean was_keyframe = FALSE;
|
||||
|
|
|
@ -790,9 +790,18 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
|
|||
gboolean warned = FALSE;
|
||||
|
||||
/* Garbage collect old frames in case of codec bugs */
|
||||
while ((oldest_frame = gst_video_decoder_get_oldest_frame (decoder)) &&
|
||||
check_system_frame_number_too_old (frame->system_frame_number,
|
||||
oldest_frame->system_frame_number)) {
|
||||
while ((oldest_frame = gst_video_decoder_get_oldest_frame (decoder))) {
|
||||
if (frame->system_frame_number > oldest_frame->system_frame_number &&
|
||||
GST_VIDEO_CODEC_FRAME_IS_DECODE_ONLY (oldest_frame)) {
|
||||
gst_video_decoder_finish_frame (decoder, oldest_frame);
|
||||
oldest_frame = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (G_LIKELY (!check_system_frame_number_too_old (frame->system_frame_number,
|
||||
oldest_frame->system_frame_number)))
|
||||
break;
|
||||
|
||||
if (oldest_frame->system_frame_number > 0) {
|
||||
gst_video_decoder_drop_frame (decoder, oldest_frame);
|
||||
oldest_frame = NULL;
|
||||
|
|
Loading…
Reference in a new issue