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 "
550 current->metadata_count = p + 1;
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;
#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.
static AVFormatContext * ctx