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);
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;
129 ub(1, tile_size_present_in_fh_flag);
133 if (current->tile_size_present_in_fh_flag) {
150 u(8, reserved_zero_8bits, 0, 0);
152 ub(1, color_description_present_flag);
153 if (current->color_description_present_flag) {
156 ub(8, matrix_coefficients);
157 ub(1, full_range_flag);
161 infer(matrix_coefficients, 2);
162 infer(full_range_flag, 0);
165 priv->
bit_depth = current->frame_info.bit_depth_minus8 + 8;
169 if (current->use_q_matrix) {
171 ¤t->quantization_matrix));
174 for (
int y = 0; y < 8; y++) {
175 for (
int x = 0; x < 8 ; x++) {
184 u(8, reserved_zero_8bits_2, 0, 0);
193 int tile_idx, uint32_t tile_size)
196 uint16_t expected_tile_header_size;
197 uint32_t tile_size_remaining;
201 expected_tile_header_size = 4 + priv->
num_comp * (4 + 1) + 1;
203 u(16, tile_header_size,
204 expected_tile_header_size, expected_tile_header_size);
206 u(16, tile_index, tile_idx, tile_idx);
208 tile_size_remaining = tile_size - current->tile_header_size;
210 us(32, tile_data_size[
c], 1, tile_size_remaining, 1,
c);
211 tile_size_remaining -= current->tile_data_size[
c];
216 us(8, tile_qp[
c], 0, max_qp, 1,
c);
219 u(8, reserved_zero_8bits, 0, 0);
226 int tile_idx, uint32_t tile_size)
232 tile_idx, tile_size));
235 uint32_t comp_size = current->tile_header.tile_data_size[
c];
269 t, current->tile_size[t]));
282 HEADER(
"Access Unit Information");
286 for (
int i = 0;
i < current->num_frames;
i++) {
287 ubs(8, pbu_type[
i], 1,
i);
288 ubs(8, group_id[
i], 1,
i);
290 us(8, reserved_zero_8bits[
i], 0, 0, 1,
i);
295 u(8, reserved_zero_8bits_2, 0, 0);
306 size_t read_size = payload_size - 1;
308 HEADER(
"ITU-T T.35 Metadata");
310 ub(8, itu_t_t35_country_code);
312 if (current->itu_t_t35_country_code == 0xff) {
313 ub(8, itu_t_t35_country_code_extension);
318 current->data_size = read_size;
320 if (!current->data_ref)
322 current->data = current->data_ref->data;
324 if (current->data_size != read_size) {
326 "payload %zu but expecting %zu\n",
327 current->data_size, read_size);
332 for (
size_t i = 0;
i < current->data_size;
i++) {
333 xu(8, itu_t_t35_payload[
i],
334 current->data[
i], 0x00, 0xff, 1,
i);
348 for (
i = 0;
i < 3;
i++) {
349 ubs(16, primary_chromaticity_x[
i], 1,
i);
350 ubs(16, primary_chromaticity_y[
i], 1,
i);
353 ub(16, white_point_chromaticity_x);
354 ub(16, white_point_chromaticity_y);
356 ub(32, max_mastering_luminance);
357 ub(32, min_mastering_luminance);
383 HEADER(
"Filler Metadata");
385 for (
size_t i = 0;
i < payload_size;
i++)
386 fixed(8, ff_byte, 0xff);
398 HEADER(
"User-Defined Metadata");
400 for (
int i = 0;
i < 16;
i++)
401 ubs(8, uuid[
i], 1,
i);
404 current->data_size = payload_size - 16;
406 if (!current->data_ref)
408 current->data = current->data_ref->data;
410 if (current->data_size != payload_size - 16) {
412 "payload %zu but expecting %zu\n",
413 current->data_size, payload_size - 16);
418 for (
size_t i = 0;
i < current->data_size;
i++) {
419 xu(8, user_defined_data_payload[
i],
420 current->data[
i], 0x00, 0xff, 1,
i);
433 HEADER(
"Undefined Metadata");
436 current->data_size = payload_size;
438 if (!current->data_ref)
440 current->data = current->data_ref->data;
442 if (current->data_size != payload_size) {
444 "payload %zu but expecting %zu\n",
445 current->data_size, payload_size - 16);
450 for (
size_t i = 0;
i < current->data_size;
i++) {
451 xu(8, undefined_metadata_payload_byte[
i],
452 current->data[
i], 0x00, 0xff, 1,
i);
464 switch (current->payload_type) {
468 current->payload_size));
479 current->payload_size));
483 ¤t->user_defined,
484 current->payload_size));
489 current->payload_size));
501 uint32_t metadata_bytes_left;
504 uint32_t metadata_start_position;
513 ub(32, metadata_size);
515 metadata_bytes_left = current->metadata_size;
523 fixed(8, ff_byte, 0xff);
525 --metadata_bytes_left;
527 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
529 --metadata_bytes_left;
533 fixed(8, ff_byte, 0xff);
535 --metadata_bytes_left;
537 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
539 --metadata_bytes_left;
543 "payload_size larger than remaining metadata size "
548 current->metadata_count = p + 1;
553 if (metadata_bytes_left == 0)
560 metadata_start_state = *rw;
563 trace =
ctx->trace_enable;
564 ctx->trace_enable = 0;
566 for (
int pass = 1; pass <= 2; pass++) {
567 *rw = metadata_start_state;
569 ub(32, metadata_size);
571 for (
int p = 0; p < current->metadata_count; p++) {
573 uint32_t payload_start_position;
578 fixed(8, ff_byte, 0xff);
581 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
585 fixed(8, ff_byte, 0xff);
588 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
593 ctx->trace_enable = trace;
599 payload_start_position) / 8;
605 metadata_start_position) / 8 - 4;
606 ctx->trace_enable = trace;