FFmpeg 8.1
Loading...
Searching...
No Matches
iamf.h
Go to the documentation of this file.
1/*
2 * Immersive Audio Model and Formats helper functions and defines
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef AVUTIL_IAMF_H
22#define AVUTIL_IAMF_H
23
24/**
25 * @file
26 * Immersive Audio Model and Formats API header
27 * @see <a href="https://aomediacodec.github.io/iamf/">Immersive Audio Model and Formats</a>
28 */
29
30#include <stdint.h>
31#include <stddef.h>
32
33#include "attributes.h"
34#include "avassert.h"
35#include "channel_layout.h"
36#include "dict.h"
37#include "rational.h"
38
39/**
40 * @defgroup lavu_iamf Immersive Audio Model and Formats
41 * @ingroup lavu_audio
42 *
43 * Immersive Audio Model and Formats related functions and defines
44 *
45 * @defgroup lavu_iamf_params Parameter Definition
46 * @ingroup lavu_iamf
47 * @{
48 * Parameters as defined in section 3.6.1 and 3.8 of IAMF.
49 * @}
50 *
51 * @defgroup lavu_iamf_audio Audio Element
52 * @ingroup lavu_iamf
53 * @{
54 * Audio Elements as defined in section 3.6 of IAMF.
55 * @}
56 *
57 * @defgroup lavu_iamf_mix Mix Presentation
58 * @ingroup lavu_iamf
59 * @{
60 * Mix Presentations as defined in section 3.7 of IAMF.
61 * @}
62 *
63 * @addtogroup lavu_iamf_params
64 * @{
65 */
71
72/**
73 * Mix Gain Parameter Data as defined in section 3.8.1 of IAMF.
74 *
75 * @note This struct's size is not a part of the public ABI.
76 */
77typedef struct AVIAMFMixGain {
79
80 /**
81 * Duration for the given subblock, in units of
82 * 1 / @ref AVIAMFParamDefinition.parameter_rate "parameter_rate".
83 * It must not be 0.
84 */
85 unsigned int subblock_duration;
86 /**
87 * The type of animation applied to the parameter values.
88 */
90 /**
91 * Parameter value that is applied at the start of the subblock.
92 * Applies to all defined Animation Types.
93 *
94 * Valid range of values is -128.0 to 128.0
95 */
97 /**
98 * Parameter value that is applied at the end of the subblock.
99 * Applies only to AV_IAMF_ANIMATION_TYPE_LINEAR and
100 * AV_IAMF_ANIMATION_TYPE_BEZIER Animation Types.
101 *
102 * Valid range of values is -128.0 to 128.0
103 */
105 /**
106 * Parameter value of the middle control point of a quadratic Bezier
107 * curve, i.e., its y-axis value.
108 * Applies only to AV_IAMF_ANIMATION_TYPE_BEZIER Animation Type.
109 *
110 * Valid range of values is -128.0 to 128.0
111 */
113 /**
114 * Parameter value of the time of the middle control point of a
115 * quadratic Bezier curve, i.e., its x-axis value.
116 * Applies only to AV_IAMF_ANIMATION_TYPE_BEZIER Animation Type.
117 *
118 * Valid range of values is 0.0 to 1.0
119 */
122
123/**
124 * Demixing Info Parameter Data as defined in section 3.8.2 of IAMF.
125 *
126 * @note This struct's size is not a part of the public ABI.
127 */
128typedef struct AVIAMFDemixingInfo {
130
131 /**
132 * Duration for the given subblock, in units of
133 * 1 / @ref AVIAMFParamDefinition.parameter_rate "parameter_rate".
134 * It must not be 0.
135 */
136 unsigned int subblock_duration;
137 /**
138 * Pre-defined combination of demixing parameters.
139 */
140 unsigned int dmixp_mode;
142
143/**
144 * Recon Gain Info Parameter Data as defined in section 3.8.3 of IAMF.
145 *
146 * @note This struct's size is not a part of the public ABI.
147 */
148typedef struct AVIAMFReconGain {
150
151 /**
152 * Duration for the given subblock, in units of
153 * 1 / @ref AVIAMFParamDefinition.parameter_rate "parameter_rate".
154 * It must not be 0.
155 */
156 unsigned int subblock_duration;
157
158 /**
159 * Array of gain values to be applied to each channel for each layer
160 * defined in the Audio Element referencing the parent Parameter Definition.
161 * Values for layers where the AV_IAMF_LAYER_FLAG_RECON_GAIN flag is not set
162 * are undefined.
163 *
164 * Channel order is: FL, C, FR, SL, SR, TFL, TFR, BL, BR, TBL, TBR, LFE
165 */
166 uint8_t recon_gain[6][12];
168
170 /**
171 * Subblocks are of struct type AVIAMFMixGain
172 */
174 /**
175 * Subblocks are of struct type AVIAMFDemixingInfo
176 */
178 /**
179 * Subblocks are of struct type AVIAMFReconGain
180 */
182};
183
184/**
185 * Parameters as defined in section 3.6.1 of IAMF.
186 *
187 * The struct is allocated by av_iamf_param_definition_alloc() along with an
188 * array of subblocks, its type depending on the value of type.
189 * This array is placed subblocks_offset bytes after the start of this struct.
190 *
191 * @note This struct's size is not a part of the public ABI.
192 */
193typedef struct AVIAMFParamDefinition {
195
196 /**
197 * Offset in bytes from the start of this struct, at which the subblocks
198 * array is located.
199 */
201 /**
202 * Size in bytes of each element in the subblocks array.
203 */
205 /**
206 * Number of subblocks in the array.
207 */
208 unsigned int nb_subblocks;
209
210 /**
211 * Parameters type. Determines the type of the subblock elements.
212 */
214
215 /**
216 * Identifier for the parameter substream.
217 */
218 unsigned int parameter_id;
219 /**
220 * Sample rate for the parameter substream. It must not be 0.
221 */
222 unsigned int parameter_rate;
223
224 /**
225 * The accumulated duration of all blocks in this parameter definition,
226 * in units of 1 / @ref parameter_rate.
227 *
228 * May be 0, in which case all duration values should be specified in
229 * another parameter definition referencing the same parameter_id.
230 */
231 unsigned int duration;
232 /**
233 * The duration of every subblock in the case where all subblocks, with
234 * the optional exception of the last subblock, have equal durations.
235 *
236 * Must be 0 if subblocks have different durations.
237 */
240
242
243/**
244 * Allocates memory for AVIAMFParamDefinition, plus an array of {@code nb_subblocks}
245 * amount of subblocks of the given type and initializes the variables. Can be
246 * freed with a normal av_free() call.
247 *
248 * @param size if non-NULL, the size in bytes of the resulting data array is written here.
249 */
251 unsigned int nb_subblocks, size_t *size);
252
253/**
254 * Get the subblock at the specified {@code idx}. Must be between 0 and nb_subblocks - 1.
255 *
256 * The @ref AVIAMFParamDefinition.type "param definition type" defines
257 * the struct type of the returned pointer.
258 */
259static av_always_inline void*
261{
262 av_assert0(idx < par->nb_subblocks);
263 return (void *)((uint8_t *)par + par->subblocks_offset + idx * par->subblock_size);
264}
265
266/**
267 * @}
268 * @addtogroup lavu_iamf_audio
269 * @{
270 */
271
276
277/**
278 * Recon gain information for the layer is present in AVIAMFReconGain
279 */
280#define AV_IAMF_LAYER_FLAG_RECON_GAIN (1 << 0)
281
282/**
283 * A layer defining a Channel Layout in the Audio Element.
284 *
285 * When @ref AVIAMFAudioElement.audio_element_type "the parent's Audio Element type"
286 * is AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL, this corresponds to an Scalable Channel
287 * Layout layer as defined in section 3.6.2 of IAMF.
288 * For AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE, it is an Ambisonics channel
289 * layout as defined in section 3.6.3 of IAMF.
290 *
291 * @note The struct should be allocated with av_iamf_audio_element_add_layer()
292 * and its size is not a part of the public ABI.
293 */
294typedef struct AVIAMFLayer {
296
298
299 /**
300 * A bitmask which may contain a combination of AV_IAMF_LAYER_FLAG_* flags.
301 */
302 unsigned int flags;
303 /**
304 * Output gain channel flags as defined in section 3.6.2 of IAMF.
305 *
306 * This field is defined only if @ref AVIAMFAudioElement.audio_element_type
307 * "the parent's Audio Element type" is AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL,
308 * must be 0 otherwise.
309 */
310 unsigned int output_gain_flags;
311 /**
312 * Output gain as defined in section 3.6.2 of IAMF.
313 *
314 * Must be 0 if @ref output_gain_flags is 0.
315 */
317 /**
318 * Ambisonics mode as defined in section 3.6.3 of IAMF.
319 *
320 * This field is defined only if @ref AVIAMFAudioElement.audio_element_type
321 * "the parent's Audio Element type" is AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE.
322 *
323 * If AV_IAMF_AMBISONICS_MODE_MONO, channel_mapping is defined implicitly
324 * (Ambisonic Order) or explicitly (Custom Order with ambi channels) in
325 * @ref ch_layout.
326 * If AV_IAMF_AMBISONICS_MODE_PROJECTION, @ref demixing_matrix must be set.
327 */
329
330 /**
331 * Demixing matrix as defined in section 3.6.3 of IAMF.
332 *
333 * May be set only if @ref ambisonics_mode == AV_IAMF_AMBISONICS_MODE_PROJECTION,
334 * must be NULL otherwise.
335 */
337
338 /**
339 * The length of the Demixing matrix array. Must be ch_layout.nb_channels multiplied
340 * by the sum of the amount of streams in the group plus the amount of streams in
341 * the group that are stereo.
342 */
343 unsigned int nb_demixing_matrix;
345
346
351
352/**
353 * Information on how to combine one or more audio streams, as defined in
354 * section 3.6 of IAMF.
355 *
356 * @note The struct should be allocated with av_iamf_audio_element_alloc()
357 * and its size is not a part of the public ABI.
358 */
359typedef struct AVIAMFAudioElement {
361
363 /**
364 * Number of layers, or channel groups, in the Audio Element.
365 * There may be 6 layers at most, and for @ref audio_element_type
366 * AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE, there may be exactly 1.
367 *
368 * Set by av_iamf_audio_element_add_layer(), must not be
369 * modified by any other code.
370 */
371 unsigned int nb_layers;
372
373 /**
374 * Demixing information used to reconstruct a scalable channel audio
375 * representation.
376 * The @ref AVIAMFParamDefinition.type "type" must be
377 * AV_IAMF_PARAMETER_DEFINITION_DEMIXING.
378 */
380 /**
381 * Recon gain information used to reconstruct a scalable channel audio
382 * representation.
383 * The @ref AVIAMFParamDefinition.type "type" must be
384 * AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN.
385 */
387
388 /**
389 * Audio element type as defined in section 3.6 of IAMF.
390 */
392
393 /**
394 * Default weight value as defined in section 3.6 of IAMF.
395 */
396 unsigned int default_w;
398
400
401/**
402 * Allocates a AVIAMFAudioElement, and initializes its fields with default values.
403 * No layers are allocated. Must be freed with av_iamf_audio_element_free().
404 *
405 * @see av_iamf_audio_element_add_layer()
406 */
408
409/**
410 * Allocate a layer and add it to a given AVIAMFAudioElement.
411 * It is freed by av_iamf_audio_element_free() alongside the rest of the parent
412 * AVIAMFAudioElement.
413 *
414 * @return a pointer to the allocated layer.
415 */
417
418/**
419 * Free an AVIAMFAudioElement and all its contents.
420 *
421 * @param audio_element pointer to pointer to an allocated AVIAMFAudioElement.
422 * upon return, *audio_element will be set to NULL.
423 */
425
426/**
427 * @}
428 * @addtogroup lavu_iamf_mix
429 * @{
430 */
431
433 /**
434 * The referenced Audio Element shall be rendered to stereo loudspeakers.
435 */
437 /**
438 * The referenced Audio Element shall be rendered with a binaural renderer.
439 */
441};
442
443/**
444 * Submix element as defined in section 3.7 of IAMF.
445 *
446 * @note The struct should be allocated with av_iamf_submix_add_element()
447 * and its size is not a part of the public ABI.
448 */
449typedef struct AVIAMFSubmixElement {
451
452 /**
453 * The id of the Audio Element this submix element references.
454 */
455 unsigned int audio_element_id;
456
457 /**
458 * Information required required for applying any processing to the
459 * referenced and rendered Audio Element before being summed with other
460 * processed Audio Elements.
461 * The @ref AVIAMFParamDefinition.type "type" must be
462 * AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN.
463 */
465
466 /**
467 * Default mix gain value to apply when there are no AVIAMFParamDefinition
468 * with @ref element_mix_config "element_mix_config's"
469 * @ref AVIAMFParamDefinition.parameter_id "parameter_id" available for a
470 * given audio frame.
471 */
473
474 /**
475 * A value that indicates whether the referenced channel-based Audio Element
476 * shall be rendered to stereo loudspeakers or spatialized with a binaural
477 * renderer when played back on headphones.
478 * If the Audio Element is not of @ref AVIAMFAudioElement.audio_element_type
479 * "type" AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL, then this field is undefined.
480 */
482
483 /**
484 * A dictionary of strings describing the submix in different languages.
485 * Must have the same amount of entries as
486 * @ref AVIAMFMixPresentation.annotations "the mix's annotations", stored
487 * in the same order, and with the same key strings.
488 *
489 * @ref AVDictionaryEntry.key "key" is a string conforming to BCP-47 that
490 * specifies the language for the string stored in
491 * @ref AVDictionaryEntry.value "value".
492 */
495
497 /**
498 * The layout follows the loudspeaker sound system convention of ITU-2051-3.
499 * @ref AVIAMFSubmixLayout.sound_system must be set.
500 */
502 /**
503 * The layout is binaural.
504 *
505 * @note @ref AVIAMFSubmixLayout.sound_system may be set to
506 * AV_CHANNEL_LAYOUT_BINAURAL to simplify API usage, but it's not mandatory.
507 */
509};
510
511/**
512 * Submix layout as defined in section 3.7.6 of IAMF.
513 *
514 * @note The struct should be allocated with av_iamf_submix_add_layout()
515 * and its size is not a part of the public ABI.
516 */
517typedef struct AVIAMFSubmixLayout {
519
521
522 /**
523 * Channel layout matching one of Sound Systems A to J of ITU-2051-3, plus
524 * 7.1.2ch, 3.1.2ch, and binaural.
525 * If layout_type is not AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS or
526 * AV_IAMF_SUBMIX_LAYOUT_TYPE_BINAURAL, this field is undefined.
527 */
529 /**
530 * The program integrated loudness information, as defined in
531 * ITU-1770-4.
532 */
534 /**
535 * The digital (sampled) peak value of the audio signal, as defined
536 * in ITU-1770-4.
537 */
539 /**
540 * The true peak of the audio signal, as defined in ITU-1770-4.
541 */
543 /**
544 * The Dialogue loudness information, as defined in ITU-1770-4.
545 */
547 /**
548 * The Album loudness information, as defined in ITU-1770-4.
549 */
552
553/**
554 * Submix layout as defined in section 3.7 of IAMF.
555 *
556 * @note The struct should be allocated with av_iamf_mix_presentation_add_submix()
557 * and its size is not a part of the public ABI.
558 */
559typedef struct AVIAMFSubmix {
561
562 /**
563 * Array of submix elements.
564 *
565 * Set by av_iamf_submix_add_element(), must not be modified by any
566 * other code.
567 */
569 /**
570 * Number of elements in the submix.
571 *
572 * Set by av_iamf_submix_add_element(), must not be modified by any
573 * other code.
574 */
575 unsigned int nb_elements;
576
577 /**
578 * Array of submix layouts.
579 *
580 * Set by av_iamf_submix_add_layout(), must not be modified by any
581 * other code.
582 */
584 /**
585 * Number of layouts in the submix.
586 *
587 * Set by av_iamf_submix_add_layout(), must not be modified by any
588 * other code.
589 */
590 unsigned int nb_layouts;
591
592 /**
593 * Information required for post-processing the mixed audio signal to
594 * generate the audio signal for playback.
595 * The @ref AVIAMFParamDefinition.type "type" must be
596 * AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN.
597 */
599
600 /**
601 * Default mix gain value to apply when there are no AVIAMFParamDefinition
602 * with @ref output_mix_config "output_mix_config's"
603 * @ref AVIAMFParamDefinition.parameter_id "parameter_id" available for a
604 * given audio frame.
605 */
608
609/**
610 * Information on how to render and mix one or more AVIAMFAudioElement to generate
611 * the final audio output, as defined in section 3.7 of IAMF.
612 *
613 * @note The struct should be allocated with av_iamf_mix_presentation_alloc()
614 * and its size is not a part of the public ABI.
615 */
616typedef struct AVIAMFMixPresentation {
618
619 /**
620 * Array of submixes.
621 *
622 * Set by av_iamf_mix_presentation_add_submix(), must not be modified
623 * by any other code.
624 */
626 /**
627 * Number of submixes in the presentation.
628 *
629 * Set by av_iamf_mix_presentation_add_submix(), must not be modified
630 * by any other code.
631 */
632 unsigned int nb_submixes;
633
634 /**
635 * A dictionary of strings describing the mix in different languages.
636 * Must have the same amount of entries as every
637 * @ref AVIAMFSubmixElement.annotations "Submix element annotations",
638 * stored in the same order, and with the same key strings.
639 *
640 * @ref AVDictionaryEntry.key "key" is a string conforming to BCP-47
641 * that specifies the language for the string stored in
642 * @ref AVDictionaryEntry.value "value".
643 */
646
648
649/**
650 * Allocates a AVIAMFMixPresentation, and initializes its fields with default
651 * values. No submixes are allocated.
652 * Must be freed with av_iamf_mix_presentation_free().
653 *
654 * @see av_iamf_mix_presentation_add_submix()
655 */
657
658/**
659 * Allocate a submix and add it to a given AVIAMFMixPresentation.
660 * It is freed by av_iamf_mix_presentation_free() alongside the rest of the
661 * parent AVIAMFMixPresentation.
662 *
663 * @return a pointer to the allocated submix.
664 */
666
667/**
668 * Allocate a submix element and add it to a given AVIAMFSubmix.
669 * It is freed by av_iamf_mix_presentation_free() alongside the rest of the
670 * parent AVIAMFSubmix.
671 *
672 * @return a pointer to the allocated submix.
673 */
675
676/**
677 * Allocate a submix layout and add it to a given AVIAMFSubmix.
678 * It is freed by av_iamf_mix_presentation_free() alongside the rest of the
679 * parent AVIAMFSubmix.
680 *
681 * @return a pointer to the allocated submix.
682 */
684
685/**
686 * Free an AVIAMFMixPresentation and all its contents.
687 *
688 * @param mix_presentation pointer to pointer to an allocated AVIAMFMixPresentation.
689 * upon return, *mix_presentation will be set to NULL.
690 */
692
693/**
694 * @}
695 */
696
697#endif /* AVUTIL_IAMF_H */
Macro definitions for various function/variable attributes.
#define av_always_inline
Definition attributes.h:64
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
Public libavutil channel layout APIs header.
Public dictionary API.
struct AVDictionary AVDictionary
Definition dict.h:95
AVIAMFLayer * av_iamf_audio_element_add_layer(AVIAMFAudioElement *audio_element)
Allocate a layer and add it to a given AVIAMFAudioElement.
AVIAMFAmbisonicsMode
Definition iamf.h:272
const AVClass * av_iamf_audio_element_get_class(void)
AVIAMFAudioElementType
Definition iamf.h:347
void av_iamf_audio_element_free(AVIAMFAudioElement **audio_element)
Free an AVIAMFAudioElement and all its contents.
AVIAMFAudioElement * av_iamf_audio_element_alloc(void)
Allocates a AVIAMFAudioElement, and initializes its fields with default values.
@ AV_IAMF_AMBISONICS_MODE_MONO
Definition iamf.h:273
@ AV_IAMF_AMBISONICS_MODE_PROJECTION
Definition iamf.h:274
@ AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE
Definition iamf.h:349
@ AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL
Definition iamf.h:348
AVIAMFHeadphonesMode
Definition iamf.h:432
AVIAMFSubmixLayout * av_iamf_submix_add_layout(AVIAMFSubmix *submix)
Allocate a submix layout and add it to a given AVIAMFSubmix.
void av_iamf_mix_presentation_free(AVIAMFMixPresentation **mix_presentation)
Free an AVIAMFMixPresentation and all its contents.
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.
AVIAMFSubmixLayoutType
Definition iamf.h:496
const AVClass * av_iamf_mix_presentation_get_class(void)
@ AV_IAMF_HEADPHONES_MODE_STEREO
The referenced Audio Element shall be rendered to stereo loudspeakers.
Definition iamf.h:436
@ AV_IAMF_HEADPHONES_MODE_BINAURAL
The referenced Audio Element shall be rendered with a binaural renderer.
Definition iamf.h:440
@ AV_IAMF_SUBMIX_LAYOUT_TYPE_BINAURAL
The layout is binaural.
Definition iamf.h:508
@ AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS
The layout follows the loudspeaker sound system convention of ITU-2051-3.
Definition iamf.h:501
static av_always_inline void * av_iamf_param_definition_get_subblock(const AVIAMFParamDefinition *par, unsigned int idx)
Get the subblock at the specified idx.
Definition iamf.h:260
AVIAMFParamDefinitionType
Definition iamf.h:169
const AVClass * av_iamf_param_definition_get_class(void)
AVIAMFParamDefinition * av_iamf_param_definition_alloc(enum AVIAMFParamDefinitionType type, unsigned int nb_subblocks, size_t *size)
Allocates memory for AVIAMFParamDefinition, plus an array of nb_subblocks amount of subblocks of the ...
AVIAMFAnimationType
Definition iamf.h:66
@ AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN
Subblocks are of struct type AVIAMFReconGain.
Definition iamf.h:181
@ AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN
Subblocks are of struct type AVIAMFMixGain.
Definition iamf.h:173
@ AV_IAMF_PARAMETER_DEFINITION_DEMIXING
Subblocks are of struct type AVIAMFDemixingInfo.
Definition iamf.h:177
@ AV_IAMF_ANIMATION_TYPE_BEZIER
Definition iamf.h:69
@ AV_IAMF_ANIMATION_TYPE_LINEAR
Definition iamf.h:68
@ AV_IAMF_ANIMATION_TYPE_STEP
Definition iamf.h:67
Utilities for rational number calculation.
An AVChannelLayout holds information about the channel layout of audio data.
Describe the class of an AVClass context structure.
Definition log.h:76
Information on how to combine one or more audio streams, as defined in section 3.6 of IAMF.
Definition iamf.h:359
enum AVIAMFAudioElementType audio_element_type
Audio element type as defined in section 3.6 of IAMF.
Definition iamf.h:391
const AVClass * av_class
Definition iamf.h:360
AVIAMFParamDefinition * recon_gain_info
Recon gain information used to reconstruct a scalable channel audio representation.
Definition iamf.h:386
unsigned int default_w
Default weight value as defined in section 3.6 of IAMF.
Definition iamf.h:396
AVIAMFParamDefinition * demixing_info
Demixing information used to reconstruct a scalable channel audio representation.
Definition iamf.h:379
AVIAMFLayer ** layers
Definition iamf.h:362
unsigned int nb_layers
Number of layers, or channel groups, in the Audio Element.
Definition iamf.h:371
Demixing Info Parameter Data as defined in section 3.8.2 of IAMF.
Definition iamf.h:128
unsigned int dmixp_mode
Pre-defined combination of demixing parameters.
Definition iamf.h:140
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Definition iamf.h:136
const AVClass * av_class
Definition iamf.h:129
A layer defining a Channel Layout in the Audio Element.
Definition iamf.h:294
unsigned int flags
A bitmask which may contain a combination of AV_IAMF_LAYER_FLAG_* flags.
Definition iamf.h:302
unsigned int output_gain_flags
Output gain channel flags as defined in section 3.6.2 of IAMF.
Definition iamf.h:310
enum AVIAMFAmbisonicsMode ambisonics_mode
Ambisonics mode as defined in section 3.6.3 of IAMF.
Definition iamf.h:328
unsigned int nb_demixing_matrix
The length of the Demixing matrix array.
Definition iamf.h:343
const AVClass * av_class
Definition iamf.h:295
AVRational * demixing_matrix
Demixing matrix as defined in section 3.6.3 of IAMF.
Definition iamf.h:336
AVChannelLayout ch_layout
Definition iamf.h:297
AVRational output_gain
Output gain as defined in section 3.6.2 of IAMF.
Definition iamf.h:316
Mix Gain Parameter Data as defined in section 3.8.1 of IAMF.
Definition iamf.h:77
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Definition iamf.h:85
AVRational start_point_value
Parameter value that is applied at the start of the subblock.
Definition iamf.h:96
AVRational control_point_value
Parameter value of the middle control point of a quadratic Bezier curve, i.e., its y-axis value.
Definition iamf.h:112
AVRational end_point_value
Parameter value that is applied at the end of the subblock.
Definition iamf.h:104
enum AVIAMFAnimationType animation_type
The type of animation applied to the parameter values.
Definition iamf.h:89
const AVClass * av_class
Definition iamf.h:78
AVRational control_point_relative_time
Parameter value of the time of the middle control point of a quadratic Bezier curve,...
Definition iamf.h:120
Information on how to render and mix one or more AVIAMFAudioElement to generate the final audio outpu...
Definition iamf.h:616
unsigned int nb_submixes
Number of submixes in the presentation.
Definition iamf.h:632
const AVClass * av_class
Definition iamf.h:617
AVDictionary * annotations
A dictionary of strings describing the mix in different languages.
Definition iamf.h:644
AVIAMFSubmix ** submixes
Array of submixes.
Definition iamf.h:625
Parameters as defined in section 3.6.1 of IAMF.
Definition iamf.h:193
unsigned int parameter_rate
Sample rate for the parameter substream.
Definition iamf.h:222
size_t subblocks_offset
Offset in bytes from the start of this struct, at which the subblocks array is located.
Definition iamf.h:200
const AVClass * av_class
Definition iamf.h:194
size_t subblock_size
Size in bytes of each element in the subblocks array.
Definition iamf.h:204
unsigned int duration
The accumulated duration of all blocks in this parameter definition, in units of 1 / parameter_rate.
Definition iamf.h:231
unsigned int constant_subblock_duration
The duration of every subblock in the case where all subblocks, with the optional exception of the la...
Definition iamf.h:238
unsigned int parameter_id
Identifier for the parameter substream.
Definition iamf.h:218
enum AVIAMFParamDefinitionType type
Parameters type.
Definition iamf.h:213
unsigned int nb_subblocks
Number of subblocks in the array.
Definition iamf.h:208
Recon Gain Info Parameter Data as defined in section 3.8.3 of IAMF.
Definition iamf.h:148
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Definition iamf.h:156
uint8_t recon_gain[6][12]
Array of gain values to be applied to each channel for each layer defined in the Audio Element refere...
Definition iamf.h:166
const AVClass * av_class
Definition iamf.h:149
Submix element as defined in section 3.7 of IAMF.
Definition iamf.h:449
AVIAMFParamDefinition * element_mix_config
Information required required for applying any processing to the referenced and rendered Audio Elemen...
Definition iamf.h:464
const AVClass * av_class
Definition iamf.h:450
unsigned int audio_element_id
The id of the Audio Element this submix element references.
Definition iamf.h:455
AVDictionary * annotations
A dictionary of strings describing the submix in different languages.
Definition iamf.h:493
enum AVIAMFHeadphonesMode headphones_rendering_mode
A value that indicates whether the referenced channel-based Audio Element shall be rendered to stereo...
Definition iamf.h:481
AVRational default_mix_gain
Default mix gain value to apply when there are no AVIAMFParamDefinition with element_mix_config's par...
Definition iamf.h:472
Submix layout as defined in section 3.7.6 of IAMF.
Definition iamf.h:517
AVRational true_peak
The true peak of the audio signal, as defined in ITU-1770-4.
Definition iamf.h:542
AVRational digital_peak
The digital (sampled) peak value of the audio signal, as defined in ITU-1770-4.
Definition iamf.h:538
enum AVIAMFSubmixLayoutType layout_type
Definition iamf.h:520
AVRational dialogue_anchored_loudness
The Dialogue loudness information, as defined in ITU-1770-4.
Definition iamf.h:546
AVRational album_anchored_loudness
The Album loudness information, as defined in ITU-1770-4.
Definition iamf.h:550
AVRational integrated_loudness
The program integrated loudness information, as defined in ITU-1770-4.
Definition iamf.h:533
AVChannelLayout sound_system
Channel layout matching one of Sound Systems A to J of ITU-2051-3, plus 7.1.2ch, 3....
Definition iamf.h:528
const AVClass * av_class
Definition iamf.h:518
Submix layout as defined in section 3.7 of IAMF.
Definition iamf.h:559
AVRational default_mix_gain
Default mix gain value to apply when there are no AVIAMFParamDefinition with output_mix_config's para...
Definition iamf.h:606
unsigned int nb_elements
Number of elements in the submix.
Definition iamf.h:575
AVIAMFSubmixElement ** elements
Array of submix elements.
Definition iamf.h:568
AVIAMFSubmixLayout ** layouts
Array of submix layouts.
Definition iamf.h:583
AVIAMFParamDefinition * output_mix_config
Information required for post-processing the mixed audio signal to generate the audio signal for play...
Definition iamf.h:598
const AVClass * av_class
Definition iamf.h:560
unsigned int nb_layouts
Number of layouts in the submix.
Definition iamf.h:590
Rational number (pair of numerator and denominator).
Definition rational.h:58