26 u(8, reserved_zero_8bits, 0, 0);
36 fixed(1, alignment_bit_equal_to_zero, 0);
49 fixed(8, ff_byte, 0xff);
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);
116 int frame_width_in_mbs = (fh->frame_info.frame_width + 15) / 16;
117 int frame_height_in_mbs = (fh->frame_info.frame_height + 15) / 16;
131 ub(1, tile_size_present_in_fh_flag);
135 if (
current->tile_size_present_in_fh_flag) {
136 for (
int t = 0; t < priv->
num_tiles; t++) {
152 u(8, reserved_zero_8bits, 0, 0);
154 ub(1, color_description_present_flag);
155 if (
current->color_description_present_flag) {
158 ub(8, matrix_coefficients);
159 ub(1, full_range_flag);
163 infer(matrix_coefficients, 2);
164 infer(full_range_flag, 0);
173 &
current->quantization_matrix));
176 for (
int y = 0; y < 8; y++) {
177 for (
int x = 0; x < 8 ; x++) {
186 u(8, reserved_zero_8bits_2, 0, 0);
195 int tile_idx, uint32_t tile_size)
198 uint16_t expected_tile_header_size;
199 uint32_t tile_size_remaining;
203 expected_tile_header_size = 4 + priv->
num_comp * (4 + 1) + 1;
205 u(16, tile_header_size,
206 expected_tile_header_size, expected_tile_header_size);
208 u(16, tile_index, tile_idx, tile_idx);
210 tile_size_remaining = tile_size -
current->tile_header_size;
212 us(32, tile_data_size[
c], 1, tile_size_remaining, 1,
c);
213 tile_size_remaining -=
current->tile_data_size[
c];
218 us(8, tile_qp[
c], 0, max_qp, 1,
c);
221 u(8, reserved_zero_8bits, 0, 0);
228 int tile_idx, uint32_t tile_size)
234 tile_idx, tile_size));
237 uint32_t comp_size =
current->tile_header.tile_data_size[
c];
267 for (
int t = 0; t < priv->
num_tiles; t++) {
284 HEADER(
"Access Unit Information");
288 for (
int i = 0;
i <
current->num_frames;
i++) {
289 ubs(8, pbu_type[
i], 1,
i);
290 ubs(8, group_id[
i], 1,
i);
292 us(8, reserved_zero_8bits[
i], 0, 0, 1,
i);
297 u(8, reserved_zero_8bits_2, 0, 0);
308 size_t read_size = payload_size - 1;
310 HEADER(
"ITU-T T.35 Metadata");
312 ub(8, itu_t_t35_country_code);
314 if (
current->itu_t_t35_country_code == 0xff) {
315 ub(8, itu_t_t35_country_code_extension);
320 current->data_size = read_size;
326 if (
current->data_size != read_size) {
328 "payload %zu but expecting %zu\n",
329 current->data_size, read_size);
334 for (
size_t i = 0;
i <
current->data_size;
i++) {
335 xu(8, itu_t_t35_payload[
i],
350 for (
i = 0;
i < 3;
i++) {
351 ubs(16, primary_chromaticity_x[
i], 1,
i);
352 ubs(16, primary_chromaticity_y[
i], 1,
i);
355 ub(16, white_point_chromaticity_x);
356 ub(16, white_point_chromaticity_y);
358 ub(32, max_mastering_luminance);
359 ub(32, min_mastering_luminance);
385 HEADER(
"Filler Metadata");
387 for (
size_t i = 0;
i < payload_size;
i++)
388 fixed(8, ff_byte, 0xff);
400 HEADER(
"User-Defined Metadata");
402 for (
int i = 0;
i < 16;
i++)
403 ubs(8, uuid[
i], 1,
i);
406 current->data_size = payload_size - 16;
412 if (
current->data_size != payload_size - 16) {
414 "payload %zu but expecting %zu\n",
415 current->data_size, payload_size - 16);
420 for (
size_t i = 0;
i <
current->data_size;
i++) {
421 xu(8, user_defined_data_payload[
i],
435 HEADER(
"Undefined Metadata");
438 current->data_size = payload_size;
444 if (
current->data_size != payload_size) {
446 "payload %zu but expecting %zu\n",
447 current->data_size, payload_size - 16);
452 for (
size_t i = 0;
i <
current->data_size;
i++) {
453 xu(8, undefined_metadata_payload_byte[
i],
466 switch (
current->payload_type) {
503 uint32_t metadata_bytes_left;
506 uint32_t metadata_start_position;
515 ub(32, metadata_size);
517 metadata_bytes_left =
current->metadata_size;
525 fixed(8, ff_byte, 0xff);
527 --metadata_bytes_left;
529 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
531 --metadata_bytes_left;
535 fixed(8, ff_byte, 0xff);
537 --metadata_bytes_left;
539 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
541 --metadata_bytes_left;
545 "payload_size larger than remaining metadata size "
555 if (metadata_bytes_left == 0)
562 metadata_start_state = *rw;
565 trace =
ctx->trace_enable;
566 ctx->trace_enable = 0;
568 for (
int pass = 1; pass <= 2; pass++) {
569 *rw = metadata_start_state;
571 ub(32, metadata_size);
573 for (
int p = 0;
p <
current->metadata_count;
p++) {
575 uint32_t payload_start_position;
580 fixed(8, ff_byte, 0xff);
583 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
587 fixed(8, ff_byte, 0xff);
590 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
595 ctx->trace_enable = trace;
601 payload_start_position) / 8;
607 metadata_start_position) / 8 - 4;
608 ctx->trace_enable = trace;