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)
231 uint32_t data_size, padding_size;
235 tile_idx, tile_size));
239 uint32_t comp_size =
current->tile_header.tile_data_size[
c];
252 data_size += comp_size;
256 current->tile_header.tile_header_size + data_size);
257 padding_size = tile_size -
258 (
current->tile_header.tile_header_size + data_size);
260 if (padding_size > 0) {
263 current->tile_dummy_byte_size = padding_size;
291 for (
int t = 0; t < priv->
num_tiles; t++) {
293 uint32_t
size =
tile->tile_header.tile_header_size;
295 size +=
tile->tile_header.tile_data_size[
c];
299 if (
current->frame_header.tile_info.tile_size_present_in_fh_flag)
300 current->frame_header.tile_info.tile_size_in_fh[t] =
size;
308 for (
int t = 0; t < priv->
num_tiles; t++) {
326 HEADER(
"Access Unit Information");
330 for (
int i = 0;
i <
current->num_frames;
i++) {
331 ubs(8, pbu_type[
i], 1,
i);
332 ubs(8, group_id[
i], 1,
i);
334 us(8, reserved_zero_8bits[
i], 0, 0, 1,
i);
339 u(8, reserved_zero_8bits_2, 0, 0);
350 size_t read_size = payload_size - 1;
352 HEADER(
"ITU-T T.35 Metadata");
354 ub(8, itu_t_t35_country_code);
356 if (payload_size < 1 + (
current->itu_t_t35_country_code == 0xff))
359 if (
current->itu_t_t35_country_code == 0xff) {
360 ub(8, itu_t_t35_country_code_extension);
365 current->data_size = read_size;
371 if (
current->data_size != read_size) {
373 "payload %zu but expecting %zu\n",
374 current->data_size, read_size);
379 for (
size_t i = 0;
i <
current->data_size;
i++) {
380 xu(8, itu_t_t35_payload[
i],
395 for (
i = 0;
i < 3;
i++) {
396 ubs(16, primary_chromaticity_x[
i], 1,
i);
397 ubs(16, primary_chromaticity_y[
i], 1,
i);
400 ub(16, white_point_chromaticity_x);
401 ub(16, white_point_chromaticity_y);
403 ub(32, max_mastering_luminance);
404 ub(32, min_mastering_luminance);
430 HEADER(
"Filler Metadata");
432 for (
size_t i = 0;
i < payload_size;
i++)
433 fixed(8, ff_byte, 0xff);
445 HEADER(
"User-Defined Metadata");
447 if (payload_size < 16)
450 for (
int i = 0;
i < 16;
i++)
451 ubs(8, uuid[
i], 1,
i);
454 current->data_size = payload_size - 16;
460 if (
current->data_size != payload_size - 16) {
462 "payload %zu but expecting %zu\n",
463 current->data_size, payload_size - 16);
468 for (
size_t i = 0;
i <
current->data_size;
i++) {
469 xu(8, user_defined_data_payload[
i],
483 HEADER(
"Undefined Metadata");
486 current->data_size = payload_size;
492 if (
current->data_size != payload_size) {
494 "payload %zu but expecting %zu\n",
495 current->data_size, payload_size - 16);
500 for (
size_t i = 0;
i <
current->data_size;
i++) {
501 xu(8, undefined_metadata_payload_byte[
i],
514 switch (
current->payload_type) {
551 uint32_t metadata_bytes_left;
554 uint32_t metadata_start_position;
563 ub(32, metadata_size);
565 metadata_bytes_left =
current->metadata_size;
573 fixed(8, ff_byte, 0xff);
575 --metadata_bytes_left;
577 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
579 --metadata_bytes_left;
583 fixed(8, ff_byte, 0xff);
585 --metadata_bytes_left;
587 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
589 --metadata_bytes_left;
593 "payload_size larger than remaining metadata size "
598 current->metadata_count = p + 1;
603 if (metadata_bytes_left == 0)
610 metadata_start_state = *rw;
613 trace =
ctx->trace_enable;
614 ctx->trace_enable = 0;
616 for (
int pass = 1; pass <= 2; pass++) {
617 *rw = metadata_start_state;
619 ub(32, metadata_size);
621 for (
int p = 0; p <
current->metadata_count; p++) {
623 uint32_t payload_start_position;
628 fixed(8, ff_byte, 0xff);
631 xu(8, metadata_payload_type,
tmp, 0, 254, 0);
635 fixed(8, ff_byte, 0xff);
638 xu(8, metadata_payload_size,
tmp, 0, 254, 0);
643 ctx->trace_enable = trace;
649 payload_start_position) / 8;
655 metadata_start_position) / 8 - 4;
656 ctx->trace_enable = trace;
static AVFormatContext * ctx
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream.
#define CBS_APV_MAX_AU_FRAMES
#define CBS_APV_MAX_METADATA_PAYLOADS
static int FUNC pbu_header(CodedBitstreamContext *ctx, RWContext *rw, APVRawPBUHeader *current)
static int FUNC tile_info(CodedBitstreamContext *ctx, RWContext *rw, APVRawTileInfo *current, const APVRawFrameHeader *fh)
static int FUNC metadata_undefined(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadataUndefined *current, size_t payload_size)
static int FUNC metadata_mdcv(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadataMDCV *current)
static int FUNC quantization_matrix(CodedBitstreamContext *ctx, RWContext *rw, APVRawQuantizationMatrix *current)
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
static int FUNC metadata_payload(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadataPayload *current)
static int FUNC au_info(CodedBitstreamContext *ctx, RWContext *rw, APVRawAUInfo *current)
static int FUNC metadata_filler(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadataFiller *current, size_t payload_size)
static int FUNC metadata_user_defined(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadataUserDefined *current, size_t payload_size)
static int FUNC metadata_cll(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadataCLL *current)
static int FUNC tile(CodedBitstreamContext *ctx, RWContext *rw, APVRawTile *current, int tile_idx, uint32_t tile_size)
static int FUNC tile_header(CodedBitstreamContext *ctx, RWContext *rw, APVRawTileHeader *current, int tile_idx, uint32_t tile_size)
static int FUNC metadata_itu_t_t35(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadataITUTT35 *current, size_t payload_size)
static int FUNC frame_info(CodedBitstreamContext *ctx, RWContext *rw, APVRawFrameInfo *current)
#define infer(name, value)
#define byte_alignment(rw)
#define i(width, name, range_min, range_max)
#define xu(width, name, var, range_min, range_max, subs,...)
#define MAX_INT_BITS(length)
#define MAX_UINT_BITS(length)
static const AVColorPrimariesDesc color_primaries[AVCOL_PRI_NB]
static struct @111144215057303131116103221376075045141373005341 current
static int get_bits_left(GetBitContext *gb)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static const uint8_t * align_get_bits(GetBitContext *s)
static int get_bits_count(const GetBitContext *s)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
AVBufferRef * av_buffer_alloc(size_t size)
Allocate an AVBuffer of the given size using av_malloc().
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int(* filler)(InterplayACMContext *s, unsigned ind, unsigned col)
@ APV_METADATA_USER_DEFINED
#define fixed(width, name, value)
#define u(width, name, range_min, range_max)
static void cbs_apv_derive_tile_info(CodedBitstreamContext *ctx, const APVRawFrameHeader *fh)
#define us(width, name, range_min, range_max, subs,...)
static int cbs_apv_get_num_comp(const APVRawFrameHeader *fh)
#define ubs(width, name, subs,...)
static const struct TransferCharacteristics transfer_characteristics[]
static int put_bits_count(PutBitContext *s)
static int put_bytes_left(const PutBitContext *s, int round_up)
Context structure for coded bitstream operations.