From 83b056cb773ca2a9db5f3c837b7aa6c481cec1f8 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Thu, 5 Mar 2020 17:23:34 +0900 Subject: [PATCH] h265decoder: Port to nal type classification macro ... and remove namespaceless macro methods from baseclass --- gst-libs/gst/codecs/gsth265decoder.c | 37 +++++++++++++++++----------- gst-libs/gst/codecs/gsth265decoder.h | 18 -------------- sys/d3d11/gstd3d11h265dec.c | 6 ++--- 3 files changed, 25 insertions(+), 36 deletions(-) diff --git a/gst-libs/gst/codecs/gsth265decoder.c b/gst-libs/gst/codecs/gsth265decoder.c index 09ca56a187..560b82d1f6 100644 --- a/gst-libs/gst/codecs/gsth265decoder.c +++ b/gst-libs/gst/codecs/gsth265decoder.c @@ -340,7 +340,7 @@ gst_h265_decoder_preprocess_slice (GstH265Decoder * self, GstH265Slice * slice) return FALSE; } - if (IS_IDR (nalu->type)) { + if (GST_H265_IS_NAL_TYPE_IDR (nalu->type)) { GST_DEBUG_OBJECT (self, "IDR nalu, clear dpb"); gst_h265_decoder_drain (GST_VIDEO_DECODER (self)); } @@ -708,17 +708,20 @@ gst_h265_decoder_fill_picture_from_slice (GstH265Decoder * self, * 4) first picture that follows an end of sequence NAL unit in decoding order * 5) has HandleCraAsBlaFlag == 1 (set by external means, so not considering ) */ - if (IS_IDR (nalu->type) || IS_BLA (nalu->type) || - (IS_CRA (nalu->type) && priv->new_bitstream) || priv->prev_nal_is_eos) { + if (GST_H265_IS_NAL_TYPE_IDR (nalu->type) || + GST_H265_IS_NAL_TYPE_BLA (nalu->type) || + (GST_H265_IS_NAL_TYPE_CRA (nalu->type) && priv->new_bitstream) || + priv->prev_nal_is_eos) { picture->NoRaslOutputFlag = TRUE; } - if (IS_IRAP (nalu->type)) { + if (GST_H265_IS_NAL_TYPE_IRAP (nalu->type)) { picture->IntraPicFlag = TRUE; priv->associated_irap_NoRaslOutputFlag = picture->NoRaslOutputFlag; } - if (IS_RASL (nalu->type) && priv->associated_irap_NoRaslOutputFlag) { + if (GST_H265_IS_NAL_TYPE_RASL (nalu->type) && + priv->associated_irap_NoRaslOutputFlag) { picture->output_flag = FALSE; } else { picture->output_flag = slice_hdr->pic_output_flag; @@ -762,21 +765,24 @@ gst_h265_decoder_calculate_poc (GstH265Decoder * self, const GstH265NalUnit *nalu = &slice->nalu; const GstH265SPS *sps = priv->active_sps; gint32 MaxPicOrderCntLsb = 1 << (sps->log2_max_pic_order_cnt_lsb_minus4 + 4); + gboolean is_irap; GST_DEBUG_OBJECT (self, "decode PicOrderCntVal"); priv->prev_poc_lsb = priv->poc_lsb; priv->prev_poc_msb = priv->poc_msb; - if (!(IS_IRAP (nalu->type) && picture->NoRaslOutputFlag)) { + is_irap = GST_H265_IS_NAL_TYPE_IRAP (nalu->type); + + if (!(is_irap && picture->NoRaslOutputFlag)) { priv->prev_poc_lsb = priv->prev_tid0pic_poc_lsb; priv->prev_poc_msb = priv->prev_tid0pic_poc_msb; } /* Finding PicOrderCntMsb */ - if (IS_IRAP (nalu->type) && picture->NoRaslOutputFlag) + if (is_irap && picture->NoRaslOutputFlag) { priv->poc_msb = 0; - else { + } else { /* (8-1) */ if ((slice_hdr->pic_order_cnt_lsb < priv->prev_poc_lsb) && ((priv->prev_poc_lsb - slice_hdr->pic_order_cnt_lsb) >= @@ -797,7 +803,7 @@ gst_h265_decoder_calculate_poc (GstH265Decoder * self, priv->poc_msb + slice_hdr->pic_order_cnt_lsb; priv->poc_lsb = picture->pic_order_cnt_lsb = slice_hdr->pic_order_cnt_lsb; - if (IS_IDR (nalu->type)) { + if (GST_H265_IS_NAL_TYPE_IDR (nalu->type)) { picture->pic_order_cnt = 0; picture->pic_order_cnt_lsb = 0; priv->poc_lsb = 0; @@ -812,8 +818,8 @@ gst_h265_decoder_calculate_poc (GstH265Decoder * self, "PicOrderCntVal %d, (lsb %d)", picture->pic_order_cnt, picture->pic_order_cnt_lsb); - if (nalu->temporal_id_plus1 == 1 && !IS_RASL (nalu->type) && - !IS_RADL (nalu->type) && nal_is_ref (nalu->type)) { + if (nalu->temporal_id_plus1 == 1 && !GST_H265_IS_NAL_TYPE_RASL (nalu->type) && + !GST_H265_IS_NAL_TYPE_RADL (nalu->type) && nal_is_ref (nalu->type)) { priv->prev_tid0pic_poc_lsb = slice_hdr->pic_order_cnt_lsb; priv->prev_tid0pic_poc_msb = priv->poc_msb; } @@ -962,13 +968,13 @@ gst_h265_decoder_prepare_rps (GstH265Decoder * self, const GstH265Slice * slice, gint i, j, k; /* if it is an irap pic, set all ref pics in dpb as unused for ref */ - if (IS_IRAP (nalu->type) && picture->NoRaslOutputFlag) { + if (GST_H265_IS_NAL_TYPE_IRAP (nalu->type) && picture->NoRaslOutputFlag) { GST_DEBUG_OBJECT (self, "Mark all pictures in DPB as non-ref"); gst_h265_dpb_mark_all_non_ref (priv->dpb); } /* Reset everything for IDR */ - if (IS_IDR (nalu->type)) { + if (GST_H265_IS_NAL_TYPE_IDR (nalu->type)) { memset (priv->PocStCurrBefore, 0, sizeof (priv->PocStCurrBefore)); memset (priv->PocStCurrAfter, 0, sizeof (priv->PocStCurrAfter)); memset (priv->PocStFoll, 0, sizeof (priv->PocStFoll)); @@ -1150,7 +1156,8 @@ gst_h265_decoder_dpb_init (GstH265Decoder * self, const GstH265Slice * slice, const GstH265SliceHdr *slice_hdr = &slice->header; const GstH265NalUnit *nalu = &slice->nalu; - if (IS_IRAP (nalu->type) && picture->NoRaslOutputFlag && !priv->new_bitstream) { + if (GST_H265_IS_NAL_TYPE_IRAP (nalu->type) && picture->NoRaslOutputFlag + && !priv->new_bitstream) { if (nalu->type == GST_H265_NAL_SLICE_CRA_NUT) picture->NoOutputOfPriorPicsFlag = TRUE; else @@ -1182,7 +1189,7 @@ gst_h265_decoder_start_current_picture (GstH265Decoder * self) /* Drop all RASL pictures having NoRaslOutputFlag is TRUE for the * associated IRAP picture */ - if (IS_RASL (priv->current_slice.nalu.type) && + if (GST_H265_IS_NAL_TYPE_RASL (priv->current_slice.nalu.type) && priv->associated_irap_NoRaslOutputFlag) { GST_DEBUG_OBJECT (self, "Drop current picture"); gst_h265_picture_replace (&priv->current_picture, NULL); diff --git a/gst-libs/gst/codecs/gsth265decoder.h b/gst-libs/gst/codecs/gsth265decoder.h index 4999a0df18..7c2e8d7c03 100644 --- a/gst-libs/gst/codecs/gsth265decoder.h +++ b/gst-libs/gst/codecs/gsth265decoder.h @@ -40,24 +40,6 @@ typedef struct _GstH265Decoder GstH265Decoder; typedef struct _GstH265DecoderClass GstH265DecoderClass; typedef struct _GstH265DecoderPrivate GstH265DecoderPrivate; -#define IS_IDR(nal_type) \ - ((nal_type) == GST_H265_NAL_SLICE_IDR_W_RADL || (nal_type) == GST_H265_NAL_SLICE_IDR_N_LP) - -#define IS_IRAP(nal_type) \ - ((nal_type) >= GST_H265_NAL_SLICE_BLA_W_LP && (nal_type) <= RESERVED_IRAP_NAL_TYPE_MAX) - -#define IS_BLA(nal_type) \ - ((nal_type) >= GST_H265_NAL_SLICE_BLA_W_LP && (nal_type) <= GST_H265_NAL_SLICE_BLA_N_LP) - -#define IS_CRA(nal_type) \ - ((nal_type) == GST_H265_NAL_SLICE_CRA_NUT) - -#define IS_RADL(nal_type) \ - ((nal_type) >= GST_H265_NAL_SLICE_RADL_N && (nal_type) <= GST_H265_NAL_SLICE_RADL_R) - -#define IS_RASL(nal_type) \ - ((nal_type) >= GST_H265_NAL_SLICE_RASL_N && (nal_type) <= GST_H265_NAL_SLICE_RASL_R) - /** * GstH265Decoder: * diff --git a/sys/d3d11/gstd3d11h265dec.c b/sys/d3d11/gstd3d11h265dec.c index 3adf085a6f..1372b0e51a 100644 --- a/sys/d3d11/gstd3d11h265dec.c +++ b/sys/d3d11/gstd3d11h265dec.c @@ -1260,9 +1260,9 @@ gst_d3d11_h265_dec_decode_slice (GstH265Decoder * decoder, gst_d3d11_h265_dec_fill_picture_params (self, &slice->header, &pic_params); pic_params.CurrPic.Index7Bits = view->view_id; - pic_params.IrapPicFlag = IS_IRAP (slice->nalu.type); - pic_params.IdrPicFlag = IS_IDR (slice->nalu.type); - pic_params.IntraPicFlag = IS_IRAP (slice->nalu.type); + pic_params.IrapPicFlag = GST_H265_IS_NAL_TYPE_IRAP (slice->nalu.type); + pic_params.IdrPicFlag = GST_H265_IS_NAL_TYPE_IDR (slice->nalu.type); + pic_params.IntraPicFlag = GST_H265_IS_NAL_TYPE_IRAP (slice->nalu.type); pic_params.CurrPicOrderCntVal = picture->pic_order_cnt; memcpy (pic_params.RefPicList, self->ref_pic_list,