ac3enc: clean up count_frame_bits() and count_frame_bits_fixed()
[ffmpeg.git] / libavcodec / ac3enc.c
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 Libav.
8  *
9  * Libav 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  * Libav 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 Libav; 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  * The simplest AC-3 encoder.
27  */
28
29 //#define DEBUG
30 //#define ASSERT_LEVEL 2
31
32 #include <stdint.h>
33
34 #include "libavutil/audioconvert.h"
35 #include "libavutil/avassert.h"
36 #include "libavutil/avstring.h"
37 #include "libavutil/crc.h"
38 #include "libavutil/opt.h"
39 #include "avcodec.h"
40 #include "put_bits.h"
41 #include "dsputil.h"
42 #include "ac3dsp.h"
43 #include "ac3.h"
44 #include "audioconvert.h"
45 #include "fft.h"
46
47
48 #ifndef CONFIG_AC3ENC_FLOAT
49 #define CONFIG_AC3ENC_FLOAT 0
50 #endif
51
52
53 /** Maximum number of exponent groups. +1 for separate DC exponent. */
54 #define AC3_MAX_EXP_GROUPS 85
55
56 #if CONFIG_AC3ENC_FLOAT
57 #define MAC_COEF(d,a,b) ((d)+=(a)*(b))
58 typedef float SampleType;
59 typedef float CoefType;
60 typedef float CoefSumType;
61 #else
62 #define MAC_COEF(d,a,b) MAC64(d,a,b)
63 typedef int16_t SampleType;
64 typedef int32_t CoefType;
65 typedef int64_t CoefSumType;
66 #endif
67
68 typedef struct AC3MDCTContext {
69     const SampleType *window;           ///< MDCT window function
70     FFTContext fft;                     ///< FFT context for MDCT calculation
71 } AC3MDCTContext;
72
73 /**
74  * Encoding Options used by AVOption.
75  */
76 typedef struct AC3EncOptions {
77     /* AC-3 metadata options*/
78     int dialogue_level;
79     int bitstream_mode;
80     float center_mix_level;
81     float surround_mix_level;
82     int dolby_surround_mode;
83     int audio_production_info;
84     int mixing_level;
85     int room_type;
86     int copyright;
87     int original;
88     int extended_bsi_1;
89     int preferred_stereo_downmix;
90     float ltrt_center_mix_level;
91     float ltrt_surround_mix_level;
92     float loro_center_mix_level;
93     float loro_surround_mix_level;
94     int extended_bsi_2;
95     int dolby_surround_ex_mode;
96     int dolby_headphone_mode;
97     int ad_converter_type;
98
99     /* other encoding options */
100     int allow_per_frame_metadata;
101     int stereo_rematrixing;
102 } AC3EncOptions;
103
104 /**
105  * Data for a single audio block.
106  */
107 typedef struct AC3Block {
108     uint8_t  **bap;                             ///< bit allocation pointers (bap)
109     CoefType **mdct_coef;                       ///< MDCT coefficients
110     int32_t  **fixed_coef;                      ///< fixed-point MDCT coefficients
111     uint8_t  **exp;                             ///< original exponents
112     uint8_t  **grouped_exp;                     ///< grouped exponents
113     int16_t  **psd;                             ///< psd per frequency bin
114     int16_t  **band_psd;                        ///< psd per critical band
115     int16_t  **mask;                            ///< masking curve
116     uint16_t **qmant;                           ///< quantized mantissas
117     uint8_t  coeff_shift[AC3_MAX_CHANNELS];     ///< fixed-point coefficient shift values
118     uint8_t  new_rematrixing_strategy;          ///< send new rematrixing flags in this block
119     uint8_t  rematrixing_flags[4];              ///< rematrixing flags
120     struct AC3Block *exp_ref_block[AC3_MAX_CHANNELS]; ///< reference blocks for EXP_REUSE
121 } AC3Block;
122
123 /**
124  * AC-3 encoder private context.
125  */
126 typedef struct AC3EncodeContext {
127     AVClass *av_class;                      ///< AVClass used for AVOption
128     AC3EncOptions options;                  ///< encoding options
129     PutBitContext pb;                       ///< bitstream writer context
130     DSPContext dsp;
131     AC3DSPContext ac3dsp;                   ///< AC-3 optimized functions
132     AC3MDCTContext mdct;                    ///< MDCT context
133
134     AC3Block blocks[AC3_MAX_BLOCKS];        ///< per-block info
135
136     int bitstream_id;                       ///< bitstream id                           (bsid)
137     int bitstream_mode;                     ///< bitstream mode                         (bsmod)
138
139     int bit_rate;                           ///< target bit rate, in bits-per-second
140     int sample_rate;                        ///< sampling frequency, in Hz
141
142     int frame_size_min;                     ///< minimum frame size in case rounding is necessary
143     int frame_size;                         ///< current frame size in bytes
144     int frame_size_code;                    ///< frame size code                        (frmsizecod)
145     uint16_t crc_inv[2];
146     int bits_written;                       ///< bit count    (used to avg. bitrate)
147     int samples_written;                    ///< sample count (used to avg. bitrate)
148
149     int fbw_channels;                       ///< number of full-bandwidth channels      (nfchans)
150     int channels;                           ///< total number of channels               (nchans)
151     int lfe_on;                             ///< indicates if there is an LFE channel   (lfeon)
152     int lfe_channel;                        ///< channel index of the LFE channel
153     int has_center;                         ///< indicates if there is a center channel
154     int has_surround;                       ///< indicates if there are one or more surround channels
155     int channel_mode;                       ///< channel mode                           (acmod)
156     const uint8_t *channel_map;             ///< channel map used to reorder channels
157
158     int center_mix_level;                   ///< center mix level code
159     int surround_mix_level;                 ///< surround mix level code
160     int ltrt_center_mix_level;              ///< Lt/Rt center mix level code
161     int ltrt_surround_mix_level;            ///< Lt/Rt surround mix level code
162     int loro_center_mix_level;              ///< Lo/Ro center mix level code
163     int loro_surround_mix_level;            ///< Lo/Ro surround mix level code
164
165     int cutoff;                             ///< user-specified cutoff frequency, in Hz
166     int bandwidth_code;                     ///< bandwidth code (0 to 60)               (chbwcod)
167     int nb_coefs[AC3_MAX_CHANNELS];
168
169     int rematrixing_enabled;                ///< stereo rematrixing enabled
170     int num_rematrixing_bands;              ///< number of rematrixing bands
171
172     /* bitrate allocation control */
173     int slow_gain_code;                     ///< slow gain code                         (sgaincod)
174     int slow_decay_code;                    ///< slow decay code                        (sdcycod)
175     int fast_decay_code;                    ///< fast decay code                        (fdcycod)
176     int db_per_bit_code;                    ///< dB/bit code                            (dbpbcod)
177     int floor_code;                         ///< floor code                             (floorcod)
178     AC3BitAllocParameters bit_alloc;        ///< bit allocation parameters
179     int coarse_snr_offset;                  ///< coarse SNR offsets                     (csnroffst)
180     int fast_gain_code[AC3_MAX_CHANNELS];   ///< fast gain codes (signal-to-mask ratio) (fgaincod)
181     int fine_snr_offset[AC3_MAX_CHANNELS];  ///< fine SNR offsets                       (fsnroffst)
182     int frame_bits_fixed;                   ///< number of non-coefficient bits for fixed parameters
183     int frame_bits;                         ///< all frame bits except exponents and mantissas
184     int exponent_bits;                      ///< number of bits used for exponents
185
186     SampleType **planar_samples;
187     uint8_t *bap_buffer;
188     uint8_t *bap1_buffer;
189     CoefType *mdct_coef_buffer;
190     int32_t *fixed_coef_buffer;
191     uint8_t *exp_buffer;
192     uint8_t *grouped_exp_buffer;
193     int16_t *psd_buffer;
194     int16_t *band_psd_buffer;
195     int16_t *mask_buffer;
196     uint16_t *qmant_buffer;
197
198     uint8_t exp_strategy[AC3_MAX_CHANNELS][AC3_MAX_BLOCKS]; ///< exponent strategies
199
200     DECLARE_ALIGNED(32, SampleType, windowed_samples)[AC3_WINDOW_SIZE];
201 } AC3EncodeContext;
202
203 typedef struct AC3Mant {
204     uint16_t *qmant1_ptr, *qmant2_ptr, *qmant4_ptr; ///< mantissa pointers for bap=1,2,4
205     int mant1_cnt, mant2_cnt, mant4_cnt;    ///< mantissa counts for bap=1,2,4
206 } AC3Mant;
207
208 #define CMIXLEV_NUM_OPTIONS 3
209 static const float cmixlev_options[CMIXLEV_NUM_OPTIONS] = {
210     LEVEL_MINUS_3DB, LEVEL_MINUS_4POINT5DB, LEVEL_MINUS_6DB
211 };
212
213 #define SURMIXLEV_NUM_OPTIONS 3
214 static const float surmixlev_options[SURMIXLEV_NUM_OPTIONS] = {
215     LEVEL_MINUS_3DB, LEVEL_MINUS_6DB, LEVEL_ZERO
216 };
217
218 #define EXTMIXLEV_NUM_OPTIONS 8
219 static const float extmixlev_options[EXTMIXLEV_NUM_OPTIONS] = {
220     LEVEL_PLUS_3DB,  LEVEL_PLUS_1POINT5DB,  LEVEL_ONE,       LEVEL_MINUS_4POINT5DB,
221     LEVEL_MINUS_3DB, LEVEL_MINUS_4POINT5DB, LEVEL_MINUS_6DB, LEVEL_ZERO
222 };
223
224
225 #define OFFSET(param) offsetof(AC3EncodeContext, options.param)
226 #define AC3ENC_PARAM (AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
227
228 static const AVOption options[] = {
229 /* Metadata Options */
230 {"per_frame_metadata", "Allow Changing Metadata Per-Frame", OFFSET(allow_per_frame_metadata), FF_OPT_TYPE_INT, {.dbl = 0 }, 0, 1, AC3ENC_PARAM},
231 /* downmix levels */
232 {"center_mixlev", "Center Mix Level", OFFSET(center_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = LEVEL_MINUS_4POINT5DB }, 0.0, 1.0, AC3ENC_PARAM},
233 {"surround_mixlev", "Surround Mix Level", OFFSET(surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = LEVEL_MINUS_6DB }, 0.0, 1.0, AC3ENC_PARAM},
234 /* audio production information */
235 {"mixing_level", "Mixing Level", OFFSET(mixing_level), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 111, AC3ENC_PARAM},
236 {"room_type", "Room Type", OFFSET(room_type), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "room_type"},
237     {"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
238     {"large",        "Large Room",              0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
239     {"small",        "Small Room",              0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
240 /* other metadata options */
241 {"copyright", "Copyright Bit", OFFSET(copyright), FF_OPT_TYPE_INT, {.dbl = 0 }, 0, 1, AC3ENC_PARAM},
242 {"dialnorm", "Dialogue Level (dB)", OFFSET(dialogue_level), FF_OPT_TYPE_INT, {.dbl = -31 }, -31, -1, AC3ENC_PARAM},
243 {"dsur_mode", "Dolby Surround Mode", OFFSET(dolby_surround_mode), FF_OPT_TYPE_INT, {.dbl = 0 }, 0, 2, AC3ENC_PARAM, "dsur_mode"},
244     {"notindicated", "Not Indicated (default)",    0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
245     {"on",           "Dolby Surround Encoded",     0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
246     {"off",          "Not Dolby Surround Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
247 {"original", "Original Bit Stream", OFFSET(original), FF_OPT_TYPE_INT,   {.dbl = 1 }, 0, 1, AC3ENC_PARAM},
248 /* extended bitstream information */
249 {"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "dmix_mode"},
250     {"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
251     {"ltrt", "Lt/Rt Downmix Preferred",         0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
252     {"loro", "Lo/Ro Downmix Preferred",         0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
253 {"ltrt_cmixlev", "Lt/Rt Center Mix Level", OFFSET(ltrt_center_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
254 {"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
255 {"loro_cmixlev", "Lo/Ro Center Mix Level", OFFSET(loro_center_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
256 {"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
257 {"dsurex_mode", "Dolby Surround EX Mode", OFFSET(dolby_surround_ex_mode), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "dsurex_mode"},
258     {"notindicated", "Not Indicated (default)",       0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
259     {"on",           "Dolby Surround EX Encoded",     0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
260     {"off",          "Not Dolby Surround EX Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
261 {"dheadphone_mode", "Dolby Headphone Mode", OFFSET(dolby_headphone_mode), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "dheadphone_mode"},
262     {"notindicated", "Not Indicated (default)",     0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
263     {"on",           "Dolby Headphone Encoded",     0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
264     {"off",          "Not Dolby Headphone Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
265 {"ad_conv_type", "A/D Converter Type", OFFSET(ad_converter_type), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 1, AC3ENC_PARAM, "ad_conv_type"},
266     {"standard", "Standard (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "ad_conv_type"},
267     {"hdcd",     "HDCD",               0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "ad_conv_type"},
268 /* Other Encoding Options */
269 {"stereo_rematrixing", "Stereo Rematrixing", OFFSET(stereo_rematrixing), FF_OPT_TYPE_INT, {.dbl = 1 }, 0, 1, AC3ENC_PARAM},
270 {NULL}
271 };
272
273 #if CONFIG_AC3ENC_FLOAT
274 static AVClass ac3enc_class = { "AC-3 Encoder", av_default_item_name,
275                                 options, LIBAVUTIL_VERSION_INT };
276 #else
277 static AVClass ac3enc_class = { "Fixed-Point AC-3 Encoder", av_default_item_name,
278                                 options, LIBAVUTIL_VERSION_INT };
279 #endif
280
281
282 /* prototypes for functions in ac3enc_fixed.c and ac3enc_float.c */
283
284 static av_cold void mdct_end(AC3MDCTContext *mdct);
285
286 static av_cold int mdct_init(AVCodecContext *avctx, AC3MDCTContext *mdct,
287                              int nbits);
288
289 static void apply_window(DSPContext *dsp, SampleType *output, const SampleType *input,
290                          const SampleType *window, unsigned int len);
291
292 static int normalize_samples(AC3EncodeContext *s);
293
294 static void scale_coefficients(AC3EncodeContext *s);
295
296
297 /**
298  * LUT for number of exponent groups.
299  * exponent_group_tab[exponent strategy-1][number of coefficients]
300  */
301 static uint8_t exponent_group_tab[3][256];
302
303
304 /**
305  * List of supported channel layouts.
306  */
307 static const int64_t ac3_channel_layouts[] = {
308      AV_CH_LAYOUT_MONO,
309      AV_CH_LAYOUT_STEREO,
310      AV_CH_LAYOUT_2_1,
311      AV_CH_LAYOUT_SURROUND,
312      AV_CH_LAYOUT_2_2,
313      AV_CH_LAYOUT_QUAD,
314      AV_CH_LAYOUT_4POINT0,
315      AV_CH_LAYOUT_5POINT0,
316      AV_CH_LAYOUT_5POINT0_BACK,
317     (AV_CH_LAYOUT_MONO     | AV_CH_LOW_FREQUENCY),
318     (AV_CH_LAYOUT_STEREO   | AV_CH_LOW_FREQUENCY),
319     (AV_CH_LAYOUT_2_1      | AV_CH_LOW_FREQUENCY),
320     (AV_CH_LAYOUT_SURROUND | AV_CH_LOW_FREQUENCY),
321     (AV_CH_LAYOUT_2_2      | AV_CH_LOW_FREQUENCY),
322     (AV_CH_LAYOUT_QUAD     | AV_CH_LOW_FREQUENCY),
323     (AV_CH_LAYOUT_4POINT0  | AV_CH_LOW_FREQUENCY),
324      AV_CH_LAYOUT_5POINT1,
325      AV_CH_LAYOUT_5POINT1_BACK,
326      0
327 };
328
329
330 /**
331  * LUT to select the bandwidth code based on the bit rate, sample rate, and
332  * number of full-bandwidth channels.
333  * bandwidth_tab[fbw_channels-1][sample rate code][bit rate code]
334  */
335 static const uint8_t ac3_bandwidth_tab[5][3][19] = {
336 //      32  40  48  56  64  80  96 112 128 160 192 224 256 320 384 448 512 576 640
337
338     { {  0,  0,  0, 12, 16, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48 },
339       {  0,  0,  0, 16, 20, 36, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56 },
340       {  0,  0,  0, 32, 40, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 } },
341
342     { {  0,  0,  0,  0,  0,  0,  0, 20, 24, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48 },
343       {  0,  0,  0,  0,  0,  0,  4, 24, 28, 36, 56, 56, 56, 56, 56, 56, 56, 56, 56 },
344       {  0,  0,  0,  0,  0,  0, 20, 44, 52, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 } },
345
346     { {  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 24, 32, 40, 48, 48, 48, 48, 48, 48 },
347       {  0,  0,  0,  0,  0,  0,  0,  0,  4, 20, 28, 36, 44, 56, 56, 56, 56, 56, 56 },
348       {  0,  0,  0,  0,  0,  0,  0,  0, 20, 40, 48, 60, 60, 60, 60, 60, 60, 60, 60 } },
349
350     { {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 24, 32, 48, 48, 48, 48, 48, 48 },
351       {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 28, 36, 56, 56, 56, 56, 56, 56 },
352       {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 48, 60, 60, 60, 60, 60, 60, 60 } },
353
354     { {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8, 20, 32, 40, 48, 48, 48, 48 },
355       {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 24, 36, 44, 56, 56, 56, 56 },
356       {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28, 44, 60, 60, 60, 60, 60, 60 } }
357 };
358
359
360 /**
361  * Adjust the frame size to make the average bit rate match the target bit rate.
362  * This is only needed for 11025, 22050, and 44100 sample rates.
363  */
364 static void adjust_frame_size(AC3EncodeContext *s)
365 {
366     while (s->bits_written >= s->bit_rate && s->samples_written >= s->sample_rate) {
367         s->bits_written    -= s->bit_rate;
368         s->samples_written -= s->sample_rate;
369     }
370     s->frame_size = s->frame_size_min +
371                     2 * (s->bits_written * s->sample_rate < s->samples_written * s->bit_rate);
372     s->bits_written    += s->frame_size * 8;
373     s->samples_written += AC3_FRAME_SIZE;
374 }
375
376
377 /**
378  * Deinterleave input samples.
379  * Channels are reordered from Libav's default order to AC-3 order.
380  */
381 static void deinterleave_input_samples(AC3EncodeContext *s,
382                                        const SampleType *samples)
383 {
384     int ch, i;
385
386     /* deinterleave and remap input samples */
387     for (ch = 0; ch < s->channels; ch++) {
388         const SampleType *sptr;
389         int sinc;
390
391         /* copy last 256 samples of previous frame to the start of the current frame */
392         memcpy(&s->planar_samples[ch][0], &s->planar_samples[ch][AC3_FRAME_SIZE],
393                AC3_BLOCK_SIZE * sizeof(s->planar_samples[0][0]));
394
395         /* deinterleave */
396         sinc = s->channels;
397         sptr = samples + s->channel_map[ch];
398         for (i = AC3_BLOCK_SIZE; i < AC3_FRAME_SIZE+AC3_BLOCK_SIZE; i++) {
399             s->planar_samples[ch][i] = *sptr;
400             sptr += sinc;
401         }
402     }
403 }
404
405
406 /**
407  * Apply the MDCT to input samples to generate frequency coefficients.
408  * This applies the KBD window and normalizes the input to reduce precision
409  * loss due to fixed-point calculations.
410  */
411 static void apply_mdct(AC3EncodeContext *s)
412 {
413     int blk, ch;
414
415     for (ch = 0; ch < s->channels; ch++) {
416         for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
417             AC3Block *block = &s->blocks[blk];
418             const SampleType *input_samples = &s->planar_samples[ch][blk * AC3_BLOCK_SIZE];
419
420             apply_window(&s->dsp, s->windowed_samples, input_samples, s->mdct.window, AC3_WINDOW_SIZE);
421
422             block->coeff_shift[ch] = normalize_samples(s);
423
424             s->mdct.fft.mdct_calcw(&s->mdct.fft, block->mdct_coef[ch],
425                                    s->windowed_samples);
426         }
427     }
428 }
429
430
431 /**
432  * Determine rematrixing flags for each block and band.
433  */
434 static void compute_rematrixing_strategy(AC3EncodeContext *s)
435 {
436     int nb_coefs;
437     int blk, bnd, i;
438     AC3Block *block, *block0;
439
440     if (s->channel_mode != AC3_CHMODE_STEREO)
441         return;
442
443     s->num_rematrixing_bands = 4;
444
445     nb_coefs = FFMIN(s->nb_coefs[0], s->nb_coefs[1]);
446
447     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
448         block = &s->blocks[blk];
449         block->new_rematrixing_strategy = !blk;
450         if (!s->rematrixing_enabled)
451             continue;
452         for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
453             /* calculate calculate sum of squared coeffs for one band in one block */
454             int start = ff_ac3_rematrix_band_tab[bnd];
455             int end   = FFMIN(nb_coefs, ff_ac3_rematrix_band_tab[bnd+1]);
456             CoefSumType sum[4] = {0,};
457             for (i = start; i < end; i++) {
458                 CoefType lt = block->mdct_coef[0][i];
459                 CoefType rt = block->mdct_coef[1][i];
460                 CoefType md = lt + rt;
461                 CoefType sd = lt - rt;
462                 MAC_COEF(sum[0], lt, lt);
463                 MAC_COEF(sum[1], rt, rt);
464                 MAC_COEF(sum[2], md, md);
465                 MAC_COEF(sum[3], sd, sd);
466             }
467
468             /* compare sums to determine if rematrixing will be used for this band */
469             if (FFMIN(sum[2], sum[3]) < FFMIN(sum[0], sum[1]))
470                 block->rematrixing_flags[bnd] = 1;
471             else
472                 block->rematrixing_flags[bnd] = 0;
473
474             /* determine if new rematrixing flags will be sent */
475             if (blk &&
476                 block->rematrixing_flags[bnd] != block0->rematrixing_flags[bnd]) {
477                 block->new_rematrixing_strategy = 1;
478             }
479         }
480         block0 = block;
481     }
482 }
483
484
485 /**
486  * Apply stereo rematrixing to coefficients based on rematrixing flags.
487  */
488 static void apply_rematrixing(AC3EncodeContext *s)
489 {
490     int nb_coefs;
491     int blk, bnd, i;
492     int start, end;
493     uint8_t *flags;
494
495     if (!s->rematrixing_enabled)
496         return;
497
498     nb_coefs = FFMIN(s->nb_coefs[0], s->nb_coefs[1]);
499
500     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
501         AC3Block *block = &s->blocks[blk];
502         if (block->new_rematrixing_strategy)
503             flags = block->rematrixing_flags;
504         for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
505             if (flags[bnd]) {
506                 start = ff_ac3_rematrix_band_tab[bnd];
507                 end   = FFMIN(nb_coefs, ff_ac3_rematrix_band_tab[bnd+1]);
508                 for (i = start; i < end; i++) {
509                     int32_t lt = block->fixed_coef[0][i];
510                     int32_t rt = block->fixed_coef[1][i];
511                     block->fixed_coef[0][i] = (lt + rt) >> 1;
512                     block->fixed_coef[1][i] = (lt - rt) >> 1;
513                 }
514             }
515         }
516     }
517 }
518
519
520 /**
521  * Initialize exponent tables.
522  */
523 static av_cold void exponent_init(AC3EncodeContext *s)
524 {
525     int expstr, i, grpsize;
526
527     for (expstr = EXP_D15-1; expstr <= EXP_D45-1; expstr++) {
528         grpsize = 3 << expstr;
529         for (i = 73; i < 256; i++) {
530             exponent_group_tab[expstr][i] = (i + grpsize - 4) / grpsize;
531         }
532     }
533     /* LFE */
534     exponent_group_tab[0][7] = 2;
535 }
536
537
538 /**
539  * Extract exponents from the MDCT coefficients.
540  * This takes into account the normalization that was done to the input samples
541  * by adjusting the exponents by the exponent shift values.
542  */
543 static void extract_exponents(AC3EncodeContext *s)
544 {
545     int blk, ch;
546
547     for (ch = 0; ch < s->channels; ch++) {
548         for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
549             AC3Block *block = &s->blocks[blk];
550             s->ac3dsp.extract_exponents(block->exp[ch], block->fixed_coef[ch],
551                                         AC3_MAX_COEFS);
552         }
553     }
554 }
555
556
557 /**
558  * Exponent Difference Threshold.
559  * New exponents are sent if their SAD exceed this number.
560  */
561 #define EXP_DIFF_THRESHOLD 500
562
563
564 /**
565  * Calculate exponent strategies for all channels.
566  * Array arrangement is reversed to simplify the per-channel calculation.
567  */
568 static void compute_exp_strategy(AC3EncodeContext *s)
569 {
570     int ch, blk, blk1;
571
572     for (ch = 0; ch < s->fbw_channels; ch++) {
573         uint8_t *exp_strategy = s->exp_strategy[ch];
574         uint8_t *exp          = s->blocks[0].exp[ch];
575         int exp_diff;
576
577         /* estimate if the exponent variation & decide if they should be
578            reused in the next frame */
579         exp_strategy[0] = EXP_NEW;
580         exp += AC3_MAX_COEFS;
581         for (blk = 1; blk < AC3_MAX_BLOCKS; blk++) {
582             exp_diff = s->dsp.sad[0](NULL, exp, exp - AC3_MAX_COEFS, 16, 16);
583             if (exp_diff > EXP_DIFF_THRESHOLD)
584                 exp_strategy[blk] = EXP_NEW;
585             else
586                 exp_strategy[blk] = EXP_REUSE;
587             exp += AC3_MAX_COEFS;
588         }
589
590         /* now select the encoding strategy type : if exponents are often
591            recoded, we use a coarse encoding */
592         blk = 0;
593         while (blk < AC3_MAX_BLOCKS) {
594             blk1 = blk + 1;
595             while (blk1 < AC3_MAX_BLOCKS && exp_strategy[blk1] == EXP_REUSE)
596                 blk1++;
597             switch (blk1 - blk) {
598             case 1:  exp_strategy[blk] = EXP_D45; break;
599             case 2:
600             case 3:  exp_strategy[blk] = EXP_D25; break;
601             default: exp_strategy[blk] = EXP_D15; break;
602             }
603             blk = blk1;
604         }
605     }
606     if (s->lfe_on) {
607         ch = s->lfe_channel;
608         s->exp_strategy[ch][0] = EXP_D15;
609         for (blk = 1; blk < AC3_MAX_BLOCKS; blk++)
610             s->exp_strategy[ch][blk] = EXP_REUSE;
611     }
612 }
613
614
615 /**
616  * Update the exponents so that they are the ones the decoder will decode.
617  */
618 static void encode_exponents_blk_ch(uint8_t *exp, int nb_exps, int exp_strategy)
619 {
620     int nb_groups, i, k;
621
622     nb_groups = exponent_group_tab[exp_strategy-1][nb_exps] * 3;
623
624     /* for each group, compute the minimum exponent */
625     switch(exp_strategy) {
626     case EXP_D25:
627         for (i = 1, k = 1; i <= nb_groups; i++) {
628             uint8_t exp_min = exp[k];
629             if (exp[k+1] < exp_min)
630                 exp_min = exp[k+1];
631             exp[i] = exp_min;
632             k += 2;
633         }
634         break;
635     case EXP_D45:
636         for (i = 1, k = 1; i <= nb_groups; i++) {
637             uint8_t exp_min = exp[k];
638             if (exp[k+1] < exp_min)
639                 exp_min = exp[k+1];
640             if (exp[k+2] < exp_min)
641                 exp_min = exp[k+2];
642             if (exp[k+3] < exp_min)
643                 exp_min = exp[k+3];
644             exp[i] = exp_min;
645             k += 4;
646         }
647         break;
648     }
649
650     /* constraint for DC exponent */
651     if (exp[0] > 15)
652         exp[0] = 15;
653
654     /* decrease the delta between each groups to within 2 so that they can be
655        differentially encoded */
656     for (i = 1; i <= nb_groups; i++)
657         exp[i] = FFMIN(exp[i], exp[i-1] + 2);
658     i--;
659     while (--i >= 0)
660         exp[i] = FFMIN(exp[i], exp[i+1] + 2);
661
662     /* now we have the exponent values the decoder will see */
663     switch (exp_strategy) {
664     case EXP_D25:
665         for (i = nb_groups, k = nb_groups * 2; i > 0; i--) {
666             uint8_t exp1 = exp[i];
667             exp[k--] = exp1;
668             exp[k--] = exp1;
669         }
670         break;
671     case EXP_D45:
672         for (i = nb_groups, k = nb_groups * 4; i > 0; i--) {
673             exp[k] = exp[k-1] = exp[k-2] = exp[k-3] = exp[i];
674             k -= 4;
675         }
676         break;
677     }
678 }
679
680
681 /**
682  * Encode exponents from original extracted form to what the decoder will see.
683  * This copies and groups exponents based on exponent strategy and reduces
684  * deltas between adjacent exponent groups so that they can be differentially
685  * encoded.
686  */
687 static void encode_exponents(AC3EncodeContext *s)
688 {
689     int blk, blk1, ch;
690     uint8_t *exp, *exp_strategy;
691     int nb_coefs, num_reuse_blocks;
692
693     for (ch = 0; ch < s->channels; ch++) {
694         exp          = s->blocks[0].exp[ch];
695         exp_strategy = s->exp_strategy[ch];
696         nb_coefs     = s->nb_coefs[ch];
697
698         blk = 0;
699         while (blk < AC3_MAX_BLOCKS) {
700             blk1 = blk + 1;
701
702             /* count the number of EXP_REUSE blocks after the current block
703                and set exponent reference block pointers */
704             s->blocks[blk].exp_ref_block[ch] = &s->blocks[blk];
705             while (blk1 < AC3_MAX_BLOCKS && exp_strategy[blk1] == EXP_REUSE) {
706                 s->blocks[blk1].exp_ref_block[ch] = &s->blocks[blk];
707                 blk1++;
708             }
709             num_reuse_blocks = blk1 - blk - 1;
710
711             /* for the EXP_REUSE case we select the min of the exponents */
712             s->ac3dsp.ac3_exponent_min(exp, num_reuse_blocks, nb_coefs);
713
714             encode_exponents_blk_ch(exp, nb_coefs, exp_strategy[blk]);
715
716             exp += AC3_MAX_COEFS * (num_reuse_blocks + 1);
717             blk = blk1;
718         }
719     }
720 }
721
722
723 /**
724  * Group exponents.
725  * 3 delta-encoded exponents are in each 7-bit group. The number of groups
726  * varies depending on exponent strategy and bandwidth.
727  */
728 static void group_exponents(AC3EncodeContext *s)
729 {
730     int blk, ch, i;
731     int group_size, nb_groups, bit_count;
732     uint8_t *p;
733     int delta0, delta1, delta2;
734     int exp0, exp1;
735
736     bit_count = 0;
737     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
738         AC3Block *block = &s->blocks[blk];
739         for (ch = 0; ch < s->channels; ch++) {
740             int exp_strategy = s->exp_strategy[ch][blk];
741             if (exp_strategy == EXP_REUSE)
742                 continue;
743             group_size = exp_strategy + (exp_strategy == EXP_D45);
744             nb_groups = exponent_group_tab[exp_strategy-1][s->nb_coefs[ch]];
745             bit_count += 4 + (nb_groups * 7);
746             p = block->exp[ch];
747
748             /* DC exponent */
749             exp1 = *p++;
750             block->grouped_exp[ch][0] = exp1;
751
752             /* remaining exponents are delta encoded */
753             for (i = 1; i <= nb_groups; i++) {
754                 /* merge three delta in one code */
755                 exp0   = exp1;
756                 exp1   = p[0];
757                 p     += group_size;
758                 delta0 = exp1 - exp0 + 2;
759                 av_assert2(delta0 >= 0 && delta0 <= 4);
760
761                 exp0   = exp1;
762                 exp1   = p[0];
763                 p     += group_size;
764                 delta1 = exp1 - exp0 + 2;
765                 av_assert2(delta1 >= 0 && delta1 <= 4);
766
767                 exp0   = exp1;
768                 exp1   = p[0];
769                 p     += group_size;
770                 delta2 = exp1 - exp0 + 2;
771                 av_assert2(delta2 >= 0 && delta2 <= 4);
772
773                 block->grouped_exp[ch][i] = ((delta0 * 5 + delta1) * 5) + delta2;
774             }
775         }
776     }
777
778     s->exponent_bits = bit_count;
779 }
780
781
782 /**
783  * Calculate final exponents from the supplied MDCT coefficients and exponent shift.
784  * Extract exponents from MDCT coefficients, calculate exponent strategies,
785  * and encode final exponents.
786  */
787 static void process_exponents(AC3EncodeContext *s)
788 {
789     extract_exponents(s);
790
791     compute_exp_strategy(s);
792
793     encode_exponents(s);
794
795     group_exponents(s);
796
797     emms_c();
798 }
799
800
801 /**
802  * Count frame bits that are based solely on fixed parameters.
803  * This only has to be run once when the encoder is initialized.
804  */
805 static void count_frame_bits_fixed(AC3EncodeContext *s)
806 {
807     static const int frame_bits_inc[8] = { 0, 0, 2, 2, 2, 4, 2, 4 };
808     int blk;
809     int frame_bits;
810
811     /* assumptions:
812      *   no dynamic range codes
813      *   no channel coupling
814      *   bit allocation parameters do not change between blocks
815      *   SNR offsets do not change between blocks
816      *   no delta bit allocation
817      *   no skipped data
818      *   no auxilliary data
819      */
820
821     /* header */
822     frame_bits = 65;
823     frame_bits += frame_bits_inc[s->channel_mode];
824
825     /* audio blocks */
826     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
827         /* block switch flags */
828         frame_bits += s->fbw_channels;
829
830         /* dither flags */
831         frame_bits += s->fbw_channels;
832
833         /* dynamic range */
834         frame_bits++;
835
836         /* coupling strategy */
837         frame_bits++;
838         if (!blk)
839             frame_bits++;
840
841         /* stereo rematrixing */
842         if (s->channel_mode == AC3_CHMODE_STEREO)
843             frame_bits++;
844
845         /* exponent strategy */
846         frame_bits += 2 * s->fbw_channels;
847         if (s->lfe_on)
848             frame_bits++;
849
850         /* bit allocation params */
851         frame_bits++;
852         if (!blk)
853             frame_bits += 2 + 2 + 2 + 2 + 3;
854
855         /* snr offsets and fast gain codes */
856         frame_bits++;
857         if (!blk)
858             frame_bits += 6 + s->channels * (4 + 3);
859
860         /* delta bit allocation */
861         frame_bits++;
862
863         /* skipped data */
864         frame_bits++;
865     }
866
867     /* auxiliary data */
868     frame_bits++;
869
870     /* CRC */
871     frame_bits += 1 + 16;
872
873     s->frame_bits_fixed = frame_bits;
874 }
875
876
877 /**
878  * Initialize bit allocation.
879  * Set default parameter codes and calculate parameter values.
880  */
881 static void bit_alloc_init(AC3EncodeContext *s)
882 {
883     int ch;
884
885     /* init default parameters */
886     s->slow_decay_code = 2;
887     s->fast_decay_code = 1;
888     s->slow_gain_code  = 1;
889     s->db_per_bit_code = 3;
890     s->floor_code      = 7;
891     for (ch = 0; ch < s->channels; ch++)
892         s->fast_gain_code[ch] = 4;
893
894     /* initial snr offset */
895     s->coarse_snr_offset = 40;
896
897     /* compute real values */
898     /* currently none of these values change during encoding, so we can just
899        set them once at initialization */
900     s->bit_alloc.slow_decay = ff_ac3_slow_decay_tab[s->slow_decay_code] >> s->bit_alloc.sr_shift;
901     s->bit_alloc.fast_decay = ff_ac3_fast_decay_tab[s->fast_decay_code] >> s->bit_alloc.sr_shift;
902     s->bit_alloc.slow_gain  = ff_ac3_slow_gain_tab[s->slow_gain_code];
903     s->bit_alloc.db_per_bit = ff_ac3_db_per_bit_tab[s->db_per_bit_code];
904     s->bit_alloc.floor      = ff_ac3_floor_tab[s->floor_code];
905
906     count_frame_bits_fixed(s);
907 }
908
909
910 /**
911  * Count the bits used to encode the frame, minus exponents and mantissas.
912  * Bits based on fixed parameters have already been counted, so now we just
913  * have to add the bits based on parameters that change during encoding.
914  */
915 static void count_frame_bits(AC3EncodeContext *s)
916 {
917     AC3EncOptions *opt = &s->options;
918     int blk, ch;
919     int frame_bits = 0;
920
921     /* header */
922     if (opt->audio_production_info)
923         frame_bits += 7;
924     if (s->bitstream_id == 6) {
925         if (opt->extended_bsi_1)
926             frame_bits += 14;
927         if (opt->extended_bsi_2)
928             frame_bits += 14;
929     }
930
931     /* audio blocks */
932     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
933         /* stereo rematrixing */
934         if (s->channel_mode == AC3_CHMODE_STEREO &&
935             s->blocks[blk].new_rematrixing_strategy) {
936             frame_bits += s->num_rematrixing_bands;
937         }
938
939         /* bandwidth codes & gain range */
940         for (ch = 0; ch < s->fbw_channels; ch++) {
941             if (s->exp_strategy[ch][blk] != EXP_REUSE)
942                 frame_bits += 6 + 2;
943         }
944     }
945
946     s->frame_bits = s->frame_bits_fixed + frame_bits;
947 }
948
949
950 /**
951  * Finalize the mantissa bit count by adding in the grouped mantissas.
952  */
953 static int compute_mantissa_size_final(int mant_cnt[5])
954 {
955     // bap=1 : 3 mantissas in 5 bits
956     int bits = (mant_cnt[1] / 3) * 5;
957     // bap=2 : 3 mantissas in 7 bits
958     // bap=4 : 2 mantissas in 7 bits
959     bits += ((mant_cnt[2] / 3) + (mant_cnt[4] >> 1)) * 7;
960     // bap=3 : each mantissa is 3 bits
961     bits += mant_cnt[3] * 3;
962     return bits;
963 }
964
965
966 /**
967  * Calculate masking curve based on the final exponents.
968  * Also calculate the power spectral densities to use in future calculations.
969  */
970 static void bit_alloc_masking(AC3EncodeContext *s)
971 {
972     int blk, ch;
973
974     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
975         AC3Block *block = &s->blocks[blk];
976         for (ch = 0; ch < s->channels; ch++) {
977             /* We only need psd and mask for calculating bap.
978                Since we currently do not calculate bap when exponent
979                strategy is EXP_REUSE we do not need to calculate psd or mask. */
980             if (s->exp_strategy[ch][blk] != EXP_REUSE) {
981                 ff_ac3_bit_alloc_calc_psd(block->exp[ch], 0,
982                                           s->nb_coefs[ch],
983                                           block->psd[ch], block->band_psd[ch]);
984                 ff_ac3_bit_alloc_calc_mask(&s->bit_alloc, block->band_psd[ch],
985                                            0, s->nb_coefs[ch],
986                                            ff_ac3_fast_gain_tab[s->fast_gain_code[ch]],
987                                            ch == s->lfe_channel,
988                                            DBA_NONE, 0, NULL, NULL, NULL,
989                                            block->mask[ch]);
990             }
991         }
992     }
993 }
994
995
996 /**
997  * Ensure that bap for each block and channel point to the current bap_buffer.
998  * They may have been switched during the bit allocation search.
999  */
1000 static void reset_block_bap(AC3EncodeContext *s)
1001 {
1002     int blk, ch;
1003     if (s->blocks[0].bap[0] == s->bap_buffer)
1004         return;
1005     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
1006         for (ch = 0; ch < s->channels; ch++) {
1007             s->blocks[blk].bap[ch] = &s->bap_buffer[AC3_MAX_COEFS * (blk * s->channels + ch)];
1008         }
1009     }
1010 }
1011
1012
1013 /**
1014  * Run the bit allocation with a given SNR offset.
1015  * This calculates the bit allocation pointers that will be used to determine
1016  * the quantization of each mantissa.
1017  * @return the number of bits needed for mantissas if the given SNR offset is
1018  *         is used.
1019  */
1020 static int bit_alloc(AC3EncodeContext *s, int snr_offset)
1021 {
1022     int blk, ch;
1023     int mantissa_bits;
1024     int mant_cnt[5];
1025
1026     snr_offset = (snr_offset - 240) << 2;
1027
1028     reset_block_bap(s);
1029     mantissa_bits = 0;
1030     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
1031         AC3Block *block = &s->blocks[blk];
1032         AC3Block *ref_block;
1033         // initialize grouped mantissa counts. these are set so that they are
1034         // padded to the next whole group size when bits are counted in
1035         // compute_mantissa_size_final
1036         mant_cnt[0] = mant_cnt[3] = 0;
1037         mant_cnt[1] = mant_cnt[2] = 2;
1038         mant_cnt[4] = 1;
1039         for (ch = 0; ch < s->channels; ch++) {
1040             /* Currently the only bit allocation parameters which vary across
1041                blocks within a frame are the exponent values.  We can take
1042                advantage of that by reusing the bit allocation pointers
1043                whenever we reuse exponents. */
1044             ref_block = block->exp_ref_block[ch];
1045             if (s->exp_strategy[ch][blk] != EXP_REUSE) {
1046                 s->ac3dsp.bit_alloc_calc_bap(ref_block->mask[ch],
1047                                              ref_block->psd[ch], 0,
1048                                              s->nb_coefs[ch], snr_offset,
1049                                              s->bit_alloc.floor, ff_ac3_bap_tab,
1050                                              ref_block->bap[ch]);
1051             }
1052             mantissa_bits += s->ac3dsp.compute_mantissa_size(mant_cnt,
1053                                                              ref_block->bap[ch],
1054                                                              s->nb_coefs[ch]);
1055         }
1056         mantissa_bits += compute_mantissa_size_final(mant_cnt);
1057     }
1058     return mantissa_bits;
1059 }
1060
1061
1062 /**
1063  * Constant bitrate bit allocation search.
1064  * Find the largest SNR offset that will allow data to fit in the frame.
1065  */
1066 static int cbr_bit_allocation(AC3EncodeContext *s)
1067 {
1068     int ch;
1069     int bits_left;
1070     int snr_offset, snr_incr;
1071
1072     bits_left = 8 * s->frame_size - (s->frame_bits + s->exponent_bits);
1073     if (bits_left < 0)
1074         return AVERROR(EINVAL);
1075
1076     snr_offset = s->coarse_snr_offset << 4;
1077
1078     /* if previous frame SNR offset was 1023, check if current frame can also
1079        use SNR offset of 1023. if so, skip the search. */
1080     if ((snr_offset | s->fine_snr_offset[0]) == 1023) {
1081         if (bit_alloc(s, 1023) <= bits_left)
1082             return 0;
1083     }
1084
1085     while (snr_offset >= 0 &&
1086            bit_alloc(s, snr_offset) > bits_left) {
1087         snr_offset -= 64;
1088     }
1089     if (snr_offset < 0)
1090         return AVERROR(EINVAL);
1091
1092     FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
1093     for (snr_incr = 64; snr_incr > 0; snr_incr >>= 2) {
1094         while (snr_offset + snr_incr <= 1023 &&
1095                bit_alloc(s, snr_offset + snr_incr) <= bits_left) {
1096             snr_offset += snr_incr;
1097             FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
1098         }
1099     }
1100     FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
1101     reset_block_bap(s);
1102
1103     s->coarse_snr_offset = snr_offset >> 4;
1104     for (ch = 0; ch < s->channels; ch++)
1105         s->fine_snr_offset[ch] = snr_offset & 0xF;
1106
1107     return 0;
1108 }
1109
1110
1111 /**
1112  * Downgrade exponent strategies to reduce the bits used by the exponents.
1113  * This is a fallback for when bit allocation fails with the normal exponent
1114  * strategies.  Each time this function is run it only downgrades the
1115  * strategy in 1 channel of 1 block.
1116  * @return non-zero if downgrade was unsuccessful
1117  */
1118 static int downgrade_exponents(AC3EncodeContext *s)
1119 {
1120     int ch, blk;
1121
1122     for (ch = 0; ch < s->fbw_channels; ch++) {
1123         for (blk = AC3_MAX_BLOCKS-1; blk >= 0; blk--) {
1124             if (s->exp_strategy[ch][blk] == EXP_D15) {
1125                 s->exp_strategy[ch][blk] = EXP_D25;
1126                 return 0;
1127             }
1128         }
1129     }
1130     for (ch = 0; ch < s->fbw_channels; ch++) {
1131         for (blk = AC3_MAX_BLOCKS-1; blk >= 0; blk--) {
1132             if (s->exp_strategy[ch][blk] == EXP_D25) {
1133                 s->exp_strategy[ch][blk] = EXP_D45;
1134                 return 0;
1135             }
1136         }
1137     }
1138     for (ch = 0; ch < s->fbw_channels; ch++) {
1139         /* block 0 cannot reuse exponents, so only downgrade D45 to REUSE if
1140            the block number > 0 */
1141         for (blk = AC3_MAX_BLOCKS-1; blk > 0; blk--) {
1142             if (s->exp_strategy[ch][blk] > EXP_REUSE) {
1143                 s->exp_strategy[ch][blk] = EXP_REUSE;
1144                 return 0;
1145             }
1146         }
1147     }
1148     return -1;
1149 }
1150
1151
1152 /**
1153  * Perform bit allocation search.
1154  * Finds the SNR offset value that maximizes quality and fits in the specified
1155  * frame size.  Output is the SNR offset and a set of bit allocation pointers
1156  * used to quantize the mantissas.
1157  */
1158 static int compute_bit_allocation(AC3EncodeContext *s)
1159 {
1160     int ret;
1161
1162     count_frame_bits(s);
1163
1164     bit_alloc_masking(s);
1165
1166     ret = cbr_bit_allocation(s);
1167     while (ret) {
1168         /* fallback 1: downgrade exponents */
1169         if (!downgrade_exponents(s)) {
1170             extract_exponents(s);
1171             encode_exponents(s);
1172             group_exponents(s);
1173             ret = compute_bit_allocation(s);
1174             continue;
1175         }
1176
1177         /* fallbacks were not enough... */
1178         break;
1179     }
1180
1181     return ret;
1182 }
1183
1184
1185 /**
1186  * Symmetric quantization on 'levels' levels.
1187  */
1188 static inline int sym_quant(int c, int e, int levels)
1189 {
1190     int v = (((levels * c) >> (24 - e)) + levels) >> 1;
1191     av_assert2(v >= 0 && v < levels);
1192     return v;
1193 }
1194
1195
1196 /**
1197  * Asymmetric quantization on 2^qbits levels.
1198  */
1199 static inline int asym_quant(int c, int e, int qbits)
1200 {
1201     int lshift, m, v;
1202
1203     lshift = e + qbits - 24;
1204     if (lshift >= 0)
1205         v = c << lshift;
1206     else
1207         v = c >> (-lshift);
1208     /* rounding */
1209     v = (v + 1) >> 1;
1210     m = (1 << (qbits-1));
1211     if (v >= m)
1212         v = m - 1;
1213     av_assert2(v >= -m);
1214     return v & ((1 << qbits)-1);
1215 }
1216
1217
1218 /**
1219  * Quantize a set of mantissas for a single channel in a single block.
1220  */
1221 static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef,
1222                                       uint8_t *exp,
1223                                       uint8_t *bap, uint16_t *qmant, int n)
1224 {
1225     int i;
1226
1227     for (i = 0; i < n; i++) {
1228         int v;
1229         int c = fixed_coef[i];
1230         int e = exp[i];
1231         int b = bap[i];
1232         switch (b) {
1233         case 0:
1234             v = 0;
1235             break;
1236         case 1:
1237             v = sym_quant(c, e, 3);
1238             switch (s->mant1_cnt) {
1239             case 0:
1240                 s->qmant1_ptr = &qmant[i];
1241                 v = 9 * v;
1242                 s->mant1_cnt = 1;
1243                 break;
1244             case 1:
1245                 *s->qmant1_ptr += 3 * v;
1246                 s->mant1_cnt = 2;
1247                 v = 128;
1248                 break;
1249             default:
1250                 *s->qmant1_ptr += v;
1251                 s->mant1_cnt = 0;
1252                 v = 128;
1253                 break;
1254             }
1255             break;
1256         case 2:
1257             v = sym_quant(c, e, 5);
1258             switch (s->mant2_cnt) {
1259             case 0:
1260                 s->qmant2_ptr = &qmant[i];
1261                 v = 25 * v;
1262                 s->mant2_cnt = 1;
1263                 break;
1264             case 1:
1265                 *s->qmant2_ptr += 5 * v;
1266                 s->mant2_cnt = 2;
1267                 v = 128;
1268                 break;
1269             default:
1270                 *s->qmant2_ptr += v;
1271                 s->mant2_cnt = 0;
1272                 v = 128;
1273                 break;
1274             }
1275             break;
1276         case 3:
1277             v = sym_quant(c, e, 7);
1278             break;
1279         case 4:
1280             v = sym_quant(c, e, 11);
1281             switch (s->mant4_cnt) {
1282             case 0:
1283                 s->qmant4_ptr = &qmant[i];
1284                 v = 11 * v;
1285                 s->mant4_cnt = 1;
1286                 break;
1287             default:
1288                 *s->qmant4_ptr += v;
1289                 s->mant4_cnt = 0;
1290                 v = 128;
1291                 break;
1292             }
1293             break;
1294         case 5:
1295             v = sym_quant(c, e, 15);
1296             break;
1297         case 14:
1298             v = asym_quant(c, e, 14);
1299             break;
1300         case 15:
1301             v = asym_quant(c, e, 16);
1302             break;
1303         default:
1304             v = asym_quant(c, e, b - 1);
1305             break;
1306         }
1307         qmant[i] = v;
1308     }
1309 }
1310
1311
1312 /**
1313  * Quantize mantissas using coefficients, exponents, and bit allocation pointers.
1314  */
1315 static void quantize_mantissas(AC3EncodeContext *s)
1316 {
1317     int blk, ch;
1318
1319
1320     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
1321         AC3Block *block = &s->blocks[blk];
1322         AC3Block *ref_block;
1323         AC3Mant m = { 0 };
1324
1325         for (ch = 0; ch < s->channels; ch++) {
1326             ref_block = block->exp_ref_block[ch];
1327             quantize_mantissas_blk_ch(&m, block->fixed_coef[ch],
1328                                       ref_block->exp[ch], ref_block->bap[ch],
1329                                       block->qmant[ch], s->nb_coefs[ch]);
1330         }
1331     }
1332 }
1333
1334
1335 /**
1336  * Write the AC-3 frame header to the output bitstream.
1337  */
1338 static void output_frame_header(AC3EncodeContext *s)
1339 {
1340     AC3EncOptions *opt = &s->options;
1341
1342     put_bits(&s->pb, 16, 0x0b77);   /* frame header */
1343     put_bits(&s->pb, 16, 0);        /* crc1: will be filled later */
1344     put_bits(&s->pb, 2,  s->bit_alloc.sr_code);
1345     put_bits(&s->pb, 6,  s->frame_size_code + (s->frame_size - s->frame_size_min) / 2);
1346     put_bits(&s->pb, 5,  s->bitstream_id);
1347     put_bits(&s->pb, 3,  s->bitstream_mode);
1348     put_bits(&s->pb, 3,  s->channel_mode);
1349     if ((s->channel_mode & 0x01) && s->channel_mode != AC3_CHMODE_MONO)
1350         put_bits(&s->pb, 2, s->center_mix_level);
1351     if (s->channel_mode & 0x04)
1352         put_bits(&s->pb, 2, s->surround_mix_level);
1353     if (s->channel_mode == AC3_CHMODE_STEREO)
1354         put_bits(&s->pb, 2, opt->dolby_surround_mode);
1355     put_bits(&s->pb, 1, s->lfe_on); /* LFE */
1356     put_bits(&s->pb, 5, -opt->dialogue_level);
1357     put_bits(&s->pb, 1, 0);         /* no compression control word */
1358     put_bits(&s->pb, 1, 0);         /* no lang code */
1359     put_bits(&s->pb, 1, opt->audio_production_info);
1360     if (opt->audio_production_info) {
1361         put_bits(&s->pb, 5, opt->mixing_level - 80);
1362         put_bits(&s->pb, 2, opt->room_type);
1363     }
1364     put_bits(&s->pb, 1, opt->copyright);
1365     put_bits(&s->pb, 1, opt->original);
1366     if (s->bitstream_id == 6) {
1367         /* alternate bit stream syntax */
1368         put_bits(&s->pb, 1, opt->extended_bsi_1);
1369         if (opt->extended_bsi_1) {
1370             put_bits(&s->pb, 2, opt->preferred_stereo_downmix);
1371             put_bits(&s->pb, 3, s->ltrt_center_mix_level);
1372             put_bits(&s->pb, 3, s->ltrt_surround_mix_level);
1373             put_bits(&s->pb, 3, s->loro_center_mix_level);
1374             put_bits(&s->pb, 3, s->loro_surround_mix_level);
1375         }
1376         put_bits(&s->pb, 1, opt->extended_bsi_2);
1377         if (opt->extended_bsi_2) {
1378             put_bits(&s->pb, 2, opt->dolby_surround_ex_mode);
1379             put_bits(&s->pb, 2, opt->dolby_headphone_mode);
1380             put_bits(&s->pb, 1, opt->ad_converter_type);
1381             put_bits(&s->pb, 9, 0);     /* xbsi2 and encinfo : reserved */
1382         }
1383     } else {
1384     put_bits(&s->pb, 1, 0);         /* no time code 1 */
1385     put_bits(&s->pb, 1, 0);         /* no time code 2 */
1386     }
1387     put_bits(&s->pb, 1, 0);         /* no additional bit stream info */
1388 }
1389
1390
1391 /**
1392  * Write one audio block to the output bitstream.
1393  */
1394 static void output_audio_block(AC3EncodeContext *s, int blk)
1395 {
1396     int ch, i, baie, rbnd;
1397     AC3Block *block = &s->blocks[blk];
1398
1399     /* block switching */
1400     for (ch = 0; ch < s->fbw_channels; ch++)
1401         put_bits(&s->pb, 1, 0);
1402
1403     /* dither flags */
1404     for (ch = 0; ch < s->fbw_channels; ch++)
1405         put_bits(&s->pb, 1, 1);
1406
1407     /* dynamic range codes */
1408     put_bits(&s->pb, 1, 0);
1409
1410     /* channel coupling */
1411     if (!blk) {
1412         put_bits(&s->pb, 1, 1); /* coupling strategy present */
1413         put_bits(&s->pb, 1, 0); /* no coupling strategy */
1414     } else {
1415         put_bits(&s->pb, 1, 0); /* no new coupling strategy */
1416     }
1417
1418     /* stereo rematrixing */
1419     if (s->channel_mode == AC3_CHMODE_STEREO) {
1420         put_bits(&s->pb, 1, block->new_rematrixing_strategy);
1421         if (block->new_rematrixing_strategy) {
1422             /* rematrixing flags */
1423             for (rbnd = 0; rbnd < s->num_rematrixing_bands; rbnd++)
1424                 put_bits(&s->pb, 1, block->rematrixing_flags[rbnd]);
1425         }
1426     }
1427
1428     /* exponent strategy */
1429     for (ch = 0; ch < s->fbw_channels; ch++)
1430         put_bits(&s->pb, 2, s->exp_strategy[ch][blk]);
1431     if (s->lfe_on)
1432         put_bits(&s->pb, 1, s->exp_strategy[s->lfe_channel][blk]);
1433
1434     /* bandwidth */
1435     for (ch = 0; ch < s->fbw_channels; ch++) {
1436         if (s->exp_strategy[ch][blk] != EXP_REUSE)
1437             put_bits(&s->pb, 6, s->bandwidth_code);
1438     }
1439
1440     /* exponents */
1441     for (ch = 0; ch < s->channels; ch++) {
1442         int nb_groups;
1443
1444         if (s->exp_strategy[ch][blk] == EXP_REUSE)
1445             continue;
1446
1447         /* DC exponent */
1448         put_bits(&s->pb, 4, block->grouped_exp[ch][0]);
1449
1450         /* exponent groups */
1451         nb_groups = exponent_group_tab[s->exp_strategy[ch][blk]-1][s->nb_coefs[ch]];
1452         for (i = 1; i <= nb_groups; i++)
1453             put_bits(&s->pb, 7, block->grouped_exp[ch][i]);
1454
1455         /* gain range info */
1456         if (ch != s->lfe_channel)
1457             put_bits(&s->pb, 2, 0);
1458     }
1459
1460     /* bit allocation info */
1461     baie = (blk == 0);
1462     put_bits(&s->pb, 1, baie);
1463     if (baie) {
1464         put_bits(&s->pb, 2, s->slow_decay_code);
1465         put_bits(&s->pb, 2, s->fast_decay_code);
1466         put_bits(&s->pb, 2, s->slow_gain_code);
1467         put_bits(&s->pb, 2, s->db_per_bit_code);
1468         put_bits(&s->pb, 3, s->floor_code);
1469     }
1470
1471     /* snr offset */
1472     put_bits(&s->pb, 1, baie);
1473     if (baie) {
1474         put_bits(&s->pb, 6, s->coarse_snr_offset);
1475         for (ch = 0; ch < s->channels; ch++) {
1476             put_bits(&s->pb, 4, s->fine_snr_offset[ch]);
1477             put_bits(&s->pb, 3, s->fast_gain_code[ch]);
1478         }
1479     }
1480
1481     put_bits(&s->pb, 1, 0); /* no delta bit allocation */
1482     put_bits(&s->pb, 1, 0); /* no data to skip */
1483
1484     /* mantissas */
1485     for (ch = 0; ch < s->channels; ch++) {
1486         int b, q;
1487         AC3Block *ref_block = block->exp_ref_block[ch];
1488         for (i = 0; i < s->nb_coefs[ch]; i++) {
1489             q = block->qmant[ch][i];
1490             b = ref_block->bap[ch][i];
1491             switch (b) {
1492             case 0:                                         break;
1493             case 1: if (q != 128) put_bits(&s->pb,   5, q); break;
1494             case 2: if (q != 128) put_bits(&s->pb,   7, q); break;
1495             case 3:               put_bits(&s->pb,   3, q); break;
1496             case 4: if (q != 128) put_bits(&s->pb,   7, q); break;
1497             case 14:              put_bits(&s->pb,  14, q); break;
1498             case 15:              put_bits(&s->pb,  16, q); break;
1499             default:              put_bits(&s->pb, b-1, q); break;
1500             }
1501         }
1502     }
1503 }
1504
1505
1506 /** CRC-16 Polynomial */
1507 #define CRC16_POLY ((1 << 0) | (1 << 2) | (1 << 15) | (1 << 16))
1508
1509
1510 static unsigned int mul_poly(unsigned int a, unsigned int b, unsigned int poly)
1511 {
1512     unsigned int c;
1513
1514     c = 0;
1515     while (a) {
1516         if (a & 1)
1517             c ^= b;
1518         a = a >> 1;
1519         b = b << 1;
1520         if (b & (1 << 16))
1521             b ^= poly;
1522     }
1523     return c;
1524 }
1525
1526
1527 static unsigned int pow_poly(unsigned int a, unsigned int n, unsigned int poly)
1528 {
1529     unsigned int r;
1530     r = 1;
1531     while (n) {
1532         if (n & 1)
1533             r = mul_poly(r, a, poly);
1534         a = mul_poly(a, a, poly);
1535         n >>= 1;
1536     }
1537     return r;
1538 }
1539
1540
1541 /**
1542  * Fill the end of the frame with 0's and compute the two CRCs.
1543  */
1544 static void output_frame_end(AC3EncodeContext *s)
1545 {
1546     const AVCRC *crc_ctx = av_crc_get_table(AV_CRC_16_ANSI);
1547     int frame_size_58, pad_bytes, crc1, crc2_partial, crc2, crc_inv;
1548     uint8_t *frame;
1549
1550     frame_size_58 = ((s->frame_size >> 2) + (s->frame_size >> 4)) << 1;
1551
1552     /* pad the remainder of the frame with zeros */
1553     av_assert2(s->frame_size * 8 - put_bits_count(&s->pb) >= 18);
1554     flush_put_bits(&s->pb);
1555     frame = s->pb.buf;
1556     pad_bytes = s->frame_size - (put_bits_ptr(&s->pb) - frame) - 2;
1557     av_assert2(pad_bytes >= 0);
1558     if (pad_bytes > 0)
1559         memset(put_bits_ptr(&s->pb), 0, pad_bytes);
1560
1561     /* compute crc1 */
1562     /* this is not so easy because it is at the beginning of the data... */
1563     crc1    = av_bswap16(av_crc(crc_ctx, 0, frame + 4, frame_size_58 - 4));
1564     crc_inv = s->crc_inv[s->frame_size > s->frame_size_min];
1565     crc1    = mul_poly(crc_inv, crc1, CRC16_POLY);
1566     AV_WB16(frame + 2, crc1);
1567
1568     /* compute crc2 */
1569     crc2_partial = av_crc(crc_ctx, 0, frame + frame_size_58,
1570                           s->frame_size - frame_size_58 - 3);
1571     crc2 = av_crc(crc_ctx, crc2_partial, frame + s->frame_size - 3, 1);
1572     /* ensure crc2 does not match sync word by flipping crcrsv bit if needed */
1573     if (crc2 == 0x770B) {
1574         frame[s->frame_size - 3] ^= 0x1;
1575         crc2 = av_crc(crc_ctx, crc2_partial, frame + s->frame_size - 3, 1);
1576     }
1577     crc2 = av_bswap16(crc2);
1578     AV_WB16(frame + s->frame_size - 2, crc2);
1579 }
1580
1581
1582 /**
1583  * Write the frame to the output bitstream.
1584  */
1585 static void output_frame(AC3EncodeContext *s, unsigned char *frame)
1586 {
1587     int blk;
1588
1589     init_put_bits(&s->pb, frame, AC3_MAX_CODED_FRAME_SIZE);
1590
1591     output_frame_header(s);
1592
1593     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++)
1594         output_audio_block(s, blk);
1595
1596     output_frame_end(s);
1597 }
1598
1599
1600 static void dprint_options(AVCodecContext *avctx)
1601 {
1602 #ifdef DEBUG
1603     AC3EncodeContext *s = avctx->priv_data;
1604     AC3EncOptions *opt = &s->options;
1605     char strbuf[32];
1606
1607     switch (s->bitstream_id) {
1608     case  6:  av_strlcpy(strbuf, "AC-3 (alt syntax)", 32);      break;
1609     case  8:  av_strlcpy(strbuf, "AC-3 (standard)", 32);        break;
1610     case  9:  av_strlcpy(strbuf, "AC-3 (dnet half-rate)", 32);  break;
1611     case 10:  av_strlcpy(strbuf, "AC-3 (dnet quater-rate", 32); break;
1612     default: snprintf(strbuf, 32, "ERROR");
1613     }
1614     av_dlog(avctx, "bitstream_id: %s (%d)\n", strbuf, s->bitstream_id);
1615     av_dlog(avctx, "sample_fmt: %s\n", av_get_sample_fmt_name(avctx->sample_fmt));
1616     av_get_channel_layout_string(strbuf, 32, s->channels, avctx->channel_layout);
1617     av_dlog(avctx, "channel_layout: %s\n", strbuf);
1618     av_dlog(avctx, "sample_rate: %d\n", s->sample_rate);
1619     av_dlog(avctx, "bit_rate: %d\n", s->bit_rate);
1620     if (s->cutoff)
1621         av_dlog(avctx, "cutoff: %d\n", s->cutoff);
1622
1623     av_dlog(avctx, "per_frame_metadata: %s\n",
1624             opt->allow_per_frame_metadata?"on":"off");
1625     if (s->has_center)
1626         av_dlog(avctx, "center_mixlev: %0.3f (%d)\n", opt->center_mix_level,
1627                 s->center_mix_level);
1628     else
1629         av_dlog(avctx, "center_mixlev: {not written}\n");
1630     if (s->has_surround)
1631         av_dlog(avctx, "surround_mixlev: %0.3f (%d)\n", opt->surround_mix_level,
1632                 s->surround_mix_level);
1633     else
1634         av_dlog(avctx, "surround_mixlev: {not written}\n");
1635     if (opt->audio_production_info) {
1636         av_dlog(avctx, "mixing_level: %ddB\n", opt->mixing_level);
1637         switch (opt->room_type) {
1638         case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1639         case 1:  av_strlcpy(strbuf, "large", 32);        break;
1640         case 2:  av_strlcpy(strbuf, "small", 32);        break;
1641         default: snprintf(strbuf, 32, "ERROR (%d)", opt->room_type);
1642         }
1643         av_dlog(avctx, "room_type: %s\n", strbuf);
1644     } else {
1645         av_dlog(avctx, "mixing_level: {not written}\n");
1646         av_dlog(avctx, "room_type: {not written}\n");
1647     }
1648     av_dlog(avctx, "copyright: %s\n", opt->copyright?"on":"off");
1649     av_dlog(avctx, "dialnorm: %ddB\n", opt->dialogue_level);
1650     if (s->channel_mode == AC3_CHMODE_STEREO) {
1651         switch (opt->dolby_surround_mode) {
1652         case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1653         case 1:  av_strlcpy(strbuf, "on", 32);           break;
1654         case 2:  av_strlcpy(strbuf, "off", 32);          break;
1655         default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_surround_mode);
1656         }
1657         av_dlog(avctx, "dsur_mode: %s\n", strbuf);
1658     } else {
1659         av_dlog(avctx, "dsur_mode: {not written}\n");
1660     }
1661     av_dlog(avctx, "original: %s\n", opt->original?"on":"off");
1662
1663     if (s->bitstream_id == 6) {
1664         if (opt->extended_bsi_1) {
1665             switch (opt->preferred_stereo_downmix) {
1666             case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1667             case 1:  av_strlcpy(strbuf, "ltrt", 32);         break;
1668             case 2:  av_strlcpy(strbuf, "loro", 32);         break;
1669             default: snprintf(strbuf, 32, "ERROR (%d)", opt->preferred_stereo_downmix);
1670             }
1671             av_dlog(avctx, "dmix_mode: %s\n", strbuf);
1672             av_dlog(avctx, "ltrt_cmixlev: %0.3f (%d)\n",
1673                     opt->ltrt_center_mix_level, s->ltrt_center_mix_level);
1674             av_dlog(avctx, "ltrt_surmixlev: %0.3f (%d)\n",
1675                     opt->ltrt_surround_mix_level, s->ltrt_surround_mix_level);
1676             av_dlog(avctx, "loro_cmixlev: %0.3f (%d)\n",
1677                     opt->loro_center_mix_level, s->loro_center_mix_level);
1678             av_dlog(avctx, "loro_surmixlev: %0.3f (%d)\n",
1679                     opt->loro_surround_mix_level, s->loro_surround_mix_level);
1680         } else {
1681             av_dlog(avctx, "extended bitstream info 1: {not written}\n");
1682         }
1683         if (opt->extended_bsi_2) {
1684             switch (opt->dolby_surround_ex_mode) {
1685             case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1686             case 1:  av_strlcpy(strbuf, "on", 32);           break;
1687             case 2:  av_strlcpy(strbuf, "off", 32);          break;
1688             default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_surround_ex_mode);
1689             }
1690             av_dlog(avctx, "dsurex_mode: %s\n", strbuf);
1691             switch (opt->dolby_headphone_mode) {
1692             case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1693             case 1:  av_strlcpy(strbuf, "on", 32);           break;
1694             case 2:  av_strlcpy(strbuf, "off", 32);          break;
1695             default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_headphone_mode);
1696             }
1697             av_dlog(avctx, "dheadphone_mode: %s\n", strbuf);
1698
1699             switch (opt->ad_converter_type) {
1700             case 0:  av_strlcpy(strbuf, "standard", 32); break;
1701             case 1:  av_strlcpy(strbuf, "hdcd", 32);     break;
1702             default: snprintf(strbuf, 32, "ERROR (%d)", opt->ad_converter_type);
1703             }
1704             av_dlog(avctx, "ad_conv_type: %s\n", strbuf);
1705         } else {
1706             av_dlog(avctx, "extended bitstream info 2: {not written}\n");
1707         }
1708     }
1709 #endif
1710 }
1711
1712
1713 #define FLT_OPTION_THRESHOLD 0.01
1714
1715 static int validate_float_option(float v, const float *v_list, int v_list_size)
1716 {
1717     int i;
1718
1719     for (i = 0; i < v_list_size; i++) {
1720         if (v < (v_list[i] + FLT_OPTION_THRESHOLD) &&
1721             v > (v_list[i] - FLT_OPTION_THRESHOLD))
1722             break;
1723     }
1724     if (i == v_list_size)
1725         return -1;
1726
1727     return i;
1728 }
1729
1730
1731 static void validate_mix_level(void *log_ctx, const char *opt_name,
1732                                float *opt_param, const float *list,
1733                                int list_size, int default_value, int min_value,
1734                                int *ctx_param)
1735 {
1736     int mixlev = validate_float_option(*opt_param, list, list_size);
1737     if (mixlev < min_value) {
1738         mixlev = default_value;
1739         if (*opt_param >= 0.0) {
1740             av_log(log_ctx, AV_LOG_WARNING, "requested %s is not valid. using "
1741                    "default value: %0.3f\n", opt_name, list[mixlev]);
1742         }
1743     }
1744     *opt_param = list[mixlev];
1745     *ctx_param = mixlev;
1746 }
1747
1748
1749 /**
1750  * Validate metadata options as set by AVOption system.
1751  * These values can optionally be changed per-frame.
1752  */
1753 static int validate_metadata(AVCodecContext *avctx)
1754 {
1755     AC3EncodeContext *s = avctx->priv_data;
1756     AC3EncOptions *opt = &s->options;
1757
1758     /* validate mixing levels */
1759     if (s->has_center) {
1760         validate_mix_level(avctx, "center_mix_level", &opt->center_mix_level,
1761                            cmixlev_options, CMIXLEV_NUM_OPTIONS, 1, 0,
1762                            &s->center_mix_level);
1763     }
1764     if (s->has_surround) {
1765         validate_mix_level(avctx, "surround_mix_level", &opt->surround_mix_level,
1766                            surmixlev_options, SURMIXLEV_NUM_OPTIONS, 1, 0,
1767                            &s->surround_mix_level);
1768     }
1769
1770     /* set audio production info flag */
1771     if (opt->mixing_level >= 0 || opt->room_type >= 0) {
1772         if (opt->mixing_level < 0) {
1773             av_log(avctx, AV_LOG_ERROR, "mixing_level must be set if "
1774                    "room_type is set\n");
1775             return AVERROR(EINVAL);
1776         }
1777         if (opt->mixing_level < 80) {
1778             av_log(avctx, AV_LOG_ERROR, "invalid mixing level. must be between "
1779                    "80dB and 111dB\n");
1780             return AVERROR(EINVAL);
1781         }
1782         /* default room type */
1783         if (opt->room_type < 0)
1784             opt->room_type = 0;
1785         opt->audio_production_info = 1;
1786     } else {
1787         opt->audio_production_info = 0;
1788     }
1789
1790     /* set extended bsi 1 flag */
1791     if ((s->has_center || s->has_surround) &&
1792         (opt->preferred_stereo_downmix >= 0 ||
1793          opt->ltrt_center_mix_level   >= 0 ||
1794          opt->ltrt_surround_mix_level >= 0 ||
1795          opt->loro_center_mix_level   >= 0 ||
1796          opt->loro_surround_mix_level >= 0)) {
1797         /* default preferred stereo downmix */
1798         if (opt->preferred_stereo_downmix < 0)
1799             opt->preferred_stereo_downmix = 0;
1800         /* validate Lt/Rt center mix level */
1801         validate_mix_level(avctx, "ltrt_center_mix_level",
1802                            &opt->ltrt_center_mix_level, extmixlev_options,
1803                            EXTMIXLEV_NUM_OPTIONS, 5, 0,
1804                            &s->ltrt_center_mix_level);
1805         /* validate Lt/Rt surround mix level */
1806         validate_mix_level(avctx, "ltrt_surround_mix_level",
1807                            &opt->ltrt_surround_mix_level, extmixlev_options,
1808                            EXTMIXLEV_NUM_OPTIONS, 6, 3,
1809                            &s->ltrt_surround_mix_level);
1810         /* validate Lo/Ro center mix level */
1811         validate_mix_level(avctx, "loro_center_mix_level",
1812                            &opt->loro_center_mix_level, extmixlev_options,
1813                            EXTMIXLEV_NUM_OPTIONS, 5, 0,
1814                            &s->loro_center_mix_level);
1815         /* validate Lo/Ro surround mix level */
1816         validate_mix_level(avctx, "loro_surround_mix_level",
1817                            &opt->loro_surround_mix_level, extmixlev_options,
1818                            EXTMIXLEV_NUM_OPTIONS, 6, 3,
1819                            &s->loro_surround_mix_level);
1820         opt->extended_bsi_1 = 1;
1821     } else {
1822         opt->extended_bsi_1 = 0;
1823     }
1824
1825     /* set extended bsi 2 flag */
1826     if (opt->dolby_surround_ex_mode >= 0 ||
1827         opt->dolby_headphone_mode   >= 0 ||
1828         opt->ad_converter_type      >= 0) {
1829         /* default dolby surround ex mode */
1830         if (opt->dolby_surround_ex_mode < 0)
1831             opt->dolby_surround_ex_mode = 0;
1832         /* default dolby headphone mode */
1833         if (opt->dolby_headphone_mode < 0)
1834             opt->dolby_headphone_mode = 0;
1835         /* default A/D converter type */
1836         if (opt->ad_converter_type < 0)
1837             opt->ad_converter_type = 0;
1838         opt->extended_bsi_2 = 1;
1839     } else {
1840         opt->extended_bsi_2 = 0;
1841     }
1842
1843     /* set bitstream id for alternate bitstream syntax */
1844     if (opt->extended_bsi_1 || opt->extended_bsi_2) {
1845         if (s->bitstream_id > 8 && s->bitstream_id < 11) {
1846             static int warn_once = 1;
1847             if (warn_once) {
1848                 av_log(avctx, AV_LOG_WARNING, "alternate bitstream syntax is "
1849                        "not compatible with reduced samplerates. writing of "
1850                        "extended bitstream information will be disabled.\n");
1851                 warn_once = 0;
1852             }
1853         } else {
1854             s->bitstream_id = 6;
1855         }
1856     }
1857
1858     return 0;
1859 }
1860
1861
1862 /**
1863  * Encode a single AC-3 frame.
1864  */
1865 static int ac3_encode_frame(AVCodecContext *avctx, unsigned char *frame,
1866                             int buf_size, void *data)
1867 {
1868     AC3EncodeContext *s = avctx->priv_data;
1869     const SampleType *samples = data;
1870     int ret;
1871
1872     if (s->options.allow_per_frame_metadata) {
1873         ret = validate_metadata(avctx);
1874         if (ret)
1875             return ret;
1876     }
1877
1878     if (s->bit_alloc.sr_code == 1)
1879         adjust_frame_size(s);
1880
1881     deinterleave_input_samples(s, samples);
1882
1883     apply_mdct(s);
1884
1885     scale_coefficients(s);
1886
1887     compute_rematrixing_strategy(s);
1888
1889     apply_rematrixing(s);
1890
1891     process_exponents(s);
1892
1893     ret = compute_bit_allocation(s);
1894     if (ret) {
1895         av_log(avctx, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n");
1896         return ret;
1897     }
1898
1899     quantize_mantissas(s);
1900
1901     output_frame(s, frame);
1902
1903     return s->frame_size;
1904 }
1905
1906
1907 /**
1908  * Finalize encoding and free any memory allocated by the encoder.
1909  */
1910 static av_cold int ac3_encode_close(AVCodecContext *avctx)
1911 {
1912     int blk, ch;
1913     AC3EncodeContext *s = avctx->priv_data;
1914
1915     for (ch = 0; ch < s->channels; ch++)
1916         av_freep(&s->planar_samples[ch]);
1917     av_freep(&s->planar_samples);
1918     av_freep(&s->bap_buffer);
1919     av_freep(&s->bap1_buffer);
1920     av_freep(&s->mdct_coef_buffer);
1921     av_freep(&s->fixed_coef_buffer);
1922     av_freep(&s->exp_buffer);
1923     av_freep(&s->grouped_exp_buffer);
1924     av_freep(&s->psd_buffer);
1925     av_freep(&s->band_psd_buffer);
1926     av_freep(&s->mask_buffer);
1927     av_freep(&s->qmant_buffer);
1928     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
1929         AC3Block *block = &s->blocks[blk];
1930         av_freep(&block->bap);
1931         av_freep(&block->mdct_coef);
1932         av_freep(&block->fixed_coef);
1933         av_freep(&block->exp);
1934         av_freep(&block->grouped_exp);
1935         av_freep(&block->psd);
1936         av_freep(&block->band_psd);
1937         av_freep(&block->mask);
1938         av_freep(&block->qmant);
1939     }
1940
1941     mdct_end(&s->mdct);
1942
1943     av_freep(&avctx->coded_frame);
1944     return 0;
1945 }
1946
1947
1948 /**
1949  * Set channel information during initialization.
1950  */
1951 static av_cold int set_channel_info(AC3EncodeContext *s, int channels,
1952                                     int64_t *channel_layout)
1953 {
1954     int ch_layout;
1955
1956     if (channels < 1 || channels > AC3_MAX_CHANNELS)
1957         return AVERROR(EINVAL);
1958     if ((uint64_t)*channel_layout > 0x7FF)
1959         return AVERROR(EINVAL);
1960     ch_layout = *channel_layout;
1961     if (!ch_layout)
1962         ch_layout = avcodec_guess_channel_layout(channels, CODEC_ID_AC3, NULL);
1963
1964     s->lfe_on       = !!(ch_layout & AV_CH_LOW_FREQUENCY);
1965     s->channels     = channels;
1966     s->fbw_channels = channels - s->lfe_on;
1967     s->lfe_channel  = s->lfe_on ? s->fbw_channels : -1;
1968     if (s->lfe_on)
1969         ch_layout -= AV_CH_LOW_FREQUENCY;
1970
1971     switch (ch_layout) {
1972     case AV_CH_LAYOUT_MONO:           s->channel_mode = AC3_CHMODE_MONO;   break;
1973     case AV_CH_LAYOUT_STEREO:         s->channel_mode = AC3_CHMODE_STEREO; break;
1974     case AV_CH_LAYOUT_SURROUND:       s->channel_mode = AC3_CHMODE_3F;     break;
1975     case AV_CH_LAYOUT_2_1:            s->channel_mode = AC3_CHMODE_2F1R;   break;
1976     case AV_CH_LAYOUT_4POINT0:        s->channel_mode = AC3_CHMODE_3F1R;   break;
1977     case AV_CH_LAYOUT_QUAD:
1978     case AV_CH_LAYOUT_2_2:            s->channel_mode = AC3_CHMODE_2F2R;   break;
1979     case AV_CH_LAYOUT_5POINT0:
1980     case AV_CH_LAYOUT_5POINT0_BACK:   s->channel_mode = AC3_CHMODE_3F2R;   break;
1981     default:
1982         return AVERROR(EINVAL);
1983     }
1984     s->has_center   = (s->channel_mode & 0x01) && s->channel_mode != AC3_CHMODE_MONO;
1985     s->has_surround =  s->channel_mode & 0x04;
1986
1987     s->channel_map  = ff_ac3_enc_channel_map[s->channel_mode][s->lfe_on];
1988     *channel_layout = ch_layout;
1989     if (s->lfe_on)
1990         *channel_layout |= AV_CH_LOW_FREQUENCY;
1991
1992     return 0;
1993 }
1994
1995
1996 static av_cold int validate_options(AVCodecContext *avctx, AC3EncodeContext *s)
1997 {
1998     int i, ret;
1999
2000     /* validate channel layout */
2001     if (!avctx->channel_layout) {
2002         av_log(avctx, AV_LOG_WARNING, "No channel layout specified. The "
2003                                       "encoder will guess the layout, but it "
2004                                       "might be incorrect.\n");
2005     }
2006     ret = set_channel_info(s, avctx->channels, &avctx->channel_layout);
2007     if (ret) {
2008         av_log(avctx, AV_LOG_ERROR, "invalid channel layout\n");
2009         return ret;
2010     }
2011
2012     /* validate sample rate */
2013     for (i = 0; i < 9; i++) {
2014         if ((ff_ac3_sample_rate_tab[i / 3] >> (i % 3)) == avctx->sample_rate)
2015             break;
2016     }
2017     if (i == 9) {
2018         av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
2019         return AVERROR(EINVAL);
2020     }
2021     s->sample_rate        = avctx->sample_rate;
2022     s->bit_alloc.sr_shift = i % 3;
2023     s->bit_alloc.sr_code  = i / 3;
2024     s->bitstream_id       = 8 + s->bit_alloc.sr_shift;
2025
2026     /* validate bit rate */
2027     for (i = 0; i < 19; i++) {
2028         if ((ff_ac3_bitrate_tab[i] >> s->bit_alloc.sr_shift)*1000 == avctx->bit_rate)
2029             break;
2030     }
2031     if (i == 19) {
2032         av_log(avctx, AV_LOG_ERROR, "invalid bit rate\n");
2033         return AVERROR(EINVAL);
2034     }
2035     s->bit_rate        = avctx->bit_rate;
2036     s->frame_size_code = i << 1;
2037
2038     /* validate cutoff */
2039     if (avctx->cutoff < 0) {
2040         av_log(avctx, AV_LOG_ERROR, "invalid cutoff frequency\n");
2041         return AVERROR(EINVAL);
2042     }
2043     s->cutoff = avctx->cutoff;
2044     if (s->cutoff > (s->sample_rate >> 1))
2045         s->cutoff = s->sample_rate >> 1;
2046
2047     /* validate audio service type / channels combination */
2048     if ((avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_KARAOKE &&
2049          avctx->channels == 1) ||
2050         ((avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_COMMENTARY ||
2051           avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_EMERGENCY  ||
2052           avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_VOICE_OVER)
2053          && avctx->channels > 1)) {
2054         av_log(avctx, AV_LOG_ERROR, "invalid audio service type for the "
2055                                     "specified number of channels\n");
2056         return AVERROR(EINVAL);
2057     }
2058
2059     ret = validate_metadata(avctx);
2060     if (ret)
2061         return ret;
2062
2063     s->rematrixing_enabled = s->options.stereo_rematrixing &&
2064                              (s->channel_mode == AC3_CHMODE_STEREO);
2065
2066     return 0;
2067 }
2068
2069
2070 /**
2071  * Set bandwidth for all channels.
2072  * The user can optionally supply a cutoff frequency. Otherwise an appropriate
2073  * default value will be used.
2074  */
2075 static av_cold void set_bandwidth(AC3EncodeContext *s)
2076 {
2077     int ch;
2078
2079     if (s->cutoff) {
2080         /* calculate bandwidth based on user-specified cutoff frequency */
2081         int fbw_coeffs;
2082         fbw_coeffs     = s->cutoff * 2 * AC3_MAX_COEFS / s->sample_rate;
2083         s->bandwidth_code = av_clip((fbw_coeffs - 73) / 3, 0, 60);
2084     } else {
2085         /* use default bandwidth setting */
2086         s->bandwidth_code = ac3_bandwidth_tab[s->fbw_channels-1][s->bit_alloc.sr_code][s->frame_size_code/2];
2087     }
2088
2089     /* set number of coefficients for each channel */
2090     for (ch = 0; ch < s->fbw_channels; ch++) {
2091         s->nb_coefs[ch] = s->bandwidth_code * 3 + 73;
2092     }
2093     if (s->lfe_on)
2094         s->nb_coefs[s->lfe_channel] = 7; /* LFE channel always has 7 coefs */
2095 }
2096
2097
2098 static av_cold int allocate_buffers(AVCodecContext *avctx)
2099 {
2100     int blk, ch;
2101     AC3EncodeContext *s = avctx->priv_data;
2102
2103     FF_ALLOC_OR_GOTO(avctx, s->planar_samples, s->channels * sizeof(*s->planar_samples),
2104                      alloc_fail);
2105     for (ch = 0; ch < s->channels; ch++) {
2106         FF_ALLOCZ_OR_GOTO(avctx, s->planar_samples[ch],
2107                           (AC3_FRAME_SIZE+AC3_BLOCK_SIZE) * sizeof(**s->planar_samples),
2108                           alloc_fail);
2109     }
2110     FF_ALLOC_OR_GOTO(avctx, s->bap_buffer,  AC3_MAX_BLOCKS * s->channels *
2111                      AC3_MAX_COEFS * sizeof(*s->bap_buffer),  alloc_fail);
2112     FF_ALLOC_OR_GOTO(avctx, s->bap1_buffer, AC3_MAX_BLOCKS * s->channels *
2113                      AC3_MAX_COEFS * sizeof(*s->bap1_buffer), alloc_fail);
2114     FF_ALLOC_OR_GOTO(avctx, s->mdct_coef_buffer, AC3_MAX_BLOCKS * s->channels *
2115                      AC3_MAX_COEFS * sizeof(*s->mdct_coef_buffer), alloc_fail);
2116     FF_ALLOC_OR_GOTO(avctx, s->exp_buffer, AC3_MAX_BLOCKS * s->channels *
2117                      AC3_MAX_COEFS * sizeof(*s->exp_buffer), alloc_fail);
2118     FF_ALLOC_OR_GOTO(avctx, s->grouped_exp_buffer, AC3_MAX_BLOCKS * s->channels *
2119                      128 * sizeof(*s->grouped_exp_buffer), alloc_fail);
2120     FF_ALLOC_OR_GOTO(avctx, s->psd_buffer, AC3_MAX_BLOCKS * s->channels *
2121                      AC3_MAX_COEFS * sizeof(*s->psd_buffer), alloc_fail);
2122     FF_ALLOC_OR_GOTO(avctx, s->band_psd_buffer, AC3_MAX_BLOCKS * s->channels *
2123                      64 * sizeof(*s->band_psd_buffer), alloc_fail);
2124     FF_ALLOC_OR_GOTO(avctx, s->mask_buffer, AC3_MAX_BLOCKS * s->channels *
2125                      64 * sizeof(*s->mask_buffer), alloc_fail);
2126     FF_ALLOC_OR_GOTO(avctx, s->qmant_buffer, AC3_MAX_BLOCKS * s->channels *
2127                      AC3_MAX_COEFS * sizeof(*s->qmant_buffer), alloc_fail);
2128     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
2129         AC3Block *block = &s->blocks[blk];
2130         FF_ALLOC_OR_GOTO(avctx, block->bap, s->channels * sizeof(*block->bap),
2131                          alloc_fail);
2132         FF_ALLOCZ_OR_GOTO(avctx, block->mdct_coef, s->channels * sizeof(*block->mdct_coef),
2133                           alloc_fail);
2134         FF_ALLOCZ_OR_GOTO(avctx, block->exp, s->channels * sizeof(*block->exp),
2135                           alloc_fail);
2136         FF_ALLOCZ_OR_GOTO(avctx, block->grouped_exp, s->channels * sizeof(*block->grouped_exp),
2137                           alloc_fail);
2138         FF_ALLOCZ_OR_GOTO(avctx, block->psd, s->channels * sizeof(*block->psd),
2139                           alloc_fail);
2140         FF_ALLOCZ_OR_GOTO(avctx, block->band_psd, s->channels * sizeof(*block->band_psd),
2141                           alloc_fail);
2142         FF_ALLOCZ_OR_GOTO(avctx, block->mask, s->channels * sizeof(*block->mask),
2143                           alloc_fail);
2144         FF_ALLOCZ_OR_GOTO(avctx, block->qmant, s->channels * sizeof(*block->qmant),
2145                           alloc_fail);
2146
2147         for (ch = 0; ch < s->channels; ch++) {
2148             /* arrangement: block, channel, coeff */
2149             block->bap[ch]         = &s->bap_buffer        [AC3_MAX_COEFS * (blk * s->channels + ch)];
2150             block->mdct_coef[ch]   = &s->mdct_coef_buffer  [AC3_MAX_COEFS * (blk * s->channels + ch)];
2151             block->grouped_exp[ch] = &s->grouped_exp_buffer[128           * (blk * s->channels + ch)];
2152             block->psd[ch]         = &s->psd_buffer        [AC3_MAX_COEFS * (blk * s->channels + ch)];
2153             block->band_psd[ch]    = &s->band_psd_buffer   [64            * (blk * s->channels + ch)];
2154             block->mask[ch]        = &s->mask_buffer       [64            * (blk * s->channels + ch)];
2155             block->qmant[ch]       = &s->qmant_buffer      [AC3_MAX_COEFS * (blk * s->channels + ch)];
2156
2157             /* arrangement: channel, block, coeff */
2158             block->exp[ch]         = &s->exp_buffer        [AC3_MAX_COEFS * (AC3_MAX_BLOCKS * ch + blk)];
2159         }
2160     }
2161
2162     if (CONFIG_AC3ENC_FLOAT) {
2163         FF_ALLOC_OR_GOTO(avctx, s->fixed_coef_buffer, AC3_MAX_BLOCKS * s->channels *
2164                          AC3_MAX_COEFS * sizeof(*s->fixed_coef_buffer), alloc_fail);
2165         for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
2166             AC3Block *block = &s->blocks[blk];
2167             FF_ALLOCZ_OR_GOTO(avctx, block->fixed_coef, s->channels *
2168                               sizeof(*block->fixed_coef), alloc_fail);
2169             for (ch = 0; ch < s->channels; ch++)
2170                 block->fixed_coef[ch] = &s->fixed_coef_buffer[AC3_MAX_COEFS * (blk * s->channels + ch)];
2171         }
2172     } else {
2173         for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
2174             AC3Block *block = &s->blocks[blk];
2175             FF_ALLOCZ_OR_GOTO(avctx, block->fixed_coef, s->channels *
2176                               sizeof(*block->fixed_coef), alloc_fail);
2177             for (ch = 0; ch < s->channels; ch++)
2178                 block->fixed_coef[ch] = (int32_t *)block->mdct_coef[ch];
2179         }
2180     }
2181
2182     return 0;
2183 alloc_fail:
2184     return AVERROR(ENOMEM);
2185 }
2186
2187
2188 /**
2189  * Initialize the encoder.
2190  */
2191 static av_cold int ac3_encode_init(AVCodecContext *avctx)
2192 {
2193     AC3EncodeContext *s = avctx->priv_data;
2194     int ret, frame_size_58;
2195
2196     avctx->frame_size = AC3_FRAME_SIZE;
2197
2198     ff_ac3_common_init();
2199
2200     ret = validate_options(avctx, s);
2201     if (ret)
2202         return ret;
2203
2204     s->bitstream_mode = avctx->audio_service_type;
2205     if (s->bitstream_mode == AV_AUDIO_SERVICE_TYPE_KARAOKE)
2206         s->bitstream_mode = 0x7;
2207
2208     s->frame_size_min  = 2 * ff_ac3_frame_size_tab[s->frame_size_code][s->bit_alloc.sr_code];
2209     s->bits_written    = 0;
2210     s->samples_written = 0;
2211     s->frame_size      = s->frame_size_min;
2212
2213     /* calculate crc_inv for both possible frame sizes */
2214     frame_size_58 = (( s->frame_size    >> 2) + ( s->frame_size    >> 4)) << 1;
2215     s->crc_inv[0] = pow_poly((CRC16_POLY >> 1), (8 * frame_size_58) - 16, CRC16_POLY);
2216     if (s->bit_alloc.sr_code == 1) {
2217         frame_size_58 = (((s->frame_size+2) >> 2) + ((s->frame_size+2) >> 4)) << 1;
2218         s->crc_inv[1] = pow_poly((CRC16_POLY >> 1), (8 * frame_size_58) - 16, CRC16_POLY);
2219     }
2220
2221     set_bandwidth(s);
2222
2223     exponent_init(s);
2224
2225     bit_alloc_init(s);
2226
2227     ret = mdct_init(avctx, &s->mdct, 9);
2228     if (ret)
2229         goto init_fail;
2230
2231     ret = allocate_buffers(avctx);
2232     if (ret)
2233         goto init_fail;
2234
2235     avctx->coded_frame= avcodec_alloc_frame();
2236
2237     dsputil_init(&s->dsp, avctx);
2238     ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT);
2239
2240     dprint_options(avctx);
2241
2242     return 0;
2243 init_fail:
2244     ac3_encode_close(avctx);
2245     return ret;
2246 }