1 /*
2  * Copyright (c) 2014 Tim Walker <tdskywalker@gmail.com>
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 module ffmpeg.libavutil.downmix_info;
21 
22 import ffmpeg.libavutil.frame;
23 
24 extern (C) @nogc nothrow:
25 
26 /**
27  * @file
28  * audio downmix medatata
29  */
30 
31 /**
32  * @addtogroup lavu_audio
33  * @{
34  */
35 
36 /**
37  * @defgroup downmix_info Audio downmix metadata
38  * @{
39  */
40 
41 /**
42  * Possible downmix types.
43  */
44 enum AVDownmixType
45 {
46     AV_DOWNMIX_TYPE_UNKNOWN = 0, /**< Not indicated. */
47     AV_DOWNMIX_TYPE_LORO = 1, /**< Lo/Ro 2-channel downmix (Stereo). */
48     AV_DOWNMIX_TYPE_LTRT = 2, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */
49     AV_DOWNMIX_TYPE_DPLII = 3, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */
50     AV_DOWNMIX_TYPE_NB = 4 /**< Number of downmix types. Not part of ABI. */
51 }
52 
53 /**
54  * This structure describes optional metadata relevant to a downmix procedure.
55  *
56  * All fields are set by the decoder to the value indicated in the audio
57  * bitstream (if present), or to a "sane" default otherwise.
58  */
59 struct AVDownmixInfo
60 {
61     /**
62      * Type of downmix preferred by the mastering engineer.
63      */
64     AVDownmixType preferred_downmix_type;
65 
66     /**
67      * Absolute scale factor representing the nominal level of the center
68      * channel during a regular downmix.
69      */
70     double center_mix_level;
71 
72     /**
73      * Absolute scale factor representing the nominal level of the center
74      * channel during an Lt/Rt compatible downmix.
75      */
76     double center_mix_level_ltrt;
77 
78     /**
79      * Absolute scale factor representing the nominal level of the surround
80      * channels during a regular downmix.
81      */
82     double surround_mix_level;
83 
84     /**
85      * Absolute scale factor representing the nominal level of the surround
86      * channels during an Lt/Rt compatible downmix.
87      */
88     double surround_mix_level_ltrt;
89 
90     /**
91      * Absolute scale factor representing the level at which the LFE data is
92      * mixed into L/R channels during downmixing.
93      */
94     double lfe_mix_level;
95 }
96 
97 /**
98  * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing.
99  *
100  * If the side data is absent, it is created and added to the frame.
101  *
102  * @param frame the frame for which the side data is to be obtained or created
103  *
104  * @return the AVDownmixInfo structure to be edited by the caller, or NULL if
105  *         the structure cannot be allocated.
106  */
107 AVDownmixInfo* av_downmix_info_update_side_data (AVFrame* frame);
108 
109 /**
110  * @}
111  */
112 
113 /**
114  * @}
115  */
116 
117 /* AVUTIL_DOWNMIX_INFO_H */