64 int object_type_id,
codec_id, stream_type;
75 if (object_type_id != 0x40)
79 if (((stream_type >> 2) != 5) || ((stream_type >> 1) & 1))
148 static const enum AVCodecID sample_fmt[2][3] = {
153 int sample_size = (
avio_r8(pb) / 8 - 2);
173 unsigned codec_config_id, nb_samples,
codec_id;
174 int16_t audio_roll_distance;
208 for (
int i = 0;
i <
c->nb_codec_configs;
i++)
209 if (
c->codec_configs[
i]->codec_config_id == codec_config_id) {
219 c->codec_configs =
tmp;
221 codec_config =
av_mallocz(
sizeof(*codec_config));
228 codec_config->
codec_id = avcodec_id;
257 c->codec_configs[
c->nb_codec_configs++] = codec_config;
389 int nb_layers, k = 0;
394 if (nb_layers > 6 || nb_layers == 0)
398 if (!audio_element->
layers)
402 for (
int i = 0, n = 0;
i < nb_layers;
i++) {
405 int loudspeaker_layout, output_gain_is_present_flag;
406 int substream_count, coupled_substream_count;
407 int expanded_loudspeaker_layout = -1;
415 loudspeaker_layout =
byte >> 4;
416 output_gain_is_present_flag = (
byte >> 3) & 1;
420 coupled_substream_count =
avio_r8(pb);
422 if (!substream_count || coupled_substream_count > substream_count ||
428 if (output_gain_is_present_flag) {
433 if (loudspeaker_layout == 15) {
435 av_log(
s,
AV_LOG_ERROR,
"expanded_loudspeaker_layout set with more than one layer in Audio Element #%d\n",
439 expanded_loudspeaker_layout =
avio_r8(pb);
441 if (expanded_loudspeaker_layout >= 0 && expanded_loudspeaker_layout < 13) {
443 }
else if (loudspeaker_layout < 10) {
455 if (expanded_loudspeaker_layout >= 0)
468 if (
channels != substream_count + coupled_substream_count)
471 for (
int j = 0; j < substream_count; j++) {
485 for (
int j = 0; j < n; j++)
489 while (coupled_substream_count--) {
495 while (substream_count--) {
510 if (ret < 0 && ret !=
AVERROR(ENOSYS))
525 unsigned ambisonics_mode;
526 int output_channel_count, substream_count, order;
530 if (ambisonics_mode > 1)
533 output_channel_count =
avio_r8(pb);
535 if (audio_element->
nb_substreams != substream_count || output_channel_count == 0)
538 order =
floor(sqrt(output_channel_count - 1));
540 if ((order + 1) * (order + 1) != output_channel_count)
544 if (!audio_element->
layers)
555 if (ambisonics_mode == 0) {
556 for (
int i = 0;
i < substream_count;
i++) {
570 for (
int i = 0;
i < output_channel_count;
i++)
574 if (ret < 0 && ret !=
AVERROR(ENOSYS))
577 int coupled_substream_count =
avio_r8(pb);
578 int count = substream_count + coupled_substream_count;
579 int nb_demixing_matrix = count * output_channel_count;
593 for (
int i = 0;
i < substream_count;
i++) {
617 unsigned int parameter_id, parameter_rate,
mode;
618 unsigned int duration = 0, constant_subblock_duration = 0, nb_subblocks = 0;
619 unsigned int total_duration = 0;
624 for (
int i = 0;
i <
c->nb_param_definitions;
i++)
625 if (
c->param_definitions[
i]->param->parameter_id == parameter_id) {
641 if (constant_subblock_duration == 0)
644 if (constant_subblock_duration >
duration) {
648 nb_subblocks =
duration / constant_subblock_duration;
654 av_log(
s,
AV_LOG_ERROR,
"Invalid duration or subblock count in parameter_id %u\n", parameter_id);
662 for (
int i = 0;
i < nb_subblocks;
i++) {
664 unsigned int subblock_duration = constant_subblock_duration;
666 if (constant_subblock_duration == 0) {
668 if (subblock_duration >
duration - total_duration) {
673 total_duration += subblock_duration;
674 }
else if (
i == nb_subblocks - 1)
675 subblock_duration =
duration -
i * constant_subblock_duration;
680 mix->subblock_duration = subblock_duration;
703 if (!
mode && !constant_subblock_duration && total_duration !=
duration) {
723 sizeof(*
c->param_definitions));
728 c->param_definitions =
tmp;
744 *out_param_definition = param;
757 unsigned audio_element_id, nb_substreams, codec_config_id, num_parameters;
758 int audio_element_type, ret;
773 for (
int i = 0;
i <
c->nb_audio_elements;
i++)
774 if (
c->audio_elements[
i]->audio_element_id == audio_element_id) {
780 audio_element_type =
avio_r8(pbc) >> 5;
782 av_log(
s,
AV_LOG_DEBUG,
"Unknown audio_element_type referenced in an audio element. Ignoring\n");
791 av_log(
s,
AV_LOG_ERROR,
"Non existent codec config id %d referenced in an audio element\n", codec_config_id);
807 c->audio_elements =
tmp;
809 audio_element =
av_mallocz(
sizeof(*audio_element));
810 if (!audio_element) {
819 if (nb_substreams >
len -
avio_tell(pbc) || !nb_substreams) {
875 if (num_parameters > 2 && audio_element_type == 0) {
877 " for Channel representations\n", num_parameters);
881 if (num_parameters && audio_element_type != 0) {
883 " for Scene representations\n", num_parameters);
888 for (
int i = 0;
i < num_parameters;
i++) {
900 audio_element, codec_config,
908 audio_element, codec_config,
927 av_unreachable(
"audio_element_type should have been checked above");
930 c->audio_elements[
c->nb_audio_elements++] = audio_element;
969 unsigned nb_submixes, mix_presentation_id;
985 for (
int i = 0;
i <
c->nb_mix_presentations;
i++)
986 if (
c->mix_presentations[
i]->mix_presentation_id == mix_presentation_id) {
997 c->mix_presentations =
tmp;
999 mix_presentation =
av_mallocz(
sizeof(*mix_presentation));
1000 if (!mix_presentation) {
1034 char *annotation =
NULL;
1051 for (
int i = 0;
i < nb_submixes;
i++) {
1053 unsigned nb_elements, nb_layouts;
1064 i, mix_presentation_id);
1069 for (
int j = 0; j < nb_elements; j++) {
1073 unsigned int rendering_config_extension_size;
1076 if (!submix_element) {
1083 for (
int k = 0; k <
c->nb_audio_elements; k++)
1084 if (
c->audio_elements[k]->audio_element_id == submix_element->
audio_element_id) {
1085 audio_element =
c->audio_elements[k];
1089 if (!audio_element) {
1090 av_log(
s,
AV_LOG_ERROR,
"Invalid Audio Element with id %u referenced by Mix Parameters %u\n",
1097 for (
int k = 0; k < mix_presentation->
count_label; k++) {
1098 char *annotation =
NULL;
1111 avio_skip(pbc, rendering_config_extension_size);
1114 audio_element, config,
1120 if (!codec_config || (config->nb_samples >
1123 config->sample_rate)))
1124 codec_config = config;
1135 for (
int j = 0; j < nb_layouts; j++) {
1141 if (!submix_layout) {
1156 sound_system = (
byte >> 2) & 0xF;
1171 if (info_type & 2) {
1172 unsigned int num_anchored_loudness =
avio_r8(pbc);
1174 for (
int k = 0; k < num_anchored_loudness; k++) {
1175 unsigned int anchor_element =
avio_r8(pbc);
1186 if (info_type & 0xFC) {
1193 c->mix_presentations[
c->nb_mix_presentations++] = mix_presentation;
1209 unsigned *skip_samples,
unsigned *discard_padding)
1212 int ret, extension_flag, trimming, start;
1213 unsigned skip = 0, discard = 0;
1226 if (*obu_size > INT_MAX)
1237 *skip_samples =
skip;
1238 if (discard_padding)
1239 *discard_padding = discard;
1241 if (extension_flag) {
1242 unsigned int extension_bytes;
1243 extension_bytes =
get_leb(&gb);
1244 if (extension_bytes > INT_MAX / 8)
1252 size = *obu_size + start;
1257 *start_pos =
size - *obu_size;
1263 int max_size,
void *log_ctx)
1314 max_size -= obu_size + start_pos;
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_unreachable(msg)
Asserts that are used as compiler optimization hints depending upon ASSERT_LEVEL and NBDEBUG.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
unsigned int avio_rb16(AVIOContext *s)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen)
Read a string from pb into buf.
unsigned int avio_rb32(AVIOContext *s)
int avio_r8(AVIOContext *s)
int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
Ensures that the requested seekback buffer size will be available.
void ffio_init_context(FFIOContext *s, unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int(*read_packet)(void *opaque, uint8_t *buf, int buf_size), int(*write_packet)(void *opaque, const uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
int ffio_read_size(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
unsigned int ffio_read_leb(AVIOContext *s)
Read a unsigned integer coded as a variable number of up to eight little-endian bytes,...
static void BS_FUNC skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
#define i(width, name, range_min, range_max)
AVCodecParameters * avcodec_parameters_alloc(void)
static __device__ float floor(float a)
static CheckasmConfig cfg
FLAC (Free Lossless Audio Codec) common stuff.
#define FLAC_STREAMINFO_SIZE
bitstream reader API header.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static int get_bits_left(GetBitContext *gb)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static int get_bits_count(const GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_CH_LAYOUT_STEREO
#define AV_CH_TOP_FRONT_LEFT
#define AV_CH_FRONT_RIGHT_OF_CENTER
#define AV_CH_FRONT_LEFT_OF_CENTER
#define AV_CH_TOP_SIDE_RIGHT
#define AV_CH_FRONT_CENTER
#define AV_CH_TOP_BACK_RIGHT
#define AV_CH_TOP_SIDE_LEFT
#define AV_CH_TOP_BACK_LEFT
#define AV_CH_LOW_FREQUENCY
#define AV_CH_TOP_FRONT_RIGHT
AVCodecID
Identify the syntax and semantics of the bitstream.
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
#define AV_CHANNEL_LAYOUT_BINAURAL
int av_channel_layout_retype(AVChannelLayout *channel_layout, enum AVChannelOrder order, int flags)
Change the AVChannelOrder of a channel layout.
#define AV_CHANNEL_LAYOUT_STEREO
#define AV_CHANNEL_LAYOUT_MONO
int av_channel_layout_custom_init(AVChannelLayout *channel_layout, int nb_channels)
Initialize a custom channel layout with the specified number of channels.
enum AVChannel av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, unsigned int idx)
Get the channel with the given index in a channel layout.
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, uint64_t mask)
Find out what channels from a given set are present in a channel layout, without regard for their pos...
@ AV_CHANNEL_ORDER_NATIVE
The native channel order, i.e.
@ AV_CHANNEL_ORDER_AMBISONIC
The audio is represented as the decomposition of the sound field into spherical harmonics.
@ AV_CHAN_FRONT_RIGHT_OF_CENTER
@ AV_CHAN_TOP_FRONT_RIGHT
@ AV_CHAN_AMBISONIC_BASE
Range of channels between AV_CHAN_AMBISONIC_BASE and AV_CHAN_AMBISONIC_END represent Ambisonic compon...
@ AV_CHAN_FRONT_LEFT_OF_CENTER
#define AV_DICT_DONT_STRDUP_VAL
Take ownership of a value that's been allocated with av_malloc() or another memory allocation functio...
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
#define AV_DICT_DONT_OVERWRITE
Don't overwrite existing entries.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
AVIAMFLayer * av_iamf_audio_element_add_layer(AVIAMFAudioElement *audio_element)
Allocate a layer and add it to a given AVIAMFAudioElement.
#define AV_IAMF_LAYER_FLAG_RECON_GAIN
Recon gain information for the layer is present in AVIAMFReconGain.
AVIAMFAudioElement * av_iamf_audio_element_alloc(void)
Allocates a AVIAMFAudioElement, and initializes its fields with default values.
@ AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE
@ AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL
AVIAMFSubmixLayout * av_iamf_submix_add_layout(AVIAMFSubmix *submix)
Allocate a submix layout and add it to a given AVIAMFSubmix.
AVIAMFMixPresentation * av_iamf_mix_presentation_alloc(void)
Allocates a AVIAMFMixPresentation, and initializes its fields with default values.
AVIAMFSubmix * av_iamf_mix_presentation_add_submix(AVIAMFMixPresentation *mix_presentation)
Allocate a submix and add it to a given AVIAMFMixPresentation.
AVIAMFSubmixElement * av_iamf_submix_add_element(AVIAMFSubmix *submix)
Allocate a submix element and add it to a given AVIAMFSubmix.
@ AV_IAMF_SUBMIX_LAYOUT_TYPE_BINAURAL
The layout is binaural.
@ AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS
The layout follows the loudspeaker sound system convention of ITU-2051-3.
static av_always_inline void * av_iamf_param_definition_get_subblock(const AVIAMFParamDefinition *par, unsigned int idx)
Get the subblock at the specified idx.
AVIAMFParamDefinition * av_iamf_param_definition_alloc(enum AVIAMFParamDefinitionType type, unsigned int nb_subblocks, size_t *out_size)
Allocates memory for AVIAMFParamDefinition, plus an array of nb_subblocks amount of subblocks of the ...
@ AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN
Subblocks are of struct type AVIAMFReconGain.
@ AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN
Subblocks are of struct type AVIAMFMixGain.
@ AV_IAMF_PARAMETER_DEFINITION_DEMIXING
Subblocks are of struct type AVIAMFDemixingInfo.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static AVRational av_make_q(int num, int den)
Create an AVRational.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
static int ambisonics_config(void *s, AVIOContext *pb, IAMFAudioElement *audio_element, const IAMFCodecConfig *codec_config)
int ff_iamf_parse_obu_header(const uint8_t *buf, int buf_size, unsigned *obu_size, int *start_pos, enum IAMF_OBU_Type *type, unsigned *skip_samples, unsigned *discard_padding)
static int codec_config_obu(void *s, IAMFContext *c, AVIOContext *pb, int len)
static int opus_decoder_config(IAMFCodecConfig *codec_config, AVIOContext *pb, int len)
static int parse_coupled_substream(AVChannelLayout *out, AVChannelLayout *in, int n)
static int update_extradata(AVCodecParameters *codecpar)
int ff_iamfdec_read_descriptors(IAMFContext *c, AVIOContext *pb, int max_size, void *log_ctx)
static int param_parse(void *s, IAMFContext *c, AVIOContext *pb, unsigned int type, const IAMFAudioElement *audio_element, const IAMFCodecConfig *codec_config, AVIAMFParamDefinition **out_param_definition)
static int flac_decoder_config(IAMFCodecConfig *codec_config, AVIOContext *pb, int len)
static int label_string(AVIOContext *pb, char **label)
static int aac_decoder_config(IAMFCodecConfig *codec_config, AVIOContext *pb, int len, void *logctx)
static int ipcm_decoder_config(IAMFCodecConfig *codec_config, AVIOContext *pb, int len)
static int audio_element_obu(void *s, IAMFContext *c, AVIOContext *pb, int len)
static int scalable_channel_layout_config(void *s, AVIOContext *pb, IAMFAudioElement *audio_element, const IAMFCodecConfig *codec_config)
static int mix_presentation_obu(void *s, IAMFContext *c, AVIOContext *pb, int len)
static int param_definition(const IAMFContext *iamf, const IAMFParamDefinition *param_def, AVIOContext *dyn_bc, void *log_ctx)
int ff_mp4_read_descr(void *logctx, AVIOContext *pb, int *tag)
const AVCodecTag ff_mp4_obj_type[]
#define MP4DecConfigDescrTag
#define MP4DecSpecificDescrTag
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
leb128 handling implementations
static unsigned get_leb(GetBitContext *s)
Read a unsigned integer coded as a variable number of up to eight little-endian bytes,...
static int mix(int c0, int c1)
Immersive Audio Model and Formats API header.
static const uint16_t mask[17]
#define MKBETAG(a, b, c, d)
static av_const int sign_extend(int val, unsigned bits)
void * av_calloc(size_t nmemb, size_t size)
Memory handling functions.
int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf, int size, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration.
@ AOT_ESCAPE
Y Escape Value.
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static int put_bits_left(PutBitContext *s)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static void put_bits63(PutBitContext *s, int n, uint64_t value)
Write up to 63 bits into a bitstream.
static int put_bytes_output(const PutBitContext *s)
static av_unused void put_bits32(PutBitContext *s, uint32_t value)
Write exactly 32 bits into a bitstream.
static const uint8_t header[24]
#define FF_ARRAY_ELEMS(a)
An AVChannelLayout holds information about the channel layout of audio data.
uint64_t mask
This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used for AV_CHANNEL_ORDER_AMBISONIC ...
union AVChannelLayout::@162063043056170047076125117143030261346263330336 u
Details about which channels are present in this layout.
int nb_channels
Number of channels in this layout.
AVChannelCustom * map
This member must be used when the channel order is AV_CHANNEL_ORDER_CUSTOM.
This struct describes the properties of an encoded stream.
int extradata_size
Size of the extradata content in bytes.
int frame_size
Audio frame size, if known.
AVChannelLayout ch_layout
The channel layout and number of channels.
int seek_preroll
Number of audio samples to skip after a discontinuity.
enum AVMediaType codec_type
General type of the encoded data.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int sample_rate
The number of audio samples per second.
Information on how to combine one or more audio streams, as defined in section 3.6 of IAMF.
enum AVIAMFAudioElementType audio_element_type
Audio element type as defined in section 3.6 of IAMF.
AVIAMFParamDefinition * recon_gain_info
Recon gain information used to reconstruct a scalable channel audio representation.
unsigned int default_w
Default weight value as defined in section 3.6 of IAMF.
AVIAMFParamDefinition * demixing_info
Demixing information used to reconstruct a scalable channel audio representation.
Demixing Info Parameter Data as defined in section 3.8.2 of IAMF.
unsigned int dmixp_mode
Pre-defined combination of demixing parameters.
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
A layer defining a Channel Layout in the Audio Element.
unsigned int flags
A bitmask which may contain a combination of AV_IAMF_LAYER_FLAG_* flags.
unsigned int output_gain_flags
Output gain channel flags as defined in section 3.6.2 of IAMF.
enum AVIAMFAmbisonicsMode ambisonics_mode
Ambisonics mode as defined in section 3.6.3 of IAMF.
unsigned int nb_demixing_matrix
The length of the Demixing matrix array.
AVRational * demixing_matrix
Demixing matrix as defined in section 3.6.3 of IAMF.
AVChannelLayout ch_layout
AVRational output_gain
Output gain as defined in section 3.6.2 of IAMF.
Mix Gain Parameter Data as defined in section 3.8.1 of IAMF.
Information on how to render and mix one or more AVIAMFAudioElement to generate the final audio outpu...
Parameters as defined in section 3.6.1 of IAMF.
unsigned int parameter_rate
Sample rate for the parameter substream.
unsigned int duration
The accumulated duration of all blocks in this parameter definition, in units of 1 / parameter_rate.
unsigned int constant_subblock_duration
The duration of every subblock in the case where all subblocks, with the optional exception of the la...
unsigned int parameter_id
Identifier for the parameter substream.
unsigned int nb_subblocks
Number of subblocks in the array.
Recon Gain Info Parameter Data as defined in section 3.8.3 of IAMF.
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Submix element as defined in section 3.7 of IAMF.
AVIAMFParamDefinition * element_mix_config
Information required required for applying any processing to the referenced and rendered Audio Elemen...
unsigned int audio_element_id
The id of the Audio Element this submix element references.
AVDictionary * annotations
A dictionary of strings describing the submix in different languages.
enum AVIAMFHeadphonesMode headphones_rendering_mode
A value that indicates whether the referenced channel-based Audio Element shall be rendered to stereo...
AVRational default_mix_gain
Default mix gain value to apply when there are no AVIAMFParamDefinition with element_mix_config's par...
Submix layout as defined in section 3.7.6 of IAMF.
AVRational true_peak
The true peak of the audio signal, as defined in ITU-1770-4.
AVRational digital_peak
The digital (sampled) peak value of the audio signal, as defined in ITU-1770-4.
enum AVIAMFSubmixLayoutType layout_type
AVRational dialogue_anchored_loudness
The Dialogue loudness information, as defined in ITU-1770-4.
AVRational album_anchored_loudness
The Album loudness information, as defined in ITU-1770-4.
AVRational integrated_loudness
The program integrated loudness information, as defined in ITU-1770-4.
AVChannelLayout sound_system
Channel layout matching one of Sound Systems A to J of ITU-2051-3, plus 7.1.2ch, 3....
Submix layout as defined in section 3.7 of IAMF.
AVRational default_mix_gain
Default mix gain value to apply when there are no AVIAMFParamDefinition with output_mix_config's para...
AVIAMFParamDefinition * output_mix_config
Information required for post-processing the mixed audio signal to generate the audio signal for play...
int eof_reached
true if was unable to read due to error or eof
int error
contains the error code or 0 if no error happened
Rational number (pair of numerator and denominator).
unsigned int codec_config_id
unsigned int audio_element_id
const AVIAMFAudioElement * celement
AVIAMFAudioElement * element
element backs celement iff the AVIAMFAudioElement is owned by this structure.
unsigned int nb_substreams
IAMFSubStream * substreams
unsigned int substream_count
unsigned int coupled_substream_count
AVIAMFMixPresentation * mix
mix backs cmix iff the AVIAMFMixPresentation is owned by this structure.
const AVIAMFMixPresentation * cmix
unsigned int mix_presentation_id
AVCodecParameters * codecpar
unsigned int audio_substream_id
#define av_malloc_array(a, b)
#define avpriv_request_sample(...)