]> git.sesse.net Git - ffmpeg/blob - libavcodec/ac3enc.c
Move writing of frame to the output bitstream to a separate function.
[ffmpeg] / libavcodec / ac3enc.c
1 /*
2  * The simplest AC-3 encoder
3  * Copyright (c) 2000 Fabrice Bellard
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21
22 /**
23  * @file
24  * The simplest AC-3 encoder.
25  */
26
27 //#define DEBUG
28
29 #include "libavcore/audioconvert.h"
30 #include "libavutil/crc.h"
31 #include "avcodec.h"
32 #include "put_bits.h"
33 #include "ac3.h"
34 #include "audioconvert.h"
35
36
37 #define MDCT_NBITS 9
38 #define MDCT_SAMPLES (1 << MDCT_NBITS)
39
40 /** Scale a float value by 2^bits and convert to an integer. */
41 #define SCALE_FLOAT(a, bits) lrintf((a) * (float)(1 << (bits)))
42
43 /** Scale a float value by 2^15, convert to an integer, and clip to int16_t range. */
44 #define FIX15(a) av_clip_int16(SCALE_FLOAT(a, 15))
45
46
47 /**
48  * Compex number.
49  * Used in fixed-point MDCT calculation.
50  */
51 typedef struct IComplex {
52     int16_t re,im;
53 } IComplex;
54
55 /**
56  * AC-3 encoder private context.
57  */
58 typedef struct AC3EncodeContext {
59     PutBitContext pb;                       ///< bitstream writer context
60
61     int bitstream_id;                       ///< bitstream id                           (bsid)
62     int bitstream_mode;                     ///< bitstream mode                         (bsmod)
63
64     int bit_rate;                           ///< target bit rate, in bits-per-second
65     int sample_rate;                        ///< sampling frequency, in Hz
66
67     int frame_size_min;                     ///< minimum frame size in case rounding is necessary
68     int frame_size;                         ///< current frame size in bytes
69     int frame_size_code;                    ///< frame size code                        (frmsizecod)
70     int bits_written;                       ///< bit count    (used to avg. bitrate)
71     int samples_written;                    ///< sample count (used to avg. bitrate)
72
73     int fbw_channels;                       ///< number of full-bandwidth channels      (nfchans)
74     int channels;                           ///< total number of channels               (nchans)
75     int lfe_on;                             ///< indicates if there is an LFE channel   (lfeon)
76     int lfe_channel;                        ///< channel index of the LFE channel
77     int channel_mode;                       ///< channel mode                           (acmod)
78     const uint8_t *channel_map;             ///< channel map used to reorder channels
79
80     int bandwidth_code[AC3_MAX_CHANNELS];   ///< bandwidth code (0 to 60)               (chbwcod)
81     int nb_coefs[AC3_MAX_CHANNELS];
82
83     /* bitrate allocation control */
84     int slow_gain_code;                     ///< slow gain code                         (sgaincod)
85     int slow_decay_code;                    ///< slow decay code                        (sdcycod)
86     int fast_decay_code;                    ///< fast decay code                        (fdcycod)
87     int db_per_bit_code;                    ///< dB/bit code                            (dbpbcod)
88     int floor_code;                         ///< floor code                             (floorcod)
89     AC3BitAllocParameters bit_alloc;        ///< bit allocation parameters
90     int coarse_snr_offset;                  ///< coarse SNR offsets                     (csnroffst)
91     int fast_gain_code[AC3_MAX_CHANNELS];   ///< fast gain codes (signal-to-mask ratio) (fgaincod)
92     int fine_snr_offset[AC3_MAX_CHANNELS];  ///< fine SNR offsets                       (fsnroffst)
93
94     /* mantissa encoding */
95     int mant1_cnt, mant2_cnt, mant4_cnt;    ///< mantissa counts for bap=1,2,4
96
97     int16_t last_samples[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]; ///< last 256 samples from previous frame
98 } AC3EncodeContext;
99
100
101 /** MDCT and FFT tables */
102 static int16_t costab[64];
103 static int16_t sintab[64];
104 static int16_t xcos1[128];
105 static int16_t xsin1[128];
106
107
108 /**
109  * Adjust the frame size to make the average bit rate match the target bit rate.
110  * This is only needed for 11025, 22050, and 44100 sample rates.
111  */
112 static void adjust_frame_size(AC3EncodeContext *s)
113 {
114     while (s->bits_written >= s->bit_rate && s->samples_written >= s->sample_rate) {
115         s->bits_written    -= s->bit_rate;
116         s->samples_written -= s->sample_rate;
117     }
118     s->frame_size = s->frame_size_min + 2 * (s->bits_written * s->sample_rate < s->samples_written * s->bit_rate);
119     s->bits_written    += s->frame_size * 8;
120     s->samples_written += AC3_FRAME_SIZE;
121 }
122
123
124 /**
125  * Deinterleave input samples.
126  * Channels are reordered from FFmpeg's default order to AC-3 order.
127  */
128 static void deinterleave_input_samples(AC3EncodeContext *s,
129                                        const int16_t *samples,
130                                        int16_t planar_samples[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE+AC3_FRAME_SIZE])
131 {
132     int ch, i;
133
134     /* deinterleave and remap input samples */
135     for (ch = 0; ch < s->channels; ch++) {
136         const int16_t *sptr;
137         int sinc;
138
139         /* copy last 256 samples of previous frame to the start of the current frame */
140         memcpy(&planar_samples[ch][0], s->last_samples[ch],
141                AC3_BLOCK_SIZE * sizeof(planar_samples[0][0]));
142
143         /* deinterleave */
144         sinc = s->channels;
145         sptr = samples + s->channel_map[ch];
146         for (i = AC3_BLOCK_SIZE; i < AC3_FRAME_SIZE+AC3_BLOCK_SIZE; i++) {
147             planar_samples[ch][i] = *sptr;
148             sptr += sinc;
149         }
150
151         /* save last 256 samples for next frame */
152         memcpy(s->last_samples[ch], &planar_samples[ch][6* AC3_BLOCK_SIZE],
153                AC3_BLOCK_SIZE * sizeof(planar_samples[0][0]));
154     }
155 }
156
157
158 /**
159  * Initialize FFT tables.
160  * @param ln log2(FFT size)
161  */
162 static av_cold void fft_init(int ln)
163 {
164     int i, n, n2;
165     float alpha;
166
167     n  = 1 << ln;
168     n2 = n >> 1;
169
170     for (i = 0; i < n2; i++) {
171         alpha     = 2.0 * M_PI * i / n;
172         costab[i] = FIX15(cos(alpha));
173         sintab[i] = FIX15(sin(alpha));
174     }
175 }
176
177
178 /**
179  * Initialize MDCT tables.
180  * @param nbits log2(MDCT size)
181  */
182 static av_cold void mdct_init(int nbits)
183 {
184     int i, n, n4;
185
186     n  = 1 << nbits;
187     n4 = n >> 2;
188
189     fft_init(nbits - 2);
190
191     for (i = 0; i < n4; i++) {
192         float alpha = 2.0 * M_PI * (i + 1.0 / 8.0) / n;
193         xcos1[i] = FIX15(-cos(alpha));
194         xsin1[i] = FIX15(-sin(alpha));
195     }
196 }
197
198
199 /** Butterfly op */
200 #define BF(pre, pim, qre, qim, pre1, pim1, qre1, qim1)  \
201 {                                                       \
202   int ax, ay, bx, by;                                   \
203   bx  = pre1;                                           \
204   by  = pim1;                                           \
205   ax  = qre1;                                           \
206   ay  = qim1;                                           \
207   pre = (bx + ax) >> 1;                                 \
208   pim = (by + ay) >> 1;                                 \
209   qre = (bx - ax) >> 1;                                 \
210   qim = (by - ay) >> 1;                                 \
211 }
212
213
214 /** Complex multiply */
215 #define CMUL(pre, pim, are, aim, bre, bim)              \
216 {                                                       \
217    pre = (MUL16(are, bre) - MUL16(aim, bim)) >> 15;     \
218    pim = (MUL16(are, bim) + MUL16(bre, aim)) >> 15;     \
219 }
220
221
222 /**
223  * Calculate a 2^n point complex FFT on 2^ln points.
224  * @param z  complex input/output samples
225  * @param ln log2(FFT size)
226  */
227 static void fft(IComplex *z, int ln)
228 {
229     int j, l, np, np2;
230     int nblocks, nloops;
231     register IComplex *p,*q;
232     int tmp_re, tmp_im;
233
234     np = 1 << ln;
235
236     /* reverse */
237     for (j = 0; j < np; j++) {
238         int k = av_reverse[j] >> (8 - ln);
239         if (k < j)
240             FFSWAP(IComplex, z[k], z[j]);
241     }
242
243     /* pass 0 */
244
245     p = &z[0];
246     j = np >> 1;
247     do {
248         BF(p[0].re, p[0].im, p[1].re, p[1].im,
249            p[0].re, p[0].im, p[1].re, p[1].im);
250         p += 2;
251     } while (--j);
252
253     /* pass 1 */
254
255     p = &z[0];
256     j = np >> 2;
257     do {
258         BF(p[0].re, p[0].im, p[2].re,  p[2].im,
259            p[0].re, p[0].im, p[2].re,  p[2].im);
260         BF(p[1].re, p[1].im, p[3].re,  p[3].im,
261            p[1].re, p[1].im, p[3].im, -p[3].re);
262         p+=4;
263     } while (--j);
264
265     /* pass 2 .. ln-1 */
266
267     nblocks = np >> 3;
268     nloops  =  1 << 2;
269     np2     = np >> 1;
270     do {
271         p = z;
272         q = z + nloops;
273         for (j = 0; j < nblocks; j++) {
274             BF(p->re, p->im, q->re, q->im,
275                p->re, p->im, q->re, q->im);
276             p++;
277             q++;
278             for(l = nblocks; l < np2; l += nblocks) {
279                 CMUL(tmp_re, tmp_im, costab[l], -sintab[l], q->re, q->im);
280                 BF(p->re, p->im, q->re,  q->im,
281                    p->re, p->im, tmp_re, tmp_im);
282                 p++;
283                 q++;
284             }
285             p += nloops;
286             q += nloops;
287         }
288         nblocks = nblocks >> 1;
289         nloops  = nloops  << 1;
290     } while (nblocks);
291 }
292
293
294 /**
295  * Calculate a 512-point MDCT
296  * @param out 256 output frequency coefficients
297  * @param in  512 windowed input audio samples
298  */
299 static void mdct512(int32_t *out, int16_t *in)
300 {
301     int i, re, im, re1, im1;
302     int16_t rot[MDCT_SAMPLES];
303     IComplex x[MDCT_SAMPLES/4];
304
305     /* shift to simplify computations */
306     for (i = 0; i < MDCT_SAMPLES/4; i++)
307         rot[i] = -in[i + 3*MDCT_SAMPLES/4];
308     for (;i < MDCT_SAMPLES; i++)
309         rot[i] =  in[i -   MDCT_SAMPLES/4];
310
311     /* pre rotation */
312     for (i = 0; i < MDCT_SAMPLES/4; i++) {
313         re =  ((int)rot[               2*i] - (int)rot[MDCT_SAMPLES  -1-2*i]) >> 1;
314         im = -((int)rot[MDCT_SAMPLES/2+2*i] - (int)rot[MDCT_SAMPLES/2-1-2*i]) >> 1;
315         CMUL(x[i].re, x[i].im, re, im, -xcos1[i], xsin1[i]);
316     }
317
318     fft(x, MDCT_NBITS - 2);
319
320     /* post rotation */
321     for (i = 0; i < MDCT_SAMPLES/4; i++) {
322         re = x[i].re;
323         im = x[i].im;
324         CMUL(re1, im1, re, im, xsin1[i], xcos1[i]);
325         out[                 2*i] = im1;
326         out[MDCT_SAMPLES/2-1-2*i] = re1;
327     }
328 }
329
330
331 /**
332  * Apply KBD window to input samples prior to MDCT.
333  */
334 static void apply_window(int16_t *output, const int16_t *input,
335                          const int16_t *window, int n)
336 {
337     int i;
338     int n2 = n >> 1;
339
340     for (i = 0; i < n2; i++) {
341         output[i]     = MUL16(input[i],     window[i]) >> 15;
342         output[n-i-1] = MUL16(input[n-i-1], window[i]) >> 15;
343     }
344 }
345
346
347 /**
348  * Calculate the log2() of the maximum absolute value in an array.
349  * @param tab input array
350  * @param n   number of values in the array
351  * @return    log2(max(abs(tab[])))
352  */
353 static int log2_tab(int16_t *tab, int n)
354 {
355     int i, v;
356
357     v = 0;
358     for (i = 0; i < n; i++)
359         v |= abs(tab[i]);
360
361     return av_log2(v);
362 }
363
364
365 /**
366  * Left-shift each value in an array by a specified amount.
367  * @param tab    input array
368  * @param n      number of values in the array
369  * @param lshift left shift amount. a negative value means right shift.
370  */
371 static void lshift_tab(int16_t *tab, int n, int lshift)
372 {
373     int i;
374
375     if (lshift > 0) {
376         for(i = 0; i < n; i++)
377             tab[i] <<= lshift;
378     } else if (lshift < 0) {
379         lshift = -lshift;
380         for (i = 0; i < n; i++)
381             tab[i] >>= lshift;
382     }
383 }
384
385
386 /**
387  * Normalize the input samples to use the maximum available precision.
388  * This assumes signed 16-bit input samples. Exponents are reduced by 9 to
389  * match the 24-bit internal precision for MDCT coefficients.
390  *
391  * @return exponent shift
392  */
393 static int normalize_samples(AC3EncodeContext *s,
394                              int16_t windowed_samples[AC3_WINDOW_SIZE])
395 {
396     int v = 14 - log2_tab(windowed_samples, AC3_WINDOW_SIZE);
397     v = FFMAX(0, v);
398     lshift_tab(windowed_samples, AC3_WINDOW_SIZE, v);
399     return v - 9;
400 }
401
402
403 /**
404  * Apply the MDCT to input samples to generate frequency coefficients.
405  * This applies the KBD window and normalizes the input to reduce precision
406  * loss due to fixed-point calculations.
407  */
408 static void apply_mdct(AC3EncodeContext *s,
409                        int16_t planar_samples[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE+AC3_FRAME_SIZE],
410                        int8_t exp_shift[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
411                        int32_t mdct_coef[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS])
412 {
413     int blk, ch;
414     int16_t windowed_samples[AC3_WINDOW_SIZE];
415
416     for (ch = 0; ch < s->channels; ch++) {
417         for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
418             const int16_t *input_samples = &planar_samples[ch][blk * AC3_BLOCK_SIZE];
419
420             apply_window(windowed_samples, input_samples, ff_ac3_window, AC3_WINDOW_SIZE);
421
422             exp_shift[blk][ch] = normalize_samples(s, windowed_samples);
423
424             mdct512(mdct_coef[blk][ch], windowed_samples);
425         }
426     }
427 }
428
429
430 /**
431  * Extract exponents from the MDCT coefficients.
432  * This takes into account the normalization that was done to the input samples
433  * by adjusting the exponents by the exponent shift values.
434  */
435 static void extract_exponents(AC3EncodeContext *s,
436                               int32_t mdct_coef[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
437                               int8_t exp_shift[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
438                               uint8_t exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS])
439 {
440     int blk, ch, i;
441
442     /* extract exponents */
443     for (ch = 0; ch < s->channels; ch++) {
444         for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
445             /* compute "exponents". We take into account the normalization there */
446             for (i = 0; i < AC3_MAX_COEFS; i++) {
447                 int e;
448                 int v = abs(mdct_coef[blk][ch][i]);
449                 if (v == 0)
450                     e = 24;
451                 else {
452                     e = 23 - av_log2(v) + exp_shift[blk][ch];
453                     if (e >= 24) {
454                         e = 24;
455                         mdct_coef[blk][ch][i] = 0;
456                     }
457                 }
458                 exp[blk][ch][i] = e;
459             }
460         }
461     }
462 }
463
464
465 /**
466  * Calculate the sum of absolute differences (SAD) between 2 sets of exponents.
467  */
468 static int calc_exp_diff(uint8_t *exp1, uint8_t *exp2, int n)
469 {
470     int sum, i;
471     sum = 0;
472     for (i = 0; i < n; i++)
473         sum += abs(exp1[i] - exp2[i]);
474     return sum;
475 }
476
477
478 /**
479  * Exponent Difference Threshold.
480  * New exponents are sent if their SAD exceed this number.
481  */
482 #define EXP_DIFF_THRESHOLD 1000
483
484
485 /**
486  * Calculate exponent strategies for all blocks in a single channel.
487  */
488 static void compute_exp_strategy_ch(uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
489                                     uint8_t exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
490                                     int ch, int is_lfe)
491 {
492     int blk, blk1;
493     int exp_diff;
494
495     /* estimate if the exponent variation & decide if they should be
496        reused in the next frame */
497     exp_strategy[0][ch] = EXP_NEW;
498     for (blk = 1; blk < AC3_MAX_BLOCKS; blk++) {
499         exp_diff = calc_exp_diff(exp[blk][ch], exp[blk-1][ch], AC3_MAX_COEFS);
500         if (exp_diff > EXP_DIFF_THRESHOLD)
501             exp_strategy[blk][ch] = EXP_NEW;
502         else
503             exp_strategy[blk][ch] = EXP_REUSE;
504     }
505     if (is_lfe)
506         return;
507
508     /* now select the encoding strategy type : if exponents are often
509        recoded, we use a coarse encoding */
510     blk = 0;
511     while (blk < AC3_MAX_BLOCKS) {
512         blk1 = blk + 1;
513         while (blk1 < AC3_MAX_BLOCKS && exp_strategy[blk1][ch] == EXP_REUSE)
514             blk1++;
515         switch (blk1 - blk) {
516         case 1:  exp_strategy[blk][ch] = EXP_D45; break;
517         case 2:
518         case 3:  exp_strategy[blk][ch] = EXP_D25; break;
519         default: exp_strategy[blk][ch] = EXP_D15; break;
520         }
521         blk = blk1;
522     }
523 }
524
525
526 /**
527  * Calculate exponent strategies for all channels.
528  */
529 static void compute_exp_strategy(AC3EncodeContext *s,
530                                  uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
531                                  uint8_t exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS])
532 {
533     int ch;
534
535     for (ch = 0; ch < s->channels; ch++) {
536         compute_exp_strategy_ch(exp_strategy, exp, ch, ch == s->lfe_channel);
537     }
538 }
539
540
541 /**
542  * Set each encoded exponent in a block to the minimum of itself and the
543  * exponent in the same frequency bin of a following block.
544  * exp[i] = min(exp[i], exp1[i]
545  */
546 static void exponent_min(uint8_t exp[AC3_MAX_COEFS], uint8_t exp1[AC3_MAX_COEFS], int n)
547 {
548     int i;
549     for (i = 0; i < n; i++) {
550         if (exp1[i] < exp[i])
551             exp[i] = exp1[i];
552     }
553 }
554
555
556 /**
557  * Update the exponents so that they are the ones the decoder will decode.
558  * @return the number of bits used to encode the exponents.
559  */
560 static int encode_exponents_blk_ch(uint8_t encoded_exp[AC3_MAX_COEFS],
561                                    uint8_t exp[AC3_MAX_COEFS],
562                                    int nb_exps, int exp_strategy)
563 {
564     int group_size, nb_groups, i, j, k, exp_min;
565     uint8_t exp1[AC3_MAX_COEFS];
566
567     group_size = exp_strategy + (exp_strategy == EXP_D45);
568     nb_groups = ((nb_exps + (group_size * 3) - 4) / (3 * group_size)) * 3;
569
570     /* for each group, compute the minimum exponent */
571     exp1[0] = exp[0]; /* DC exponent is handled separately */
572     k = 1;
573     for (i = 1; i <= nb_groups; i++) {
574         exp_min = exp[k];
575         assert(exp_min >= 0 && exp_min <= 24);
576         for (j = 1; j < group_size; j++) {
577             if (exp[k+j] < exp_min)
578                 exp_min = exp[k+j];
579         }
580         exp1[i] = exp_min;
581         k += group_size;
582     }
583
584     /* constraint for DC exponent */
585     if (exp1[0] > 15)
586         exp1[0] = 15;
587
588     /* decrease the delta between each groups to within 2 so that they can be
589        differentially encoded */
590     for (i = 1; i <= nb_groups; i++)
591         exp1[i] = FFMIN(exp1[i], exp1[i-1] + 2);
592     for (i = nb_groups-1; i >= 0; i--)
593         exp1[i] = FFMIN(exp1[i], exp1[i+1] + 2);
594
595     /* now we have the exponent values the decoder will see */
596     encoded_exp[0] = exp1[0];
597     k = 1;
598     for (i = 1; i <= nb_groups; i++) {
599         for (j = 0; j < group_size; j++)
600             encoded_exp[k+j] = exp1[i];
601         k += group_size;
602     }
603
604     return 4 + (nb_groups / 3) * 7;
605 }
606
607
608 /**
609  * Encode exponents from original extracted form to what the decoder will see.
610  * This copies and groups exponents based on exponent strategy and reduces
611  * deltas between adjacent exponent groups so that they can be differentially
612  * encoded.
613  * @return bits needed to encode the exponents
614  */
615 static int encode_exponents(AC3EncodeContext *s,
616                             uint8_t exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
617                             uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
618                             uint8_t encoded_exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS])
619 {
620     int blk, blk1, blk2, ch;
621     int frame_bits;
622
623     frame_bits = 0;
624     for (ch = 0; ch < s->channels; ch++) {
625         /* for the EXP_REUSE case we select the min of the exponents */
626         blk = 0;
627         while (blk < AC3_MAX_BLOCKS) {
628             blk1 = blk + 1;
629             while (blk1 < AC3_MAX_BLOCKS && exp_strategy[blk1][ch] == EXP_REUSE) {
630                 exponent_min(exp[blk][ch], exp[blk1][ch], s->nb_coefs[ch]);
631                 blk1++;
632             }
633             frame_bits += encode_exponents_blk_ch(encoded_exp[blk][ch],
634                                                   exp[blk][ch], s->nb_coefs[ch],
635                                                   exp_strategy[blk][ch]);
636             /* copy encoded exponents for reuse case */
637             for (blk2 = blk+1; blk2 < blk1; blk2++) {
638                 memcpy(encoded_exp[blk2][ch], encoded_exp[blk][ch],
639                        s->nb_coefs[ch] * sizeof(uint8_t));
640             }
641             blk = blk1;
642         }
643     }
644
645     return frame_bits;
646 }
647
648
649 /**
650  * Calculate final exponents from the supplied MDCT coefficients and exponent shift.
651  * Extract exponents from MDCT coefficients, calculate exponent strategies,
652  * and encode final exponents.
653  * @return bits needed to encode the exponents
654  */
655 static int process_exponents(AC3EncodeContext *s,
656                              int32_t mdct_coef[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
657                              int8_t exp_shift[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
658                              uint8_t exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
659                              uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
660                              uint8_t encoded_exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS])
661 {
662     extract_exponents(s, mdct_coef, exp_shift, exp);
663
664     compute_exp_strategy(s, exp_strategy, exp);
665
666     return encode_exponents(s, exp, exp_strategy, encoded_exp);
667 }
668
669
670 /**
671  * Calculate the number of bits needed to encode a set of mantissas.
672  */
673 static int compute_mantissa_size(AC3EncodeContext *s, uint8_t *m, int nb_coefs)
674 {
675     int bits, mant, i;
676
677     bits = 0;
678     for (i = 0; i < nb_coefs; i++) {
679         mant = m[i];
680         switch (mant) {
681         case 0:
682             /* nothing */
683             break;
684         case 1:
685             /* 3 mantissa in 5 bits */
686             if (s->mant1_cnt == 0)
687                 bits += 5;
688             if (++s->mant1_cnt == 3)
689                 s->mant1_cnt = 0;
690             break;
691         case 2:
692             /* 3 mantissa in 7 bits */
693             if (s->mant2_cnt == 0)
694                 bits += 7;
695             if (++s->mant2_cnt == 3)
696                 s->mant2_cnt = 0;
697             break;
698         case 3:
699             bits += 3;
700             break;
701         case 4:
702             /* 2 mantissa in 7 bits */
703             if (s->mant4_cnt == 0)
704                 bits += 7;
705             if (++s->mant4_cnt == 2)
706                 s->mant4_cnt = 0;
707             break;
708         case 14:
709             bits += 14;
710             break;
711         case 15:
712             bits += 16;
713             break;
714         default:
715             bits += mant - 1;
716             break;
717         }
718     }
719     return bits;
720 }
721
722
723 /**
724  * Calculate masking curve based on the final exponents.
725  * Also calculate the power spectral densities to use in future calculations.
726  */
727 static void bit_alloc_masking(AC3EncodeContext *s,
728                               uint8_t encoded_exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
729                               uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
730                               int16_t psd[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
731                               int16_t mask[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_CRITICAL_BANDS])
732 {
733     int blk, ch;
734     int16_t band_psd[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_CRITICAL_BANDS];
735
736     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
737         for (ch = 0; ch < s->channels; ch++) {
738             if(exp_strategy[blk][ch] == EXP_REUSE) {
739                 memcpy(psd[blk][ch],  psd[blk-1][ch],  AC3_MAX_COEFS*sizeof(psd[0][0][0]));
740                 memcpy(mask[blk][ch], mask[blk-1][ch], AC3_CRITICAL_BANDS*sizeof(mask[0][0][0]));
741             } else {
742                 ff_ac3_bit_alloc_calc_psd(encoded_exp[blk][ch], 0,
743                                           s->nb_coefs[ch],
744                                           psd[blk][ch], band_psd[blk][ch]);
745                 ff_ac3_bit_alloc_calc_mask(&s->bit_alloc, band_psd[blk][ch],
746                                            0, s->nb_coefs[ch],
747                                            ff_ac3_fast_gain_tab[s->fast_gain_code[ch]],
748                                            ch == s->lfe_channel,
749                                            DBA_NONE, 0, NULL, NULL, NULL,
750                                            mask[blk][ch]);
751             }
752         }
753     }
754 }
755
756
757 /**
758  * Run the bit allocation with a given SNR offset.
759  * This calculates the bit allocation pointers that will be used to determine
760  * the quantization of each mantissa.
761  * @return the number of remaining bits (positive or negative) if the given
762  *         SNR offset is used to quantize the mantissas.
763  */
764 static int bit_alloc(AC3EncodeContext *s,
765                      int16_t mask[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_CRITICAL_BANDS],
766                      int16_t psd[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
767                      uint8_t bap[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
768                      int frame_bits, int coarse_snr_offset, int fine_snr_offset)
769 {
770     int blk, ch;
771     int snr_offset;
772
773     snr_offset = (((coarse_snr_offset - 15) << 4) + fine_snr_offset) << 2;
774
775     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
776         s->mant1_cnt = 0;
777         s->mant2_cnt = 0;
778         s->mant4_cnt = 0;
779         for (ch = 0; ch < s->channels; ch++) {
780             ff_ac3_bit_alloc_calc_bap(mask[blk][ch], psd[blk][ch], 0,
781                                       s->nb_coefs[ch], snr_offset,
782                                       s->bit_alloc.floor, ff_ac3_bap_tab,
783                                       bap[blk][ch]);
784             frame_bits += compute_mantissa_size(s, bap[blk][ch], s->nb_coefs[ch]);
785         }
786     }
787     return 8 * s->frame_size - frame_bits;
788 }
789
790
791 #define SNR_INC1 4
792
793 /**
794  * Perform bit allocation search.
795  * Finds the SNR offset value that maximizes quality and fits in the specified
796  * frame size.  Output is the SNR offset and a set of bit allocation pointers
797  * used to quantize the mantissas.
798  */
799 static int compute_bit_allocation(AC3EncodeContext *s,
800                                   uint8_t bap[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
801                                   uint8_t encoded_exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
802                                   uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
803                                   int frame_bits)
804 {
805     int blk, ch;
806     int coarse_snr_offset, fine_snr_offset;
807     uint8_t bap1[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS];
808     int16_t psd[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS];
809     int16_t mask[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_CRITICAL_BANDS];
810     static const int frame_bits_inc[8] = { 0, 0, 2, 2, 2, 4, 2, 4 };
811
812     /* init default parameters */
813     s->slow_decay_code = 2;
814     s->fast_decay_code = 1;
815     s->slow_gain_code  = 1;
816     s->db_per_bit_code = 2;
817     s->floor_code      = 4;
818     for (ch = 0; ch < s->channels; ch++)
819         s->fast_gain_code[ch] = 4;
820
821     /* compute real values */
822     s->bit_alloc.slow_decay = ff_ac3_slow_decay_tab[s->slow_decay_code] >> s->bit_alloc.sr_shift;
823     s->bit_alloc.fast_decay = ff_ac3_fast_decay_tab[s->fast_decay_code] >> s->bit_alloc.sr_shift;
824     s->bit_alloc.slow_gain  = ff_ac3_slow_gain_tab[s->slow_gain_code];
825     s->bit_alloc.db_per_bit = ff_ac3_db_per_bit_tab[s->db_per_bit_code];
826     s->bit_alloc.floor      = ff_ac3_floor_tab[s->floor_code];
827
828     /* header size */
829     frame_bits += 65;
830     // if (s->channel_mode == 2)
831     //    frame_bits += 2;
832     frame_bits += frame_bits_inc[s->channel_mode];
833
834     /* audio blocks */
835     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
836         frame_bits += s->fbw_channels * 2 + 2; /* blksw * c, dithflag * c, dynrnge, cplstre */
837         if (s->channel_mode == AC3_CHMODE_STEREO) {
838             frame_bits++; /* rematstr */
839             if (!blk)
840                 frame_bits += 4;
841         }
842         frame_bits += 2 * s->fbw_channels; /* chexpstr[2] * c */
843         if (s->lfe_on)
844             frame_bits++; /* lfeexpstr */
845         for (ch = 0; ch < s->fbw_channels; ch++) {
846             if (exp_strategy[blk][ch] != EXP_REUSE)
847                 frame_bits += 6 + 2; /* chbwcod[6], gainrng[2] */
848         }
849         frame_bits++; /* baie */
850         frame_bits++; /* snr */
851         frame_bits += 2; /* delta / skip */
852     }
853     frame_bits++; /* cplinu for block 0 */
854     /* bit alloc info */
855     /* sdcycod[2], fdcycod[2], sgaincod[2], dbpbcod[2], floorcod[3] */
856     /* csnroffset[6] */
857     /* (fsnoffset[4] + fgaincod[4]) * c */
858     frame_bits += 2*4 + 3 + 6 + s->channels * (4 + 3);
859
860     /* auxdatae, crcrsv */
861     frame_bits += 2;
862
863     /* CRC */
864     frame_bits += 16;
865
866     /* calculate psd and masking curve before doing bit allocation */
867     bit_alloc_masking(s, encoded_exp, exp_strategy, psd, mask);
868
869     /* now the big work begins : do the bit allocation. Modify the snr
870        offset until we can pack everything in the requested frame size */
871
872     coarse_snr_offset = s->coarse_snr_offset;
873     while (coarse_snr_offset >= 0 &&
874            bit_alloc(s, mask, psd, bap, frame_bits, coarse_snr_offset, 0) < 0)
875         coarse_snr_offset -= SNR_INC1;
876     if (coarse_snr_offset < 0) {
877         av_log(NULL, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n");
878         return -1;
879     }
880     while (coarse_snr_offset + SNR_INC1 <= 63 &&
881            bit_alloc(s, mask, psd, bap1, frame_bits,
882                      coarse_snr_offset + SNR_INC1, 0) >= 0) {
883         coarse_snr_offset += SNR_INC1;
884         memcpy(bap, bap1, sizeof(bap1));
885     }
886     while (coarse_snr_offset + 1 <= 63 &&
887            bit_alloc(s, mask, psd, bap1, frame_bits, coarse_snr_offset + 1, 0) >= 0) {
888         coarse_snr_offset++;
889         memcpy(bap, bap1, sizeof(bap1));
890     }
891
892     fine_snr_offset = 0;
893     while (fine_snr_offset + SNR_INC1 <= 15 &&
894            bit_alloc(s, mask, psd, bap1, frame_bits,
895                      coarse_snr_offset, fine_snr_offset + SNR_INC1) >= 0) {
896         fine_snr_offset += SNR_INC1;
897         memcpy(bap, bap1, sizeof(bap1));
898     }
899     while (fine_snr_offset + 1 <= 15 &&
900            bit_alloc(s, mask, psd, bap1, frame_bits,
901                      coarse_snr_offset, fine_snr_offset + 1) >= 0) {
902         fine_snr_offset++;
903         memcpy(bap, bap1, sizeof(bap1));
904     }
905
906     s->coarse_snr_offset = coarse_snr_offset;
907     for (ch = 0; ch < s->channels; ch++)
908         s->fine_snr_offset[ch] = fine_snr_offset;
909
910     return 0;
911 }
912
913
914 /**
915  * Write the AC-3 frame header to the output bitstream.
916  */
917 static void output_frame_header(AC3EncodeContext *s)
918 {
919     put_bits(&s->pb, 16, 0x0b77);   /* frame header */
920     put_bits(&s->pb, 16, 0);        /* crc1: will be filled later */
921     put_bits(&s->pb, 2,  s->bit_alloc.sr_code);
922     put_bits(&s->pb, 6,  s->frame_size_code + (s->frame_size - s->frame_size_min) / 2);
923     put_bits(&s->pb, 5,  s->bitstream_id);
924     put_bits(&s->pb, 3,  s->bitstream_mode);
925     put_bits(&s->pb, 3,  s->channel_mode);
926     if ((s->channel_mode & 0x01) && s->channel_mode != AC3_CHMODE_MONO)
927         put_bits(&s->pb, 2, 1);     /* XXX -4.5 dB */
928     if (s->channel_mode & 0x04)
929         put_bits(&s->pb, 2, 1);     /* XXX -6 dB */
930     if (s->channel_mode == AC3_CHMODE_STEREO)
931         put_bits(&s->pb, 2, 0);     /* surround not indicated */
932     put_bits(&s->pb, 1, s->lfe_on); /* LFE */
933     put_bits(&s->pb, 5, 31);        /* dialog norm: -31 db */
934     put_bits(&s->pb, 1, 0);         /* no compression control word */
935     put_bits(&s->pb, 1, 0);         /* no lang code */
936     put_bits(&s->pb, 1, 0);         /* no audio production info */
937     put_bits(&s->pb, 1, 0);         /* no copyright */
938     put_bits(&s->pb, 1, 1);         /* original bitstream */
939     put_bits(&s->pb, 1, 0);         /* no time code 1 */
940     put_bits(&s->pb, 1, 0);         /* no time code 2 */
941     put_bits(&s->pb, 1, 0);         /* no additional bit stream info */
942 }
943
944
945 /**
946  * Symmetric quantization on 'levels' levels.
947  */
948 static inline int sym_quant(int c, int e, int levels)
949 {
950     int v;
951
952     if (c >= 0) {
953         v = (levels * (c << e)) >> 24;
954         v = (v + 1) >> 1;
955         v = (levels >> 1) + v;
956     } else {
957         v = (levels * ((-c) << e)) >> 24;
958         v = (v + 1) >> 1;
959         v = (levels >> 1) - v;
960     }
961     assert (v >= 0 && v < levels);
962     return v;
963 }
964
965
966 /**
967  * Asymmetric quantization on 2^qbits levels.
968  */
969 static inline int asym_quant(int c, int e, int qbits)
970 {
971     int lshift, m, v;
972
973     lshift = e + qbits - 24;
974     if (lshift >= 0)
975         v = c << lshift;
976     else
977         v = c >> (-lshift);
978     /* rounding */
979     v = (v + 1) >> 1;
980     m = (1 << (qbits-1));
981     if (v >= m)
982         v = m - 1;
983     assert(v >= -m);
984     return v & ((1 << qbits)-1);
985 }
986
987
988 /**
989  * Write one audio block to the output bitstream.
990  */
991 static void output_audio_block(AC3EncodeContext *s,
992                                uint8_t exp_strategy[AC3_MAX_CHANNELS],
993                                uint8_t encoded_exp[AC3_MAX_CHANNELS][AC3_MAX_COEFS],
994                                uint8_t bap[AC3_MAX_CHANNELS][AC3_MAX_COEFS],
995                                int32_t mdct_coef[AC3_MAX_CHANNELS][AC3_MAX_COEFS],
996                                int8_t exp_shift[AC3_MAX_CHANNELS],
997                                int block_num)
998 {
999     int ch, nb_groups, group_size, i, baie, rbnd;
1000     uint8_t *p;
1001     uint16_t qmant[AC3_MAX_CHANNELS][AC3_MAX_COEFS];
1002     int exp0, exp1;
1003     int mant1_cnt, mant2_cnt, mant4_cnt;
1004     uint16_t *qmant1_ptr, *qmant2_ptr, *qmant4_ptr;
1005     int delta0, delta1, delta2;
1006
1007     for (ch = 0; ch < s->fbw_channels; ch++)
1008         put_bits(&s->pb, 1, 0); /* no block switching */
1009     for (ch = 0; ch < s->fbw_channels; ch++)
1010         put_bits(&s->pb, 1, 1); /* no dither */
1011     put_bits(&s->pb, 1, 0);     /* no dynamic range */
1012     if (!block_num) {
1013         put_bits(&s->pb, 1, 1); /* coupling strategy present */
1014         put_bits(&s->pb, 1, 0); /* no coupling strategy */
1015     } else {
1016         put_bits(&s->pb, 1, 0); /* no new coupling strategy */
1017     }
1018
1019     if (s->channel_mode == AC3_CHMODE_STEREO) {
1020         if (!block_num) {
1021             /* first block must define rematrixing (rematstr) */
1022             put_bits(&s->pb, 1, 1);
1023
1024             /* dummy rematrixing rematflg(1:4)=0 */
1025             for (rbnd = 0; rbnd < 4; rbnd++)
1026                 put_bits(&s->pb, 1, 0);
1027         } else {
1028             /* no matrixing (but should be used in the future) */
1029             put_bits(&s->pb, 1, 0);
1030         }
1031     }
1032
1033     /* exponent strategy */
1034     for (ch = 0; ch < s->fbw_channels; ch++)
1035         put_bits(&s->pb, 2, exp_strategy[ch]);
1036
1037     if (s->lfe_on)
1038         put_bits(&s->pb, 1, exp_strategy[s->lfe_channel]);
1039
1040     /* bandwidth */
1041     for (ch = 0; ch < s->fbw_channels; ch++) {
1042         if (exp_strategy[ch] != EXP_REUSE)
1043             put_bits(&s->pb, 6, s->bandwidth_code[ch]);
1044     }
1045
1046     /* exponents */
1047     for (ch = 0; ch < s->channels; ch++) {
1048         if (exp_strategy[ch] == EXP_REUSE)
1049             continue;
1050         group_size = exp_strategy[ch] + (exp_strategy[ch] == EXP_D45);
1051         nb_groups = (s->nb_coefs[ch] + (group_size * 3) - 4) / (3 * group_size);
1052         p = encoded_exp[ch];
1053
1054         /* first exponent */
1055         exp1 = *p++;
1056         put_bits(&s->pb, 4, exp1);
1057
1058         /* next ones are delta encoded */
1059         for (i = 0; i < nb_groups; i++) {
1060             /* merge three delta in one code */
1061             exp0   = exp1;
1062             exp1   = p[0];
1063             p     += group_size;
1064             delta0 = exp1 - exp0 + 2;
1065
1066             exp0   = exp1;
1067             exp1   = p[0];
1068             p     += group_size;
1069             delta1 = exp1 - exp0 + 2;
1070
1071             exp0   = exp1;
1072             exp1   = p[0];
1073             p     += group_size;
1074             delta2 = exp1 - exp0 + 2;
1075
1076             put_bits(&s->pb, 7, ((delta0 * 5 + delta1) * 5) + delta2);
1077         }
1078
1079         if (ch != s->lfe_channel)
1080             put_bits(&s->pb, 2, 0); /* no gain range info */
1081     }
1082
1083     /* bit allocation info */
1084     baie = (block_num == 0);
1085     put_bits(&s->pb, 1, baie);
1086     if (baie) {
1087         put_bits(&s->pb, 2, s->slow_decay_code);
1088         put_bits(&s->pb, 2, s->fast_decay_code);
1089         put_bits(&s->pb, 2, s->slow_gain_code);
1090         put_bits(&s->pb, 2, s->db_per_bit_code);
1091         put_bits(&s->pb, 3, s->floor_code);
1092     }
1093
1094     /* snr offset */
1095     put_bits(&s->pb, 1, baie);
1096     if (baie) {
1097         put_bits(&s->pb, 6, s->coarse_snr_offset);
1098         for (ch = 0; ch < s->channels; ch++) {
1099             put_bits(&s->pb, 4, s->fine_snr_offset[ch]);
1100             put_bits(&s->pb, 3, s->fast_gain_code[ch]);
1101         }
1102     }
1103
1104     put_bits(&s->pb, 1, 0); /* no delta bit allocation */
1105     put_bits(&s->pb, 1, 0); /* no data to skip */
1106
1107     /* mantissa encoding : we use two passes to handle the grouping. A
1108        one pass method may be faster, but it would necessitate to
1109        modify the output stream. */
1110
1111     /* first pass: quantize */
1112     mant1_cnt = mant2_cnt = mant4_cnt = 0;
1113     qmant1_ptr = qmant2_ptr = qmant4_ptr = NULL;
1114
1115     for (ch = 0; ch < s->channels; ch++) {
1116         int b, c, e, v;
1117
1118         for (i = 0; i < s->nb_coefs[ch]; i++) {
1119             c = mdct_coef[ch][i];
1120             e = encoded_exp[ch][i] - exp_shift[ch];
1121             b = bap[ch][i];
1122             switch (b) {
1123             case 0:
1124                 v = 0;
1125                 break;
1126             case 1:
1127                 v = sym_quant(c, e, 3);
1128                 switch (mant1_cnt) {
1129                 case 0:
1130                     qmant1_ptr = &qmant[ch][i];
1131                     v = 9 * v;
1132                     mant1_cnt = 1;
1133                     break;
1134                 case 1:
1135                     *qmant1_ptr += 3 * v;
1136                     mant1_cnt = 2;
1137                     v = 128;
1138                     break;
1139                 default:
1140                     *qmant1_ptr += v;
1141                     mant1_cnt = 0;
1142                     v = 128;
1143                     break;
1144                 }
1145                 break;
1146             case 2:
1147                 v = sym_quant(c, e, 5);
1148                 switch (mant2_cnt) {
1149                 case 0:
1150                     qmant2_ptr = &qmant[ch][i];
1151                     v = 25 * v;
1152                     mant2_cnt = 1;
1153                     break;
1154                 case 1:
1155                     *qmant2_ptr += 5 * v;
1156                     mant2_cnt = 2;
1157                     v = 128;
1158                     break;
1159                 default:
1160                     *qmant2_ptr += v;
1161                     mant2_cnt = 0;
1162                     v = 128;
1163                     break;
1164                 }
1165                 break;
1166             case 3:
1167                 v = sym_quant(c, e, 7);
1168                 break;
1169             case 4:
1170                 v = sym_quant(c, e, 11);
1171                 switch (mant4_cnt) {
1172                 case 0:
1173                     qmant4_ptr = &qmant[ch][i];
1174                     v = 11 * v;
1175                     mant4_cnt = 1;
1176                     break;
1177                 default:
1178                     *qmant4_ptr += v;
1179                     mant4_cnt = 0;
1180                     v = 128;
1181                     break;
1182                 }
1183                 break;
1184             case 5:
1185                 v = sym_quant(c, e, 15);
1186                 break;
1187             case 14:
1188                 v = asym_quant(c, e, 14);
1189                 break;
1190             case 15:
1191                 v = asym_quant(c, e, 16);
1192                 break;
1193             default:
1194                 v = asym_quant(c, e, b - 1);
1195                 break;
1196             }
1197             qmant[ch][i] = v;
1198         }
1199     }
1200
1201     /* second pass : output the values */
1202     for (ch = 0; ch < s->channels; ch++) {
1203         int b, q;
1204
1205         for (i = 0; i < s->nb_coefs[ch]; i++) {
1206             q = qmant[ch][i];
1207             b = bap[ch][i];
1208             switch (b) {
1209             case 0:                                         break;
1210             case 1: if (q != 128) put_bits(&s->pb,   5, q); break;
1211             case 2: if (q != 128) put_bits(&s->pb,   7, q); break;
1212             case 3:               put_bits(&s->pb,   3, q); break;
1213             case 4: if (q != 128) put_bits(&s->pb,   7, q); break;
1214             case 14:              put_bits(&s->pb,  14, q); break;
1215             case 15:              put_bits(&s->pb,  16, q); break;
1216             default:              put_bits(&s->pb, b-1, q); break;
1217             }
1218         }
1219     }
1220 }
1221
1222
1223 /** CRC-16 Polynomial */
1224 #define CRC16_POLY ((1 << 0) | (1 << 2) | (1 << 15) | (1 << 16))
1225
1226
1227 static unsigned int mul_poly(unsigned int a, unsigned int b, unsigned int poly)
1228 {
1229     unsigned int c;
1230
1231     c = 0;
1232     while (a) {
1233         if (a & 1)
1234             c ^= b;
1235         a = a >> 1;
1236         b = b << 1;
1237         if (b & (1 << 16))
1238             b ^= poly;
1239     }
1240     return c;
1241 }
1242
1243
1244 static unsigned int pow_poly(unsigned int a, unsigned int n, unsigned int poly)
1245 {
1246     unsigned int r;
1247     r = 1;
1248     while (n) {
1249         if (n & 1)
1250             r = mul_poly(r, a, poly);
1251         a = mul_poly(a, a, poly);
1252         n >>= 1;
1253     }
1254     return r;
1255 }
1256
1257
1258 /**
1259  * Fill the end of the frame with 0's and compute the two CRCs.
1260  */
1261 static void output_frame_end(AC3EncodeContext *s)
1262 {
1263     int frame_size, frame_size_58, pad_bytes, crc1, crc2, crc_inv;
1264     uint8_t *frame;
1265
1266     frame_size = s->frame_size; /* frame size in words */
1267     /* align to 8 bits */
1268     flush_put_bits(&s->pb);
1269     /* add zero bytes to reach the frame size */
1270     frame = s->pb.buf;
1271     pad_bytes = s->frame_size - (put_bits_ptr(&s->pb) - frame) - 2;
1272     assert(pad_bytes >= 0);
1273     if (pad_bytes > 0)
1274         memset(put_bits_ptr(&s->pb), 0, pad_bytes);
1275
1276     /* Now we must compute both crcs : this is not so easy for crc1
1277        because it is at the beginning of the data... */
1278     frame_size_58 = ((frame_size >> 2) + (frame_size >> 4)) << 1;
1279
1280     crc1 = av_bswap16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
1281                              frame + 4, frame_size_58 - 4));
1282
1283     /* XXX: could precompute crc_inv */
1284     crc_inv = pow_poly((CRC16_POLY >> 1), (8 * frame_size_58) - 16, CRC16_POLY);
1285     crc1    = mul_poly(crc_inv, crc1, CRC16_POLY);
1286     AV_WB16(frame + 2, crc1);
1287
1288     crc2 = av_bswap16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
1289                              frame + frame_size_58,
1290                              frame_size - frame_size_58 - 2));
1291     AV_WB16(frame + frame_size - 2, crc2);
1292 }
1293
1294
1295 /**
1296  * Write the frame to the output bitstream.
1297  */
1298 static void output_frame(AC3EncodeContext *s,
1299                          unsigned char *frame,
1300                          uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS],
1301                          uint8_t encoded_exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
1302                          uint8_t bap[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
1303                          int32_t mdct_coef[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS],
1304                          int8_t exp_shift[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS])
1305 {
1306     int blk;
1307
1308     init_put_bits(&s->pb, frame, AC3_MAX_CODED_FRAME_SIZE);
1309
1310     output_frame_header(s);
1311
1312     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
1313         output_audio_block(s, exp_strategy[blk], encoded_exp[blk],
1314                            bap[blk], mdct_coef[blk], exp_shift[blk], blk);
1315     }
1316
1317     output_frame_end(s);
1318 }
1319
1320
1321 /**
1322  * Encode a single AC-3 frame.
1323  */
1324 static int ac3_encode_frame(AVCodecContext *avctx,
1325                             unsigned char *frame, int buf_size, void *data)
1326 {
1327     AC3EncodeContext *s = avctx->priv_data;
1328     const int16_t *samples = data;
1329     int16_t planar_samples[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE+AC3_FRAME_SIZE];
1330     int32_t mdct_coef[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS];
1331     uint8_t exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS];
1332     uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS];
1333     uint8_t encoded_exp[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS];
1334     uint8_t bap[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS];
1335     int8_t exp_shift[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS];
1336     int frame_bits;
1337
1338     if (s->bit_alloc.sr_code == 1)
1339         adjust_frame_size(s);
1340
1341     deinterleave_input_samples(s, samples, planar_samples);
1342
1343     apply_mdct(s, planar_samples, exp_shift, mdct_coef);
1344
1345     frame_bits = process_exponents(s, mdct_coef, exp_shift, exp, exp_strategy, encoded_exp);
1346
1347     compute_bit_allocation(s, bap, encoded_exp, exp_strategy, frame_bits);
1348
1349     output_frame(s, frame, exp_strategy, encoded_exp, bap, mdct_coef, exp_shift);
1350
1351     return s->frame_size;
1352 }
1353
1354
1355 /**
1356  * Finalize encoding and free any memory allocated by the encoder.
1357  */
1358 static av_cold int ac3_encode_close(AVCodecContext *avctx)
1359 {
1360     av_freep(&avctx->coded_frame);
1361     return 0;
1362 }
1363
1364
1365 /**
1366  * Set channel information during initialization.
1367  */
1368 static av_cold int set_channel_info(AC3EncodeContext *s, int channels,
1369                                     int64_t *channel_layout)
1370 {
1371     int ch_layout;
1372
1373     if (channels < 1 || channels > AC3_MAX_CHANNELS)
1374         return AVERROR(EINVAL);
1375     if ((uint64_t)*channel_layout > 0x7FF)
1376         return AVERROR(EINVAL);
1377     ch_layout = *channel_layout;
1378     if (!ch_layout)
1379         ch_layout = avcodec_guess_channel_layout(channels, CODEC_ID_AC3, NULL);
1380     if (av_get_channel_layout_nb_channels(ch_layout) != channels)
1381         return AVERROR(EINVAL);
1382
1383     s->lfe_on       = !!(ch_layout & AV_CH_LOW_FREQUENCY);
1384     s->channels     = channels;
1385     s->fbw_channels = channels - s->lfe_on;
1386     s->lfe_channel  = s->lfe_on ? s->fbw_channels : -1;
1387     if (s->lfe_on)
1388         ch_layout -= AV_CH_LOW_FREQUENCY;
1389
1390     switch (ch_layout) {
1391     case AV_CH_LAYOUT_MONO:           s->channel_mode = AC3_CHMODE_MONO;   break;
1392     case AV_CH_LAYOUT_STEREO:         s->channel_mode = AC3_CHMODE_STEREO; break;
1393     case AV_CH_LAYOUT_SURROUND:       s->channel_mode = AC3_CHMODE_3F;     break;
1394     case AV_CH_LAYOUT_2_1:            s->channel_mode = AC3_CHMODE_2F1R;   break;
1395     case AV_CH_LAYOUT_4POINT0:        s->channel_mode = AC3_CHMODE_3F1R;   break;
1396     case AV_CH_LAYOUT_QUAD:
1397     case AV_CH_LAYOUT_2_2:            s->channel_mode = AC3_CHMODE_2F2R;   break;
1398     case AV_CH_LAYOUT_5POINT0:
1399     case AV_CH_LAYOUT_5POINT0_BACK:   s->channel_mode = AC3_CHMODE_3F2R;   break;
1400     default:
1401         return AVERROR(EINVAL);
1402     }
1403
1404     s->channel_map  = ff_ac3_enc_channel_map[s->channel_mode][s->lfe_on];
1405     *channel_layout = ch_layout;
1406     if (s->lfe_on)
1407         *channel_layout |= AV_CH_LOW_FREQUENCY;
1408
1409     return 0;
1410 }
1411
1412
1413 static av_cold int validate_options(AVCodecContext *avctx, AC3EncodeContext *s)
1414 {
1415     int i, ret;
1416
1417     /* validate channel layout */
1418     if (!avctx->channel_layout) {
1419         av_log(avctx, AV_LOG_WARNING, "No channel layout specified. The "
1420                                       "encoder will guess the layout, but it "
1421                                       "might be incorrect.\n");
1422     }
1423     ret = set_channel_info(s, avctx->channels, &avctx->channel_layout);
1424     if (ret) {
1425         av_log(avctx, AV_LOG_ERROR, "invalid channel layout\n");
1426         return ret;
1427     }
1428
1429     /* validate sample rate */
1430     for (i = 0; i < 9; i++) {
1431         if ((ff_ac3_sample_rate_tab[i / 3] >> (i % 3)) == avctx->sample_rate)
1432             break;
1433     }
1434     if (i == 9) {
1435         av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1436         return AVERROR(EINVAL);
1437     }
1438     s->sample_rate        = avctx->sample_rate;
1439     s->bit_alloc.sr_shift = i % 3;
1440     s->bit_alloc.sr_code  = i / 3;
1441
1442     /* validate bit rate */
1443     for (i = 0; i < 19; i++) {
1444         if ((ff_ac3_bitrate_tab[i] >> s->bit_alloc.sr_shift)*1000 == avctx->bit_rate)
1445             break;
1446     }
1447     if (i == 19) {
1448         av_log(avctx, AV_LOG_ERROR, "invalid bit rate\n");
1449         return AVERROR(EINVAL);
1450     }
1451     s->bit_rate        = avctx->bit_rate;
1452     s->frame_size_code = i << 1;
1453
1454     return 0;
1455 }
1456
1457
1458 /**
1459  * Set bandwidth for all channels.
1460  * The user can optionally supply a cutoff frequency. Otherwise an appropriate
1461  * default value will be used.
1462  */
1463 static av_cold void set_bandwidth(AC3EncodeContext *s, int cutoff)
1464 {
1465     int ch, bw_code;
1466
1467     if (cutoff) {
1468         /* calculate bandwidth based on user-specified cutoff frequency */
1469         int fbw_coeffs;
1470         cutoff         = av_clip(cutoff, 1, s->sample_rate >> 1);
1471         fbw_coeffs     = cutoff * 2 * AC3_MAX_COEFS / s->sample_rate;
1472         bw_code        = av_clip((fbw_coeffs - 73) / 3, 0, 60);
1473     } else {
1474         /* use default bandwidth setting */
1475         /* XXX: should compute the bandwidth according to the frame
1476            size, so that we avoid annoying high frequency artifacts */
1477         bw_code = 50;
1478     }
1479
1480     /* set number of coefficients for each channel */
1481     for (ch = 0; ch < s->fbw_channels; ch++) {
1482         s->bandwidth_code[ch] = bw_code;
1483         s->nb_coefs[ch]       = bw_code * 3 + 73;
1484     }
1485     if (s->lfe_on)
1486         s->nb_coefs[s->lfe_channel] = 7; /* LFE channel always has 7 coefs */
1487 }
1488
1489
1490 /**
1491  * Initialize the encoder.
1492  */
1493 static av_cold int ac3_encode_init(AVCodecContext *avctx)
1494 {
1495     AC3EncodeContext *s = avctx->priv_data;
1496     int ret;
1497
1498     avctx->frame_size = AC3_FRAME_SIZE;
1499
1500     ac3_common_init();
1501
1502     ret = validate_options(avctx, s);
1503     if (ret)
1504         return ret;
1505
1506     s->bitstream_id   = 8 + s->bit_alloc.sr_shift;
1507     s->bitstream_mode = 0; /* complete main audio service */
1508
1509     s->frame_size_min  = 2 * ff_ac3_frame_size_tab[s->frame_size_code][s->bit_alloc.sr_code];
1510     s->bits_written    = 0;
1511     s->samples_written = 0;
1512     s->frame_size      = s->frame_size_min;
1513
1514     set_bandwidth(s, avctx->cutoff);
1515
1516     /* initial snr offset */
1517     s->coarse_snr_offset = 40;
1518
1519     mdct_init(9);
1520
1521     avctx->coded_frame= avcodec_alloc_frame();
1522     avctx->coded_frame->key_frame= 1;
1523
1524     return 0;
1525 }
1526
1527
1528 #ifdef TEST
1529 /*************************************************************************/
1530 /* TEST */
1531
1532 #include "libavutil/lfg.h"
1533
1534 #define FN (MDCT_SAMPLES/4)
1535
1536
1537 static void fft_test(AVLFG *lfg)
1538 {
1539     IComplex in[FN], in1[FN];
1540     int k, n, i;
1541     float sum_re, sum_im, a;
1542
1543     for (i = 0; i < FN; i++) {
1544         in[i].re = av_lfg_get(lfg) % 65535 - 32767;
1545         in[i].im = av_lfg_get(lfg) % 65535 - 32767;
1546         in1[i]   = in[i];
1547     }
1548     fft(in, 7);
1549
1550     /* do it by hand */
1551     for (k = 0; k < FN; k++) {
1552         sum_re = 0;
1553         sum_im = 0;
1554         for (n = 0; n < FN; n++) {
1555             a = -2 * M_PI * (n * k) / FN;
1556             sum_re += in1[n].re * cos(a) - in1[n].im * sin(a);
1557             sum_im += in1[n].re * sin(a) + in1[n].im * cos(a);
1558         }
1559         av_log(NULL, AV_LOG_DEBUG, "%3d: %6d,%6d %6.0f,%6.0f\n",
1560                k, in[k].re, in[k].im, sum_re / FN, sum_im / FN);
1561     }
1562 }
1563
1564
1565 static void mdct_test(AVLFG *lfg)
1566 {
1567     int16_t input[MDCT_SAMPLES];
1568     int32_t output[AC3_MAX_COEFS];
1569     float input1[MDCT_SAMPLES];
1570     float output1[AC3_MAX_COEFS];
1571     float s, a, err, e, emax;
1572     int i, k, n;
1573
1574     for (i = 0; i < MDCT_SAMPLES; i++) {
1575         input[i]  = (av_lfg_get(lfg) % 65535 - 32767) * 9 / 10;
1576         input1[i] = input[i];
1577     }
1578
1579     mdct512(output, input);
1580
1581     /* do it by hand */
1582     for (k = 0; k < AC3_MAX_COEFS; k++) {
1583         s = 0;
1584         for (n = 0; n < MDCT_SAMPLES; n++) {
1585             a = (2*M_PI*(2*n+1+MDCT_SAMPLES/2)*(2*k+1) / (4 * MDCT_SAMPLES));
1586             s += input1[n] * cos(a);
1587         }
1588         output1[k] = -2 * s / MDCT_SAMPLES;
1589     }
1590
1591     err  = 0;
1592     emax = 0;
1593     for (i = 0; i < AC3_MAX_COEFS; i++) {
1594         av_log(NULL, AV_LOG_DEBUG, "%3d: %7d %7.0f\n", i, output[i], output1[i]);
1595         e = output[i] - output1[i];
1596         if (e > emax)
1597             emax = e;
1598         err += e * e;
1599     }
1600     av_log(NULL, AV_LOG_DEBUG, "err2=%f emax=%f\n", err / AC3_MAX_COEFS, emax);
1601 }
1602
1603
1604 int main(void)
1605 {
1606     AVLFG lfg;
1607
1608     av_log_set_level(AV_LOG_DEBUG);
1609     mdct_init(9);
1610
1611     fft_test(&lfg);
1612     mdct_test(&lfg);
1613
1614     return 0;
1615 }
1616 #endif /* TEST */
1617
1618
1619 AVCodec ac3_encoder = {
1620     "ac3",
1621     AVMEDIA_TYPE_AUDIO,
1622     CODEC_ID_AC3,
1623     sizeof(AC3EncodeContext),
1624     ac3_encode_init,
1625     ac3_encode_frame,
1626     ac3_encode_close,
1627     NULL,
1628     .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
1629     .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
1630     .channel_layouts = (const int64_t[]){
1631         AV_CH_LAYOUT_MONO,
1632         AV_CH_LAYOUT_STEREO,
1633         AV_CH_LAYOUT_2_1,
1634         AV_CH_LAYOUT_SURROUND,
1635         AV_CH_LAYOUT_2_2,
1636         AV_CH_LAYOUT_QUAD,
1637         AV_CH_LAYOUT_4POINT0,
1638         AV_CH_LAYOUT_5POINT0,
1639         AV_CH_LAYOUT_5POINT0_BACK,
1640        (AV_CH_LAYOUT_MONO     | AV_CH_LOW_FREQUENCY),
1641        (AV_CH_LAYOUT_STEREO   | AV_CH_LOW_FREQUENCY),
1642        (AV_CH_LAYOUT_2_1      | AV_CH_LOW_FREQUENCY),
1643        (AV_CH_LAYOUT_SURROUND | AV_CH_LOW_FREQUENCY),
1644        (AV_CH_LAYOUT_2_2      | AV_CH_LOW_FREQUENCY),
1645        (AV_CH_LAYOUT_QUAD     | AV_CH_LOW_FREQUENCY),
1646        (AV_CH_LAYOUT_4POINT0  | AV_CH_LOW_FREQUENCY),
1647         AV_CH_LAYOUT_5POINT1,
1648         AV_CH_LAYOUT_5POINT1_BACK,
1649         0 },
1650 };