From patchwork Thu Sep 10 06:42:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 22250 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 9381944B267 for ; Thu, 10 Sep 2020 09:44:56 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5D7B568B910; Thu, 10 Sep 2020 09:44:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9845768B89E for ; Thu, 10 Sep 2020 09:44:48 +0300 (EEST) IronPort-SDR: xV+07X8Z8Oq7sMTTU+RWHOLb7cwMSbTYRVBwWb0MBQZTWmSVjPbQYzC/DZWAGHm9punTtbbAZo 0Zzp6cV0ru5w== X-IronPort-AV: E=McAfee;i="6000,8403,9739"; a="222678981" X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="222678981" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:44:45 -0700 IronPort-SDR: KFmCEH6YNgkAeSba1Ki432ZJGs17373MQJpGWZLWY5DyTMxZywZw1Gf3DhCGEpO2cZ8amulDOW dbg62JnlU41w== X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="286467548" Received: from xhh-skl64.sh.intel.com ([10.239.13.24]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:44:44 -0700 From: Haihao Xiang To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Sep 2020 14:42:39 +0800 Message-Id: <20200910064245.1996343-2-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200910064245.1996343-1-haihao.xiang@intel.com> References: <20200910064245.1996343-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/7] lavc/avcodec: Add FF_PROFILE_HEVC_SCC for screen content coding X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Linjie Fu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Linjie Fu Signed-off-by: Linjie Fu --- libavcodec/avcodec.h | 1 + libavcodec/hevc_ps.c | 2 ++ libavcodec/profiles.c | 1 + 3 files changed, 4 insertions(+) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index c91b2fd169..32e4770de2 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -1948,6 +1948,7 @@ typedef struct AVCodecContext { #define FF_PROFILE_HEVC_MAIN_10 2 #define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 #define FF_PROFILE_HEVC_REXT 4 +#define FF_PROFILE_HEVC_SCC 9 #define FF_PROFILE_AV1_MAIN 0 #define FF_PROFILE_AV1_HIGH 1 diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index ea6fd536c6..584e2ba0d6 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -281,6 +281,8 @@ static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx, av_log(avctx, AV_LOG_DEBUG, "Main Still Picture profile bitstream\n"); else if (ptl->profile_idc == FF_PROFILE_HEVC_REXT) av_log(avctx, AV_LOG_DEBUG, "Range Extension profile bitstream\n"); + else if (ptl->profile_idc == FF_PROFILE_HEVC_SCC) + av_log(avctx, AV_LOG_DEBUG, "Screen Content Coding Extension profile bitstream\n"); else av_log(avctx, AV_LOG_WARNING, "Unknown HEVC profile: %d\n", ptl->profile_idc); diff --git a/libavcodec/profiles.c b/libavcodec/profiles.c index e59a3a5c12..e815b90c6a 100644 --- a/libavcodec/profiles.c +++ b/libavcodec/profiles.c @@ -79,6 +79,7 @@ const AVProfile ff_hevc_profiles[] = { { FF_PROFILE_HEVC_MAIN_10, "Main 10" }, { FF_PROFILE_HEVC_MAIN_STILL_PICTURE, "Main Still Picture" }, { FF_PROFILE_HEVC_REXT, "Rext" }, + { FF_PROFILE_HEVC_SCC, "Scc" }, { FF_PROFILE_UNKNOWN }, }; From patchwork Thu Sep 10 06:42:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 22251 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 2E3C344B267 for ; Thu, 10 Sep 2020 09:44:58 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1114268B956; Thu, 10 Sep 2020 09:44:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D385968B927 for ; Thu, 10 Sep 2020 09:44:49 +0300 (EEST) IronPort-SDR: U/I6qYRxtT1zim8VWEAVVRa2Q7/Q/MpVKYSbA2aOEU0aCr/I0/hgw8Rv3RcaBEw0y1i897WNcV ZPHxYSdBEdSw== X-IronPort-AV: E=McAfee;i="6000,8403,9739"; a="222678987" X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="222678987" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:44:46 -0700 IronPort-SDR: 3n3JQViEdb5Fub1plNZ4kkqL7wrFygEE71wZotojswP0DDA93rzB/2QtA01pyLnUt4GEVXdTjS 1YYc3/psvZSQ== X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="286467556" Received: from xhh-skl64.sh.intel.com ([10.239.13.24]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:44:45 -0700 From: Haihao Xiang To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Sep 2020 14:42:40 +0800 Message-Id: <20200910064245.1996343-3-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200910064245.1996343-1-haihao.xiang@intel.com> References: <20200910064245.1996343-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/7] lavc/hevc_ps: Add sps parse support for HEVC SCC extension syntax X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Haihao Xiang , Linjie Fu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Linjie Fu According to 7.3.2.2.3 in T-REC-H.265-201911. Signed-off-by: Linjie Fu Signed-off-by: Haihao Xiang --- v2 update: - Ignore sps_multilayer_extension_flag, sps_3d_extension_flag and sps_scc_extension_flag for non-SCC streams - Return AVERROR_PATCHWELCOME for sps_multilayer_extension_flag(1) and sps_3d_extension_flag(1). - sps_palette_predictor_initializer is an u(v) value instead of an ue(v) libavcodec/hevc.h | 3 +++ libavcodec/hevc_ps.c | 44 +++++++++++++++++++++++++++++++++++++++++--- libavcodec/hevc_ps.h | 15 +++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h index 1804755327..6b454a75c1 100644 --- a/libavcodec/hevc.h +++ b/libavcodec/hevc.h @@ -154,6 +154,9 @@ enum { // get near that, though, so set a lower limit here with the maximum // possible value for 4K video (at most 135 16x16 Ctb rows). HEVC_MAX_ENTRY_POINT_OFFSETS = HEVC_MAX_TILE_COLUMNS * 135, + + // A.3.7: Screen content coding extensions + HEVC_MAX_PALETTE_PREDICTOR_SIZE = 128, }; diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index 584e2ba0d6..d65efc1aef 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -909,7 +909,7 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, HEVCWindow *ow; int ret = 0; int log2_diff_max_min_transform_block_size; - int bit_depth_chroma, start, vui_present, sublayer_ordering_info; + int bit_depth_chroma, start, vui_present, sublayer_ordering_info, num_comps; int i; // Coded parameters @@ -1130,8 +1130,20 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, decode_vui(gb, avctx, apply_defdispwin, sps); if (get_bits1(gb)) { // sps_extension_flag - sps->sps_range_extension_flag = get_bits1(gb); - skip_bits(gb, 7); //sps_extension_7bits = get_bits(gb, 7); + sps->sps_range_extension_flag = get_bits1(gb); + + /* To keep consistency with the workaround for hevc-conformance-PS_A_VIDYO_3 + * in PPS, here ignore sps_multilayer_extension_flag, sps_3d_extension_flag + * and sps_scc_extension_flag for non-SCC streams too. Note multilayer_extension + * or 3d_extension is not implemented in FFmpeg */ + if (sps->ptl.general_ptl.profile_idc == FF_PROFILE_HEVC_SCC) { + sps->sps_multilayer_extension_flag = get_bits1(gb); + sps->sps_3d_extension_flag = get_bits1(gb); + sps->sps_scc_extension_flag = get_bits1(gb); + skip_bits(gb, 4); //sps_extension_4bits = get_bits(gb, 4); + } else + skip_bits(gb, 7); + if (sps->sps_range_extension_flag) { sps->transform_skip_rotation_enabled_flag = get_bits1(gb); sps->transform_skip_context_enabled_flag = get_bits1(gb); @@ -1157,6 +1169,32 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, av_log(avctx, AV_LOG_WARNING, "cabac_bypass_alignment_enabled_flag not yet implemented\n"); } + if (sps->sps_multilayer_extension_flag || sps->sps_3d_extension_flag) { + av_log(avctx, AV_LOG_ERROR, + "multilayer_extension or 3d_extension not yet implemented\n"); + return AVERROR_PATCHWELCOME; + } + + if (sps->sps_scc_extension_flag) { + sps->sps_curr_pic_ref_enabled_flag = get_bits1(gb); + sps->palette_mode_enabled_flag = get_bits1(gb); + if (sps->palette_mode_enabled_flag) { + sps->palette_max_size = get_ue_golomb_long(gb); + sps->delta_palette_max_predictor_size = get_ue_golomb_long(gb); + sps->sps_palette_predictor_initializers_present_flag = get_bits1(gb); + + if (sps->sps_palette_predictor_initializers_present_flag) { + sps->sps_num_palette_predictor_initializers_minus1 = get_ue_golomb_long(gb); + num_comps = !sps->chroma_format_idc ? 1 : 3; + for (int comp = 0; comp < num_comps; comp++) + for (i = 0; i <= sps->sps_num_palette_predictor_initializers_minus1; i++) + sps->sps_palette_predictor_initializer[comp][i] = + get_bits(gb, !comp ? sps->bit_depth : sps->bit_depth_chroma); + } + } + sps->motion_vector_resolution_control_idc = get_bits(gb, 2); + sps->intra_boundary_filtering_disabled_flag = get_bits1(gb); + } } if (apply_defdispwin) { sps->output_window.left_offset += sps->vui.def_disp_win.left_offset; diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h index 2a1bbf6489..be23758008 100644 --- a/libavcodec/hevc_ps.h +++ b/libavcodec/hevc_ps.h @@ -223,6 +223,21 @@ typedef struct HEVCSPS { int persistent_rice_adaptation_enabled_flag; int cabac_bypass_alignment_enabled_flag; + // Not yet implemented + int sps_multilayer_extension_flag; + int sps_3d_extension_flag; + + int sps_scc_extension_flag; + int sps_curr_pic_ref_enabled_flag; + int palette_mode_enabled_flag; + int palette_max_size; + int delta_palette_max_predictor_size; + int sps_palette_predictor_initializers_present_flag; + int sps_num_palette_predictor_initializers_minus1; + int sps_palette_predictor_initializer[3][HEVC_MAX_PALETTE_PREDICTOR_SIZE]; + int motion_vector_resolution_control_idc; + int intra_boundary_filtering_disabled_flag; + ///< coded frame dimension in various units int width; int height; From patchwork Thu Sep 10 06:42:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 22252 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 50B0044B267 for ; Thu, 10 Sep 2020 09:45:00 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 31CD468B962; Thu, 10 Sep 2020 09:45:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1792568B959 for ; Thu, 10 Sep 2020 09:44:52 +0300 (EEST) IronPort-SDR: tqx2NsRcNtBNj0vky6Jcrey0anYKiDGQGGTj6jSqd9/O9IcR/Ui70fc+ZEt8/aVNCsLBCleN6Z mhuc9jNMoOfw== X-IronPort-AV: E=McAfee;i="6000,8403,9739"; a="222678990" X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="222678990" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:44:47 -0700 IronPort-SDR: sJvCN4IXpfpo5Yw6DyJHupOXeaSXZhJTghLX2466PkpWIHZAD9HYsmeDr7sgfH8ZYCd4quHee4 7HTBcjTVZQ+w== X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="286467564" Received: from xhh-skl64.sh.intel.com ([10.239.13.24]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:44:46 -0700 From: Haihao Xiang To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Sep 2020 14:42:41 +0800 Message-Id: <20200910064245.1996343-4-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200910064245.1996343-1-haihao.xiang@intel.com> References: <20200910064245.1996343-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/7] lavc/hevc_ps: Add pps parse support for HEVC SCC extension X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Haihao Xiang , Linjie Fu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Linjie Fu Signed-off-by: Linjie Fu Signed-off-by: Haihao Xiang --- v2 update: - Ignore pps_multilayer_extension_flag, pps_3d_extension_flag and pps_scc_extension_flag for non-SCC streams - Return AVERROR_PATCHWELCOME for pps_multilayer_extension_flag(1) and pps_3d_extension_flag(1). - pps_palette_predictor_initializer is an u(v) value instead of an ue(v) - Rename pps_scc_extensions_flag / pps_scc_extensions to pps_scc_extension_flag / pps_scc_extension to keep consistency with HEVC spec libavcodec/hevc_ps.c | 70 +++++++++++++++++++++++++++++++++++++++++++- libavcodec/hevc_ps.h | 17 +++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index d65efc1aef..704b666756 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -1400,6 +1400,48 @@ static int pps_range_extensions(GetBitContext *gb, AVCodecContext *avctx, return(0); } +static int pps_scc_extension(GetBitContext *gb, AVCodecContext *avctx, + HEVCPPS *pps, HEVCSPS *sps) +{ + int num_comps; + int i, ret; + + pps->pps_curr_pic_ref_enabled_flag = get_bits1(gb); + if (pps->residual_adaptive_colour_transform_enabled_flag = get_bits1(gb)) { + pps->pps_slice_act_qp_offsets_present_flag = get_bits1(gb); + pps->pps_act_y_qp_offset = get_se_golomb_long(gb) - 5; + pps->pps_act_cb_qp_offset = get_se_golomb_long(gb) - 5; + pps->pps_act_cr_qp_offset = get_se_golomb_long(gb) - 3; + +#define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset < -12 || \ + pps->pps_act_ ## name ## _qp_offset > 12) + ret = CHECK_QP_OFFSET(y) || CHECK_QP_OFFSET(cb) || CHECK_QP_OFFSET(cr); +#undef CHECK_QP_OFFSET + if (ret) { + av_log(avctx, AV_LOG_ERROR, + "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n"); + return AVERROR_INVALIDDATA; + } + } + + if (pps->pps_palette_predictor_initializers_present_flag = get_bits1(gb)) { + if ((pps->pps_num_palette_predictor_initializers = get_ue_golomb_long(gb)) > 0) { + pps->monochrome_palette_flag = get_bits1(gb); + pps->luma_bit_depth_entry_minus8 = get_ue_golomb_long(gb); + if (!pps->monochrome_palette_flag) + pps->chroma_bit_depth_entry_minus8 = get_ue_golomb_long(gb); + num_comps = pps->monochrome_palette_flag ? 1 : 3; + for (int comp = 0; comp < num_comps; comp++) + for (i = 0; i < pps->pps_num_palette_predictor_initializers; i++) + pps->pps_palette_predictor_initializer[comp][i] = + get_bits(gb, 8 + (!comp ? pps->luma_bit_depth_entry_minus8 : + pps->chroma_bit_depth_entry_minus8)); + } + } + + return 0; +} + static inline int setup_pps(AVCodecContext *avctx, GetBitContext *gb, HEVCPPS *pps, HEVCSPS *sps) { @@ -1753,11 +1795,37 @@ int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, if (get_bits1(gb)) { // pps_extension_present_flag pps->pps_range_extensions_flag = get_bits1(gb); - skip_bits(gb, 7); // pps_extension_7bits + + /* hevc-conformance-PS_A_VIDYO_3 in fate has pps_multilayer_extension_flag (1), + * pps_3d_extension_flag (1) and pps_scc_extension_flag (1) but has the wrong + * data for pps_multilayer_extension(), pps_3d_extension(), and pps_scc_extension(). + * To avoid regression for hevc-conformance-PS_A_VIDYO_3, here check + * pps_multilayer_extension_flag, pps_3d_extension_flag and pps_scc_extension_flag + * only for SCC streams */ + if (sps->ptl.general_ptl.profile_idc == FF_PROFILE_HEVC_SCC) { + pps->pps_multilayer_extension_flag = get_bits1(gb); + pps->pps_3d_extension_flag = get_bits1(gb); + pps->pps_scc_extension_flag = get_bits1(gb); + skip_bits(gb, 4); // pps_extension_4bits + } else + skip_bits(gb, 7); + if (sps->ptl.general_ptl.profile_idc == FF_PROFILE_HEVC_REXT && pps->pps_range_extensions_flag) { if ((ret = pps_range_extensions(gb, avctx, pps, sps)) < 0) goto err; } + + if (pps->pps_multilayer_extension_flag || pps->pps_3d_extension_flag) { + av_log(avctx, AV_LOG_ERROR, + "multilayer_extension or 3d_extension not yet implemented\n"); + ret = AVERROR_PATCHWELCOME; + goto err; + } + + if (pps->pps_scc_extension_flag) { + if ((ret = pps_scc_extension(gb, avctx, pps, sps)) < 0) + goto err; + } } ret = setup_pps(avctx, gb, pps, sps); diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h index be23758008..155b66062e 100644 --- a/libavcodec/hevc_ps.h +++ b/libavcodec/hevc_ps.h @@ -312,6 +312,9 @@ typedef struct HEVCPPS { uint8_t slice_header_extension_present_flag; uint8_t log2_max_transform_skip_block_size; uint8_t pps_range_extensions_flag; + uint8_t pps_multilayer_extension_flag; + uint8_t pps_3d_extension_flag; + uint8_t pps_scc_extension_flag; uint8_t cross_component_prediction_enabled_flag; uint8_t chroma_qp_offset_list_enabled_flag; uint8_t diff_cu_chroma_qp_offset_depth; @@ -321,6 +324,20 @@ typedef struct HEVCPPS { uint8_t log2_sao_offset_scale_luma; uint8_t log2_sao_offset_scale_chroma; + // SCC extension parameters + uint8_t pps_curr_pic_ref_enabled_flag; + uint8_t residual_adaptive_colour_transform_enabled_flag; + uint8_t pps_slice_act_qp_offsets_present_flag; + int8_t pps_act_y_qp_offset; // _plus5 + int8_t pps_act_cb_qp_offset; // _plus5 + int8_t pps_act_cr_qp_offset; // _plus3 + uint8_t pps_palette_predictor_initializers_present_flag; + uint8_t pps_num_palette_predictor_initializers; + uint8_t monochrome_palette_flag; + uint8_t luma_bit_depth_entry_minus8; + uint8_t chroma_bit_depth_entry_minus8; + uint8_t pps_palette_predictor_initializer[3][HEVC_MAX_PALETTE_PREDICTOR_SIZE]; + // Inferred parameters unsigned int *column_width; ///< ColumnWidth unsigned int *row_height; ///< RowHeight