nvh265sldec: Always fill SPS/PPS related parameters

Address compare was not a valid approach since it works
only if SPS/PPS id are changed. Otherwise it will always point to
the same address of member variables of h265parser.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1941>
This commit is contained in:
Seungha Yang 2022-03-11 23:20:26 +09:00 committed by Tim-Philipp Müller
parent 35416105d8
commit d58aca531b

View file

@ -89,9 +89,6 @@ struct _GstNvH265Dec
GstVideoCodecState *output_state; GstVideoCodecState *output_state;
const GstH265SPS *last_sps;
const GstH265PPS *last_pps;
GstCudaContext *context; GstCudaContext *context;
GstNvDecoder *decoder; GstNvDecoder *decoder;
CUVIDPICPARAMS params; CUVIDPICPARAMS params;
@ -409,8 +406,6 @@ gst_nv_h265_dec_new_sequence (GstH265Decoder * decoder, const GstH265SPS * sps,
return GST_FLOW_NOT_NEGOTIATED; return GST_FLOW_NOT_NEGOTIATED;
} }
self->last_sps = NULL;
self->last_pps = NULL;
memset (&self->params, 0, sizeof (CUVIDPICPARAMS)); memset (&self->params, 0, sizeof (CUVIDPICPARAMS));
} }
@ -711,25 +706,11 @@ gst_nv_h265_dec_start_picture (GstH265Decoder * decoder,
h265_params->IrapPicFlag = GST_H265_IS_NAL_TYPE_IRAP (slice->nalu.type); h265_params->IrapPicFlag = GST_H265_IS_NAL_TYPE_IRAP (slice->nalu.type);
h265_params->IdrPicFlag = GST_H265_IS_NAL_TYPE_IDR (slice->nalu.type); h265_params->IdrPicFlag = GST_H265_IS_NAL_TYPE_IDR (slice->nalu.type);
if (!self->last_sps || self->last_sps != sps) {
GST_DEBUG_OBJECT (self, "Update params from SPS and PPS");
gst_nv_h265_dec_picture_params_from_sps (self, sps, h265_params); gst_nv_h265_dec_picture_params_from_sps (self, sps, h265_params);
if (!gst_nv_h265_dec_picture_params_from_pps (self, pps, h265_params)) { if (!gst_nv_h265_dec_picture_params_from_pps (self, pps, h265_params)) {
GST_ERROR_OBJECT (self, "Couldn't copy pps"); GST_ERROR_OBJECT (self, "Couldn't copy pps");
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }
self->last_sps = sps;
self->last_pps = pps;
} else if (!self->last_pps || self->last_pps != pps) {
GST_DEBUG_OBJECT (self, "Update params from PPS");
if (!gst_nv_h265_dec_picture_params_from_pps (self, pps, h265_params)) {
GST_ERROR_OBJECT (self, "Couldn't copy pps");
return GST_FLOW_ERROR;
}
self->last_pps = pps;
} else {
GST_TRACE_OBJECT (self, "SPS and PPS were not updated");
}
/* Fill reference */ /* Fill reference */
if (decoder->NumPocStCurrBefore > if (decoder->NumPocStCurrBefore >