26 u(8, reserved_zero_8bits, 0, 0);
36 fixed(1, alignment_bit_equal_to_zero, 0);
47 current->filler_size = 0;
49 fixed(8, ff_byte, 0xff);
50 ++current->filler_size;
55 for (
i = 0;
i < current->filler_size;
i++)
56 fixed(8, ff_byte, 0xff);
72 u(5, reserved_zero_5bits, 0, 0);
77 u(4, chroma_format_idc, 0, 4);
78 if (current->chroma_format_idc == 1) {
80 "chroma_format_idc 1 for 4:2:0 is not allowed in APV.\n");
84 u(4, bit_depth_minus8, 2, 8);
86 ub(8, capture_time_distance);
88 u(8, reserved_zero_8bits, 0, 0);
101 for (
int y = 0; y < 8; y++) {
102 for (
int x = 0; x < 8 ; x++) {
103 us(8, q_matrix[
c][x][y], 1, 255, 3,
c, x, y);
118 u(20, tile_width_in_mbs,
120 u(20, tile_height_in_mbs,
123 ub(1, tile_size_present_in_fh_flag);
127 if (current->tile_size_present_in_fh_flag) {
144 u(8, reserved_zero_8bits, 0, 0);
146 ub(1, color_description_present_flag);
147 if (current->color_description_present_flag) {
150 ub(8, matrix_coefficients);
151 ub(1, full_range_flag);
155 infer(matrix_coefficients, 2);
156 infer(full_range_flag, 0);
159 priv->
bit_depth = current->frame_info.bit_depth_minus8 + 8;
163 if (current->use_q_matrix) {
165 ¤t->quantization_matrix));
168 for (
int y = 0; y < 8; y++) {
169 for (
int x = 0; x < 8 ; x++) {
178 u(8, reserved_zero_8bits_2, 0, 0);
189 uint16_t expected_tile_header_size;
193 expected_tile_header_size = 4 + priv->
num_comp * (4 + 1) + 1;
195 u(16, tile_header_size,
196 expected_tile_header_size, expected_tile_header_size);
198 u(16, tile_index, tile_idx, tile_idx);
206 us(8, tile_qp[
c], 0, max_qp, 1,
c);
209 u(8, reserved_zero_8bits, 0, 0);
223 uint32_t comp_size = current->tile_header.tile_data_size[
c];
267 HEADER(
"Access Unit Information");
271 for (
int i = 0;
i < current->num_frames;
i++) {
272 ubs(8, pbu_type[
i], 1,
i);
273 ubs(8, group_id[
i], 1,
i);
275 us(8, reserved_zero_8bits[
i], 0, 0, 1,
i);
280 u(8, reserved_zero_8bits_2, 0, 0);
291 size_t read_size = payload_size - 1;
293 HEADER(
"ITU-T T.35 Metadata");
295 ub(8, itu_t_t35_country_code);
297 if (current->itu_t_t35_country_code == 0xff) {
298 ub(8, itu_t_t35_country_code_extension);
303 current->data_size = read_size;
305 if (!current->data_ref)
307 current->data = current->data_ref->data;
309 if (current->data_size != read_size) {
311 "payload %zu but expecting %zu\n",
312 current->data_size, read_size);
317 for (
size_t i = 0;
i < current->data_size;
i++) {
318 xu(8, itu_t_t35_payload[
i],
319 current->data[
i], 0x00, 0xff, 1,
i);
333 for (
i = 0;
i < 3;
i++) {
334 ubs(16, primary_chromaticity_x[
i], 1,
i);
335 ubs(16, primary_chromaticity_y[
i], 1,
i);
338 ub(16, white_point_chromaticity_x);
339 ub(16, white_point_chromaticity_y);
341 ub(32, max_mastering_luminance);
342 ub(32, min_mastering_luminance);
368 HEADER(
"Filler Metadata");
370 for (
size_t i = 0;
i < payload_size;
i++)
371 fixed(8, ff_byte, 0xff);
383 HEADER(
"User-Defined Metadata");
385 for (
int i = 0;
i < 16;
i++)
386 ubs(8, uuid[
i], 1,
i);
389 current->data_size = payload_size - 16;
391 if (!current->data_ref)
393 current->data = current->data_ref->data;
395 if (current->data_size != payload_size - 16) {
397 "payload %zu but expecting %zu\n",
398 current->data_size, payload_size - 16);
403 for (
size_t i = 0;
i < current->data_size;
i++) {
404 xu(8, user_defined_data_payload[
i],
405 current->data[
i], 0x00, 0xff, 1,
i);
418 HEADER(
"Undefined Metadata");
421 current->data_size = payload_size;
423 if (!current->data_ref)
425 current->data = current->data_ref->data;
427 if (current->data_size != payload_size) {
429 "payload %zu but expecting %zu\n",
430 current->data_size, payload_size - 16);
435 for (
size_t i = 0;
i < current->data_size;
i++) {
436 xu(8, undefined_metadata_payload_byte[
i],
437 current->data[
i], 0x00, 0xff, 1,
i);
449 switch (current->payload_type) {
453 current->payload_size));
464 current->payload_size));
468 ¤t->user_defined,
469 current->payload_size));
474 current->payload_size));
486 uint32_t metadata_bytes_left;
489 uint32_t metadata_start_position;
498 ub(32, metadata_size);
500 metadata_bytes_left = current->metadata_size;
508 fixed(8, ff_byte, 0xff);
510 --metadata_bytes_left;
512 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
514 --metadata_bytes_left;
518 fixed(8, ff_byte, 0xff);
520 --metadata_bytes_left;
522 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
524 --metadata_bytes_left;
528 "payload_size larger than remaining metadata size "
537 current->metadata_count = p + 1;
538 if (metadata_bytes_left == 0)
545 metadata_start_state = *rw;
548 trace =
ctx->trace_enable;
549 ctx->trace_enable = 0;
551 for (
int pass = 1; pass <= 2; pass++) {
552 *rw = metadata_start_state;
554 ub(32, metadata_size);
556 for (
int p = 0; p < current->metadata_count; p++) {
558 uint32_t payload_start_position;
563 fixed(8, ff_byte, 0xff);
566 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
570 fixed(8, ff_byte, 0xff);
573 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
578 ctx->trace_enable = trace;
584 payload_start_position) / 8;
590 metadata_start_position) / 8 - 4;
591 ctx->trace_enable = trace;