Commit | Line | Data |
---|---|---|
2ba45a60 DM |
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 | ||
21 | #ifndef AVUTIL_DOWNMIX_INFO_H | |
22 | #define AVUTIL_DOWNMIX_INFO_H | |
23 | ||
24 | #include "frame.h" | |
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 | AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */ | |
46 | AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */ | |
47 | AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ | |
48 | AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ | |
49 | AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */ | |
50 | }; | |
51 | ||
52 | /** | |
53 | * This structure describes optional metadata relevant to a downmix procedure. | |
54 | * | |
55 | * All fields are set by the decoder to the value indicated in the audio | |
56 | * bitstream (if present), or to a "sane" default otherwise. | |
57 | */ | |
58 | typedef struct AVDownmixInfo { | |
59 | /** | |
60 | * Type of downmix preferred by the mastering engineer. | |
61 | */ | |
62 | enum AVDownmixType preferred_downmix_type; | |
63 | ||
64 | /** | |
65 | * Absolute scale factor representing the nominal level of the center | |
66 | * channel during a regular downmix. | |
67 | */ | |
68 | double center_mix_level; | |
69 | ||
70 | /** | |
71 | * Absolute scale factor representing the nominal level of the center | |
72 | * channel during an Lt/Rt compatible downmix. | |
73 | */ | |
74 | double center_mix_level_ltrt; | |
75 | ||
76 | /** | |
77 | * Absolute scale factor representing the nominal level of the surround | |
78 | * channels during a regular downmix. | |
79 | */ | |
80 | double surround_mix_level; | |
81 | ||
82 | /** | |
83 | * Absolute scale factor representing the nominal level of the surround | |
84 | * channels during an Lt/Rt compatible downmix. | |
85 | */ | |
86 | double surround_mix_level_ltrt; | |
87 | ||
88 | /** | |
89 | * Absolute scale factor representing the level at which the LFE data is | |
90 | * mixed into L/R channels during downmixing. | |
91 | */ | |
92 | double lfe_mix_level; | |
93 | } AVDownmixInfo; | |
94 | ||
95 | /** | |
96 | * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. | |
97 | * | |
98 | * If the side data is absent, it is created and added to the frame. | |
99 | * | |
100 | * @param frame the frame for which the side data is to be obtained or created | |
101 | * | |
102 | * @return the AVDownmixInfo structure to be edited by the caller, or NULL if | |
103 | * the structure cannot be allocated. | |
104 | */ | |
105 | AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame); | |
106 | ||
107 | /** | |
108 | * @} | |
109 | */ | |
110 | ||
111 | /** | |
112 | * @} | |
113 | */ | |
114 | ||
115 | #endif /* AVUTIL_DOWNMIX_INFO_H */ |