History

avcodec/cbs_sei_syntax_template: add sei message film_grain_characteristics

Wu Jianhua committed 1 year ago

Commit bf3a7291 parent e618f7d3 files · +80 −0Browse files

Unified · Split

3 files
  1. libavcodec/cbs_h2645.c +6 −0
  2. libavcodec/cbs_sei.h +21 −0
  3. libavcodec/cbs_sei_syntax_template.c +53 −0
libavcodec/cbs_h2645.c+6−0
@@ -2311,6 +2311,12 @@ static const SEIMessageTypeDescriptor cbs_sei_h266_types[] = { · 2310 unmodified lines
23112311 };
23122312
23132313 static const SEIMessageTypeDescriptor cbs_sei_h274_types[] = {
2314+ {
2315+ SEI_TYPE_FILM_GRAIN_CHARACTERISTICS,
2316+ 1, 0,
2317+ sizeof(SEIRawFilmGrainCharacteristics),
2318+ SEI_MESSAGE_RW(sei, film_grain_characteristics),
2319+ },
23142320 SEI_MESSAGE_TYPE_END,
23152321 };
23162322
libavcodec/cbs_sei.h+21−0
@@ -97,6 +97,27 @@ typedef struct SEIRawAmbientViewingEnvironment { · 96 unmodified lines
9797 uint16_t ambient_light_y;
9898 } SEIRawAmbientViewingEnvironment;
9999
100+typedef struct SEIRawFilmGrainCharacteristics {
101+ uint8_t fg_characteristics_cancel_flag;
102+ uint8_t fg_model_id;
103+ uint8_t fg_separate_colour_description_present_flag;
104+ uint8_t fg_bit_depth_luma_minus8;
105+ uint8_t fg_bit_depth_chroma_minus8;
106+ uint8_t fg_full_range_flag;
107+ uint8_t fg_colour_primaries;
108+ uint8_t fg_transfer_characteristics;
109+ uint8_t fg_matrix_coeffs;
110+ uint8_t fg_blending_mode_id;
111+ uint8_t fg_log2_scale_factor;
112+ uint8_t fg_comp_model_present_flag[3];
113+ uint8_t fg_num_intensity_intervals_minus1[3];
114+ uint8_t fg_num_model_values_minus1[3];
115+ uint8_t fg_intensity_interval_lower_bound[3][256];
116+ uint8_t fg_intensity_interval_upper_bound[3][256];
117+ int16_t fg_comp_model_value[3][256][6];
118+ uint8_t fg_characteristics_persistence_flag;
119+} SEIRawFilmGrainCharacteristics;
120+
100121 typedef struct SEIRawMessage {
101122 uint32_t payload_type;
102123 uint32_t payload_size;
libavcodec/cbs_sei_syntax_template.c+53−0
@@ -224,6 +224,59 @@ SEI_FUNC(ambient_viewing_environment, · 223 unmodified lines
224224 return 0;
225225 }
226226
227+SEI_FUNC(film_grain_characteristics,
228+ (CodedBitstreamContext *ctx, RWContext *rw,
229+ SEIRawFilmGrainCharacteristics *current,
230+ SEIMessageState *state))
231+{
232+ int err, c, i, j;
233+
234+ HEADER("Film Grain Characteristics");
235+
236+ flag(fg_characteristics_cancel_flag);
237+ if (!current->fg_characteristics_cancel_flag) {
238+ int filmGrainBitDepth[3];
239+
240+ u(2, fg_model_id, 0, 1);
241+ flag(fg_separate_colour_description_present_flag);
242+ if (current->fg_separate_colour_description_present_flag) {
243+ ub(3, fg_bit_depth_luma_minus8);
244+ ub(3, fg_bit_depth_chroma_minus8);
245+ flag(fg_full_range_flag);
246+ ub(8, fg_colour_primaries);
247+ ub(8, fg_transfer_characteristics);
248+ ub(8, fg_matrix_coeffs);
249+ }
250+
251+ filmGrainBitDepth[0] = current->fg_bit_depth_luma_minus8 + 8;
252+ filmGrainBitDepth[1] =
253+ filmGrainBitDepth[2] = current->fg_bit_depth_chroma_minus8 + 8;
254+
255+ u(2, fg_blending_mode_id, 0, 1);
256+ ub(4, fg_log2_scale_factor);
257+ for (c = 0; c < 3; c++)
258+ flags(fg_comp_model_present_flag[c], 1, c);
259+
260+ for (c = 0; c < 3; c++) {
261+ if (current->fg_comp_model_present_flag[c]) {
262+ ubs(8, fg_num_intensity_intervals_minus1[c], 1, c);
263+ us(3, fg_num_model_values_minus1[c], 0, 5, 1, c);
264+ for (i = 0; i <= current->fg_num_intensity_intervals_minus1[c]; i++) {
265+ ubs(8, fg_intensity_interval_lower_bound[c][i], 2, c, i);
266+ ubs(8, fg_intensity_interval_upper_bound[c][i], 2, c, i);
267+ for (j = 0; j <= current->fg_num_model_values_minus1[c]; j++)
268+ ses(fg_comp_model_value[c][i][j], 0 - current->fg_model_id * (1 << (filmGrainBitDepth[c] - 1)),
269+ ((1 << filmGrainBitDepth[c]) - 1) - current->fg_model_id * (1 << (filmGrainBitDepth[c] - 1)),
270+ 3, c, i, j);
271+ }
272+ }
273+ }
274+ flag(fg_characteristics_persistence_flag);
275+ }
276+
277+ return 0;
278+}
279+
227280 static int FUNC(message)(CodedBitstreamContext *ctx, RWContext *rw,
228281 SEIRawMessage *current)
229282 {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t