FFmpeg
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  */
70 };
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  */
77 typedef struct AVIAMFMixGain {
78  const AVClass *av_class;
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  */
121 } AVIAMFMixGain;
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  */
128 typedef 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  */
148 typedef 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  */
193 typedef 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  */
259 static 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 
275 };
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  */
294 typedef 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;
344 } AVIAMFLayer;
345 
346 
350 };
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  */
359 typedef 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  */
424 void av_iamf_audio_element_free(AVIAMFAudioElement **audio_element);
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  */
449 typedef 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  */
517 typedef 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  */
559 typedef 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  */
607 } AVIAMFSubmix;
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  */
616 typedef 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 */
AVIAMFSubmix::elements
AVIAMFSubmixElement ** elements
Array of submix elements.
Definition: iamf.h:568
AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS
@ AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS
The layout follows the loudspeaker sound system convention of ITU-2051-3.
Definition: iamf.h:501
AVIAMFAudioElement::nb_layers
unsigned int nb_layers
Number of layers, or channel groups, in the Audio Element.
Definition: iamf.h:371
AVIAMFSubmix::layouts
AVIAMFSubmixLayout ** layouts
Array of submix layouts.
Definition: iamf.h:583
AVIAMFAmbisonicsMode
AVIAMFAmbisonicsMode
Definition: iamf.h:272
AVIAMFDemixingInfo::av_class
const AVClass * av_class
Definition: iamf.h:129
AV_IAMF_ANIMATION_TYPE_STEP
@ AV_IAMF_ANIMATION_TYPE_STEP
Definition: iamf.h:67
AVIAMFAudioElement::default_w
unsigned int default_w
Default weight value as defined in section 3.6 of IAMF.
Definition: iamf.h:396
av_iamf_param_definition_alloc
AVIAMFParamDefinition * av_iamf_param_definition_alloc(enum AVIAMFParamDefinitionType type, unsigned int nb_subblocks, size_t *size)
Allocates memory for AVIAMFParamDefinition, plus an array of.
Definition: iamf.c:159
AVIAMFAudioElement::layers
AVIAMFLayer ** layers
Definition: iamf.h:362
rational.h
AVIAMFMixPresentation::nb_submixes
unsigned int nb_submixes
Number of submixes in the presentation.
Definition: iamf.h:632
AVIAMFParamDefinition::type
enum AVIAMFParamDefinitionType type
Parameters type.
Definition: iamf.h:213
AVIAMFSubmixLayoutType
AVIAMFSubmixLayoutType
Definition: iamf.h:496
AVIAMFSubmix::av_class
const AVClass * av_class
Definition: iamf.h:560
AV_IAMF_HEADPHONES_MODE_STEREO
@ AV_IAMF_HEADPHONES_MODE_STEREO
The referenced Audio Element shall be rendered to stereo loudspeakers.
Definition: iamf.h:436
av_iamf_mix_presentation_free
void av_iamf_mix_presentation_free(AVIAMFMixPresentation **mix_presentation)
Free an AVIAMFMixPresentation and all its contents.
Definition: iamf.c:538
AVIAMFSubmixLayout::layout_type
enum AVIAMFSubmixLayoutType layout_type
Definition: iamf.h:520
AVIAMFParamDefinition
Parameters as defined in section 3.6.1 of IAMF.
Definition: iamf.h:193
AVIAMFSubmixElement::default_mix_gain
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
AVDictionary
Definition: dict.c:32
AVIAMFSubmixLayout::digital_peak
AVRational digital_peak
The digital (sampled) peak value of the audio signal, as defined in ITU-1770-4.
Definition: iamf.h:538
AVIAMFMixGain::animation_type
enum AVIAMFAnimationType animation_type
The type of animation applied to the parameter values.
Definition: iamf.h:89
AVIAMFAudioElementType
AVIAMFAudioElementType
Definition: iamf.h:347
AVIAMFSubmixLayout::integrated_loudness
AVRational integrated_loudness
The program integrated loudness information, as defined in ITU-1770-4.
Definition: iamf.h:533
av_iamf_mix_presentation_add_submix
AVIAMFSubmix * av_iamf_mix_presentation_add_submix(AVIAMFMixPresentation *mix_presentation)
Allocate a submix and add it to a given AVIAMFMixPresentation.
AVIAMFSubmixLayout
Submix layout as defined in section 3.7.6 of IAMF.
Definition: iamf.h:517
av_iamf_audio_element_free
void av_iamf_audio_element_free(AVIAMFAudioElement **audio_element)
Free an AVIAMFAudioElement and all its contents.
Definition: iamf.c:340
av_iamf_audio_element_alloc
AVIAMFAudioElement * av_iamf_audio_element_alloc(void)
Allocates a AVIAMFAudioElement, and initializes its fields with default values.
Definition: iamf.c:326
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
AVIAMFHeadphonesMode
AVIAMFHeadphonesMode
Definition: iamf.h:432
AVIAMFAudioElement::audio_element_type
enum AVIAMFAudioElementType audio_element_type
Audio element type as defined in section 3.6 of IAMF.
Definition: iamf.h:391
AVIAMFReconGain
Recon Gain Info Parameter Data as defined in section 3.8.3 of IAMF.
Definition: iamf.h:148
AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN
@ AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN
Subblocks are of struct type AVIAMFReconGain.
Definition: iamf.h:181
AVIAMFSubmixElement::annotations
AVDictionary * annotations
A dictionary of strings describing the submix in different languages.
Definition: iamf.h:493
avassert.h
av_iamf_submix_add_layout
AVIAMFSubmixLayout * av_iamf_submix_add_layout(AVIAMFSubmix *submix)
Allocate a submix layout and add it to a given AVIAMFSubmix.
AV_IAMF_ANIMATION_TYPE_BEZIER
@ AV_IAMF_ANIMATION_TYPE_BEZIER
Definition: iamf.h:69
AVIAMFSubmixElement::av_class
const AVClass * av_class
Definition: iamf.h:450
AVIAMFSubmixLayout::dialogue_anchored_loudness
AVRational dialogue_anchored_loudness
The Dialogue loudness information, as defined in ITU-1770-4.
Definition: iamf.h:546
av_iamf_param_definition_get_subblock
static av_always_inline void * av_iamf_param_definition_get_subblock(const AVIAMFParamDefinition *par, unsigned int idx)
Get the subblock at the specified.
Definition: iamf.h:260
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:41
AVIAMFSubmixElement::headphones_rendering_mode
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
av_iamf_param_definition_get_class
const AVClass * av_iamf_param_definition_get_class(void)
Definition: iamf.c:154
AVIAMFLayer::ch_layout
AVChannelLayout ch_layout
Definition: iamf.h:297
AVIAMFAnimationType
AVIAMFAnimationType
Definition: iamf.h:66
AV_IAMF_HEADPHONES_MODE_BINAURAL
@ AV_IAMF_HEADPHONES_MODE_BINAURAL
The referenced Audio Element shall be rendered with a binaural renderer.
Definition: iamf.h:440
AVIAMFMixGain::control_point_relative_time
AVRational control_point_relative_time
Parameter value of the time of the middle control point of a quadratic Bezier curve,...
Definition: iamf.h:120
AVIAMFDemixingInfo
Demixing Info Parameter Data as defined in section 3.8.2 of IAMF.
Definition: iamf.h:128
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
AVIAMFMixGain::av_class
const AVClass * av_class
Definition: iamf.h:78
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVIAMFParamDefinition::duration
unsigned int duration
The accumulated duration of all blocks in this parameter definition, in units of 1 / parameter_rate.
Definition: iamf.h:231
AVIAMFLayer
A layer defining a Channel Layout in the Audio Element.
Definition: iamf.h:294
AVIAMFParamDefinition::subblocks_offset
size_t subblocks_offset
Offset in bytes from the start of this struct, at which the subblocks array is located.
Definition: iamf.h:200
AV_IAMF_ANIMATION_TYPE_LINEAR
@ AV_IAMF_ANIMATION_TYPE_LINEAR
Definition: iamf.h:68
AV_IAMF_AMBISONICS_MODE_MONO
@ AV_IAMF_AMBISONICS_MODE_MONO
Definition: iamf.h:273
AVIAMFLayer::output_gain_flags
unsigned int output_gain_flags
Output gain channel flags as defined in section 3.6.2 of IAMF.
Definition: iamf.h:310
AVIAMFSubmixElement::audio_element_id
unsigned int audio_element_id
The id of the Audio Element this submix element references.
Definition: iamf.h:455
AVIAMFSubmix
Submix layout as defined in section 3.7 of IAMF.
Definition: iamf.h:559
AVIAMFReconGain::subblock_duration
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Definition: iamf.h:156
AVIAMFDemixingInfo::subblock_duration
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Definition: iamf.h:136
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:319
size
int size
Definition: twinvq_data.h:10344
av_iamf_mix_presentation_alloc
AVIAMFMixPresentation * av_iamf_mix_presentation_alloc(void)
Allocates a AVIAMFMixPresentation, and initializes its fields with default values.
Definition: iamf.c:524
AVIAMFParamDefinition::constant_subblock_duration
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
av_iamf_submix_add_element
AVIAMFSubmixElement * av_iamf_submix_add_element(AVIAMFSubmix *submix)
Allocate a submix element and add it to a given AVIAMFSubmix.
AVIAMFAudioElement
Information on how to combine one or more audio streams, as defined in section 3.6 of IAMF.
Definition: iamf.h:359
attributes.h
AVIAMFMixGain
Mix Gain Parameter Data as defined in section 3.8.1 of IAMF.
Definition: iamf.h:77
av_iamf_audio_element_get_class
const AVClass * av_iamf_audio_element_get_class(void)
Definition: iamf.c:321
AVIAMFParamDefinition::av_class
const AVClass * av_class
Definition: iamf.h:194
AVIAMFParamDefinition::parameter_id
unsigned int parameter_id
Identifier for the parameter substream.
Definition: iamf.h:218
AVIAMFLayer::demixing_matrix
AVRational * demixing_matrix
Demixing matrix as defined in section 3.6.3 of IAMF.
Definition: iamf.h:336
AVIAMFAudioElement::av_class
const AVClass * av_class
Definition: iamf.h:360
AVIAMFSubmixLayout::av_class
const AVClass * av_class
Definition: iamf.h:518
AVIAMFMixPresentation
Information on how to render and mix one or more AVIAMFAudioElement to generate the final audio outpu...
Definition: iamf.h:616
AVIAMFMixGain::end_point_value
AVRational end_point_value
Parameter value that is applied at the end of the subblock.
Definition: iamf.h:104
av_always_inline
#define av_always_inline
Definition: attributes.h:63
AVIAMFParamDefinition::nb_subblocks
unsigned int nb_subblocks
Number of subblocks in the array.
Definition: iamf.h:208
AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE
@ AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE
Definition: iamf.h:349
AVIAMFLayer::nb_demixing_matrix
unsigned int nb_demixing_matrix
The length of the Demixing matrix array.
Definition: iamf.h:343
AVIAMFSubmix::nb_layouts
unsigned int nb_layouts
Number of layouts in the submix.
Definition: iamf.h:590
AVIAMFMixGain::start_point_value
AVRational start_point_value
Parameter value that is applied at the start of the subblock.
Definition: iamf.h:96
AVIAMFLayer::av_class
const AVClass * av_class
Definition: iamf.h:295
AVIAMFMixGain::control_point_value
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
dict.h
av_iamf_mix_presentation_get_class
const AVClass * av_iamf_mix_presentation_get_class(void)
Definition: iamf.c:519
channel_layout.h
AVIAMFSubmix::default_mix_gain
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
AVIAMFSubmixLayout::album_anchored_loudness
AVRational album_anchored_loudness
The Album loudness information, as defined in ITU-1770-4.
Definition: iamf.h:550
AVIAMFSubmixLayout::true_peak
AVRational true_peak
The true peak of the audio signal, as defined in ITU-1770-4.
Definition: iamf.h:542
AVIAMFSubmixLayout::sound_system
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
AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN
@ AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN
Subblocks are of struct type AVIAMFMixGain.
Definition: iamf.h:173
AVIAMFReconGain::av_class
const AVClass * av_class
Definition: iamf.h:149
av_iamf_audio_element_add_layer
AVIAMFLayer * av_iamf_audio_element_add_layer(AVIAMFAudioElement *audio_element)
Allocate a layer and add it to a given AVIAMFAudioElement.
AVIAMFSubmix::nb_elements
unsigned int nb_elements
Number of elements in the submix.
Definition: iamf.h:575
AVIAMFAudioElement::demixing_info
AVIAMFParamDefinition * demixing_info
Demixing information used to reconstruct a scalable channel audio representation.
Definition: iamf.h:379
AVIAMFDemixingInfo::dmixp_mode
unsigned int dmixp_mode
Pre-defined combination of demixing parameters.
Definition: iamf.h:140
AVIAMFSubmix::output_mix_config
AVIAMFParamDefinition * output_mix_config
Information required for post-processing the mixed audio signal to generate the audio signal for play...
Definition: iamf.h:598
AVIAMFLayer::ambisonics_mode
enum AVIAMFAmbisonicsMode ambisonics_mode
Ambisonics mode as defined in section 3.6.3 of IAMF.
Definition: iamf.h:328
AVIAMFParamDefinitionType
AVIAMFParamDefinitionType
Definition: iamf.h:169
AVIAMFMixPresentation::annotations
AVDictionary * annotations
A dictionary of strings describing the mix in different languages.
Definition: iamf.h:644
AV_IAMF_SUBMIX_LAYOUT_TYPE_BINAURAL
@ AV_IAMF_SUBMIX_LAYOUT_TYPE_BINAURAL
The layout is binaural.
Definition: iamf.h:508
AVIAMFLayer::flags
unsigned int flags
A bitmask which may contain a combination of AV_IAMF_LAYER_FLAG_* flags.
Definition: iamf.h:302
AVIAMFLayer::output_gain
AVRational output_gain
Output gain as defined in section 3.6.2 of IAMF.
Definition: iamf.h:316
AV_IAMF_AMBISONICS_MODE_PROJECTION
@ AV_IAMF_AMBISONICS_MODE_PROJECTION
Definition: iamf.h:274
AVIAMFSubmixElement::element_mix_config
AVIAMFParamDefinition * element_mix_config
Information required required for applying any processing to the referenced and rendered Audio Elemen...
Definition: iamf.h:464
AVIAMFParamDefinition::parameter_rate
unsigned int parameter_rate
Sample rate for the parameter substream.
Definition: iamf.h:222
AVIAMFSubmixElement
Submix element as defined in section 3.7 of IAMF.
Definition: iamf.h:449
AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL
@ AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL
Definition: iamf.h:348
AVIAMFParamDefinition::subblock_size
size_t subblock_size
Size in bytes of each element in the subblocks array.
Definition: iamf.h:204
AVIAMFAudioElement::recon_gain_info
AVIAMFParamDefinition * recon_gain_info
Recon gain information used to reconstruct a scalable channel audio representation.
Definition: iamf.h:386
AVIAMFMixPresentation::submixes
AVIAMFSubmix ** submixes
Array of submixes.
Definition: iamf.h:625
AVIAMFReconGain::recon_gain
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
AVIAMFMixGain::subblock_duration
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Definition: iamf.h:85
AVIAMFMixPresentation::av_class
const AVClass * av_class
Definition: iamf.h:617
AV_IAMF_PARAMETER_DEFINITION_DEMIXING
@ AV_IAMF_PARAMETER_DEFINITION_DEMIXING
Subblocks are of struct type AVIAMFDemixingInfo.
Definition: iamf.h:177