Andreas Rheinhardt: > toq...@gmail.com: >> From: Wu Jianhua <toq...@outlook.com> >> >> Signed-off-by: Wu Jianhua <toq...@outlook.com> >> --- >> libavcodec/cbs_h2645.c | 6 ++++ >> libavcodec/cbs_sei.h | 21 +++++++++++ >> libavcodec/cbs_sei_syntax_template.c | 53 ++++++++++++++++++++++++++++ >> 3 files changed, 80 insertions(+) >> >> +typedef struct SEIRawFilmGrainCharacteristics { >> + uint8_t fg_characteristics_cancel_flag; >> + uint8_t fg_model_id; >> + uint8_t fg_separate_colour_description_present_flag; >> + uint8_t fg_bit_depth_luma_minus8; >> + uint8_t fg_bit_depth_chroma_minus8; >> + uint8_t fg_full_range_flag; >> + uint8_t fg_colour_primaries; >> + uint8_t fg_transfer_characteristics; >> + uint8_t fg_matrix_coeffs; >> + uint8_t fg_blending_mode_id; >> + uint8_t fg_log2_scale_factor; >> + uint8_t fg_comp_model_present_flag[3]; >> + uint8_t fg_num_intensity_intervals_minus1[3]; >> + uint8_t fg_num_model_values_minus1[3]; >> + uint8_t fg_intensity_interval_lower_bound[3][256]; >> + uint8_t fg_intensity_interval_upper_bound[3][256]; >> + int16_t fg_comp_model_value[3][256][6]; >> + uint8_t fg_characteristics_persistence_flag; >> +} SEIRawFilmGrainCharacteristics; >> + >> typedef struct SEIRawMessage { >> uint32_t payload_type; >> uint32_t payload_size; >> diff --git a/libavcodec/cbs_sei_syntax_template.c >> b/libavcodec/cbs_sei_syntax_template.c >> index 0205bb47aa..b105299cd9 100644 >> --- a/libavcodec/cbs_sei_syntax_template.c >> +++ b/libavcodec/cbs_sei_syntax_template.c >> @@ -224,6 +224,59 @@ SEI_FUNC(ambient_viewing_environment, >> return 0; >> } >> >> +SEI_FUNC(film_grain_characteristics, >> + (CodedBitstreamContext *ctx, RWContext *rw, >> + SEIRawFilmGrainCharacteristics *current, >> + SEIMessageState *state)) >> +{ >> + int err, c, i, j; >> + >> + HEADER("Film Grain Characteristics"); >> + >> + flag(fg_characteristics_cancel_flag); >> + if (!current->fg_characteristics_cancel_flag) { >> + int filmGrainBitDepth[3]; >> + >> + u(2, fg_model_id, 0, 1); >> + flag(fg_separate_colour_description_present_flag); >> + if (current->fg_separate_colour_description_present_flag) { >> + ub(3, fg_bit_depth_luma_minus8); >> + ub(3, fg_bit_depth_chroma_minus8); >> + flag(fg_full_range_flag); >> + ub(8, fg_colour_primaries); >> + ub(8, fg_transfer_characteristics); >> + ub(8, fg_matrix_coeffs); >> + } >> + >> + filmGrainBitDepth[0] = current->fg_bit_depth_luma_minus8 + 8; >> + filmGrainBitDepth[1] = >> + filmGrainBitDepth[2] = current->fg_bit_depth_chroma_minus8 + 8; >> + >> + u(2, fg_blending_mode_id, 0, 1); >> + ub(4, fg_log2_scale_factor); >> + for (c = 0; c < 3; c++) >> + flags(fg_comp_model_present_flag[c], 1, c); >> + >> + for (c = 0; c < 3; c++) { >> + if (current->fg_comp_model_present_flag[c]) { >> + ubs(8, fg_num_intensity_intervals_minus1[c], 1, c); >> + us(3, fg_num_model_values_minus1[c], 0, 5, 1, c); >> + for (i = 0; i <= >> current->fg_num_intensity_intervals_minus1[c]; i++) { >> + ubs(8, fg_intensity_interval_lower_bound[c][i], 2, c, >> i); >> + ubs(8, fg_intensity_interval_upper_bound[c][i], 2, c, >> i); >> + for (j = 0; j <= >> current->fg_num_model_values_minus1[c]; j++) >> + ses(fg_comp_model_value[c][i][j], 0 - >> current->fg_model_id * (1 << (filmGrainBitDepth[c] - 1)), >> + ((1 << filmGrainBitDepth[c]) - 1) - >> current->fg_model_id * (1 << (filmGrainBitDepth[c] - 1)), >> + 3, c, i, j); >> + } >> + } >> + } >> + flag(fg_characteristics_persistence_flag); >> + } >> + >> + return 0; >> +} >> + > > This seems to be exactly the same as the H.265 one (apart from some > variable names), so it should be shared. > > - Andreas
Hi Andreas, Yeah. They are the same but I have some concerns here. As you can see, the RawSEI structures have the same name as the standard. For example, the film grain in h274 spec has fg_ prefix, the SEIRawFramePackingArrangement has fp_ prefix, the film grain in h265 spec has no prefix. I'm not sure we should follow this convention. And, the h274 doesn't require the codec context, but the film grain in h265 depends on the sps and vui. Also, there is one more film grain in h264 cbs. I'm not sure how to leverage a good way to share them, so just follow the convention of cbs interface. Thanks, Jianhua _______________________________________________ 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".