From patchwork Thu Jul 9 16:17:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 20917 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 7D4FA448120 for ; Thu, 9 Jul 2020 19:24:55 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6CEC368B396; Thu, 9 Jul 2020 19:24:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 45D046880D1 for ; Thu, 9 Jul 2020 19:24:48 +0300 (EEST) IronPort-SDR: G5sRVAd0XaoFNE0Vu08Gc2bGI7ItJvJTQdV34dSc6xTUWWJi39oXnGsXLajilQ2tzN6piby465 Xr/KtutmB9Pw== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="145529093" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="145529093" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 09:24:46 -0700 IronPort-SDR: WQ97mX+5qINW868sgjDMTQqqbGEkAy+V2987eYiQl/jJgpzbHGKbENo3uK6f+fuLZ3CCraB0BG sl71H0YD8lXA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483859371" Received: from icl-dev.sh.intel.com ([10.239.158.73]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 09:24:45 -0700 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jul 2020 00:17:34 +0800 Message-Id: <1594311460-10498-2-git-send-email-linjie.fu@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> References: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> Subject: [FFmpeg-devel] [PATCH 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 , Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Version bump would be added when upstreamed. 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 c91b2fd..32e4770 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 ea6fd53..584e2ba 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 e59a3a5..e815b90 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 Jul 9 16:17:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 20918 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 8A58F448120 for ; Thu, 9 Jul 2020 19:24:57 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 74D3D68B375; Thu, 9 Jul 2020 19:24:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 147E768A965 for ; Thu, 9 Jul 2020 19:24:49 +0300 (EEST) IronPort-SDR: zxsLkgFUWQMe3K/4a+jp56883qyVeJyNCZG8MWPOf0f9aJagnW6af/zUiJu94FFy7Bq05JJEXM PyChVGTrnK1A== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="145529104" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="145529104" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 09:24:48 -0700 IronPort-SDR: GaHFPkLoUqhaeXr47p43wyObRNGqCYEuK02yE8xOE4uzX6uY7xu5mZEu/XlOPdWre1Px3ql/AX qLljvd91tO2g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483859379" Received: from icl-dev.sh.intel.com ([10.239.158.73]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 09:24:46 -0700 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jul 2020 00:17:35 +0800 Message-Id: <1594311460-10498-3-git-send-email-linjie.fu@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> References: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> Subject: [FFmpeg-devel] [PATCH 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: Linjie Fu , Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" According to 7.3.2.2.3 in T-REC-H.265-201911. Signed-off-by: Linjie Fu --- libavcodec/hevc.h | 3 +++ libavcodec/hevc_ps.c | 32 +++++++++++++++++++++++++++++--- libavcodec/hevc_ps.h | 15 +++++++++++++++ 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h index 1804755..6b454a7 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 584e2ba..7610d3b 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,11 @@ 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); + 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); 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 +1160,29 @@ 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_WARNING, + "multilayer_extension or 3d_extension not yet implemented\n"); + + 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 == 0 ? 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_ue_golomb_long(gb); + } + } + 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 2a1bbf6..1501811 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 Jul 9 16:17:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 20919 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 5D1BA448120 for ; Thu, 9 Jul 2020 19:24:59 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 44D3868B4DA; Thu, 9 Jul 2020 19:24:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 864FF68B474 for ; Thu, 9 Jul 2020 19:24:52 +0300 (EEST) IronPort-SDR: sezl1De79pcf5l6peGAxc/82wCnRqGRAHzyfCpD9yTa8Wsw2QNjjNGKmKVixc6mYkSkmuxWFmx J1mIVnbwmL0w== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="145529115" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="145529115" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 09:24:50 -0700 IronPort-SDR: rpzJD0SlfQOA/UsQnw55PRNfy9+o/JQUdRZEGaPhFKwV9QGmKEJFrdeR3UL4Jsf4A/RZbctnzY 2mojiA2gCQDQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483859398" Received: from icl-dev.sh.intel.com ([10.239.158.73]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 09:24:48 -0700 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jul 2020 00:17:36 +0800 Message-Id: <1594311460-10498-4-git-send-email-linjie.fu@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> References: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> Subject: [FFmpeg-devel] [PATCH 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: Linjie Fu , Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Linjie Fu --- libavcodec/hevc_ps.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++-- libavcodec/hevc_ps.h | 17 +++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index 7610d3b..887b960 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -1388,6 +1388,45 @@ static int pps_range_extensions(GetBitContext *gb, AVCodecContext *avctx, return(0); } +static int pps_scc_extensions(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_ue_golomb_long(gb); + } + } + + return 0; +} + static inline int setup_pps(AVCodecContext *avctx, GetBitContext *gb, HEVCPPS *pps, HEVCSPS *sps) { @@ -1740,12 +1779,22 @@ int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, pps->slice_header_extension_present_flag = get_bits1(gb); if (get_bits1(gb)) { // pps_extension_present_flag - pps->pps_range_extensions_flag = get_bits1(gb); - skip_bits(gb, 7); // pps_extension_7bits + pps->pps_range_extensions_flag = get_bits1(gb); + pps->pps_multilayer_extension_flag = get_bits1(gb); + pps->pps_3d_extension_flag = get_bits1(gb); + pps->pps_scc_extensions_flag = get_bits1(gb); + skip_bits(gb, 4); // pps_extension_4bits 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_WARNING, + "multilayer_extension or 3d_extension not yet implemented\n"); + if (sps->ptl.general_ptl.profile_idc == FF_PROFILE_HEVC_SCC && pps->pps_scc_extensions_flag) { + if ((ret = pps_scc_extensions(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 1501811..0cfac43 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_extensions_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 From patchwork Thu Jul 9 16:17:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 20920 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 304B2448120 for ; Thu, 9 Jul 2020 19:25:01 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 190E068B4CF; Thu, 9 Jul 2020 19:25:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9EC9C68AF45 for ; Thu, 9 Jul 2020 19:24:54 +0300 (EEST) IronPort-SDR: qRbt1u4/j71oGfmOVMCRB4Rx19gXR6XKl32Uoe4JGFHNTVyx/BVStKERXPaqI8qo4MuotPBqbM s3HEGQb+pl/A== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="145529124" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="145529124" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 09:24:54 -0700 IronPort-SDR: qTL6As5QFSpkEM27Vfj0LEb+5KHt7yFd+SaKc5GwUWZxF0fPml6c6PF0pXMA3cXwNhSLjGikN1 quabYX2YFzNQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483859421" Received: from icl-dev.sh.intel.com ([10.239.158.73]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 09:24:53 -0700 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jul 2020 00:17:37 +0800 Message-Id: <1594311460-10498-5-git-send-email-linjie.fu@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> References: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> Subject: [FFmpeg-devel] [PATCH 4/7] lavc/hevc_ps: Add slice 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: Linjie Fu , Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Linjie Fu --- libavcodec/hevcdec.c | 6 ++++++ libavcodec/hevcdec.h | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index e363e68..8194f18 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -800,6 +800,12 @@ static int hls_slice_header(HEVCContext *s) sh->slice_cr_qp_offset = 0; } + if (s->ps.pps->pps_slice_act_qp_offsets_present_flag) { + sh->slice_act_y_qp_offset = get_se_golomb(gb); + sh->slice_act_cb_qp_offset = get_se_golomb(gb); + sh->slice_act_cr_qp_offset = get_se_golomb(gb); + } + if (s->ps.pps->chroma_qp_offset_list_enabled_flag) sh->cu_chroma_qp_offset_enabled_flag = get_bits1(gb); else diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index 39c5c7f..6e22e04 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -292,6 +292,10 @@ typedef struct SliceHeader { int slice_cb_qp_offset; int slice_cr_qp_offset; + int slice_act_y_qp_offset; + int slice_act_cb_qp_offset; + int slice_act_cr_qp_offset; + uint8_t cu_chroma_qp_offset_enabled_flag; int beta_offset; ///< beta_offset_div2 * 2 From patchwork Thu Jul 9 16:17:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 20928 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:80ca:0:0:0:0:0 with SMTP id c10csp1521058ybm; Thu, 9 Jul 2020 09:25:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxv1+bY+LJlqsXodeGaBJZ3hlAXekqVMfrId4HWfJDgQh3VU8izwwZ3ZAEuC1a1bKxgV94w X-Received: by 2002:a1c:6a13:: with SMTP id f19mr883952wmc.106.1594311959838; Thu, 09 Jul 2020 09:25:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594311959; cv=none; d=google.com; s=arc-20160816; b=qtd7r8n7uEngpZ+icF94hMyavw/AmhlVq65oqcSv84FbGeqGon0unwsIi7yg4kVwof 6cmV/mpHY25mCU/aUEoiU7LDoEyG1g9JXQveZPO+X+xOwW+QkDzmRx2kBY2cWwxPYSW7 nuZhWnz9pfgDzwvdPyUYgw/KS98yBdQPpFrcf6IwjxdarSvIgyIhGmDHMFP1bBoeimsd Xh4stJNHvSPReFnLcnVPk8kSq9kUPlbaTgpS6aq2GQYWMCC4hQ+c2LF1HKeHxlJKdDEB GmM5PmKfmwnmFwtfzf1j0vdYWwaPLk4wG9hmCUDKApo0QrWNAe+6Vx5K++w93HNJWZDS nYQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:ironport-sdr:ironport-sdr:delivered-to; bh=rT71Hlf6FAgJpGAhdgRSnUQbmjzmsAW781RXHLz0ZBM=; b=CPhLUJVINL8XWneSoXyvP1iyHA9DBeT+1kiJM6USoeNSyZr/M3N5t16LiBVzSx5tR9 6aSLesaGjdL2xv62Kk195YRvIGBTgmES6B7kCyYWSI6KmWyqlaZ4PcFkaRBD0KVKHNR7 HAoWh+R/sWfg3Ec0NFPunWMNVqzbYR4eSBkxgRuNpQb8Q9Fr3sHk80nxZWwl6YluvMzY OI5EjMubUrzcoOzxSEOWrJYBFRqGvX/G6m6aeZFwI5LFtgrDycnVYq95K0S4r0gWvnqi 2+geqjgJSzzUcr+8xHhm+SnbsmaiUZmZpC7XAIWzimfxHsXuRbnaoEB+yJAGZ9l+x7aT nWLw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j25si2678008wre.264.2020.07.09.09.25.59; Thu, 09 Jul 2020 09:25:59 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A645E68B32D; Thu, 9 Jul 2020 19:25:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 61F6D68B51C for ; Thu, 9 Jul 2020 19:24:57 +0300 (EEST) IronPort-SDR: 2P/ycAWxYYifd7OyposfTyRIWFcByeX7zT3yaFXDHxukjhfS6ex74mppN1rU/sFZ9BY60xzkFR YpOSEYmguXcg== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="145529138" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="145529138" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 09:24:57 -0700 IronPort-SDR: 7B33rSwki6qYYT8UrCBJ+Cnf7AYQJA63m+0O+5w6jLQ5XhmBSILNy34qpjzK1i1RNII1ppQW35 DfZwqLjDNE7Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483859435" Received: from icl-dev.sh.intel.com ([10.239.158.73]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 09:24:56 -0700 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jul 2020 00:17:38 +0800 Message-Id: <1594311460-10498-6-git-send-email-linjie.fu@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> References: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> Subject: [FFmpeg-devel] [PATCH 5/7] lavc/hevcdec: Fix the parsing for use_integer_mv_flag 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 , Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: O9HdHVrbu6x7 Content-Length: 2383 According to 7.3.6.1, use_integer_mv_flag should be parsed if motion_vector_resolution_control_idc equals to 2. Otherwise wrong parameters in the subsequent parsing procedures would be got. Signed-off-by: Linjie Fu --- libavcodec/hevcdec.c | 8 ++++++++ libavcodec/hevcdec.h | 1 + 2 files changed, 9 insertions(+) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 8194f18..fc8a77d 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -788,6 +788,14 @@ static int hls_slice_header(HEVCContext *s) sh->max_num_merge_cand); return AVERROR_INVALIDDATA; } + + // Syntax in 7.3.6.1 + if (s->ps.sps->motion_vector_resolution_control_idc == 2) + sh->use_integer_mv_flag = get_bits1(gb); + else + // Inferred to be equal to motion_vector_resolution_control_idc if not present + sh->use_integer_mv_flag = s->ps.sps->motion_vector_resolution_control_idc; + } sh->slice_qp_delta = get_se_golomb(gb); diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index 6e22e04..1164af2 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -302,6 +302,7 @@ typedef struct SliceHeader { int tc_offset; ///< tc_offset_div2 * 2 unsigned int max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand + uint8_t use_integer_mv_flag; unsigned *entry_point_offset; int * offset; From patchwork Thu Jul 9 16:17:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 20924 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:80ca:0:0:0:0:0 with SMTP id c10csp1521144ybm; Thu, 9 Jul 2020 09:26:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyvtVeM2M9fnO+0+D2zePj3j5TA5NMOWyy8MmyayYOKZHYB2r+ywfcvuW9hI4LjKBlIH4R3 X-Received: by 2002:a7b:c116:: with SMTP id w22mr757160wmi.97.1594311966944; Thu, 09 Jul 2020 09:26:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594311966; cv=none; d=google.com; s=arc-20160816; b=ZdJAdP/3hENqoebLfRGEfoNWLiCw6RceUeWMmFjAA+m4VROrGapYBkYWHHKAlzfr/b xbzjQjJUJroD//YPyxKFvQeNIx3RZwoYDv1LOayV+Ebe/RXy8a0xD/U/X6Dfn8WNnZGZ 3k/qAKVB1pcERNmeLLsR94pnYn4roSWvUST/io4WWFrQK5HxBJKMZdzbMoUvhghrgqTU 8GMuUFTssR99xRQsvz20Jv0tn/9jXlJx+TbM+IZ180cCOCvWgzFEOegJWBnhY5FQ/8tX nLj8tXaESKdJ2HRbC+rZeUOTSfkjGb9wtGXN7oqgb8pojkPUYvifBOSprQprpmwP+EYd BDAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:ironport-sdr:ironport-sdr:delivered-to; bh=8kMIC+IPXF6dUHrrGIqde3spJm1GU04JOutrpcfS9as=; b=Xl6he9VrBJ6JLumf6HQ1mPsoDk9h18t3nab+kyoAf3qIBe/olVbu1zvVgm/TKivquF MAc6AwpKY9hAAPWyogy5v8dSgZBls2sRd/2vBiVb1t8/BlW0ThVWXPN+yLUJvotRnNRA x4Dg+KSwmxLXtxvDe3TOZIAriP3pdt26MfOcWMteimUrDDREuxmnS1P66Z7tOuIbkQu2 QOXciCvK1arWB1mc0VNz0eQ/HYq8QxuYfBdY5lVP+zqO2Nw1lBjQi81bZG8mB3wBTtBC YmM8y6X8YNkrGd1BRXtcy4HrwZ4osXpcSEvlyqzFSHDkphxtGjyGhMFYO1Jyw7Tm/ngE xYGA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w8si2541896wru.103.2020.07.09.09.26.06; Thu, 09 Jul 2020 09:26:06 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2001768B574; Thu, 9 Jul 2020 19:25:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6746F68B559 for ; Thu, 9 Jul 2020 19:24:59 +0300 (EEST) IronPort-SDR: WRNGw2RMkn1boo2i39Uq0a+KE02bZH86JJaGBVBI0L3Qsj4RjbmACBZYE6+sao0gdx7KpQ7o/M 7SjxtTizXizg== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="145529143" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="145529143" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 09:24:59 -0700 IronPort-SDR: ISw37zllrxYyET2BUxFuSxY+fGNN23TZ9uI5dPZfYuawkgBfiFSmPrtnvDVuE8dH2Gjzdq1G8q nMH2SN1WzQkA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483859441" Received: from icl-dev.sh.intel.com ([10.239.158.73]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 09:24:57 -0700 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jul 2020 00:17:39 +0800 Message-Id: <1594311460-10498-7-git-send-email-linjie.fu@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> References: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> Subject: [FFmpeg-devel] [PATCH 6/7] lavc/hevcdec: Set max_num_merge_cand to uint8_t 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 , Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: faF7sFSSB5oI Content-Length: 1326 uint8_t is big enough and keep consistent with the definition in cbs_h265.h. Signed-off-by: Linjie Fu --- libavcodec/hevcdec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index 1164af2..464eb7c 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -301,7 +301,7 @@ typedef struct SliceHeader { int beta_offset; ///< beta_offset_div2 * 2 int tc_offset; ///< tc_offset_div2 * 2 - unsigned int max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand + uint8_t max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand uint8_t use_integer_mv_flag; unsigned *entry_point_offset; From patchwork Thu Jul 9 16:17:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 20921 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 4E170448445 for ; Thu, 9 Jul 2020 19:25:09 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 398C168B58A; Thu, 9 Jul 2020 19:25:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CBA6B68B464 for ; Thu, 9 Jul 2020 19:25:01 +0300 (EEST) IronPort-SDR: oh/En18djknrkWbg6ubjYkCyBqsFWxHDOAoJGVgLSVLKMKF4CcrlKyCtl1xgPiy+g9WLRtLN1E PE6SA6Q8ZMRQ== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="145529153" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="145529153" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 09:25:01 -0700 IronPort-SDR: tkriKCTBrBdQ9vNp8kkpkw/IAOEPJ32DiX/BHde+XPKV+PvoJdR4KaqDkEEYtXcELb2PhkKr8A G73diUrrMcWg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483859450" Received: from icl-dev.sh.intel.com ([10.239.158.73]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 09:24:59 -0700 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jul 2020 00:17:40 +0800 Message-Id: <1594311460-10498-8-git-send-email-linjie.fu@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> References: <1594311460-10498-1-git-send-email-linjie.fu@intel.com> Subject: [FFmpeg-devel] [PATCH 7/7] lavc/hevc: update reference list for SCC 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 , Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Screen Content Coding allows P slice in an IDR frame, and would add frames themselves to the short term rps in RefList0 (8-10 in spec), hence some previous restricts are not suitable any more. [Request for comments]. Signed-off-by: Linjie Fu --- libavcodec/hevc_refs.c | 21 +++++++++++++++++++-- libavcodec/hevcdec.c | 5 +++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index 4f6d985..13a7bf6 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -301,7 +301,7 @@ int ff_hevc_slice_rpl(HEVCContext *s) return ret; if (!(s->rps[ST_CURR_BEF].nb_refs + s->rps[ST_CURR_AFT].nb_refs + - s->rps[LT_CURR].nb_refs)) { + s->rps[LT_CURR].nb_refs) && !s->ps.pps->pps_curr_pic_ref_enabled_flag) { av_log(s->avctx, AV_LOG_ERROR, "Zero refs in the frame RPS.\n"); return AVERROR_INVALIDDATA; } @@ -328,6 +328,12 @@ int ff_hevc_slice_rpl(HEVCContext *s) rpl_tmp.nb_refs++; } } + + if (s->ps.pps->pps_curr_pic_ref_enabled_flag) { + rpl_tmp.ref[rpl_tmp.nb_refs] = s->ref; + rpl_tmp.isLongTerm[rpl_tmp.nb_refs] = 0; + rpl_tmp.nb_refs++; + } } /* reorder the references if necessary */ @@ -423,7 +429,8 @@ static int add_candidate_ref(HEVCContext *s, RefPicList *list, { HEVCFrame *ref = find_ref_idx(s, poc, use_msb); - if (ref == s->ref || list->nb_refs >= HEVC_MAX_REFS) + if ((ref == s->ref && !s->ps.pps->pps_curr_pic_ref_enabled_flag) || + list->nb_refs >= HEVC_MAX_REFS) return AVERROR_INVALIDDATA; if (!ref) { @@ -482,6 +489,12 @@ int ff_hevc_frame_rps(HEVCContext *s) goto fail; } + if (s->ps.pps->pps_curr_pic_ref_enabled_flag) { + ret = add_candidate_ref(s, &rps[ST_FOLL], s->poc, HEVC_FRAME_FLAG_SHORT_REF, 1); + if (ret < 0) + goto fail; + } + /* add the long refs */ for (i = 0; i < long_rps->nb_refs; i++) { int poc = long_rps->poc[i]; @@ -518,5 +531,9 @@ int ff_hevc_frame_nb_refs(const HEVCContext *s) for (i = 0; i < long_rps->nb_refs; i++) ret += !!long_rps->used[i]; } + + if (s->ps.pps->pps_curr_pic_ref_enabled_flag) + ret++; + return ret; } diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index fc8a77d..d7a10c4 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -617,7 +617,8 @@ static int hls_slice_header(HEVCContext *s) sh->slice_type); return AVERROR_INVALIDDATA; } - if (IS_IRAP(s) && sh->slice_type != HEVC_SLICE_I) { + if (IS_IRAP(s) && sh->slice_type != HEVC_SLICE_I && + s->ps.sps->ptl.general_ptl.profile_idc != FF_PROFILE_HEVC_SCC) { av_log(s->avctx, AV_LOG_ERROR, "Inter slices in an IRAP frame.\n"); return AVERROR_INVALIDDATA; } @@ -729,7 +730,7 @@ static int hls_slice_header(HEVCContext *s) sh->rpl_modification_flag[0] = 0; sh->rpl_modification_flag[1] = 0; nb_refs = ff_hevc_frame_nb_refs(s); - if (!nb_refs) { + if (!nb_refs && !s->ps.pps->pps_curr_pic_ref_enabled_flag) { av_log(s->avctx, AV_LOG_ERROR, "Zero refs for a frame with P or B slices.\n"); return AVERROR_INVALIDDATA; }