ac3enc.c
上传用户:jxp0626
上传日期:2007-01-08
资源大小:102k
文件大小:39k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Unix_Linux

  1. /*
  2.  * The simplest AC3 encoder
  3.  * Copyright (c) 2000 Gerard Lantau.
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19. #include <stdlib.h>
  20. #include <stdio.h>
  21. #include <netinet/in.h>
  22. #include <math.h>
  23. #include "avcodec.h"
  24. #include "ac3enc.h"
  25. #include "ac3tab.h"
  26. //#define DEBUG
  27. //#define DEBUG_BITALLOC
  28. #define NDEBUG
  29. #include <assert.h>
  30. #define MDCT_NBITS 9
  31. #define N         (1 << MDCT_NBITS)
  32. #define NB_BLOCKS 6 /* number of PCM blocks inside an AC3 frame */
  33. /* new exponents are sent if their Norm 1 exceed this number */
  34. #define EXP_DIFF_THRESHOLD 1000
  35. /* exponent encoding strategy */
  36. #define EXP_REUSE 0
  37. #define EXP_NEW   1
  38. #define EXP_D15   1
  39. #define EXP_D25   2
  40. #define EXP_D45   3
  41. static void fft_init(int ln);
  42. static void ac3_crc_init(void);
  43. static inline INT16 fix15(float a)
  44. {
  45.     int v;
  46.     v = (int)(a * (float)(1 << 15));
  47.     if (v < -32767)
  48.         v = -32767;
  49.     else if (v > 32767) 
  50.         v = 32767;
  51.     return v;
  52. }
  53. static inline int calc_lowcomp1(int a, int b0, int b1)
  54. {
  55.     if ((b0 + 256) == b1) {
  56.         a = 384 ;
  57.     } else if (b0 > b1) { 
  58.         a = a - 64;
  59.         if (a < 0) a=0;
  60.     }
  61.     return a;
  62. }
  63. static inline int calc_lowcomp(int a, int b0, int b1, int bin)
  64. {
  65.     if (bin < 7) {
  66.         if ((b0 + 256) == b1) {
  67.             a = 384 ;
  68.         } else if (b0 > b1) { 
  69.             a = a - 64;
  70.             if (a < 0) a=0;
  71.         }
  72.     } else if (bin < 20) {
  73.         if ((b0 + 256) == b1) {
  74.             a = 320 ;
  75.         } else if (b0 > b1) {
  76.             a= a - 64;
  77.             if (a < 0) a=0;
  78.         }
  79.     } else {
  80.         a = a - 128;
  81.         if (a < 0) a=0;
  82.     }
  83.     return a;
  84. }
  85. /* AC3 bit allocation. The algorithm is the one described in the AC3
  86.    spec with some optimizations because of our simplified encoding
  87.    assumptions. */
  88. void parametric_bit_allocation(AC3EncodeContext *s, UINT8 *bap,
  89.                                INT8 *exp, int start, int end,
  90.                                int snroffset, int fgain)
  91. {
  92.     int bin,i,j,k,end1,v,v1,bndstrt,bndend,lowcomp,begin;
  93.     int fastleak,slowleak,address,tmp;
  94.     INT16 psd[256]; /* scaled exponents */
  95.     INT16 bndpsd[50]; /* interpolated exponents */
  96.     INT16 excite[50]; /* excitation */
  97.     INT16 mask[50];   /* masking value */
  98.     /* exponent mapping to PSD */
  99.     for(bin=start;bin<end;bin++) {
  100.         psd[bin]=(3072 - (exp[bin] << 7));
  101.     }
  102.     /* PSD integration */
  103.     j=start;
  104.     k=masktab[start];
  105.     do {
  106.         v=psd[j];
  107.         j++;
  108.         end1=bndtab[k+1];
  109.         if (end1 > end) end1=end;
  110.         for(i=j;i<end1;i++) {
  111.             int c,adr;
  112.             /* logadd */
  113.             v1=psd[j];
  114.             c=v-v1;
  115.             if (c >= 0) {
  116.                 adr=c >> 1;
  117.                 if (adr > 255) adr=255;
  118.                 v=v + latab[adr];
  119.             } else {
  120.                 adr=(-c) >> 1;
  121.                 if (adr > 255) adr=255;
  122.                 v=v1 + latab[adr];
  123.             }
  124.             j++;
  125.         }
  126.         bndpsd[k]=v;
  127.         k++;
  128.     } while (end > bndtab[k]);
  129.     /* excitation function */
  130.     bndstrt = masktab[start];
  131.     bndend = masktab[end-1] + 1;
  132.     
  133.     lowcomp = 0;
  134.     lowcomp = calc_lowcomp1(lowcomp, bndpsd[0], bndpsd[1]) ;
  135.     excite[0] = bndpsd[0] - fgain - lowcomp ;
  136.     lowcomp = calc_lowcomp1(lowcomp, bndpsd[1], bndpsd[2]) ;
  137.     excite[1] = bndpsd[1] - fgain - lowcomp ;
  138.     begin = 7 ;
  139.     for (bin = 2; bin < 7; bin++) {
  140.         lowcomp = calc_lowcomp1(lowcomp, bndpsd[bin], bndpsd[bin+1]) ;
  141.         fastleak = bndpsd[bin] - fgain ;
  142.         slowleak = bndpsd[bin] - s->sgain ;
  143.         excite[bin] = fastleak - lowcomp ;
  144.         if (bndpsd[bin] <= bndpsd[bin+1]) {
  145.             begin = bin + 1 ;
  146.             break ;
  147.         }
  148.     }
  149.     
  150.     end1=bndend;
  151.     if (end1 > 22) end1=22;
  152.     
  153.     for (bin = begin; bin < end1; bin++) {
  154.         lowcomp = calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin+1], bin) ;
  155.         
  156.         fastleak -= s->fdecay ;
  157.         v = bndpsd[bin] - fgain;
  158.         if (fastleak < v) fastleak = v;
  159.         
  160.         slowleak -= s->sdecay ;
  161.         v = bndpsd[bin] - s->sgain;
  162.         if (slowleak < v) slowleak = v;
  163.         
  164.         v=fastleak - lowcomp;
  165.         if (slowleak > v) v=slowleak;
  166.         
  167.         excite[bin] = v;
  168.     }
  169.     for (bin = 22; bin < bndend; bin++) {
  170.         fastleak -= s->fdecay ;
  171.         v = bndpsd[bin] - fgain;
  172.         if (fastleak < v) fastleak = v;
  173.         slowleak -= s->sdecay ;
  174.         v = bndpsd[bin] - s->sgain;
  175.         if (slowleak < v) slowleak = v;
  176.         v=fastleak;
  177.         if (slowleak > v) v = slowleak;
  178.         excite[bin] = v;
  179.     }
  180.     /* compute masking curve */
  181.     for (bin = bndstrt; bin < bndend; bin++) {
  182.         v1 = excite[bin];
  183.         tmp = s->dbknee - bndpsd[bin];
  184.         if (tmp > 0) {
  185.             v1 += tmp >> 2;
  186.         }
  187.         v=hth[bin >> s->halfratecod][s->fscod];
  188.         if (v1 > v) v=v1;
  189.         mask[bin] = v;
  190.     }
  191.     /* compute bit allocation */
  192.     
  193.     i = start ;
  194.     j = masktab[start] ;
  195.     do {
  196.         v=mask[j];
  197.         v -= snroffset ;
  198.         v -= s->floor ;
  199.         if (v < 0) v = 0;
  200.         v &= 0x1fe0 ;
  201.         v += s->floor ;
  202.         end1=bndtab[j] + bndsz[j];
  203.         if (end1 > end) end1=end;
  204.         for (k = i; k < end1; k++) {
  205.             address = (psd[i] - v) >> 5 ;
  206.             if (address < 0) address=0;
  207.             else if (address > 63) address=63;
  208.             bap[i] = baptab[address];
  209.             i++;
  210.         }
  211.     } while (end > bndtab[j++]) ;
  212. }
  213. typedef struct IComplex {
  214.     short re,im;
  215. } IComplex;
  216. static void fft_init(int ln)
  217. {
  218.     int i, j, m, n;
  219.     float alpha;
  220.     n = 1 << ln;
  221.     for(i=0;i<(n/2);i++) {
  222.         alpha = 2 * M_PI * (float)i / (float)n;
  223.         costab[i] = fix15(cos(alpha));
  224.         sintab[i] = fix15(sin(alpha));
  225.     }
  226.     for(i=0;i<n;i++) {
  227.         m=0;
  228.         for(j=0;j<ln;j++) {
  229.             m |= ((i >> j) & 1) << (ln-j-1);
  230.         }
  231.         fft_rev[i]=m;
  232.     }
  233. }
  234. /* butter fly op */
  235. #define BF(pre, pim, qre, qim, pre1, pim1, qre1, qim1) 
  236. {
  237.   int ax, ay, bx, by;
  238.   bx=pre1;
  239.   by=pim1;
  240.   ax=qre1;
  241.   ay=qim1;
  242.   pre = (bx + ax) >> 1;
  243.   pim = (by + ay) >> 1;
  244.   qre = (bx - ax) >> 1;
  245.   qim = (by - ay) >> 1;
  246. }
  247. #define MUL16(a,b) ((a) * (b))
  248. #define CMUL(pre, pim, are, aim, bre, bim) 
  249. {
  250.    pre = (MUL16(are, bre) - MUL16(aim, bim)) >> 15;
  251.    pim = (MUL16(are, bim) + MUL16(bre, aim)) >> 15;
  252. }
  253. /* do a 2^n point complex fft on 2^ln points. */
  254. static void fft(IComplex *z, int ln)
  255. {
  256.     int j, l, np, np2;
  257.     int nblocks, nloops;
  258.     register IComplex *p,*q;
  259.     int tmp_re, tmp_im;
  260.     np = 1 << ln;
  261.     /* reverse */
  262.     for(j=0;j<np;j++) {
  263.         int k;
  264.         IComplex tmp;
  265.         k = fft_rev[j];
  266.         if (k < j) {
  267.             tmp = z[k];
  268.             z[k] = z[j];
  269.             z[j] = tmp;
  270.         }
  271.     }
  272.     /* pass 0 */
  273.     p=&z[0];
  274.     j=(np >> 1);
  275.     do {
  276.         BF(p[0].re, p[0].im, p[1].re, p[1].im, 
  277.            p[0].re, p[0].im, p[1].re, p[1].im);
  278.         p+=2;
  279.     } while (--j != 0);
  280.     /* pass 1 */
  281.     p=&z[0];
  282.     j=np >> 2;
  283.     do {
  284.         BF(p[0].re, p[0].im, p[2].re, p[2].im, 
  285.            p[0].re, p[0].im, p[2].re, p[2].im);
  286.         BF(p[1].re, p[1].im, p[3].re, p[3].im, 
  287.            p[1].re, p[1].im, p[3].im, -p[3].re);
  288.         p+=4;
  289.     } while (--j != 0);
  290.     /* pass 2 .. ln-1 */
  291.     nblocks = np >> 3;
  292.     nloops = 1 << 2;
  293.     np2 = np >> 1;
  294.     do {
  295.         p = z;
  296.         q = z + nloops;
  297.         for (j = 0; j < nblocks; ++j) {
  298.             BF(p->re, p->im, q->re, q->im,
  299.                p->re, p->im, q->re, q->im);
  300.             
  301.             p++;
  302.             q++;
  303.             for(l = nblocks; l < np2; l += nblocks) {
  304.                 CMUL(tmp_re, tmp_im, costab[l], -sintab[l], q->re, q->im);
  305.                 BF(p->re, p->im, q->re, q->im,
  306.                    p->re, p->im, tmp_re, tmp_im);
  307.                 p++;
  308.                 q++;
  309.             }
  310.             p += nloops;
  311.             q += nloops;
  312.         }
  313.         nblocks = nblocks >> 1;
  314.         nloops = nloops << 1;
  315.     } while (nblocks != 0);
  316. }
  317. /* do a 512 point mdct */
  318. static void mdct512(INT32 *out, INT16 *in)
  319. {
  320.     int i, re, im, re1, im1;
  321.     INT16 rot[N]; 
  322.     IComplex x[N/4];
  323.     /* shift to simplify computations */
  324.     for(i=0;i<N/4;i++)
  325.         rot[i] = -in[i + 3*N/4];
  326.     for(i=N/4;i<N;i++)
  327.         rot[i] = in[i - N/4];
  328.         
  329.     /* pre rotation */
  330.     for(i=0;i<N/4;i++) {
  331.         re = ((int)rot[2*i] - (int)rot[N-1-2*i]) >> 1;
  332.         im = -((int)rot[N/2+2*i] - (int)rot[N/2-1-2*i]) >> 1;
  333.         CMUL(x[i].re, x[i].im, re, im, -xcos1[i], xsin1[i]);
  334.     }
  335.     fft(x, MDCT_NBITS - 2);
  336.   
  337.     /* post rotation */
  338.     for(i=0;i<N/4;i++) {
  339.         re = x[i].re;
  340.         im = x[i].im;
  341.         CMUL(re1, im1, re, im, xsin1[i], xcos1[i]);
  342.         out[2*i] = im1;
  343.         out[N/2-1-2*i] = re1;
  344.     }
  345. }
  346. /* XXX: use another norm ? */
  347. static int calc_exp_diff(UINT8 *exp1, UINT8 *exp2, int n)
  348. {
  349.     int sum, i;
  350.     sum = 0;
  351.     for(i=0;i<n;i++) {
  352.         sum += abs(exp1[i] - exp2[i]);
  353.     }
  354.     return sum;
  355. }
  356. static void compute_exp_strategy(UINT8 exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS],
  357.                                  UINT8 exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  358.                                  int ch)
  359. {
  360.     int i, j;
  361.     int exp_diff;
  362.     
  363.     /* estimate if the exponent variation & decide if they should be
  364.        reused in the next frame */
  365.     exp_strategy[0][ch] = EXP_NEW;
  366.     for(i=1;i<NB_BLOCKS;i++) {
  367.         exp_diff = calc_exp_diff(exp[i][ch], exp[i-1][ch], N/2);
  368. #ifdef DEBUG            
  369.         printf("exp_diff=%dn", exp_diff);
  370. #endif
  371.         if (exp_diff > EXP_DIFF_THRESHOLD)
  372.             exp_strategy[i][ch] = EXP_NEW;
  373.         else
  374.             exp_strategy[i][ch] = EXP_REUSE;
  375.     }
  376.     /* now select the encoding strategy type : if exponents are often
  377.        recoded, we use a coarse encoding */
  378.     i = 0;
  379.     while (i < NB_BLOCKS) {
  380.         j = i + 1;
  381.         while (j < NB_BLOCKS && exp_strategy[j][ch] == EXP_REUSE)
  382.             j++;
  383.         switch(j - i) {
  384.         case 1:
  385.             exp_strategy[i][ch] = EXP_D45;
  386.             break;
  387.         case 2:
  388.         case 3:
  389.             exp_strategy[i][ch] = EXP_D25;
  390.             break;
  391.         default:
  392.             exp_strategy[i][ch] = EXP_D15;
  393.             break;
  394.         }
  395.         i = j;
  396.     }
  397. }
  398. /* set exp[i] to min(exp[i], exp1[i]) */
  399. static void exponent_min(UINT8 exp[N/2], UINT8 exp1[N/2], int n)
  400. {
  401.     int i;
  402.     for(i=0;i<n;i++) {
  403.         if (exp1[i] < exp[i])
  404.             exp[i] = exp1[i];
  405.     }
  406. }
  407.                                  
  408. /* update the exponents so that they are the ones the decoder will
  409.    decode. Return the number of bits used to code the exponents */
  410. static int encode_exp(UINT8 encoded_exp[N/2], 
  411.                       UINT8 exp[N/2], 
  412.                       int nb_exps,
  413.                       int exp_strategy)
  414. {
  415.     int group_size, nb_groups, i, j, k, recurse, exp_min, delta;
  416.     UINT8 exp1[N/2];
  417.     switch(exp_strategy) {
  418.     case EXP_D15:
  419.         group_size = 1;
  420.         break;
  421.     case EXP_D25:
  422.         group_size = 2;
  423.         break;
  424.     default:
  425.     case EXP_D45:
  426.         group_size = 4;
  427.         break;
  428.     }
  429.     nb_groups = ((nb_exps + (group_size * 3) - 4) / (3 * group_size)) * 3;
  430.     /* for each group, compute the minimum exponent */
  431.     exp1[0] = exp[0]; /* DC exponent is handled separately */
  432.     k = 1;
  433.     for(i=1;i<=nb_groups;i++) {
  434.         exp_min = exp[k];
  435.         assert(exp_min >= 0 && exp_min <= 24);
  436.         for(j=1;j<group_size;j++) {
  437.             if (exp[k+j] < exp_min)
  438.                 exp_min = exp[k+j];
  439.         }
  440.         exp1[i] = exp_min;
  441.         k += group_size;
  442.     }
  443.     /* constraint for DC exponent */
  444.     if (exp1[0] > 15)
  445.         exp1[0] = 15;
  446.     /* Iterate until the delta constraints between each groups are
  447.        satisfyed. I'm sure it is possible to find a better algorithm,
  448.        but I am lazy */
  449.     do {
  450.         recurse = 0;
  451.         for(i=1;i<=nb_groups;i++) {
  452.             delta = exp1[i] - exp1[i-1];
  453.             if (delta > 2) {
  454.                 /* if delta too big, we encode a smaller exponent */
  455.                 exp1[i] = exp1[i-1] + 2;
  456.             } else if (delta < -2) {
  457.                 /* if delta is too small, we must decrease the previous
  458.                exponent, which means we must recurse */
  459.                 recurse = 1;
  460.                 exp1[i-1] = exp1[i] + 2;
  461.             }
  462.         }
  463.     } while (recurse);
  464.     
  465.     /* now we have the exponent values the decoder will see */
  466.     encoded_exp[0] = exp1[0];
  467.     k = 1;
  468.     for(i=1;i<=nb_groups;i++) {
  469.         for(j=0;j<group_size;j++) {
  470.             encoded_exp[k+j] = exp1[i];
  471.         }
  472.         k += group_size;
  473.     }
  474.     
  475. #if defined(DEBUG)
  476.     printf("exponents: strategy=%dn", exp_strategy);
  477.     for(i=0;i<=nb_groups * group_size;i++) {
  478.         printf("%d ", encoded_exp[i]);
  479.     }
  480.     printf("n");
  481. #endif
  482.     return 4 + (nb_groups / 3) * 7;
  483. }
  484. /* return the size in bits taken by the mantissa */
  485. int compute_mantissa_size(AC3EncodeContext *s, UINT8 *m, int nb_coefs)
  486. {
  487.     int bits, mant, i;
  488.     bits = 0;
  489.     for(i=0;i<nb_coefs;i++) {
  490.         mant = m[i];
  491.         switch(mant) {
  492.         case 0:
  493.             /* nothing */
  494.             break;
  495.         case 1:
  496.             /* 3 mantissa in 5 bits */
  497.             if (s->mant1_cnt == 0) 
  498.                 bits += 5;
  499.             if (++s->mant1_cnt == 3)
  500.                 s->mant1_cnt = 0;
  501.             break;
  502.         case 2:
  503.             /* 3 mantissa in 7 bits */
  504.             if (s->mant2_cnt == 0) 
  505.                 bits += 7;
  506.             if (++s->mant2_cnt == 3)
  507.                 s->mant2_cnt = 0;
  508.             break;
  509.         case 3:
  510.             bits += 3;
  511.             break;
  512.         case 4:
  513.             /* 2 mantissa in 7 bits */
  514.             if (s->mant4_cnt == 0)
  515.                 bits += 7;
  516.             if (++s->mant4_cnt == 2) 
  517.                 s->mant4_cnt = 0;
  518.             break;
  519.         case 14:
  520.             bits += 14;
  521.             break;
  522.         case 15:
  523.             bits += 16;
  524.             break;
  525.         default:
  526.             bits += mant - 1;
  527.             break;
  528.         }
  529.     }
  530.     return bits;
  531. }
  532. static int bit_alloc(AC3EncodeContext *s,
  533.                      UINT8 bap[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  534.                      UINT8 encoded_exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  535.                      UINT8 exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS],
  536.                      int frame_bits, int csnroffst, int fsnroffst)
  537. {
  538.     int i, ch;
  539.     /* compute size */
  540.     for(i=0;i<NB_BLOCKS;i++) {
  541.         s->mant1_cnt = 0;
  542.         s->mant2_cnt = 0;
  543.         s->mant4_cnt = 0;
  544.         for(ch=0;ch<s->nb_channels;ch++) {
  545.             parametric_bit_allocation(s, bap[i][ch], encoded_exp[i][ch], 
  546.                                       0, s->nb_coefs[ch], 
  547.                                       (((csnroffst-15) << 4) + 
  548.                                        fsnroffst) << 2, 
  549.                                       fgaintab[s->fgaincod[ch]]);
  550.             frame_bits += compute_mantissa_size(s, bap[i][ch], 
  551.                                                  s->nb_coefs[ch]);
  552.         }
  553.     }
  554. #if 0
  555.     printf("csnr=%d fsnr=%d frame_bits=%d diff=%dn", 
  556.            csnroffst, fsnroffst, frame_bits, 
  557.            16 * s->frame_size - ((frame_bits + 7) & ~7));
  558. #endif
  559.     return 16 * s->frame_size - frame_bits;
  560. }
  561. #define SNR_INC1 4
  562. static int compute_bit_allocation(AC3EncodeContext *s,
  563.                                   UINT8 bap[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  564.                                   UINT8 encoded_exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  565.                                   UINT8 exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS],
  566.                                   int frame_bits)
  567. {
  568.     int i, ch;
  569.     int csnroffst, fsnroffst;
  570.     UINT8 bap1[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  571.     /* init default parameters */
  572.     s->sdecaycod = 2;
  573.     s->fdecaycod = 1;
  574.     s->sgaincod = 1;
  575.     s->dbkneecod = 2;
  576.     s->floorcod = 4;
  577.     for(ch=0;ch<s->nb_channels;ch++) 
  578.         s->fgaincod[ch] = 4;
  579.     
  580.     /* compute real values */
  581.     s->sdecay = sdecaytab[s->sdecaycod] >> s->halfratecod;
  582.     s->fdecay = fdecaytab[s->fdecaycod] >> s->halfratecod;
  583.     s->sgain = sgaintab[s->sgaincod];
  584.     s->dbknee = dbkneetab[s->dbkneecod];
  585.     s->floor = floortab[s->floorcod];
  586.     /* header size */
  587.     frame_bits += 65;
  588.     if (s->acmod == 2)
  589.         frame_bits += 2;
  590.     /* audio blocks */
  591.     for(i=0;i<NB_BLOCKS;i++) {
  592.         frame_bits += s->nb_channels * 2 + 2;
  593.         if (s->acmod == 2)
  594.             frame_bits++;
  595.         frame_bits += 2 * s->nb_channels;
  596.         for(ch=0;ch<s->nb_channels;ch++) {
  597.             if (exp_strategy[i][ch] != EXP_REUSE)
  598.                 frame_bits += 6 + 2;
  599.         }
  600.         frame_bits++; /* baie */
  601.         frame_bits++; /* snr */
  602.         frame_bits += 2; /* delta / skip */
  603.     }
  604.     frame_bits++; /* cplinu for block 0 */
  605.     /* bit alloc info */
  606.     frame_bits += 2*4 + 3 + 6 + s->nb_channels * (4 + 3);
  607.     /* CRC */
  608.     frame_bits += 16;
  609.     /* now the big work begins : do the bit allocation. Modify the snr
  610.        offset until we can pack everything in the requested frame size */
  611.     csnroffst = s->csnroffst;
  612.     while (csnroffst >= 0 && 
  613.            bit_alloc(s, bap, encoded_exp, exp_strategy, frame_bits, csnroffst, 0) < 0)
  614.         csnroffst -= SNR_INC1;
  615.     if (csnroffst < 0) {
  616.         fprintf(stderr, "Error !!!n");
  617.         return -1;
  618.     }
  619.     while ((csnroffst + SNR_INC1) <= 63 && 
  620.            bit_alloc(s, bap1, encoded_exp, exp_strategy, frame_bits, 
  621.                      csnroffst + SNR_INC1, 0) >= 0) {
  622.         csnroffst += SNR_INC1;
  623.         memcpy(bap, bap1, sizeof(bap1));
  624.     }
  625.     while ((csnroffst + 1) <= 63 && 
  626.            bit_alloc(s, bap1, encoded_exp, exp_strategy, frame_bits, csnroffst + 1, 0) >= 0) {
  627.         csnroffst++;
  628.         memcpy(bap, bap1, sizeof(bap1));
  629.     }
  630.     fsnroffst = 0;
  631.     while ((fsnroffst + SNR_INC1) <= 15 && 
  632.            bit_alloc(s, bap1, encoded_exp, exp_strategy, frame_bits, 
  633.                      csnroffst, fsnroffst + SNR_INC1) >= 0) {
  634.         fsnroffst += SNR_INC1;
  635.         memcpy(bap, bap1, sizeof(bap1));
  636.     }
  637.     while ((fsnroffst + 1) <= 15 && 
  638.            bit_alloc(s, bap1, encoded_exp, exp_strategy, frame_bits, 
  639.                      csnroffst, fsnroffst + 1) >= 0) {
  640.         fsnroffst++;
  641.         memcpy(bap, bap1, sizeof(bap1));
  642.     }
  643.     
  644.     s->csnroffst = csnroffst;
  645.     for(ch=0;ch<s->nb_channels;ch++)
  646.         s->fsnroffst[ch] = fsnroffst;
  647. #if defined(DEBUG_BITALLOC)
  648.     {
  649.         int j;
  650.         for(i=0;i<6;i++) {
  651.             for(ch=0;ch<s->nb_channels;ch++) {
  652.                 printf("Block #%d Ch%d:n", i, ch);
  653.                 printf("bap=");
  654.                 for(j=0;j<s->nb_coefs[ch];j++) {
  655.                     printf("%d ",bap[i][ch][j]);
  656.                 }
  657.                 printf("n");
  658.             }
  659.         }
  660.     }
  661. #endif
  662.     return 0;
  663. }
  664. static int AC3_encode_init(AVEncodeContext *avctx)
  665. {
  666.     int freq = avctx->rate;
  667.     int bitrate = avctx->bit_rate;
  668.     int channels = avctx->channels;
  669.     AC3EncodeContext *s = avctx->priv_data;
  670.     int i, j, k, l, ch, v;
  671.     float alpha;
  672.     static unsigned short freqs[3] = { 48000, 44100, 32000 };
  673.     avctx->frame_size = AC3_FRAME_SIZE;
  674.     avctx->key_frame = 1; /* always key frame */
  675.     
  676.     /* number of channels */
  677.     if (channels == 1)
  678.         s->acmod = 1;
  679.     else if (channels == 2)
  680.         s->acmod = 2;
  681.     else
  682.         return -1;
  683.     s->nb_channels = channels;
  684.     /* frequency */
  685.     for(i=0;i<3;i++) {
  686.         for(j=0;j<3;j++) 
  687.             if ((freqs[j] >> i) == freq)
  688.                 goto found;
  689.     }
  690.     return -1;
  691.  found:    
  692.     s->sample_rate = freq;
  693.     s->halfratecod = i;
  694.     s->fscod = j;
  695.     s->bsid = 8 + s->halfratecod;
  696.     s->bsmod = 0; /* complete main audio service */
  697.     /* bitrate & frame size */
  698.     bitrate /= 1000;
  699.     for(i=0;i<19;i++) {
  700.         if ((bitratetab[i] >> s->halfratecod) == bitrate)
  701.             break;
  702.     }
  703.     if (i == 19)
  704.         return -1;
  705.     s->bit_rate = bitrate;
  706.     s->frmsizecod = i << 1;
  707.     s->frame_size_min = (bitrate * 1000 * AC3_FRAME_SIZE) / (freq * 16);
  708.     /* for now we do not handle fractional sizes */
  709.     s->frame_size = s->frame_size_min;
  710.     
  711.     /* bit allocation init */
  712.     for(ch=0;ch<s->nb_channels;ch++) {
  713.         /* bandwidth for each channel */
  714.         /* XXX: should compute the bandwidth according to the frame
  715.            size, so that we avoid anoying high freq artefacts */
  716.         s->chbwcod[ch] = 50; /* sample bandwidth as mpeg audio layer 2 table 0 */
  717.         s->nb_coefs[ch] = ((s->chbwcod[ch] + 12) * 3) + 37;
  718.     }
  719.     /* initial snr offset */
  720.     s->csnroffst = 40;
  721.     /* compute bndtab and masktab from bandsz */
  722.     k = 0;
  723.     l = 0;
  724.     for(i=0;i<50;i++) {
  725.         bndtab[i] = l;
  726.         v = bndsz[i];
  727.         for(j=0;j<v;j++) masktab[k++]=i;
  728.         l += v;
  729.     }
  730.     bndtab[50] = 0;
  731.     /* mdct init */
  732.     fft_init(MDCT_NBITS - 2);
  733.     for(i=0;i<N/4;i++) {
  734.         alpha = 2 * M_PI * (i + 1.0 / 8.0) / (float)N;
  735.         xcos1[i] = fix15(-cos(alpha));
  736.         xsin1[i] = fix15(-sin(alpha));
  737.     }
  738.     ac3_crc_init();
  739.     return 0;
  740. }
  741. /* output the AC3 frame header */
  742. static void output_frame_header(AC3EncodeContext *s, unsigned char *frame)
  743. {
  744.     init_put_bits(&s->pb, frame, AC3_MAX_CODED_FRAME_SIZE, NULL, NULL);
  745.     put_bits(&s->pb, 16, 0x0b77); /* frame header */
  746.     put_bits(&s->pb, 16, 0); /* crc1: will be filled later */
  747.     put_bits(&s->pb, 2, s->fscod);
  748.     put_bits(&s->pb, 6, s->frmsizecod + (s->frame_size - s->frame_size_min));
  749.     put_bits(&s->pb, 5, s->bsid);
  750.     put_bits(&s->pb, 3, s->bsmod);
  751.     put_bits(&s->pb, 3, s->acmod);
  752.     if (s->acmod == 2) {
  753.         put_bits(&s->pb, 2, 0); /* surround not indicated */
  754.     }
  755.     put_bits(&s->pb, 1, 0); /* no LFE */
  756.     put_bits(&s->pb, 5, 31); /* dialog norm: -31 db */
  757.     put_bits(&s->pb, 1, 0); /* no compression control word */
  758.     put_bits(&s->pb, 1, 0); /* no lang code */
  759.     put_bits(&s->pb, 1, 0); /* no audio production info */
  760.     put_bits(&s->pb, 1, 0); /* no copyright */
  761.     put_bits(&s->pb, 1, 1); /* original bitstream */
  762.     put_bits(&s->pb, 1, 0); /* no time code 1 */
  763.     put_bits(&s->pb, 1, 0); /* no time code 2 */
  764.     put_bits(&s->pb, 1, 0); /* no addtional bit stream info */
  765. }
  766. /* symetric quantization on 'levels' levels */
  767. static inline int sym_quant(int c, int e, int levels)
  768. {
  769.     int v;
  770.     if (c >= 0) {
  771.         v = (levels * (c << e)) >> 25;
  772.         v = (levels >> 1) + v;
  773.     } else {
  774.         v = (levels * ((-c) << e)) >> 25;
  775.         v = (levels >> 1) - v;
  776.     }
  777.     assert (v >= 0 && v < levels);
  778.     return v;
  779. }
  780. /* asymetric quantization on 2^qbits levels */
  781. static inline int asym_quant(int c, int e, int qbits)
  782. {
  783.     int lshift, m, v;
  784.     lshift = e + qbits - 24;
  785.     if (lshift >= 0)
  786.         v = c << lshift;
  787.     else
  788.         v = c >> (-lshift);
  789.     /* rounding */
  790.     v = (v + 1) >> 1;
  791.     m = (1 << (qbits-1));
  792.     if (v >= m)
  793.         v = m - 1;
  794.     assert(v >= -m);
  795.     return v & ((1 << qbits)-1);
  796. }
  797. /* Output one audio block. There are NB_BLOCKS audio blocks in one AC3
  798.    frame */
  799. static void output_audio_block(AC3EncodeContext *s,
  800.                                UINT8 exp_strategy[AC3_MAX_CHANNELS],
  801.                                UINT8 encoded_exp[AC3_MAX_CHANNELS][N/2],
  802.                                UINT8 bap[AC3_MAX_CHANNELS][N/2],
  803.                                INT32 mdct_coefs[AC3_MAX_CHANNELS][N/2],
  804.                                INT8 global_exp[AC3_MAX_CHANNELS],
  805.                                int block_num)
  806. {
  807.     int ch, nb_groups, group_size, i, baie;
  808.     UINT8 *p;
  809.     UINT16 qmant[AC3_MAX_CHANNELS][N/2];
  810.     int exp0, exp1;
  811.     int mant1_cnt, mant2_cnt, mant4_cnt;
  812.     UINT16 *qmant1_ptr, *qmant2_ptr, *qmant4_ptr;
  813.     int delta0, delta1, delta2;
  814.     for(ch=0;ch<s->nb_channels;ch++) 
  815.         put_bits(&s->pb, 1, 0); /* 512 point MDCT */
  816.     for(ch=0;ch<s->nb_channels;ch++) 
  817.         put_bits(&s->pb, 1, 1); /* no dither */
  818.     put_bits(&s->pb, 1, 0); /* no dynamic range */
  819.     if (block_num == 0) {
  820.         /* for block 0, even if no coupling, we must say it. This is a
  821.            waste of bit :-) */
  822.         put_bits(&s->pb, 1, 1); /* coupling strategy present */
  823.         put_bits(&s->pb, 1, 0); /* no coupling strategy */
  824.     } else {
  825.         put_bits(&s->pb, 1, 0); /* no new coupling strategy */
  826.     }
  827.     if (s->acmod == 2) {
  828.         put_bits(&s->pb, 1, 0); /* no matrixing (but should be used in the future) */
  829.     }
  830. #if defined(DEBUG) 
  831.     {
  832.         static int count = 0;
  833.         printf("Block #%d (%d)n", block_num, count++);
  834.     }
  835. #endif
  836.     /* exponent strategy */
  837.     for(ch=0;ch<s->nb_channels;ch++) {
  838.         put_bits(&s->pb, 2, exp_strategy[ch]);
  839.     }
  840.     
  841.     for(ch=0;ch<s->nb_channels;ch++) {
  842.         if (exp_strategy[ch] != EXP_REUSE)
  843.             put_bits(&s->pb, 6, s->chbwcod[ch]);
  844.     }
  845.     
  846.     /* exponents */
  847.     for (ch = 0; ch < s->nb_channels; ch++) {
  848.         switch(exp_strategy[ch]) {
  849.         case EXP_REUSE:
  850.             continue;
  851.         case EXP_D15:
  852.             group_size = 1;
  853.             break;
  854.         case EXP_D25:
  855.             group_size = 2;
  856.             break;
  857.         default:
  858.         case EXP_D45:
  859.             group_size = 4;
  860.             break;
  861.         }
  862.         nb_groups = (s->nb_coefs[ch] + (group_size * 3) - 4) / (3 * group_size);
  863.         p = encoded_exp[ch];
  864.         /* first exponent */
  865.         exp1 = *p++;
  866.         put_bits(&s->pb, 4, exp1);
  867.         /* next ones are delta encoded */
  868.         for(i=0;i<nb_groups;i++) {
  869.             /* merge three delta in one code */
  870.             exp0 = exp1;
  871.             exp1 = p[0];
  872.             p += group_size;
  873.             delta0 = exp1 - exp0 + 2;
  874.             exp0 = exp1;
  875.             exp1 = p[0];
  876.             p += group_size;
  877.             delta1 = exp1 - exp0 + 2;
  878.             exp0 = exp1;
  879.             exp1 = p[0];
  880.             p += group_size;
  881.             delta2 = exp1 - exp0 + 2;
  882.             put_bits(&s->pb, 7, ((delta0 * 5 + delta1) * 5) + delta2);
  883.         }
  884.         put_bits(&s->pb, 2, 0); /* no gain range info */
  885.     }
  886.     /* bit allocation info */
  887.     baie = (block_num == 0);
  888.     put_bits(&s->pb, 1, baie);
  889.     if (baie) {
  890.         put_bits(&s->pb, 2, s->sdecaycod);
  891.         put_bits(&s->pb, 2, s->fdecaycod);
  892.         put_bits(&s->pb, 2, s->sgaincod);
  893.         put_bits(&s->pb, 2, s->dbkneecod);
  894.         put_bits(&s->pb, 3, s->floorcod);
  895.     }
  896.     /* snr offset */
  897.     put_bits(&s->pb, 1, baie); /* always present with bai */
  898.     if (baie) {
  899.         put_bits(&s->pb, 6, s->csnroffst);
  900.         for(ch=0;ch<s->nb_channels;ch++) {
  901.             put_bits(&s->pb, 4, s->fsnroffst[ch]);
  902.             put_bits(&s->pb, 3, s->fgaincod[ch]);
  903.         }
  904.     }
  905.     
  906.     put_bits(&s->pb, 1, 0); /* no delta bit allocation */
  907.     put_bits(&s->pb, 1, 0); /* no data to skip */
  908.     /* mantissa encoding : we use two passes to handle the grouping. A
  909.        one pass method may be faster, but it would necessitate to
  910.        modify the output stream. */
  911.     /* first pass: quantize */
  912.     mant1_cnt = mant2_cnt = mant4_cnt = 0;
  913.     qmant1_ptr = qmant2_ptr = qmant4_ptr = NULL;
  914.     for (ch = 0; ch < s->nb_channels; ch++) {
  915.         int b, c, e, v;
  916.         for(i=0;i<s->nb_coefs[ch];i++) {
  917.             c = mdct_coefs[ch][i];
  918.             e = encoded_exp[ch][i] - global_exp[ch];
  919.             b = bap[ch][i];
  920.             switch(b) {
  921.             case 0:
  922.                 v = 0;
  923.                 break;
  924.             case 1:
  925.                 v = sym_quant(c, e, 3);
  926.                 switch(mant1_cnt) {
  927.                 case 0:
  928.                     qmant1_ptr = &qmant[ch][i];
  929.                     v = 9 * v;
  930.                     mant1_cnt = 1;
  931.                     break;
  932.                 case 1:
  933.                     *qmant1_ptr += 3 * v;
  934.                     mant1_cnt = 2;
  935.                     v = 128;
  936.                     break;
  937.                 default:
  938.                     *qmant1_ptr += v;
  939.                     mant1_cnt = 0;
  940.                     v = 128;
  941.                     break;
  942.                 }
  943.                 break;
  944.             case 2:
  945.                 v = sym_quant(c, e, 5);
  946.                 switch(mant2_cnt) {
  947.                 case 0:
  948.                     qmant2_ptr = &qmant[ch][i];
  949.                     v = 25 * v;
  950.                     mant2_cnt = 1;
  951.                     break;
  952.                 case 1:
  953.                     *qmant2_ptr += 5 * v;
  954.                     mant2_cnt = 2;
  955.                     v = 128;
  956.                     break;
  957.                 default:
  958.                     *qmant2_ptr += v;
  959.                     mant2_cnt = 0;
  960.                     v = 128;
  961.                     break;
  962.                 }
  963.                 break;
  964.             case 3:
  965.                 v = sym_quant(c, e, 7);
  966.                 break;
  967.             case 4:
  968.                 v = sym_quant(c, e, 11);
  969.                 switch(mant4_cnt) {
  970.                 case 0:
  971.                     qmant4_ptr = &qmant[ch][i];
  972.                     v = 11 * v;
  973.                     mant4_cnt = 1;
  974.                     break;
  975.                 default:
  976.                     *qmant4_ptr += v;
  977.                     mant4_cnt = 0;
  978.                     v = 128;
  979.                     break;
  980.                 }
  981.                 break;
  982.             case 5:
  983.                 v = sym_quant(c, e, 15);
  984.                 break;
  985.             case 14:
  986.                 v = asym_quant(c, e, 14);
  987.                 break;
  988.             case 15:
  989.                 v = asym_quant(c, e, 16);
  990.                 break;
  991.             default:
  992.                 v = asym_quant(c, e, b - 1);
  993.                 break;
  994.             }
  995.             qmant[ch][i] = v;
  996.         }
  997.     }
  998.     /* second pass : output the values */
  999.     for (ch = 0; ch < s->nb_channels; ch++) {
  1000.         int b, q;
  1001.         
  1002.         for(i=0;i<s->nb_coefs[ch];i++) {
  1003.             q = qmant[ch][i];
  1004.             b = bap[ch][i];
  1005.             switch(b) {
  1006.             case 0:
  1007.                 break;
  1008.             case 1:
  1009.                 if (q != 128) 
  1010.                     put_bits(&s->pb, 5, q);
  1011.                 break;
  1012.             case 2:
  1013.                 if (q != 128) 
  1014.                     put_bits(&s->pb, 7, q);
  1015.                 break;
  1016.             case 3:
  1017.                 put_bits(&s->pb, 3, q);
  1018.                 break;
  1019.             case 4:
  1020.                 if (q != 128)
  1021.                     put_bits(&s->pb, 7, q);
  1022.                 break;
  1023.             case 14:
  1024.                 put_bits(&s->pb, 14, q);
  1025.                 break;
  1026.             case 15:
  1027.                 put_bits(&s->pb, 16, q);
  1028.                 break;
  1029.             default:
  1030.                 put_bits(&s->pb, b - 1, q);
  1031.                 break;
  1032.             }
  1033.         }
  1034.     }
  1035. }
  1036. /* compute the ac3 crc */
  1037. #define CRC16_POLY ((1 << 0) | (1 << 2) | (1 << 15) | (1 << 16))
  1038. static void ac3_crc_init(void)
  1039. {
  1040.     unsigned int c, n, k;
  1041.     for(n=0;n<256;n++) {
  1042.         c = n << 8;
  1043.         for (k = 0; k < 8; k++) {
  1044.             if (c & (1 << 15)) 
  1045.                 c = ((c << 1) & 0xffff) ^ (CRC16_POLY & 0xffff);
  1046.             else
  1047.                 c = c << 1;
  1048.         }
  1049.         crc_table[n] = c;
  1050.     }
  1051. }
  1052. static unsigned int ac3_crc(UINT8 *data, int n, unsigned int crc)
  1053. {
  1054.     int i;
  1055.     for(i=0;i<n;i++) {
  1056.         crc = (crc_table[data[i] ^ (crc >> 8)] ^ (crc << 8)) & 0xffff;
  1057.     }
  1058.     return crc;
  1059. }
  1060. static unsigned int mul_poly(unsigned int a, unsigned int b, unsigned int poly)
  1061. {
  1062.     unsigned int c;
  1063.     c = 0;
  1064.     while (a) {
  1065.         if (a & 1)
  1066.             c ^= b;
  1067.         a = a >> 1;
  1068.         b = b << 1;
  1069.         if (b & (1 << 16))
  1070.             b ^= poly;
  1071.     }
  1072.     return c;
  1073. }
  1074. static unsigned int pow_poly(unsigned int a, unsigned int n, unsigned int poly)
  1075. {
  1076.     unsigned int r;
  1077.     r = 1;
  1078.     while (n) {
  1079.         if (n & 1)
  1080.             r = mul_poly(r, a, poly);
  1081.         a = mul_poly(a, a, poly);
  1082.         n >>= 1;
  1083.     }
  1084.     return r;
  1085. }
  1086. /* compute log2(max(abs(tab[]))) */
  1087. static int log2_tab(INT16 *tab, int n)
  1088. {
  1089.     int i, v;
  1090.     v = 0;
  1091.     for(i=0;i<n;i++) {
  1092.         v |= abs(tab[i]);
  1093.     }
  1094.     return log2(v);
  1095. }
  1096. static void lshift_tab(INT16 *tab, int n, int lshift)
  1097. {
  1098.     int i;
  1099.     if (lshift > 0) {
  1100.         for(i=0;i<n;i++) {
  1101.             tab[i] <<= lshift;
  1102.         }
  1103.     } else if (lshift < 0) {
  1104.         lshift = -lshift;
  1105.         for(i=0;i<n;i++) {
  1106.             tab[i] >>= lshift;
  1107.         }
  1108.     }
  1109. }
  1110. /* fill the end of the frame and compute the two crcs */
  1111. static int output_frame_end(AC3EncodeContext *s)
  1112. {
  1113.     int frame_size, frame_size_58, n, crc1, crc2, crc_inv;
  1114.     UINT8 *frame;
  1115.     frame_size = s->frame_size; /* frame size in words */
  1116.     /* align to 8 bits */
  1117.     flush_put_bits(&s->pb);
  1118.     /* add zero bytes to reach the frame size */
  1119.     frame = s->pb.buf;
  1120.     n = 2 * s->frame_size - (s->pb.buf_ptr - frame) - 2;
  1121.     assert(n >= 0);
  1122.     memset(s->pb.buf_ptr, 0, n);
  1123.     
  1124.     /* Now we must compute both crcs : this is not so easy for crc1
  1125.        because it is at the beginning of the data... */
  1126.     frame_size_58 = (frame_size >> 1) + (frame_size >> 3);
  1127.     crc1 = ac3_crc(frame + 4, (2 * frame_size_58) - 4, 0);
  1128.     /* XXX: could precompute crc_inv */
  1129.     crc_inv = pow_poly((CRC16_POLY >> 1), (16 * frame_size_58) - 16, CRC16_POLY);
  1130.     crc1 = mul_poly(crc_inv, crc1, CRC16_POLY);
  1131.     frame[2] = crc1 >> 8;
  1132.     frame[3] = crc1;
  1133.     
  1134.     crc2 = ac3_crc(frame + 2 * frame_size_58, (frame_size - frame_size_58) * 2 - 2, 0);
  1135.     frame[2*frame_size - 2] = crc2 >> 8;
  1136.     frame[2*frame_size - 1] = crc2;
  1137.     //    printf("n=%d frame_size=%dn", n, frame_size);
  1138.     return frame_size * 2;
  1139. }
  1140. int AC3_encode_frame(AVEncodeContext *avctx,
  1141.                      unsigned char *frame, int buf_size, void *data)
  1142. {
  1143.     AC3EncodeContext *s = avctx->priv_data;
  1144.     short *samples = data;
  1145.     int i, j, k, v, ch;
  1146.     INT16 input_samples[N];
  1147.     INT32 mdct_coef[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  1148.     UINT8 exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  1149.     UINT8 exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS];
  1150.     UINT8 encoded_exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  1151.     UINT8 bap[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  1152.     INT8 exp_samples[NB_BLOCKS][AC3_MAX_CHANNELS];
  1153.     int frame_bits;
  1154.     frame_bits = 0;
  1155.     for(ch=0;ch<s->nb_channels;ch++) {
  1156.         /* fixed mdct to the six sub blocks & exponent computation */
  1157.         for(i=0;i<NB_BLOCKS;i++) {
  1158.             INT16 *sptr;
  1159.             int sinc;
  1160.             /* compute input samples */
  1161.             memcpy(input_samples, s->last_samples[ch], N/2 * sizeof(INT16));
  1162.             sinc = s->nb_channels;
  1163.             sptr = samples + (sinc * (N/2) * i) + ch;
  1164.             for(j=0;j<N/2;j++) {
  1165.                 v = *sptr;
  1166.                 input_samples[j + N/2] = v;
  1167.                 s->last_samples[ch][j] = v; 
  1168.                 sptr += sinc;
  1169.             }
  1170.             /* apply the MDCT window */
  1171.             for(j=0;j<N/2;j++) {
  1172.                 input_samples[j] = MUL16(input_samples[j], 
  1173.                                          ac3_window[j]) >> 15;
  1174.                 input_samples[N-j-1] = MUL16(input_samples[N-j-1], 
  1175.                                              ac3_window[j]) >> 15;
  1176.             }
  1177.         
  1178.             /* Normalize the samples to use the maximum available
  1179.                precision */
  1180.             v = 14 - log2_tab(input_samples, N);
  1181.             if (v < 0)
  1182.                 v = 0;
  1183.             exp_samples[i][ch] = v - 8;
  1184.             lshift_tab(input_samples, N, v);
  1185.             /* do the MDCT */
  1186.             mdct512(mdct_coef[i][ch], input_samples);
  1187.             
  1188.             /* compute "exponents". We take into account the
  1189.                normalization there */
  1190.             for(j=0;j<N/2;j++) {
  1191.                 int e;
  1192.                 v = abs(mdct_coef[i][ch][j]);
  1193.                 if (v == 0)
  1194.                     e = 24;
  1195.                 else {
  1196.                     e = 23 - log2(v) + exp_samples[i][ch];
  1197.                     if (e >= 24) {
  1198.                         e = 24;
  1199.                         mdct_coef[i][ch][j] = 0;
  1200.                     }
  1201.                 }
  1202.                 exp[i][ch][j] = e;
  1203.             }
  1204.         }
  1205.         
  1206.         compute_exp_strategy(exp_strategy, exp, ch);
  1207.         /* compute the exponents as the decoder will see them. The
  1208.            EXP_REUSE case must be handled carefully : we select the
  1209.            min of the exponents */
  1210.         i = 0;
  1211.         while (i < NB_BLOCKS) {
  1212.             j = i + 1;
  1213.             while (j < NB_BLOCKS && exp_strategy[j][ch] == EXP_REUSE) {
  1214.                 exponent_min(exp[i][ch], exp[j][ch], s->nb_coefs[ch]);
  1215.                 j++;
  1216.             }
  1217.             frame_bits += encode_exp(encoded_exp[i][ch],
  1218.                                      exp[i][ch], s->nb_coefs[ch], 
  1219.                                      exp_strategy[i][ch]);
  1220.             /* copy encoded exponents for reuse case */
  1221.             for(k=i+1;k<j;k++) {
  1222.                 memcpy(encoded_exp[k][ch], encoded_exp[i][ch], 
  1223.                        s->nb_coefs[ch] * sizeof(UINT8));
  1224.             }
  1225.             i = j;
  1226.         }
  1227.     }
  1228.     compute_bit_allocation(s, bap, encoded_exp, exp_strategy, frame_bits);
  1229.     /* everything is known... let's output the frame */
  1230.     output_frame_header(s, frame);
  1231.         
  1232.     for(i=0;i<NB_BLOCKS;i++) {
  1233.         output_audio_block(s, exp_strategy[i], encoded_exp[i], 
  1234.                            bap[i], mdct_coef[i], exp_samples[i], i);
  1235.     }
  1236.     return output_frame_end(s);
  1237. }
  1238. #if 0
  1239. /*************************************************************************/
  1240. /* TEST */
  1241. #define FN (N/4)
  1242. void fft_test(void)
  1243. {
  1244.     IComplex in[FN], in1[FN];
  1245.     int k, n, i;
  1246.     float sum_re, sum_im, a;
  1247.     /* FFT test */
  1248.     for(i=0;i<FN;i++) {
  1249.         in[i].re = random() % 65535 - 32767;
  1250.         in[i].im = random() % 65535 - 32767;
  1251.         in1[i] = in[i];
  1252.     }
  1253.     fft(in, 7);
  1254.     /* do it by hand */
  1255.     for(k=0;k<FN;k++) {
  1256.         sum_re = 0;
  1257.         sum_im = 0;
  1258.         for(n=0;n<FN;n++) {
  1259.             a = -2 * M_PI * (n * k) / FN;
  1260.             sum_re += in1[n].re * cos(a) - in1[n].im * sin(a);
  1261.             sum_im += in1[n].re * sin(a) + in1[n].im * cos(a);
  1262.         }
  1263.         printf("%3d: %6d,%6d %6.0f,%6.0fn", 
  1264.                k, in[k].re, in[k].im, sum_re / FN, sum_im / FN); 
  1265.     }
  1266. }
  1267. void mdct_test(void)
  1268. {
  1269.     INT16 input[N];
  1270.     INT32 output[N/2];
  1271.     float input1[N];
  1272.     float output1[N/2];
  1273.     float s, a, err, e, emax;
  1274.     int i, k, n;
  1275.     for(i=0;i<N;i++) {
  1276.         input[i] = (random() % 65535 - 32767) * 9 / 10;
  1277.         input1[i] = input[i];
  1278.     }
  1279.     mdct512(output, input);
  1280.     
  1281.     /* do it by hand */
  1282.     for(k=0;k<N/2;k++) {
  1283.         s = 0;
  1284.         for(n=0;n<N;n++) {
  1285.             a = (2*M_PI*(2*n+1+N/2)*(2*k+1) / (4 * N));
  1286.             s += input1[n] * cos(a);
  1287.         }
  1288.         output1[k] = -2 * s / N;
  1289.     }
  1290.     
  1291.     err = 0;
  1292.     emax = 0;
  1293.     for(i=0;i<N/2;i++) {
  1294.         printf("%3d: %7d %7.0fn", i, output[i], output1[i]);
  1295.         e = output[i] - output1[i];
  1296.         if (e > emax)
  1297.             emax = e;
  1298.         err += e * e;
  1299.     }
  1300.     printf("err2=%f emax=%fn", err / (N/2), emax);
  1301. }
  1302. void test_ac3(void)
  1303. {
  1304.     AC3EncodeContext ctx;
  1305.     unsigned char frame[AC3_MAX_CODED_FRAME_SIZE];
  1306.     short samples[AC3_FRAME_SIZE];
  1307.     int ret, i;
  1308.     
  1309.     AC3_encode_init(&ctx, 44100, 64000, 1);
  1310.     fft_test();
  1311.     mdct_test();
  1312.     for(i=0;i<AC3_FRAME_SIZE;i++)
  1313.         samples[i] = (int)(sin(2*M_PI*i*1000.0/44100) * 10000);
  1314.     ret = AC3_encode_frame(&ctx, frame, samples);
  1315.     printf("ret=%dn", ret);
  1316. }
  1317. #endif
  1318. AVEncoder ac3_encoder = {
  1319.     "ac3",
  1320.     CODEC_TYPE_AUDIO,
  1321.     CODEC_ID_AC3,
  1322.     sizeof(AC3EncodeContext),
  1323.     AC3_encode_init,
  1324.     AC3_encode_frame,
  1325.     NULL,
  1326. };