1 /*
2 * The simplest AC-3 encoder
3 * Copyright (c) 2000 Fabrice Bellard
4 * Copyright (c) 2006-2010 Justin Ruggles <justin.ruggles@gmail.com>
5 * Copyright (c) 2006-2010 Prakash Punnoor <prakash@punnoor.de>
6 *
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24 /**
25 * @file
26 * floating-point AC-3 encoder.
27 */
28
29 #define CONFIG_AC3ENC_FLOAT 1
35
36
37 #define AC3ENC_TYPE AC3ENC_TYPE_AC3
44 };
45
47
48
49 /**
50 * Finalize MDCT and free allocated memory.
51 *
52 * @param s AC-3 encoder private context
53 */
55 {
58 }
59
60
61 /**
62 * Initialize MDCT tables.
63 *
64 * @param s AC-3 encoder private context
65 * @return 0 on success, negative error code on failure
66 */
68 {
69 float *window;
71
72 n = 1 << 9;
73 n2 = n >> 1;
74
76 if (!window) {
79 }
81 for (i = 0; i < n2; i++)
82 window[n-1-i] = window[i];
84
86 }
87
88
89 /*
90 * Normalize the input samples.
91 * Not needed for the floating-point encoder.
92 */
94 {
95 return 0;
96 }
97
98
99 /*
100 * Scale MDCT coefficients from float to 24-bit fixed-point.
101 */
103 {
109 }
110
112 const float *coef0, const float *coef1,
114 {
116 }
117
118 /*
119 * Clip MDCT coefficients to allowable range.
120 */
123 {
125 }
126
127
128 /*
129 * Calculate a single coupling coordinate.
130 */
132 {
133 float coord = 0.125;
134 if (energy_cpl > 0)
135 coord *= sqrtf(energy_ch / energy_cpl);
137 }
138
140 {
146 }
147
162 };