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".

Reply via email to