On 7/9/2020 1:17 PM, Linjie Fu wrote: > According to 7.3.2.2.3 in T-REC-H.265-201911. > > Signed-off-by: Linjie Fu <linjie.justin...@gmail.com> > --- > 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);
This isn't an ue value. Its length is a fixed value (each plane's bitdepth, afaics). > + } > + } > + 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; > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".