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
2311};2311};
2312 2312
2313static const SEIMessageTypeDescriptor cbs_sei_h274_types[] = {2313static 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 },
2314 SEI_MESSAGE_TYPE_END,2320 SEI_MESSAGE_TYPE_END,
2315};2321};
2316 2322
libavcodec/cbs_sei.h+21−0
@@ -97,6 +97,27 @@ typedef struct SEIRawAmbientViewingEnvironment { · 96 unmodified lines
97 uint16_t ambient_light_y;97 uint16_t ambient_light_y;
98} SEIRawAmbientViewingEnvironment;98} SEIRawAmbientViewingEnvironment;
99 99
100typedef 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
100typedef struct SEIRawMessage {121typedef struct SEIRawMessage {
101 uint32_t payload_type;122 uint32_t payload_type;
102 uint32_t payload_size;123 uint32_t payload_size;
libavcodec/cbs_sei_syntax_template.c+53−0
@@ -224,6 +224,59 @@ SEI_FUNC(ambient_viewing_environment, · 223 unmodified lines
224 return 0;224 return 0;
225}225}
226 226
227SEI_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
227static int FUNC(message)(CodedBitstreamContext *ctx, RWContext *rw,280static int FUNC(message)(CodedBitstreamContext *ctx, RWContext *rw,
228 SEIRawMessage *current)281 SEIRawMessage *current)
229{282{

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