summaryrefslogtreecommitdiff
path: root/gst-libs/gst/codecs/gsth264decoder.c
diff options
context:
space:
mode:
authorHe Junyan <junyan.he@intel.com>2021-07-20 23:49:12 +0800
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2021-07-21 15:23:17 +0000
commit573d3f5ba5725b59aeb245eed4a673aa39504d54 (patch)
treef4633e1584e7ed2d88b442ad477b8f3b13123131 /gst-libs/gst/codecs/gsth264decoder.c
parentbe223ad316bbd044dd9e3ea51e33b53edcd00b2b (diff)
downloadgstreamer-plugins-bad-573d3f5ba5725b59aeb245eed4a673aa39504d54.tar.gz
codecs: h264dec: Add help function of dpb_set_max_num_reorder_frames.
The max_num_reorder_frames can be useful for bump check. We store it in the DPB and no need for the decoder now. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2373>
Diffstat (limited to 'gst-libs/gst/codecs/gsth264decoder.c')
-rw-r--r--gst-libs/gst/codecs/gsth264decoder.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/gst-libs/gst/codecs/gsth264decoder.c b/gst-libs/gst/codecs/gsth264decoder.c
index da70095a6..144249854 100644
--- a/gst-libs/gst/codecs/gsth264decoder.c
+++ b/gst-libs/gst/codecs/gsth264decoder.c
@@ -109,7 +109,6 @@ struct _GstH264DecoderPrivate
gint max_frame_num;
gint max_pic_num;
gint max_long_term_frame_idx;
- gsize max_num_reorder_frames;
gint prev_frame_num;
gint prev_ref_frame_num;
@@ -1915,21 +1914,23 @@ gst_h264_decoder_update_max_num_reorder_frames (GstH264Decoder * self,
GstH264SPS * sps)
{
GstH264DecoderPrivate *priv = self->priv;
+ gsize max_num_reorder_frames = 0;
if (sps->vui_parameters_present_flag
&& sps->vui_parameters.bitstream_restriction_flag) {
- priv->max_num_reorder_frames = sps->vui_parameters.num_reorder_frames;
- if (priv->max_num_reorder_frames >
- gst_h264_dpb_get_max_num_frames (priv->dpb)) {
+ max_num_reorder_frames = sps->vui_parameters.num_reorder_frames;
+ if (max_num_reorder_frames > gst_h264_dpb_get_max_num_frames (priv->dpb)) {
GST_WARNING
("max_num_reorder_frames present, but larger than MaxDpbFrames (%d > %d)",
- (gint) priv->max_num_reorder_frames,
+ (gint) max_num_reorder_frames,
gst_h264_dpb_get_max_num_frames (priv->dpb));
- priv->max_num_reorder_frames = 0;
+ max_num_reorder_frames = 0;
return FALSE;
}
+ gst_h264_dpb_set_max_num_reorder_frames (priv->dpb, max_num_reorder_frames);
+
return TRUE;
}
@@ -1943,17 +1944,18 @@ gst_h264_decoder_update_max_num_reorder_frames (GstH264Decoder * self,
case 110:
case 122:
case 244:
- priv->max_num_reorder_frames = 0;
+ max_num_reorder_frames = 0;
break;
default:
- priv->max_num_reorder_frames =
- gst_h264_dpb_get_max_num_frames (priv->dpb);
+ max_num_reorder_frames = gst_h264_dpb_get_max_num_frames (priv->dpb);
break;
}
} else {
- priv->max_num_reorder_frames = gst_h264_dpb_get_max_num_frames (priv->dpb);
+ max_num_reorder_frames = gst_h264_dpb_get_max_num_frames (priv->dpb);
}
+ gst_h264_dpb_set_max_num_reorder_frames (priv->dpb, max_num_reorder_frames);
+
return TRUE;
}