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];
267 t, current->tile_size[t]));
280 HEADER(
"Access Unit Information");
284 for (
int i = 0;
i < current->num_frames;
i++) {
285 ubs(8, pbu_type[
i], 1,
i);
286 ubs(8, group_id[
i], 1,
i);
288 us(8, reserved_zero_8bits[
i], 0, 0, 1,
i);
293 u(8, reserved_zero_8bits_2, 0, 0);
304 size_t read_size = payload_size - 1;
306 HEADER(
"ITU-T T.35 Metadata");
308 ub(8, itu_t_t35_country_code);
310 if (current->itu_t_t35_country_code == 0xff) {
311 ub(8, itu_t_t35_country_code_extension);
316 current->data_size = read_size;
318 if (!current->data_ref)
320 current->data = current->data_ref->data;
322 if (current->data_size != read_size) {
324 "payload %zu but expecting %zu\n",
325 current->data_size, read_size);
330 for (
size_t i = 0;
i < current->data_size;
i++) {
331 xu(8, itu_t_t35_payload[
i],
332 current->data[
i], 0x00, 0xff, 1,
i);
346 for (
i = 0;
i < 3;
i++) {
347 ubs(16, primary_chromaticity_x[
i], 1,
i);
348 ubs(16, primary_chromaticity_y[
i], 1,
i);
351 ub(16, white_point_chromaticity_x);
352 ub(16, white_point_chromaticity_y);
354 ub(32, max_mastering_luminance);
355 ub(32, min_mastering_luminance);
381 HEADER(
"Filler Metadata");
383 for (
size_t i = 0;
i < payload_size;
i++)
384 fixed(8, ff_byte, 0xff);
396 HEADER(
"User-Defined Metadata");
398 for (
int i = 0;
i < 16;
i++)
399 ubs(8, uuid[
i], 1,
i);
402 current->data_size = payload_size - 16;
404 if (!current->data_ref)
406 current->data = current->data_ref->data;
408 if (current->data_size != payload_size - 16) {
410 "payload %zu but expecting %zu\n",
411 current->data_size, payload_size - 16);
416 for (
size_t i = 0;
i < current->data_size;
i++) {
417 xu(8, user_defined_data_payload[
i],
418 current->data[
i], 0x00, 0xff, 1,
i);
431 HEADER(
"Undefined Metadata");
434 current->data_size = payload_size;
436 if (!current->data_ref)
438 current->data = current->data_ref->data;
440 if (current->data_size != payload_size) {
442 "payload %zu but expecting %zu\n",
443 current->data_size, payload_size - 16);
448 for (
size_t i = 0;
i < current->data_size;
i++) {
449 xu(8, undefined_metadata_payload_byte[
i],
450 current->data[
i], 0x00, 0xff, 1,
i);
462 switch (current->payload_type) {
466 current->payload_size));
477 current->payload_size));
481 ¤t->user_defined,
482 current->payload_size));
487 current->payload_size));
499 uint32_t metadata_bytes_left;
502 uint32_t metadata_start_position;
511 ub(32, metadata_size);
513 metadata_bytes_left = current->metadata_size;
521 fixed(8, ff_byte, 0xff);
523 --metadata_bytes_left;
525 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
527 --metadata_bytes_left;
531 fixed(8, ff_byte, 0xff);
533 --metadata_bytes_left;
535 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
537 --metadata_bytes_left;
541 "payload_size larger than remaining metadata size "
546 current->metadata_count = p + 1;
551 if (metadata_bytes_left == 0)
558 metadata_start_state = *rw;
561 trace =
ctx->trace_enable;
562 ctx->trace_enable = 0;
564 for (
int pass = 1; pass <= 2; pass++) {
565 *rw = metadata_start_state;
567 ub(32, metadata_size);
569 for (
int p = 0; p < current->metadata_count; p++) {
571 uint32_t payload_start_position;
576 fixed(8, ff_byte, 0xff);
579 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
583 fixed(8, ff_byte, 0xff);
586 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
591 ctx->trace_enable = trace;
597 payload_start_position) / 8;
603 metadata_start_position) / 8 - 4;
604 ctx->trace_enable = trace;