From: Jun Zhao <mypopydev@gmail.com> To: ffmpeg-devel@ffmpeg.org Cc: Jun Zhao <barryjzhao@tencent.com>, Jun Zhao <mypopydev@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] lavc/cbs_h265: Add pps_multilayer_extension support Date: Fri, 17 Nov 2023 21:03:22 +0800 Message-ID: <20231117130322.3502477-2-mypopydev@gmail.com> (raw) In-Reply-To: <20231117130322.3502477-1-mypopydev@gmail.com> Add pps_multilayer_extensio support. Signed-off-by: Jun Zhao <barryjzhao@tencent.com> --- libavcodec/cbs_h265.h | 28 ++++++++++++++++ libavcodec/cbs_h265_syntax_template.c | 48 ++++++++++++++++++++++++++- 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/libavcodec/cbs_h265.h b/libavcodec/cbs_h265.h index 15951269fd..d83dc97072 100644 --- a/libavcodec/cbs_h265.h +++ b/libavcodec/cbs_h265.h @@ -421,6 +421,34 @@ typedef struct H265RawPPS { uint8_t log2_sao_offset_scale_luma; uint8_t log2_sao_offset_scale_chroma; + // Multilayer extension + uint8_t poc_reset_info_present_flag; + uint8_t pps_infer_scaling_list_flag; + uint8_t pps_scaling_list_ref_layer_id; + uint8_t num_ref_loc_offsets; + uint8_t ref_loc_offset_layer_id[HEVC_MAX_LAYERS]; + + uint8_t scaled_ref_layer_offset_present_flag[HEVC_MAX_LAYERS]; + int16_t scaled_ref_layer_left_offset[HEVC_MAX_LAYERS]; + int16_t scaled_ref_layer_top_offset[HEVC_MAX_LAYERS]; + int16_t scaled_ref_layer_right_offset[HEVC_MAX_LAYERS]; + int16_t scaled_ref_layer_bottom_offset[HEVC_MAX_LAYERS]; + + uint8_t ref_region_offset_present_flag[HEVC_MAX_LAYERS]; + int16_t ref_region_left_offset[HEVC_MAX_LAYERS]; + int16_t ref_region_top_offset[HEVC_MAX_LAYERS]; + int16_t ref_region_right_offset[HEVC_MAX_LAYERS]; + int16_t ref_region_bottom_offset[HEVC_MAX_LAYERS]; + + uint8_t resample_phase_set_present_flag[HEVC_MAX_LAYERS]; + uint8_t phase_hor_luma[HEVC_MAX_LAYERS]; + uint8_t phase_ver_luma[HEVC_MAX_LAYERS]; + uint8_t phase_hor_chroma_plus8[HEVC_MAX_LAYERS]; + uint8_t phase_ver_chroma_plus8[HEVC_MAX_LAYERS]; + + uint8_t colour_mapping_enabled_flag; + // TODO: colour_mapping_table + // Screen content coding extension. uint8_t pps_curr_pic_ref_enabled_flag; uint8_t residual_adaptive_colour_transform_enabled_flag; diff --git a/libavcodec/cbs_h265_syntax_template.c b/libavcodec/cbs_h265_syntax_template.c index 1e3bc1acd8..de8b838209 100644 --- a/libavcodec/cbs_h265_syntax_template.c +++ b/libavcodec/cbs_h265_syntax_template.c @@ -1003,6 +1003,52 @@ static int FUNC(pps_range_extension)(CodedBitstreamContext *ctx, RWContext *rw, return 0; } +static int FUNC(pps_multilayer_extension)(CodedBitstreamContext *ctx, RWContext *rw, + H265RawPPS *current) +{ + int err, i, index; + + flag(poc_reset_info_present_flag); + flag(pps_infer_scaling_list_flag); + if (current->pps_infer_scaling_list_flag) + ub(6, pps_scaling_list_ref_layer_id); + ue(num_ref_loc_offsets, 0, HEVC_MAX_LAYERS); + + for (i=0; i<current->num_ref_loc_offsets; i++) { + ub(6, ref_loc_offset_layer_id[i]); + index = current->ref_loc_offset_layer_id[i]; + + flag(scaled_ref_layer_offset_present_flag[i]); + if (current->scaled_ref_layer_offset_present_flag[i]) { + se(scaled_ref_layer_left_offset[index], -16383, +16384); + se(scaled_ref_layer_top_offset[index], -16383, +16384); + se(scaled_ref_layer_right_offset[index], -16383, +16384); + se(scaled_ref_layer_bottom_offset[index], -16383, +16384); + } + + flag(ref_region_offset_present_flag[i]); + if (current->ref_region_offset_present_flag[i]) { + se(ref_region_left_offset[index], -16383, +16384); + se(ref_region_top_offset[index], -16383, +16384); + se(ref_region_right_offset[index], -16383, +16384); + se(ref_region_bottom_offset[index], -16383, +16384); + } + + flag(resample_phase_set_present_flag[i]); + if (current->resample_phase_set_present_flag[i]) { + ue(phase_hor_luma[index], 0, 31); + ue(phase_ver_luma[index], 0, 31); + ue(phase_hor_chroma_plus8[index], 0, 63); + ue(phase_ver_chroma_plus8[index], 0, 63); + } + } + + flag(colour_mapping_enabled_flag); + if (current->colour_mapping_enabled_flag) + return AVERROR_PATCHWELCOME; + return 0; +} + static int FUNC(pps_scc_extension)(CodedBitstreamContext *ctx, RWContext *rw, H265RawPPS *current) { @@ -1153,7 +1199,7 @@ static int FUNC(pps)(CodedBitstreamContext *ctx, RWContext *rw, if (current->pps_range_extension_flag) CHECK(FUNC(pps_range_extension)(ctx, rw, current)); if (current->pps_multilayer_extension_flag) - return AVERROR_PATCHWELCOME; + CHECK(FUNC(pps_multilayer_extension)(ctx, rw, current)); if (current->pps_3d_extension_flag) return AVERROR_PATCHWELCOME; if (current->pps_scc_extension_flag) -- 2.25.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-11-17 13:03 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-11-17 13:03 [FFmpeg-devel] [PATCH 1/2] lavc/cbs_h265: Add sps_multilayer_extension support Jun Zhao 2023-11-17 13:03 ` Jun Zhao [this message] 2023-11-27 17:59 ` Mark Thompson 2023-11-28 2:33 ` mypopy
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20231117130322.3502477-2-mypopydev@gmail.com \ --to=mypopydev@gmail.com \ --cc=barryjzhao@tencent.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git