860208d49300e0b7113bca870f23145b925fc23f
[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 size */
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         frame_bits += s->fbw_channels * 2 + 2; /* blksw * c, dithflag * c, dynrnge, cplstre */
828         if (s->channel_mode == AC3_CHMODE_STEREO) {
829             frame_bits++; /* rematstr */
830         }
831         frame_bits += 2 * s->fbw_channels; /* chexpstr[2] * c */
832         if (s->lfe_on)
833             frame_bits++; /* lfeexpstr */
834         frame_bits++; /* baie */
835         frame_bits++; /* snr */
836         frame_bits += 2; /* delta / skip */
837     }
838     frame_bits++; /* cplinu for block 0 */
839     /* bit alloc info */
840     /* sdcycod[2], fdcycod[2], sgaincod[2], dbpbcod[2], floorcod[3] */
841     /* csnroffset[6] */
842     /* (fsnoffset[4] + fgaincod[4]) * c */
843     frame_bits += 2*4 + 3 + 6 + s->channels * (4 + 3);
844
845     /* auxdatae, crcrsv */
846     frame_bits += 2;
847
848     /* CRC */
849     frame_bits += 16;
850
851     s->frame_bits_fixed = frame_bits;
852 }
853
854
855 /**
856  * Initialize bit allocation.
857  * Set default parameter codes and calculate parameter values.
858  */
859 static void bit_alloc_init(AC3EncodeContext *s)
860 {
861     int ch;
862
863     /* init default parameters */
864     s->slow_decay_code = 2;
865     s->fast_decay_code = 1;
866     s->slow_gain_code  = 1;
867     s->db_per_bit_code = 3;
868     s->floor_code      = 7;
869     for (ch = 0; ch < s->channels; ch++)
870         s->fast_gain_code[ch] = 4;
871
872     /* initial snr offset */
873     s->coarse_snr_offset = 40;
874
875     /* compute real values */
876     /* currently none of these values change during encoding, so we can just
877        set them once at initialization */
878     s->bit_alloc.slow_decay = ff_ac3_slow_decay_tab[s->slow_decay_code] >> s->bit_alloc.sr_shift;
879     s->bit_alloc.fast_decay = ff_ac3_fast_decay_tab[s->fast_decay_code] >> s->bit_alloc.sr_shift;
880     s->bit_alloc.slow_gain  = ff_ac3_slow_gain_tab[s->slow_gain_code];
881     s->bit_alloc.db_per_bit = ff_ac3_db_per_bit_tab[s->db_per_bit_code];
882     s->bit_alloc.floor      = ff_ac3_floor_tab[s->floor_code];
883
884     count_frame_bits_fixed(s);
885 }
886
887
888 /**
889  * Count the bits used to encode the frame, minus exponents and mantissas.
890  * Bits based on fixed parameters have already been counted, so now we just
891  * have to add the bits based on parameters that change during encoding.
892  */
893 static void count_frame_bits(AC3EncodeContext *s)
894 {
895     AC3EncOptions *opt = &s->options;
896     int blk, ch;
897     int frame_bits = 0;
898
899     if (opt->audio_production_info)
900         frame_bits += 7;
901     if (s->bitstream_id == 6) {
902         if (opt->extended_bsi_1)
903             frame_bits += 14;
904         if (opt->extended_bsi_2)
905             frame_bits += 14;
906     }
907
908     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
909         /* stereo rematrixing */
910         if (s->channel_mode == AC3_CHMODE_STEREO &&
911             s->blocks[blk].new_rematrixing_strategy) {
912             frame_bits += s->num_rematrixing_bands;
913         }
914
915         for (ch = 0; ch < s->fbw_channels; ch++) {
916             if (s->exp_strategy[ch][blk] != EXP_REUSE)
917                 frame_bits += 6 + 2; /* chbwcod[6], gainrng[2] */
918         }
919     }
920     s->frame_bits = s->frame_bits_fixed + frame_bits;
921 }
922
923
924 /**
925  * Finalize the mantissa bit count by adding in the grouped mantissas.
926  */
927 static int compute_mantissa_size_final(int mant_cnt[5])
928 {
929     // bap=1 : 3 mantissas in 5 bits
930     int bits = (mant_cnt[1] / 3) * 5;
931     // bap=2 : 3 mantissas in 7 bits
932     // bap=4 : 2 mantissas in 7 bits
933     bits += ((mant_cnt[2] / 3) + (mant_cnt[4] >> 1)) * 7;
934     // bap=3 : each mantissa is 3 bits
935     bits += mant_cnt[3] * 3;
936     return bits;
937 }
938
939
940 /**
941  * Calculate masking curve based on the final exponents.
942  * Also calculate the power spectral densities to use in future calculations.
943  */
944 static void bit_alloc_masking(AC3EncodeContext *s)
945 {
946     int blk, ch;
947
948     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
949         AC3Block *block = &s->blocks[blk];
950         for (ch = 0; ch < s->channels; ch++) {
951             /* We only need psd and mask for calculating bap.
952                Since we currently do not calculate bap when exponent
953                strategy is EXP_REUSE we do not need to calculate psd or mask. */
954             if (s->exp_strategy[ch][blk] != EXP_REUSE) {
955                 ff_ac3_bit_alloc_calc_psd(block->exp[ch], 0,
956                                           s->nb_coefs[ch],
957                                           block->psd[ch], block->band_psd[ch]);
958                 ff_ac3_bit_alloc_calc_mask(&s->bit_alloc, block->band_psd[ch],
959                                            0, s->nb_coefs[ch],
960                                            ff_ac3_fast_gain_tab[s->fast_gain_code[ch]],
961                                            ch == s->lfe_channel,
962                                            DBA_NONE, 0, NULL, NULL, NULL,
963                                            block->mask[ch]);
964             }
965         }
966     }
967 }
968
969
970 /**
971  * Ensure that bap for each block and channel point to the current bap_buffer.
972  * They may have been switched during the bit allocation search.
973  */
974 static void reset_block_bap(AC3EncodeContext *s)
975 {
976     int blk, ch;
977     if (s->blocks[0].bap[0] == s->bap_buffer)
978         return;
979     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
980         for (ch = 0; ch < s->channels; ch++) {
981             s->blocks[blk].bap[ch] = &s->bap_buffer[AC3_MAX_COEFS * (blk * s->channels + ch)];
982         }
983     }
984 }
985
986
987 /**
988  * Run the bit allocation with a given SNR offset.
989  * This calculates the bit allocation pointers that will be used to determine
990  * the quantization of each mantissa.
991  * @return the number of bits needed for mantissas if the given SNR offset is
992  *         is used.
993  */
994 static int bit_alloc(AC3EncodeContext *s, int snr_offset)
995 {
996     int blk, ch;
997     int mantissa_bits;
998     int mant_cnt[5];
999
1000     snr_offset = (snr_offset - 240) << 2;
1001
1002     reset_block_bap(s);
1003     mantissa_bits = 0;
1004     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
1005         AC3Block *block = &s->blocks[blk];
1006         AC3Block *ref_block;
1007         // initialize grouped mantissa counts. these are set so that they are
1008         // padded to the next whole group size when bits are counted in
1009         // compute_mantissa_size_final
1010         mant_cnt[0] = mant_cnt[3] = 0;
1011         mant_cnt[1] = mant_cnt[2] = 2;
1012         mant_cnt[4] = 1;
1013         for (ch = 0; ch < s->channels; ch++) {
1014             /* Currently the only bit allocation parameters which vary across
1015                blocks within a frame are the exponent values.  We can take
1016                advantage of that by reusing the bit allocation pointers
1017                whenever we reuse exponents. */
1018             ref_block = block->exp_ref_block[ch];
1019             if (s->exp_strategy[ch][blk] != EXP_REUSE) {
1020                 s->ac3dsp.bit_alloc_calc_bap(ref_block->mask[ch],
1021                                              ref_block->psd[ch], 0,
1022                                              s->nb_coefs[ch], snr_offset,
1023                                              s->bit_alloc.floor, ff_ac3_bap_tab,
1024                                              ref_block->bap[ch]);
1025             }
1026             mantissa_bits += s->ac3dsp.compute_mantissa_size(mant_cnt,
1027                                                              ref_block->bap[ch],
1028                                                              s->nb_coefs[ch]);
1029         }
1030         mantissa_bits += compute_mantissa_size_final(mant_cnt);
1031     }
1032     return mantissa_bits;
1033 }
1034
1035
1036 /**
1037  * Constant bitrate bit allocation search.
1038  * Find the largest SNR offset that will allow data to fit in the frame.
1039  */
1040 static int cbr_bit_allocation(AC3EncodeContext *s)
1041 {
1042     int ch;
1043     int bits_left;
1044     int snr_offset, snr_incr;
1045
1046     bits_left = 8 * s->frame_size - (s->frame_bits + s->exponent_bits);
1047     if (bits_left < 0)
1048         return AVERROR(EINVAL);
1049
1050     snr_offset = s->coarse_snr_offset << 4;
1051
1052     /* if previous frame SNR offset was 1023, check if current frame can also
1053        use SNR offset of 1023. if so, skip the search. */
1054     if ((snr_offset | s->fine_snr_offset[0]) == 1023) {
1055         if (bit_alloc(s, 1023) <= bits_left)
1056             return 0;
1057     }
1058
1059     while (snr_offset >= 0 &&
1060            bit_alloc(s, snr_offset) > bits_left) {
1061         snr_offset -= 64;
1062     }
1063     if (snr_offset < 0)
1064         return AVERROR(EINVAL);
1065
1066     FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
1067     for (snr_incr = 64; snr_incr > 0; snr_incr >>= 2) {
1068         while (snr_offset + snr_incr <= 1023 &&
1069                bit_alloc(s, snr_offset + snr_incr) <= bits_left) {
1070             snr_offset += snr_incr;
1071             FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
1072         }
1073     }
1074     FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
1075     reset_block_bap(s);
1076
1077     s->coarse_snr_offset = snr_offset >> 4;
1078     for (ch = 0; ch < s->channels; ch++)
1079         s->fine_snr_offset[ch] = snr_offset & 0xF;
1080
1081     return 0;
1082 }
1083
1084
1085 /**
1086  * Downgrade exponent strategies to reduce the bits used by the exponents.
1087  * This is a fallback for when bit allocation fails with the normal exponent
1088  * strategies.  Each time this function is run it only downgrades the
1089  * strategy in 1 channel of 1 block.
1090  * @return non-zero if downgrade was unsuccessful
1091  */
1092 static int downgrade_exponents(AC3EncodeContext *s)
1093 {
1094     int ch, blk;
1095
1096     for (ch = 0; ch < s->fbw_channels; ch++) {
1097         for (blk = AC3_MAX_BLOCKS-1; blk >= 0; blk--) {
1098             if (s->exp_strategy[ch][blk] == EXP_D15) {
1099                 s->exp_strategy[ch][blk] = EXP_D25;
1100                 return 0;
1101             }
1102         }
1103     }
1104     for (ch = 0; ch < s->fbw_channels; ch++) {
1105         for (blk = AC3_MAX_BLOCKS-1; blk >= 0; blk--) {
1106             if (s->exp_strategy[ch][blk] == EXP_D25) {
1107                 s->exp_strategy[ch][blk] = EXP_D45;
1108                 return 0;
1109             }
1110         }
1111     }
1112     for (ch = 0; ch < s->fbw_channels; ch++) {
1113         /* block 0 cannot reuse exponents, so only downgrade D45 to REUSE if
1114            the block number > 0 */
1115         for (blk = AC3_MAX_BLOCKS-1; blk > 0; blk--) {
1116             if (s->exp_strategy[ch][blk] > EXP_REUSE) {
1117                 s->exp_strategy[ch][blk] = EXP_REUSE;
1118                 return 0;
1119             }
1120         }
1121     }
1122     return -1;
1123 }
1124
1125
1126 /**
1127  * Perform bit allocation search.
1128  * Finds the SNR offset value that maximizes quality and fits in the specified
1129  * frame size.  Output is the SNR offset and a set of bit allocation pointers
1130  * used to quantize the mantissas.
1131  */
1132 static int compute_bit_allocation(AC3EncodeContext *s)
1133 {
1134     int ret;
1135
1136     count_frame_bits(s);
1137
1138     bit_alloc_masking(s);
1139
1140     ret = cbr_bit_allocation(s);
1141     while (ret) {
1142         /* fallback 1: downgrade exponents */
1143         if (!downgrade_exponents(s)) {
1144             extract_exponents(s);
1145             encode_exponents(s);
1146             group_exponents(s);
1147             ret = compute_bit_allocation(s);
1148             continue;
1149         }
1150
1151         /* fallbacks were not enough... */
1152         break;
1153     }
1154
1155     return ret;
1156 }
1157
1158
1159 /**
1160  * Symmetric quantization on 'levels' levels.
1161  */
1162 static inline int sym_quant(int c, int e, int levels)
1163 {
1164     int v = (((levels * c) >> (24 - e)) + levels) >> 1;
1165     av_assert2(v >= 0 && v < levels);
1166     return v;
1167 }
1168
1169
1170 /**
1171  * Asymmetric quantization on 2^qbits levels.
1172  */
1173 static inline int asym_quant(int c, int e, int qbits)
1174 {
1175     int lshift, m, v;
1176
1177     lshift = e + qbits - 24;
1178     if (lshift >= 0)
1179         v = c << lshift;
1180     else
1181         v = c >> (-lshift);
1182     /* rounding */
1183     v = (v + 1) >> 1;
1184     m = (1 << (qbits-1));
1185     if (v >= m)
1186         v = m - 1;
1187     av_assert2(v >= -m);
1188     return v & ((1 << qbits)-1);
1189 }
1190
1191
1192 /**
1193  * Quantize a set of mantissas for a single channel in a single block.
1194  */
1195 static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef,
1196                                       uint8_t *exp,
1197                                       uint8_t *bap, uint16_t *qmant, int n)
1198 {
1199     int i;
1200
1201     for (i = 0; i < n; i++) {
1202         int v;
1203         int c = fixed_coef[i];
1204         int e = exp[i];
1205         int b = bap[i];
1206         switch (b) {
1207         case 0:
1208             v = 0;
1209             break;
1210         case 1:
1211             v = sym_quant(c, e, 3);
1212             switch (s->mant1_cnt) {
1213             case 0:
1214                 s->qmant1_ptr = &qmant[i];
1215                 v = 9 * v;
1216                 s->mant1_cnt = 1;
1217                 break;
1218             case 1:
1219                 *s->qmant1_ptr += 3 * v;
1220                 s->mant1_cnt = 2;
1221                 v = 128;
1222                 break;
1223             default:
1224                 *s->qmant1_ptr += v;
1225                 s->mant1_cnt = 0;
1226                 v = 128;
1227                 break;
1228             }
1229             break;
1230         case 2:
1231             v = sym_quant(c, e, 5);
1232             switch (s->mant2_cnt) {
1233             case 0:
1234                 s->qmant2_ptr = &qmant[i];
1235                 v = 25 * v;
1236                 s->mant2_cnt = 1;
1237                 break;
1238             case 1:
1239                 *s->qmant2_ptr += 5 * v;
1240                 s->mant2_cnt = 2;
1241                 v = 128;
1242                 break;
1243             default:
1244                 *s->qmant2_ptr += v;
1245                 s->mant2_cnt = 0;
1246                 v = 128;
1247                 break;
1248             }
1249             break;
1250         case 3:
1251             v = sym_quant(c, e, 7);
1252             break;
1253         case 4:
1254             v = sym_quant(c, e, 11);
1255             switch (s->mant4_cnt) {
1256             case 0:
1257                 s->qmant4_ptr = &qmant[i];
1258                 v = 11 * v;
1259                 s->mant4_cnt = 1;
1260                 break;
1261             default:
1262                 *s->qmant4_ptr += v;
1263                 s->mant4_cnt = 0;
1264                 v = 128;
1265                 break;
1266             }
1267             break;
1268         case 5:
1269             v = sym_quant(c, e, 15);
1270             break;
1271         case 14:
1272             v = asym_quant(c, e, 14);
1273             break;
1274         case 15:
1275             v = asym_quant(c, e, 16);
1276             break;
1277         default:
1278             v = asym_quant(c, e, b - 1);
1279             break;
1280         }
1281         qmant[i] = v;
1282     }
1283 }
1284
1285
1286 /**
1287  * Quantize mantissas using coefficients, exponents, and bit allocation pointers.
1288  */
1289 static void quantize_mantissas(AC3EncodeContext *s)
1290 {
1291     int blk, ch;
1292
1293
1294     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
1295         AC3Block *block = &s->blocks[blk];
1296         AC3Block *ref_block;
1297         AC3Mant m = { 0 };
1298
1299         for (ch = 0; ch < s->channels; ch++) {
1300             ref_block = block->exp_ref_block[ch];
1301             quantize_mantissas_blk_ch(&m, block->fixed_coef[ch],
1302                                       ref_block->exp[ch], ref_block->bap[ch],
1303                                       block->qmant[ch], s->nb_coefs[ch]);
1304         }
1305     }
1306 }
1307
1308
1309 /**
1310  * Write the AC-3 frame header to the output bitstream.
1311  */
1312 static void output_frame_header(AC3EncodeContext *s)
1313 {
1314     AC3EncOptions *opt = &s->options;
1315
1316     put_bits(&s->pb, 16, 0x0b77);   /* frame header */
1317     put_bits(&s->pb, 16, 0);        /* crc1: will be filled later */
1318     put_bits(&s->pb, 2,  s->bit_alloc.sr_code);
1319     put_bits(&s->pb, 6,  s->frame_size_code + (s->frame_size - s->frame_size_min) / 2);
1320     put_bits(&s->pb, 5,  s->bitstream_id);
1321     put_bits(&s->pb, 3,  s->bitstream_mode);
1322     put_bits(&s->pb, 3,  s->channel_mode);
1323     if ((s->channel_mode & 0x01) && s->channel_mode != AC3_CHMODE_MONO)
1324         put_bits(&s->pb, 2, s->center_mix_level);
1325     if (s->channel_mode & 0x04)
1326         put_bits(&s->pb, 2, s->surround_mix_level);
1327     if (s->channel_mode == AC3_CHMODE_STEREO)
1328         put_bits(&s->pb, 2, opt->dolby_surround_mode);
1329     put_bits(&s->pb, 1, s->lfe_on); /* LFE */
1330     put_bits(&s->pb, 5, -opt->dialogue_level);
1331     put_bits(&s->pb, 1, 0);         /* no compression control word */
1332     put_bits(&s->pb, 1, 0);         /* no lang code */
1333     put_bits(&s->pb, 1, opt->audio_production_info);
1334     if (opt->audio_production_info) {
1335         put_bits(&s->pb, 5, opt->mixing_level - 80);
1336         put_bits(&s->pb, 2, opt->room_type);
1337     }
1338     put_bits(&s->pb, 1, opt->copyright);
1339     put_bits(&s->pb, 1, opt->original);
1340     if (s->bitstream_id == 6) {
1341         /* alternate bit stream syntax */
1342         put_bits(&s->pb, 1, opt->extended_bsi_1);
1343         if (opt->extended_bsi_1) {
1344             put_bits(&s->pb, 2, opt->preferred_stereo_downmix);
1345             put_bits(&s->pb, 3, s->ltrt_center_mix_level);
1346             put_bits(&s->pb, 3, s->ltrt_surround_mix_level);
1347             put_bits(&s->pb, 3, s->loro_center_mix_level);
1348             put_bits(&s->pb, 3, s->loro_surround_mix_level);
1349         }
1350         put_bits(&s->pb, 1, opt->extended_bsi_2);
1351         if (opt->extended_bsi_2) {
1352             put_bits(&s->pb, 2, opt->dolby_surround_ex_mode);
1353             put_bits(&s->pb, 2, opt->dolby_headphone_mode);
1354             put_bits(&s->pb, 1, opt->ad_converter_type);
1355             put_bits(&s->pb, 9, 0);     /* xbsi2 and encinfo : reserved */
1356         }
1357     } else {
1358     put_bits(&s->pb, 1, 0);         /* no time code 1 */
1359     put_bits(&s->pb, 1, 0);         /* no time code 2 */
1360     }
1361     put_bits(&s->pb, 1, 0);         /* no additional bit stream info */
1362 }
1363
1364
1365 /**
1366  * Write one audio block to the output bitstream.
1367  */
1368 static void output_audio_block(AC3EncodeContext *s, int blk)
1369 {
1370     int ch, i, baie, rbnd;
1371     AC3Block *block = &s->blocks[blk];
1372
1373     /* block switching */
1374     for (ch = 0; ch < s->fbw_channels; ch++)
1375         put_bits(&s->pb, 1, 0);
1376
1377     /* dither flags */
1378     for (ch = 0; ch < s->fbw_channels; ch++)
1379         put_bits(&s->pb, 1, 1);
1380
1381     /* dynamic range codes */
1382     put_bits(&s->pb, 1, 0);
1383
1384     /* channel coupling */
1385     if (!blk) {
1386         put_bits(&s->pb, 1, 1); /* coupling strategy present */
1387         put_bits(&s->pb, 1, 0); /* no coupling strategy */
1388     } else {
1389         put_bits(&s->pb, 1, 0); /* no new coupling strategy */
1390     }
1391
1392     /* stereo rematrixing */
1393     if (s->channel_mode == AC3_CHMODE_STEREO) {
1394         put_bits(&s->pb, 1, block->new_rematrixing_strategy);
1395         if (block->new_rematrixing_strategy) {
1396             /* rematrixing flags */
1397             for (rbnd = 0; rbnd < s->num_rematrixing_bands; rbnd++)
1398                 put_bits(&s->pb, 1, block->rematrixing_flags[rbnd]);
1399         }
1400     }
1401
1402     /* exponent strategy */
1403     for (ch = 0; ch < s->fbw_channels; ch++)
1404         put_bits(&s->pb, 2, s->exp_strategy[ch][blk]);
1405     if (s->lfe_on)
1406         put_bits(&s->pb, 1, s->exp_strategy[s->lfe_channel][blk]);
1407
1408     /* bandwidth */
1409     for (ch = 0; ch < s->fbw_channels; ch++) {
1410         if (s->exp_strategy[ch][blk] != EXP_REUSE)
1411             put_bits(&s->pb, 6, s->bandwidth_code);
1412     }
1413
1414     /* exponents */
1415     for (ch = 0; ch < s->channels; ch++) {
1416         int nb_groups;
1417
1418         if (s->exp_strategy[ch][blk] == EXP_REUSE)
1419             continue;
1420
1421         /* DC exponent */
1422         put_bits(&s->pb, 4, block->grouped_exp[ch][0]);
1423
1424         /* exponent groups */
1425         nb_groups = exponent_group_tab[s->exp_strategy[ch][blk]-1][s->nb_coefs[ch]];
1426         for (i = 1; i <= nb_groups; i++)
1427             put_bits(&s->pb, 7, block->grouped_exp[ch][i]);
1428
1429         /* gain range info */
1430         if (ch != s->lfe_channel)
1431             put_bits(&s->pb, 2, 0);
1432     }
1433
1434     /* bit allocation info */
1435     baie = (blk == 0);
1436     put_bits(&s->pb, 1, baie);
1437     if (baie) {
1438         put_bits(&s->pb, 2, s->slow_decay_code);
1439         put_bits(&s->pb, 2, s->fast_decay_code);
1440         put_bits(&s->pb, 2, s->slow_gain_code);
1441         put_bits(&s->pb, 2, s->db_per_bit_code);
1442         put_bits(&s->pb, 3, s->floor_code);
1443     }
1444
1445     /* snr offset */
1446     put_bits(&s->pb, 1, baie);
1447     if (baie) {
1448         put_bits(&s->pb, 6, s->coarse_snr_offset);
1449         for (ch = 0; ch < s->channels; ch++) {
1450             put_bits(&s->pb, 4, s->fine_snr_offset[ch]);
1451             put_bits(&s->pb, 3, s->fast_gain_code[ch]);
1452         }
1453     }
1454
1455     put_bits(&s->pb, 1, 0); /* no delta bit allocation */
1456     put_bits(&s->pb, 1, 0); /* no data to skip */
1457
1458     /* mantissas */
1459     for (ch = 0; ch < s->channels; ch++) {
1460         int b, q;
1461         AC3Block *ref_block = block->exp_ref_block[ch];
1462         for (i = 0; i < s->nb_coefs[ch]; i++) {
1463             q = block->qmant[ch][i];
1464             b = ref_block->bap[ch][i];
1465             switch (b) {
1466             case 0:                                         break;
1467             case 1: if (q != 128) put_bits(&s->pb,   5, q); break;
1468             case 2: if (q != 128) put_bits(&s->pb,   7, q); break;
1469             case 3:               put_bits(&s->pb,   3, q); break;
1470             case 4: if (q != 128) put_bits(&s->pb,   7, q); break;
1471             case 14:              put_bits(&s->pb,  14, q); break;
1472             case 15:              put_bits(&s->pb,  16, q); break;
1473             default:              put_bits(&s->pb, b-1, q); break;
1474             }
1475         }
1476     }
1477 }
1478
1479
1480 /** CRC-16 Polynomial */
1481 #define CRC16_POLY ((1 << 0) | (1 << 2) | (1 << 15) | (1 << 16))
1482
1483
1484 static unsigned int mul_poly(unsigned int a, unsigned int b, unsigned int poly)
1485 {
1486     unsigned int c;
1487
1488     c = 0;
1489     while (a) {
1490         if (a & 1)
1491             c ^= b;
1492         a = a >> 1;
1493         b = b << 1;
1494         if (b & (1 << 16))
1495             b ^= poly;
1496     }
1497     return c;
1498 }
1499
1500
1501 static unsigned int pow_poly(unsigned int a, unsigned int n, unsigned int poly)
1502 {
1503     unsigned int r;
1504     r = 1;
1505     while (n) {
1506         if (n & 1)
1507             r = mul_poly(r, a, poly);
1508         a = mul_poly(a, a, poly);
1509         n >>= 1;
1510     }
1511     return r;
1512 }
1513
1514
1515 /**
1516  * Fill the end of the frame with 0's and compute the two CRCs.
1517  */
1518 static void output_frame_end(AC3EncodeContext *s)
1519 {
1520     const AVCRC *crc_ctx = av_crc_get_table(AV_CRC_16_ANSI);
1521     int frame_size_58, pad_bytes, crc1, crc2_partial, crc2, crc_inv;
1522     uint8_t *frame;
1523
1524     frame_size_58 = ((s->frame_size >> 2) + (s->frame_size >> 4)) << 1;
1525
1526     /* pad the remainder of the frame with zeros */
1527     av_assert2(s->frame_size * 8 - put_bits_count(&s->pb) >= 18);
1528     flush_put_bits(&s->pb);
1529     frame = s->pb.buf;
1530     pad_bytes = s->frame_size - (put_bits_ptr(&s->pb) - frame) - 2;
1531     av_assert2(pad_bytes >= 0);
1532     if (pad_bytes > 0)
1533         memset(put_bits_ptr(&s->pb), 0, pad_bytes);
1534
1535     /* compute crc1 */
1536     /* this is not so easy because it is at the beginning of the data... */
1537     crc1    = av_bswap16(av_crc(crc_ctx, 0, frame + 4, frame_size_58 - 4));
1538     crc_inv = s->crc_inv[s->frame_size > s->frame_size_min];
1539     crc1    = mul_poly(crc_inv, crc1, CRC16_POLY);
1540     AV_WB16(frame + 2, crc1);
1541
1542     /* compute crc2 */
1543     crc2_partial = av_crc(crc_ctx, 0, frame + frame_size_58,
1544                           s->frame_size - frame_size_58 - 3);
1545     crc2 = av_crc(crc_ctx, crc2_partial, frame + s->frame_size - 3, 1);
1546     /* ensure crc2 does not match sync word by flipping crcrsv bit if needed */
1547     if (crc2 == 0x770B) {
1548         frame[s->frame_size - 3] ^= 0x1;
1549         crc2 = av_crc(crc_ctx, crc2_partial, frame + s->frame_size - 3, 1);
1550     }
1551     crc2 = av_bswap16(crc2);
1552     AV_WB16(frame + s->frame_size - 2, crc2);
1553 }
1554
1555
1556 /**
1557  * Write the frame to the output bitstream.
1558  */
1559 static void output_frame(AC3EncodeContext *s, unsigned char *frame)
1560 {
1561     int blk;
1562
1563     init_put_bits(&s->pb, frame, AC3_MAX_CODED_FRAME_SIZE);
1564
1565     output_frame_header(s);
1566
1567     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++)
1568         output_audio_block(s, blk);
1569
1570     output_frame_end(s);
1571 }
1572
1573
1574 static void dprint_options(AVCodecContext *avctx)
1575 {
1576 #ifdef DEBUG
1577     AC3EncodeContext *s = avctx->priv_data;
1578     AC3EncOptions *opt = &s->options;
1579     char strbuf[32];
1580
1581     switch (s->bitstream_id) {
1582     case  6:  av_strlcpy(strbuf, "AC-3 (alt syntax)", 32);      break;
1583     case  8:  av_strlcpy(strbuf, "AC-3 (standard)", 32);        break;
1584     case  9:  av_strlcpy(strbuf, "AC-3 (dnet half-rate)", 32);  break;
1585     case 10:  av_strlcpy(strbuf, "AC-3 (dnet quater-rate", 32); break;
1586     default: snprintf(strbuf, 32, "ERROR");
1587     }
1588     av_dlog(avctx, "bitstream_id: %s (%d)\n", strbuf, s->bitstream_id);
1589     av_dlog(avctx, "sample_fmt: %s\n", av_get_sample_fmt_name(avctx->sample_fmt));
1590     av_get_channel_layout_string(strbuf, 32, s->channels, avctx->channel_layout);
1591     av_dlog(avctx, "channel_layout: %s\n", strbuf);
1592     av_dlog(avctx, "sample_rate: %d\n", s->sample_rate);
1593     av_dlog(avctx, "bit_rate: %d\n", s->bit_rate);
1594     if (s->cutoff)
1595         av_dlog(avctx, "cutoff: %d\n", s->cutoff);
1596
1597     av_dlog(avctx, "per_frame_metadata: %s\n",
1598             opt->allow_per_frame_metadata?"on":"off");
1599     if (s->has_center)
1600         av_dlog(avctx, "center_mixlev: %0.3f (%d)\n", opt->center_mix_level,
1601                 s->center_mix_level);
1602     else
1603         av_dlog(avctx, "center_mixlev: {not written}\n");
1604     if (s->has_surround)
1605         av_dlog(avctx, "surround_mixlev: %0.3f (%d)\n", opt->surround_mix_level,
1606                 s->surround_mix_level);
1607     else
1608         av_dlog(avctx, "surround_mixlev: {not written}\n");
1609     if (opt->audio_production_info) {
1610         av_dlog(avctx, "mixing_level: %ddB\n", opt->mixing_level);
1611         switch (opt->room_type) {
1612         case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1613         case 1:  av_strlcpy(strbuf, "large", 32);        break;
1614         case 2:  av_strlcpy(strbuf, "small", 32);        break;
1615         default: snprintf(strbuf, 32, "ERROR (%d)", opt->room_type);
1616         }
1617         av_dlog(avctx, "room_type: %s\n", strbuf);
1618     } else {
1619         av_dlog(avctx, "mixing_level: {not written}\n");
1620         av_dlog(avctx, "room_type: {not written}\n");
1621     }
1622     av_dlog(avctx, "copyright: %s\n", opt->copyright?"on":"off");
1623     av_dlog(avctx, "dialnorm: %ddB\n", opt->dialogue_level);
1624     if (s->channel_mode == AC3_CHMODE_STEREO) {
1625         switch (opt->dolby_surround_mode) {
1626         case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1627         case 1:  av_strlcpy(strbuf, "on", 32);           break;
1628         case 2:  av_strlcpy(strbuf, "off", 32);          break;
1629         default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_surround_mode);
1630         }
1631         av_dlog(avctx, "dsur_mode: %s\n", strbuf);
1632     } else {
1633         av_dlog(avctx, "dsur_mode: {not written}\n");
1634     }
1635     av_dlog(avctx, "original: %s\n", opt->original?"on":"off");
1636
1637     if (s->bitstream_id == 6) {
1638         if (opt->extended_bsi_1) {
1639             switch (opt->preferred_stereo_downmix) {
1640             case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1641             case 1:  av_strlcpy(strbuf, "ltrt", 32);         break;
1642             case 2:  av_strlcpy(strbuf, "loro", 32);         break;
1643             default: snprintf(strbuf, 32, "ERROR (%d)", opt->preferred_stereo_downmix);
1644             }
1645             av_dlog(avctx, "dmix_mode: %s\n", strbuf);
1646             av_dlog(avctx, "ltrt_cmixlev: %0.3f (%d)\n",
1647                     opt->ltrt_center_mix_level, s->ltrt_center_mix_level);
1648             av_dlog(avctx, "ltrt_surmixlev: %0.3f (%d)\n",
1649                     opt->ltrt_surround_mix_level, s->ltrt_surround_mix_level);
1650             av_dlog(avctx, "loro_cmixlev: %0.3f (%d)\n",
1651                     opt->loro_center_mix_level, s->loro_center_mix_level);
1652             av_dlog(avctx, "loro_surmixlev: %0.3f (%d)\n",
1653                     opt->loro_surround_mix_level, s->loro_surround_mix_level);
1654         } else {
1655             av_dlog(avctx, "extended bitstream info 1: {not written}\n");
1656         }
1657         if (opt->extended_bsi_2) {
1658             switch (opt->dolby_surround_ex_mode) {
1659             case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1660             case 1:  av_strlcpy(strbuf, "on", 32);           break;
1661             case 2:  av_strlcpy(strbuf, "off", 32);          break;
1662             default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_surround_ex_mode);
1663             }
1664             av_dlog(avctx, "dsurex_mode: %s\n", strbuf);
1665             switch (opt->dolby_headphone_mode) {
1666             case 0:  av_strlcpy(strbuf, "notindicated", 32); break;
1667             case 1:  av_strlcpy(strbuf, "on", 32);           break;
1668             case 2:  av_strlcpy(strbuf, "off", 32);          break;
1669             default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_headphone_mode);
1670             }
1671             av_dlog(avctx, "dheadphone_mode: %s\n", strbuf);
1672
1673             switch (opt->ad_converter_type) {
1674             case 0:  av_strlcpy(strbuf, "standard", 32); break;
1675             case 1:  av_strlcpy(strbuf, "hdcd", 32);     break;
1676             default: snprintf(strbuf, 32, "ERROR (%d)", opt->ad_converter_type);
1677             }
1678             av_dlog(avctx, "ad_conv_type: %s\n", strbuf);
1679         } else {
1680             av_dlog(avctx, "extended bitstream info 2: {not written}\n");
1681         }
1682     }
1683 #endif
1684 }
1685
1686
1687 #define FLT_OPTION_THRESHOLD 0.01
1688
1689 static int validate_float_option(float v, const float *v_list, int v_list_size)
1690 {
1691     int i;
1692
1693     for (i = 0; i < v_list_size; i++) {
1694         if (v < (v_list[i] + FLT_OPTION_THRESHOLD) &&
1695             v > (v_list[i] - FLT_OPTION_THRESHOLD))
1696             break;
1697     }
1698     if (i == v_list_size)
1699         return -1;
1700
1701     return i;
1702 }
1703
1704
1705 static void validate_mix_level(void *log_ctx, const char *opt_name,
1706                                float *opt_param, const float *list,
1707                                int list_size, int default_value, int min_value,
1708                                int *ctx_param)
1709 {
1710     int mixlev = validate_float_option(*opt_param, list, list_size);
1711     if (mixlev < min_value) {
1712         mixlev = default_value;
1713         if (*opt_param >= 0.0) {
1714             av_log(log_ctx, AV_LOG_WARNING, "requested %s is not valid. using "
1715                    "default value: %0.3f\n", opt_name, list[mixlev]);
1716         }
1717     }
1718     *opt_param = list[mixlev];
1719     *ctx_param = mixlev;
1720 }
1721
1722
1723 /**
1724  * Validate metadata options as set by AVOption system.
1725  * These values can optionally be changed per-frame.
1726  */
1727 static int validate_metadata(AVCodecContext *avctx)
1728 {
1729     AC3EncodeContext *s = avctx->priv_data;
1730     AC3EncOptions *opt = &s->options;
1731
1732     /* validate mixing levels */
1733     if (s->has_center) {
1734         validate_mix_level(avctx, "center_mix_level", &opt->center_mix_level,
1735                            cmixlev_options, CMIXLEV_NUM_OPTIONS, 1, 0,
1736                            &s->center_mix_level);
1737     }
1738     if (s->has_surround) {
1739         validate_mix_level(avctx, "surround_mix_level", &opt->surround_mix_level,
1740                            surmixlev_options, SURMIXLEV_NUM_OPTIONS, 1, 0,
1741                            &s->surround_mix_level);
1742     }
1743
1744     /* set audio production info flag */
1745     if (opt->mixing_level >= 0 || opt->room_type >= 0) {
1746         if (opt->mixing_level < 0) {
1747             av_log(avctx, AV_LOG_ERROR, "mixing_level must be set if "
1748                    "room_type is set\n");
1749             return AVERROR(EINVAL);
1750         }
1751         if (opt->mixing_level < 80) {
1752             av_log(avctx, AV_LOG_ERROR, "invalid mixing level. must be between "
1753                    "80dB and 111dB\n");
1754             return AVERROR(EINVAL);
1755         }
1756         /* default room type */
1757         if (opt->room_type < 0)
1758             opt->room_type = 0;
1759         opt->audio_production_info = 1;
1760     } else {
1761         opt->audio_production_info = 0;
1762     }
1763
1764     /* set extended bsi 1 flag */
1765     if ((s->has_center || s->has_surround) &&
1766         (opt->preferred_stereo_downmix >= 0 ||
1767          opt->ltrt_center_mix_level   >= 0 ||
1768          opt->ltrt_surround_mix_level >= 0 ||
1769          opt->loro_center_mix_level   >= 0 ||
1770          opt->loro_surround_mix_level >= 0)) {
1771         /* default preferred stereo downmix */
1772         if (opt->preferred_stereo_downmix < 0)
1773             opt->preferred_stereo_downmix = 0;
1774         /* validate Lt/Rt center mix level */
1775         validate_mix_level(avctx, "ltrt_center_mix_level",
1776                            &opt->ltrt_center_mix_level, extmixlev_options,
1777                            EXTMIXLEV_NUM_OPTIONS, 5, 0,
1778                            &s->ltrt_center_mix_level);
1779         /* validate Lt/Rt surround mix level */
1780         validate_mix_level(avctx, "ltrt_surround_mix_level",
1781                            &opt->ltrt_surround_mix_level, extmixlev_options,
1782                            EXTMIXLEV_NUM_OPTIONS, 6, 3,
1783                            &s->ltrt_surround_mix_level);
1784         /* validate Lo/Ro center mix level */
1785         validate_mix_level(avctx, "loro_center_mix_level",
1786                            &opt->loro_center_mix_level, extmixlev_options,
1787                            EXTMIXLEV_NUM_OPTIONS, 5, 0,
1788                            &s->loro_center_mix_level);
1789         /* validate Lo/Ro surround mix level */
1790         validate_mix_level(avctx, "loro_surround_mix_level",
1791                            &opt->loro_surround_mix_level, extmixlev_options,
1792                            EXTMIXLEV_NUM_OPTIONS, 6, 3,
1793                            &s->loro_surround_mix_level);
1794         opt->extended_bsi_1 = 1;
1795     } else {
1796         opt->extended_bsi_1 = 0;
1797     }
1798
1799     /* set extended bsi 2 flag */
1800     if (opt->dolby_surround_ex_mode >= 0 ||
1801         opt->dolby_headphone_mode   >= 0 ||
1802         opt->ad_converter_type      >= 0) {
1803         /* default dolby surround ex mode */
1804         if (opt->dolby_surround_ex_mode < 0)
1805             opt->dolby_surround_ex_mode = 0;
1806         /* default dolby headphone mode */
1807         if (opt->dolby_headphone_mode < 0)
1808             opt->dolby_headphone_mode = 0;
1809         /* default A/D converter type */
1810         if (opt->ad_converter_type < 0)
1811             opt->ad_converter_type = 0;
1812         opt->extended_bsi_2 = 1;
1813     } else {
1814         opt->extended_bsi_2 = 0;
1815     }
1816
1817     /* set bitstream id for alternate bitstream syntax */
1818     if (opt->extended_bsi_1 || opt->extended_bsi_2) {
1819         if (s->bitstream_id > 8 && s->bitstream_id < 11) {
1820             static int warn_once = 1;
1821             if (warn_once) {
1822                 av_log(avctx, AV_LOG_WARNING, "alternate bitstream syntax is "
1823                        "not compatible with reduced samplerates. writing of "
1824                        "extended bitstream information will be disabled.\n");
1825                 warn_once = 0;
1826             }
1827         } else {
1828             s->bitstream_id = 6;
1829         }
1830     }
1831
1832     return 0;
1833 }
1834
1835
1836 /**
1837  * Encode a single AC-3 frame.
1838  */
1839 static int ac3_encode_frame(AVCodecContext *avctx, unsigned char *frame,
1840                             int buf_size, void *data)
1841 {
1842     AC3EncodeContext *s = avctx->priv_data;
1843     const SampleType *samples = data;
1844     int ret;
1845
1846     if (s->options.allow_per_frame_metadata) {
1847         ret = validate_metadata(avctx);
1848         if (ret)
1849             return ret;
1850     }
1851
1852     if (s->bit_alloc.sr_code == 1)
1853         adjust_frame_size(s);
1854
1855     deinterleave_input_samples(s, samples);
1856
1857     apply_mdct(s);
1858
1859     scale_coefficients(s);
1860
1861     compute_rematrixing_strategy(s);
1862
1863     apply_rematrixing(s);
1864
1865     process_exponents(s);
1866
1867     ret = compute_bit_allocation(s);
1868     if (ret) {
1869         av_log(avctx, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n");
1870         return ret;
1871     }
1872
1873     quantize_mantissas(s);
1874
1875     output_frame(s, frame);
1876
1877     return s->frame_size;
1878 }
1879
1880
1881 /**
1882  * Finalize encoding and free any memory allocated by the encoder.
1883  */
1884 static av_cold int ac3_encode_close(AVCodecContext *avctx)
1885 {
1886     int blk, ch;
1887     AC3EncodeContext *s = avctx->priv_data;
1888
1889     for (ch = 0; ch < s->channels; ch++)
1890         av_freep(&s->planar_samples[ch]);
1891     av_freep(&s->planar_samples);
1892     av_freep(&s->bap_buffer);
1893     av_freep(&s->bap1_buffer);
1894     av_freep(&s->mdct_coef_buffer);
1895     av_freep(&s->fixed_coef_buffer);
1896     av_freep(&s->exp_buffer);
1897     av_freep(&s->grouped_exp_buffer);
1898     av_freep(&s->psd_buffer);
1899     av_freep(&s->band_psd_buffer);
1900     av_freep(&s->mask_buffer);
1901     av_freep(&s->qmant_buffer);
1902     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
1903         AC3Block *block = &s->blocks[blk];
1904         av_freep(&block->bap);
1905         av_freep(&block->mdct_coef);
1906         av_freep(&block->fixed_coef);
1907         av_freep(&block->exp);
1908         av_freep(&block->grouped_exp);
1909         av_freep(&block->psd);
1910         av_freep(&block->band_psd);
1911         av_freep(&block->mask);
1912         av_freep(&block->qmant);
1913     }
1914
1915     mdct_end(&s->mdct);
1916
1917     av_freep(&avctx->coded_frame);
1918     return 0;
1919 }
1920
1921
1922 /**
1923  * Set channel information during initialization.
1924  */
1925 static av_cold int set_channel_info(AC3EncodeContext *s, int channels,
1926                                     int64_t *channel_layout)
1927 {
1928     int ch_layout;
1929
1930     if (channels < 1 || channels > AC3_MAX_CHANNELS)
1931         return AVERROR(EINVAL);
1932     if ((uint64_t)*channel_layout > 0x7FF)
1933         return AVERROR(EINVAL);
1934     ch_layout = *channel_layout;
1935     if (!ch_layout)
1936         ch_layout = avcodec_guess_channel_layout(channels, CODEC_ID_AC3, NULL);
1937
1938     s->lfe_on       = !!(ch_layout & AV_CH_LOW_FREQUENCY);
1939     s->channels     = channels;
1940     s->fbw_channels = channels - s->lfe_on;
1941     s->lfe_channel  = s->lfe_on ? s->fbw_channels : -1;
1942     if (s->lfe_on)
1943         ch_layout -= AV_CH_LOW_FREQUENCY;
1944
1945     switch (ch_layout) {
1946     case AV_CH_LAYOUT_MONO:           s->channel_mode = AC3_CHMODE_MONO;   break;
1947     case AV_CH_LAYOUT_STEREO:         s->channel_mode = AC3_CHMODE_STEREO; break;
1948     case AV_CH_LAYOUT_SURROUND:       s->channel_mode = AC3_CHMODE_3F;     break;
1949     case AV_CH_LAYOUT_2_1:            s->channel_mode = AC3_CHMODE_2F1R;   break;
1950     case AV_CH_LAYOUT_4POINT0:        s->channel_mode = AC3_CHMODE_3F1R;   break;
1951     case AV_CH_LAYOUT_QUAD:
1952     case AV_CH_LAYOUT_2_2:            s->channel_mode = AC3_CHMODE_2F2R;   break;
1953     case AV_CH_LAYOUT_5POINT0:
1954     case AV_CH_LAYOUT_5POINT0_BACK:   s->channel_mode = AC3_CHMODE_3F2R;   break;
1955     default:
1956         return AVERROR(EINVAL);
1957     }
1958     s->has_center   = (s->channel_mode & 0x01) && s->channel_mode != AC3_CHMODE_MONO;
1959     s->has_surround =  s->channel_mode & 0x04;
1960
1961     s->channel_map  = ff_ac3_enc_channel_map[s->channel_mode][s->lfe_on];
1962     *channel_layout = ch_layout;
1963     if (s->lfe_on)
1964         *channel_layout |= AV_CH_LOW_FREQUENCY;
1965
1966     return 0;
1967 }
1968
1969
1970 static av_cold int validate_options(AVCodecContext *avctx, AC3EncodeContext *s)
1971 {
1972     int i, ret;
1973
1974     /* validate channel layout */
1975     if (!avctx->channel_layout) {
1976         av_log(avctx, AV_LOG_WARNING, "No channel layout specified. The "
1977                                       "encoder will guess the layout, but it "
1978                                       "might be incorrect.\n");
1979     }
1980     ret = set_channel_info(s, avctx->channels, &avctx->channel_layout);
1981     if (ret) {
1982         av_log(avctx, AV_LOG_ERROR, "invalid channel layout\n");
1983         return ret;
1984     }
1985
1986     /* validate sample rate */
1987     for (i = 0; i < 9; i++) {
1988         if ((ff_ac3_sample_rate_tab[i / 3] >> (i % 3)) == avctx->sample_rate)
1989             break;
1990     }
1991     if (i == 9) {
1992         av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1993         return AVERROR(EINVAL);
1994     }
1995     s->sample_rate        = avctx->sample_rate;
1996     s->bit_alloc.sr_shift = i % 3;
1997     s->bit_alloc.sr_code  = i / 3;
1998     s->bitstream_id       = 8 + s->bit_alloc.sr_shift;
1999
2000     /* validate bit rate */
2001     for (i = 0; i < 19; i++) {
2002         if ((ff_ac3_bitrate_tab[i] >> s->bit_alloc.sr_shift)*1000 == avctx->bit_rate)
2003             break;
2004     }
2005     if (i == 19) {
2006         av_log(avctx, AV_LOG_ERROR, "invalid bit rate\n");
2007         return AVERROR(EINVAL);
2008     }
2009     s->bit_rate        = avctx->bit_rate;
2010     s->frame_size_code = i << 1;
2011
2012     /* validate cutoff */
2013     if (avctx->cutoff < 0) {
2014         av_log(avctx, AV_LOG_ERROR, "invalid cutoff frequency\n");
2015         return AVERROR(EINVAL);
2016     }
2017     s->cutoff = avctx->cutoff;
2018     if (s->cutoff > (s->sample_rate >> 1))
2019         s->cutoff = s->sample_rate >> 1;
2020
2021     /* validate audio service type / channels combination */
2022     if ((avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_KARAOKE &&
2023          avctx->channels == 1) ||
2024         ((avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_COMMENTARY ||
2025           avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_EMERGENCY  ||
2026           avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_VOICE_OVER)
2027          && avctx->channels > 1)) {
2028         av_log(avctx, AV_LOG_ERROR, "invalid audio service type for the "
2029                                     "specified number of channels\n");
2030         return AVERROR(EINVAL);
2031     }
2032
2033     ret = validate_metadata(avctx);
2034     if (ret)
2035         return ret;
2036
2037     s->rematrixing_enabled = s->options.stereo_rematrixing &&
2038                              (s->channel_mode == AC3_CHMODE_STEREO);
2039
2040     return 0;
2041 }
2042
2043
2044 /**
2045  * Set bandwidth for all channels.
2046  * The user can optionally supply a cutoff frequency. Otherwise an appropriate
2047  * default value will be used.
2048  */
2049 static av_cold void set_bandwidth(AC3EncodeContext *s)
2050 {
2051     int ch;
2052
2053     if (s->cutoff) {
2054         /* calculate bandwidth based on user-specified cutoff frequency */
2055         int fbw_coeffs;
2056         fbw_coeffs     = s->cutoff * 2 * AC3_MAX_COEFS / s->sample_rate;
2057         s->bandwidth_code = av_clip((fbw_coeffs - 73) / 3, 0, 60);
2058     } else {
2059         /* use default bandwidth setting */
2060         s->bandwidth_code = ac3_bandwidth_tab[s->fbw_channels-1][s->bit_alloc.sr_code][s->frame_size_code/2];
2061     }
2062
2063     /* set number of coefficients for each channel */
2064     for (ch = 0; ch < s->fbw_channels; ch++) {
2065         s->nb_coefs[ch] = s->bandwidth_code * 3 + 73;
2066     }
2067     if (s->lfe_on)
2068         s->nb_coefs[s->lfe_channel] = 7; /* LFE channel always has 7 coefs */
2069 }
2070
2071
2072 static av_cold int allocate_buffers(AVCodecContext *avctx)
2073 {
2074     int blk, ch;
2075     AC3EncodeContext *s = avctx->priv_data;
2076
2077     FF_ALLOC_OR_GOTO(avctx, s->planar_samples, s->channels * sizeof(*s->planar_samples),
2078                      alloc_fail);
2079     for (ch = 0; ch < s->channels; ch++) {
2080         FF_ALLOCZ_OR_GOTO(avctx, s->planar_samples[ch],
2081                           (AC3_FRAME_SIZE+AC3_BLOCK_SIZE) * sizeof(**s->planar_samples),
2082                           alloc_fail);
2083     }
2084     FF_ALLOC_OR_GOTO(avctx, s->bap_buffer,  AC3_MAX_BLOCKS * s->channels *
2085                      AC3_MAX_COEFS * sizeof(*s->bap_buffer),  alloc_fail);
2086     FF_ALLOC_OR_GOTO(avctx, s->bap1_buffer, AC3_MAX_BLOCKS * s->channels *
2087                      AC3_MAX_COEFS * sizeof(*s->bap1_buffer), alloc_fail);
2088     FF_ALLOC_OR_GOTO(avctx, s->mdct_coef_buffer, AC3_MAX_BLOCKS * s->channels *
2089                      AC3_MAX_COEFS * sizeof(*s->mdct_coef_buffer), alloc_fail);
2090     FF_ALLOC_OR_GOTO(avctx, s->exp_buffer, AC3_MAX_BLOCKS * s->channels *
2091                      AC3_MAX_COEFS * sizeof(*s->exp_buffer), alloc_fail);
2092     FF_ALLOC_OR_GOTO(avctx, s->grouped_exp_buffer, AC3_MAX_BLOCKS * s->channels *
2093                      128 * sizeof(*s->grouped_exp_buffer), alloc_fail);
2094     FF_ALLOC_OR_GOTO(avctx, s->psd_buffer, AC3_MAX_BLOCKS * s->channels *
2095                      AC3_MAX_COEFS * sizeof(*s->psd_buffer), alloc_fail);
2096     FF_ALLOC_OR_GOTO(avctx, s->band_psd_buffer, AC3_MAX_BLOCKS * s->channels *
2097                      64 * sizeof(*s->band_psd_buffer), alloc_fail);
2098     FF_ALLOC_OR_GOTO(avctx, s->mask_buffer, AC3_MAX_BLOCKS * s->channels *
2099                      64 * sizeof(*s->mask_buffer), alloc_fail);
2100     FF_ALLOC_OR_GOTO(avctx, s->qmant_buffer, AC3_MAX_BLOCKS * s->channels *
2101                      AC3_MAX_COEFS * sizeof(*s->qmant_buffer), alloc_fail);
2102     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
2103         AC3Block *block = &s->blocks[blk];
2104         FF_ALLOC_OR_GOTO(avctx, block->bap, s->channels * sizeof(*block->bap),
2105                          alloc_fail);
2106         FF_ALLOCZ_OR_GOTO(avctx, block->mdct_coef, s->channels * sizeof(*block->mdct_coef),
2107                           alloc_fail);
2108         FF_ALLOCZ_OR_GOTO(avctx, block->exp, s->channels * sizeof(*block->exp),
2109                           alloc_fail);
2110         FF_ALLOCZ_OR_GOTO(avctx, block->grouped_exp, s->channels * sizeof(*block->grouped_exp),
2111                           alloc_fail);
2112         FF_ALLOCZ_OR_GOTO(avctx, block->psd, s->channels * sizeof(*block->psd),
2113                           alloc_fail);
2114         FF_ALLOCZ_OR_GOTO(avctx, block->band_psd, s->channels * sizeof(*block->band_psd),
2115                           alloc_fail);
2116         FF_ALLOCZ_OR_GOTO(avctx, block->mask, s->channels * sizeof(*block->mask),
2117                           alloc_fail);
2118         FF_ALLOCZ_OR_GOTO(avctx, block->qmant, s->channels * sizeof(*block->qmant),
2119                           alloc_fail);
2120
2121         for (ch = 0; ch < s->channels; ch++) {
2122             /* arrangement: block, channel, coeff */
2123             block->bap[ch]         = &s->bap_buffer        [AC3_MAX_COEFS * (blk * s->channels + ch)];
2124             block->mdct_coef[ch]   = &s->mdct_coef_buffer  [AC3_MAX_COEFS * (blk * s->channels + ch)];
2125             block->grouped_exp[ch] = &s->grouped_exp_buffer[128           * (blk * s->channels + ch)];
2126             block->psd[ch]         = &s->psd_buffer        [AC3_MAX_COEFS * (blk * s->channels + ch)];
2127             block->band_psd[ch]    = &s->band_psd_buffer   [64            * (blk * s->channels + ch)];
2128             block->mask[ch]        = &s->mask_buffer       [64            * (blk * s->channels + ch)];
2129             block->qmant[ch]       = &s->qmant_buffer      [AC3_MAX_COEFS * (blk * s->channels + ch)];
2130
2131             /* arrangement: channel, block, coeff */
2132             block->exp[ch]         = &s->exp_buffer        [AC3_MAX_COEFS * (AC3_MAX_BLOCKS * ch + blk)];
2133         }
2134     }
2135
2136     if (CONFIG_AC3ENC_FLOAT) {
2137         FF_ALLOC_OR_GOTO(avctx, s->fixed_coef_buffer, AC3_MAX_BLOCKS * s->channels *
2138                          AC3_MAX_COEFS * sizeof(*s->fixed_coef_buffer), alloc_fail);
2139         for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
2140             AC3Block *block = &s->blocks[blk];
2141             FF_ALLOCZ_OR_GOTO(avctx, block->fixed_coef, s->channels *
2142                               sizeof(*block->fixed_coef), alloc_fail);
2143             for (ch = 0; ch < s->channels; ch++)
2144                 block->fixed_coef[ch] = &s->fixed_coef_buffer[AC3_MAX_COEFS * (blk * s->channels + ch)];
2145         }
2146     } else {
2147         for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
2148             AC3Block *block = &s->blocks[blk];
2149             FF_ALLOCZ_OR_GOTO(avctx, block->fixed_coef, s->channels *
2150                               sizeof(*block->fixed_coef), alloc_fail);
2151             for (ch = 0; ch < s->channels; ch++)
2152                 block->fixed_coef[ch] = (int32_t *)block->mdct_coef[ch];
2153         }
2154     }
2155
2156     return 0;
2157 alloc_fail:
2158     return AVERROR(ENOMEM);
2159 }
2160
2161
2162 /**
2163  * Initialize the encoder.
2164  */
2165 static av_cold int ac3_encode_init(AVCodecContext *avctx)
2166 {
2167     AC3EncodeContext *s = avctx->priv_data;
2168     int ret, frame_size_58;
2169
2170     avctx->frame_size = AC3_FRAME_SIZE;
2171
2172     ff_ac3_common_init();
2173
2174     ret = validate_options(avctx, s);
2175     if (ret)
2176         return ret;
2177
2178     s->bitstream_mode = avctx->audio_service_type;
2179     if (s->bitstream_mode == AV_AUDIO_SERVICE_TYPE_KARAOKE)
2180         s->bitstream_mode = 0x7;
2181
2182     s->frame_size_min  = 2 * ff_ac3_frame_size_tab[s->frame_size_code][s->bit_alloc.sr_code];
2183     s->bits_written    = 0;
2184     s->samples_written = 0;
2185     s->frame_size      = s->frame_size_min;
2186
2187     /* calculate crc_inv for both possible frame sizes */
2188     frame_size_58 = (( s->frame_size    >> 2) + ( s->frame_size    >> 4)) << 1;
2189     s->crc_inv[0] = pow_poly((CRC16_POLY >> 1), (8 * frame_size_58) - 16, CRC16_POLY);
2190     if (s->bit_alloc.sr_code == 1) {
2191         frame_size_58 = (((s->frame_size+2) >> 2) + ((s->frame_size+2) >> 4)) << 1;
2192         s->crc_inv[1] = pow_poly((CRC16_POLY >> 1), (8 * frame_size_58) - 16, CRC16_POLY);
2193     }
2194
2195     set_bandwidth(s);
2196
2197     exponent_init(s);
2198
2199     bit_alloc_init(s);
2200
2201     ret = mdct_init(avctx, &s->mdct, 9);
2202     if (ret)
2203         goto init_fail;
2204
2205     ret = allocate_buffers(avctx);
2206     if (ret)
2207         goto init_fail;
2208
2209     avctx->coded_frame= avcodec_alloc_frame();
2210
2211     dsputil_init(&s->dsp, avctx);
2212     ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT);
2213
2214     dprint_options(avctx);
2215
2216     return 0;
2217 init_fail:
2218     ac3_encode_close(avctx);
2219     return ret;
2220 }