mpegaudiodec.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:86k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*
  2.  * MPEG Audio decoder
  3.  * Copyright (c) 2001, 2002 Fabrice Bellard.
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2 of the License, or (at your option) any later version.
  9.  *
  10.  * This library 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 GNU
  13.  * Lesser General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  */
  19. /**
  20.  * @file mpegaudiodec.c
  21.  * MPEG Audio decoder.
  22.  */ 
  23. //#define DEBUG
  24. #include "avcodec.h"
  25. #include "bitstream.h"
  26. #include "mpegaudio.h"
  27. #include "dsputil.h"
  28. /*
  29.  * TODO:
  30.  *  - in low precision mode, use more 16 bit multiplies in synth filter
  31.  *  - test lsf / mpeg25 extensively.
  32.  */
  33. /* define USE_HIGHPRECISION to have a bit exact (but slower) mpeg
  34.    audio decoder */
  35. #ifdef CONFIG_MPEGAUDIO_HP
  36. #define USE_HIGHPRECISION
  37. #endif
  38. #ifdef USE_HIGHPRECISION
  39. #define FRAC_BITS   23   /* fractional bits for sb_samples and dct */
  40. #define WFRAC_BITS  16   /* fractional bits for window */
  41. #else
  42. #define FRAC_BITS   15   /* fractional bits for sb_samples and dct */
  43. #define WFRAC_BITS  14   /* fractional bits for window */
  44. #endif
  45. #if defined(USE_HIGHPRECISION) && defined(CONFIG_AUDIO_NONSHORT)
  46. typedef int32_t OUT_INT;
  47. #define OUT_MAX INT32_MAX
  48. #define OUT_MIN INT32_MIN
  49. #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 31)
  50. #else
  51. typedef int16_t OUT_INT;
  52. #define OUT_MAX INT16_MAX
  53. #define OUT_MIN INT16_MIN
  54. #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15)
  55. #endif
  56. #define FRAC_ONE    (1 << FRAC_BITS)
  57. #define MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS)
  58. #define MUL64(a,b) ((int64_t)(a) * (int64_t)(b))
  59. #define FIX(a)   ((int)((a) * FRAC_ONE))
  60. /* WARNING: only correct for posititive numbers */
  61. #define FIXR(a)   ((int)((a) * FRAC_ONE + 0.5))
  62. #define FRAC_RND(a) (((a) + (FRAC_ONE/2)) >> FRAC_BITS)
  63. #define FIXHR(a) ((int)((a) * (1LL<<32) + 0.5))
  64. //#define MULH(a,b) (((int64_t)(a) * (int64_t)(b))>>32) //gcc 3.4 creates an incredibly bloated mess out of this
  65. static always_inline int MULH(int a, int b){
  66.     return ((int64_t)(a) * (int64_t)(b))>>32;
  67. }
  68. #if FRAC_BITS <= 15
  69. typedef int16_t MPA_INT;
  70. #else
  71. typedef int32_t MPA_INT;
  72. #endif
  73. /****************/
  74. #define HEADER_SIZE 4
  75. #define BACKSTEP_SIZE 512
  76. struct GranuleDef;
  77. typedef struct MPADecodeContext {
  78.     uint8_t inbuf1[2][MPA_MAX_CODED_FRAME_SIZE + BACKSTEP_SIZE]; /* input buffer */
  79.     int inbuf_index;
  80.     uint8_t *inbuf_ptr, *inbuf;
  81.     int frame_size;
  82.     int free_format_frame_size; /* frame size in case of free format
  83.                                    (zero if currently unknown) */
  84.     /* next header (used in free format parsing) */
  85.     uint32_t free_format_next_header; 
  86.     int error_protection;
  87.     int layer;
  88.     int sample_rate;
  89.     int sample_rate_index; /* between 0 and 8 */
  90.     int bit_rate;
  91.     int old_frame_size;
  92.     GetBitContext gb;
  93.     int nb_channels;
  94.     int mode;
  95.     int mode_ext;
  96.     int lsf;
  97.     MPA_INT synth_buf[MPA_MAX_CHANNELS][512 * 2] __attribute__((aligned(16)));
  98.     int synth_buf_offset[MPA_MAX_CHANNELS];
  99.     int32_t sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT] __attribute__((aligned(16)));
  100.     int32_t mdct_buf[MPA_MAX_CHANNELS][SBLIMIT * 18]; /* previous samples, for layer 3 MDCT */
  101. #ifdef DEBUG
  102.     int frame_count;
  103. #endif
  104.     void (*compute_antialias)(struct MPADecodeContext *s, struct GranuleDef *g);
  105.     int adu_mode; ///< 0 for standard mp3, 1 for adu formatted mp3
  106.     unsigned int dither_state;
  107. } MPADecodeContext;
  108. /**
  109.  * Context for MP3On4 decoder
  110.  */
  111. typedef struct MP3On4DecodeContext {
  112.     int frames;   ///< number of mp3 frames per block (number of mp3 decoder instances)
  113.     int chan_cfg; ///< channel config number
  114.     MPADecodeContext *mp3decctx[5]; ///< MPADecodeContext for every decoder instance
  115. } MP3On4DecodeContext;
  116. /* layer 3 "granule" */
  117. typedef struct GranuleDef {
  118.     uint8_t scfsi;
  119.     int part2_3_length;
  120.     int big_values;
  121.     int global_gain;
  122.     int scalefac_compress;
  123.     uint8_t block_type;
  124.     uint8_t switch_point;
  125.     int table_select[3];
  126.     int subblock_gain[3];
  127.     uint8_t scalefac_scale;
  128.     uint8_t count1table_select;
  129.     int region_size[3]; /* number of huffman codes in each region */
  130.     int preflag;
  131.     int short_start, long_end; /* long/short band indexes */
  132.     uint8_t scale_factors[40];
  133.     int32_t sb_hybrid[SBLIMIT * 18]; /* 576 samples */
  134. } GranuleDef;
  135. #define MODE_EXT_MS_STEREO 2
  136. #define MODE_EXT_I_STEREO  1
  137. /* layer 3 huffman tables */
  138. typedef struct HuffTable {
  139.     int xsize;
  140.     const uint8_t *bits;
  141.     const uint16_t *codes;
  142. } HuffTable;
  143. #include "mpegaudiodectab.h"
  144. static void compute_antialias_integer(MPADecodeContext *s, GranuleDef *g);
  145. static void compute_antialias_float(MPADecodeContext *s, GranuleDef *g);
  146. /* vlc structure for decoding layer 3 huffman tables */
  147. static VLC huff_vlc[16]; 
  148. static uint8_t *huff_code_table[16];
  149. static VLC huff_quad_vlc[2];
  150. /* computed from band_size_long */
  151. static uint16_t band_index_long[9][23];
  152. /* XXX: free when all decoders are closed */
  153. #define TABLE_4_3_SIZE (8191 + 16)*4
  154. static int8_t  *table_4_3_exp;
  155. static uint32_t *table_4_3_value;
  156. /* intensity stereo coef table */
  157. static int32_t is_table[2][16];
  158. static int32_t is_table_lsf[2][2][16];
  159. static int32_t csa_table[8][4];
  160. static float csa_table_float[8][4];
  161. static int32_t mdct_win[8][36];
  162. /* lower 2 bits: modulo 3, higher bits: shift */
  163. static uint16_t scale_factor_modshift[64];
  164. /* [i][j]:  2^(-j/3) * FRAC_ONE * 2^(i+2) / (2^(i+2) - 1) */
  165. static int32_t scale_factor_mult[15][3];
  166. /* mult table for layer 2 group quantization */
  167. #define SCALE_GEN(v) 
  168. { FIXR(1.0 * (v)), FIXR(0.7937005259 * (v)), FIXR(0.6299605249 * (v)) }
  169. static const int32_t scale_factor_mult2[3][3] = {
  170.     SCALE_GEN(4.0 / 3.0), /* 3 steps */
  171.     SCALE_GEN(4.0 / 5.0), /* 5 steps */
  172.     SCALE_GEN(4.0 / 9.0), /* 9 steps */
  173. };
  174. void ff_mpa_synth_init(MPA_INT *window);
  175. static MPA_INT window[512] __attribute__((aligned(16)));
  176.     
  177. /* layer 1 unscaling */
  178. /* n = number of bits of the mantissa minus 1 */
  179. static inline int l1_unscale(int n, int mant, int scale_factor)
  180. {
  181.     int shift, mod;
  182.     int64_t val;
  183.     shift = scale_factor_modshift[scale_factor];
  184.     mod = shift & 3;
  185.     shift >>= 2;
  186.     val = MUL64(mant + (-1 << n) + 1, scale_factor_mult[n-1][mod]);
  187.     shift += n;
  188.     /* NOTE: at this point, 1 <= shift >= 21 + 15 */
  189.     return (int)((val + (1LL << (shift - 1))) >> shift);
  190. }
  191. static inline int l2_unscale_group(int steps, int mant, int scale_factor)
  192. {
  193.     int shift, mod, val;
  194.     shift = scale_factor_modshift[scale_factor];
  195.     mod = shift & 3;
  196.     shift >>= 2;
  197.     val = (mant - (steps >> 1)) * scale_factor_mult2[steps >> 2][mod];
  198.     /* NOTE: at this point, 0 <= shift <= 21 */
  199.     if (shift > 0)
  200.         val = (val + (1 << (shift - 1))) >> shift;
  201.     return val;
  202. }
  203. /* compute value^(4/3) * 2^(exponent/4). It normalized to FRAC_BITS */
  204. static inline int l3_unscale(int value, int exponent)
  205. {
  206.     unsigned int m;
  207.     int e;
  208.     e = table_4_3_exp  [4*value + (exponent&3)];
  209.     m = table_4_3_value[4*value + (exponent&3)];
  210.     e -= (exponent >> 2);
  211.     assert(e>=1);
  212.     if (e > 31)
  213.         return 0;
  214.     m = (m + (1 << (e-1))) >> e;
  215.     return m;
  216. }
  217. /* all integer n^(4/3) computation code */
  218. #define DEV_ORDER 13
  219. #define POW_FRAC_BITS 24
  220. #define POW_FRAC_ONE    (1 << POW_FRAC_BITS)
  221. #define POW_FIX(a)   ((int)((a) * POW_FRAC_ONE))
  222. #define POW_MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> POW_FRAC_BITS)
  223. static int dev_4_3_coefs[DEV_ORDER];
  224. #if 0 /* unused */
  225. static int pow_mult3[3] = {
  226.     POW_FIX(1.0),
  227.     POW_FIX(1.25992104989487316476),
  228.     POW_FIX(1.58740105196819947474),
  229. };
  230. #endif
  231. static void int_pow_init(void)
  232. {
  233.     int i, a;
  234.     a = POW_FIX(1.0);
  235.     for(i=0;i<DEV_ORDER;i++) {
  236.         a = POW_MULL(a, POW_FIX(4.0 / 3.0) - i * POW_FIX(1.0)) / (i + 1);
  237.         dev_4_3_coefs[i] = a;
  238.     }
  239. }
  240. #if 0 /* unused, remove? */
  241. /* return the mantissa and the binary exponent */
  242. static int int_pow(int i, int *exp_ptr)
  243. {
  244.     int e, er, eq, j;
  245.     int a, a1;
  246.     
  247.     /* renormalize */
  248.     a = i;
  249.     e = POW_FRAC_BITS;
  250.     while (a < (1 << (POW_FRAC_BITS - 1))) {
  251.         a = a << 1;
  252.         e--;
  253.     }
  254.     a -= (1 << POW_FRAC_BITS);
  255.     a1 = 0;
  256.     for(j = DEV_ORDER - 1; j >= 0; j--)
  257.         a1 = POW_MULL(a, dev_4_3_coefs[j] + a1);
  258.     a = (1 << POW_FRAC_BITS) + a1;
  259.     /* exponent compute (exact) */
  260.     e = e * 4;
  261.     er = e % 3;
  262.     eq = e / 3;
  263.     a = POW_MULL(a, pow_mult3[er]);
  264.     while (a >= 2 * POW_FRAC_ONE) {
  265.         a = a >> 1;
  266.         eq++;
  267.     }
  268.     /* convert to float */
  269.     while (a < POW_FRAC_ONE) {
  270.         a = a << 1;
  271.         eq--;
  272.     }
  273.     /* now POW_FRAC_ONE <= a < 2 * POW_FRAC_ONE */
  274. #if POW_FRAC_BITS > FRAC_BITS
  275.     a = (a + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS);
  276.     /* correct overflow */
  277.     if (a >= 2 * (1 << FRAC_BITS)) {
  278.         a = a >> 1;
  279.         eq++;
  280.     }
  281. #endif
  282.     *exp_ptr = eq;
  283.     return a;
  284. }
  285. #endif
  286. static int decode_init(AVCodecContext * avctx)
  287. {
  288.     MPADecodeContext *s = avctx->priv_data;
  289.     static int init=0;
  290.     int i, j, k;
  291. #if defined(USE_HIGHPRECISION) && defined(CONFIG_AUDIO_NONSHORT)
  292.     avctx->sample_fmt= SAMPLE_FMT_S32;
  293. #else
  294.     avctx->sample_fmt= SAMPLE_FMT_S16;
  295. #endif    
  296.     
  297.     if(avctx->antialias_algo != FF_AA_FLOAT)
  298.         s->compute_antialias= compute_antialias_integer;
  299.     else
  300.         s->compute_antialias= compute_antialias_float;
  301.     if (!init && !avctx->parse_only) {
  302.         /* scale factors table for layer 1/2 */
  303.         for(i=0;i<64;i++) {
  304.             int shift, mod;
  305.             /* 1.0 (i = 3) is normalized to 2 ^ FRAC_BITS */
  306.             shift = (i / 3);
  307.             mod = i % 3;
  308.             scale_factor_modshift[i] = mod | (shift << 2);
  309.         }
  310.         /* scale factor multiply for layer 1 */
  311.         for(i=0;i<15;i++) {
  312.             int n, norm;
  313.             n = i + 2;
  314.             norm = ((int64_t_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
  315.             scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm);
  316.             scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm);
  317.             scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm);
  318.             dprintf("%d: norm=%x s=%x %x %xn",
  319.                     i, norm, 
  320.                     scale_factor_mult[i][0],
  321.                     scale_factor_mult[i][1],
  322.                     scale_factor_mult[i][2]);
  323.         }
  324.         
  325. ff_mpa_synth_init(window);
  326.         
  327.         /* huffman decode tables */
  328.         huff_code_table[0] = NULL;
  329.         for(i=1;i<16;i++) {
  330.             const HuffTable *h = &mpa_huff_tables[i];
  331.     int xsize, x, y;
  332.             unsigned int n;
  333.             uint8_t *code_table;
  334.             xsize = h->xsize;
  335.             n = xsize * xsize;
  336.             /* XXX: fail test */
  337.             init_vlc(&huff_vlc[i], 8, n, 
  338.                      h->bits, 1, 1, h->codes, 2, 2, 1);
  339.             
  340.             code_table = av_mallocz(n);
  341.             j = 0;
  342.             for(x=0;x<xsize;x++) {
  343.                 for(y=0;y<xsize;y++)
  344.                     code_table[j++] = (x << 4) | y;
  345.             }
  346.             huff_code_table[i] = code_table;
  347.         }
  348.         for(i=0;i<2;i++) {
  349.             init_vlc(&huff_quad_vlc[i], i == 0 ? 7 : 4, 16, 
  350.                      mpa_quad_bits[i], 1, 1, mpa_quad_codes[i], 1, 1, 1);
  351.         }
  352.         for(i=0;i<9;i++) {
  353.             k = 0;
  354.             for(j=0;j<22;j++) {
  355.                 band_index_long[i][j] = k;
  356.                 k += band_size_long[i][j];
  357.             }
  358.             band_index_long[i][22] = k;
  359.         }
  360. /* compute n ^ (4/3) and store it in mantissa/exp format */
  361. table_4_3_exp= av_mallocz_static(TABLE_4_3_SIZE * sizeof(table_4_3_exp[0]));
  362.         if(!table_4_3_exp)
  363.     return -1;
  364. table_4_3_value= av_mallocz_static(TABLE_4_3_SIZE * sizeof(table_4_3_value[0]));
  365.         if(!table_4_3_value)
  366.             return -1;
  367.         
  368.         int_pow_init();
  369.         for(i=1;i<TABLE_4_3_SIZE;i++) {
  370.             double f, fm;
  371.             int e, m;
  372.             f = pow((double)(i/4), 4.0 / 3.0) * pow(2, (i&3)*0.25);
  373.             fm = frexp(f, &e);
  374.             m = (uint32_t)(fm*(1LL<<31) + 0.5);
  375.             e+= FRAC_BITS - 31 + 5;
  376.             /* normalized to FRAC_BITS */
  377.             table_4_3_value[i] = m;
  378. //            av_log(NULL, AV_LOG_DEBUG, "%d %d %fn", i, m, pow((double)i, 4.0 / 3.0));
  379.             table_4_3_exp[i] = -e;
  380.         }
  381.         
  382.         for(i=0;i<7;i++) {
  383.             float f;
  384.             int v;
  385.             if (i != 6) {
  386.                 f = tan((double)i * M_PI / 12.0);
  387.                 v = FIXR(f / (1.0 + f));
  388.             } else {
  389.                 v = FIXR(1.0);
  390.             }
  391.             is_table[0][i] = v;
  392.             is_table[1][6 - i] = v;
  393.         }
  394.         /* invalid values */
  395.         for(i=7;i<16;i++)
  396.             is_table[0][i] = is_table[1][i] = 0.0;
  397.         for(i=0;i<16;i++) {
  398.             double f;
  399.             int e, k;
  400.             for(j=0;j<2;j++) {
  401.                 e = -(j + 1) * ((i + 1) >> 1);
  402.                 f = pow(2.0, e / 4.0);
  403.                 k = i & 1;
  404.                 is_table_lsf[j][k ^ 1][i] = FIXR(f);
  405.                 is_table_lsf[j][k][i] = FIXR(1.0);
  406.                 dprintf("is_table_lsf %d %d: %x %xn", 
  407.                         i, j, is_table_lsf[j][0][i], is_table_lsf[j][1][i]);
  408.             }
  409.         }
  410.         for(i=0;i<8;i++) {
  411.             float ci, cs, ca;
  412.             ci = ci_table[i];
  413.             cs = 1.0 / sqrt(1.0 + ci * ci);
  414.             ca = cs * ci;
  415.             csa_table[i][0] = FIXHR(cs/4);
  416.             csa_table[i][1] = FIXHR(ca/4);
  417.             csa_table[i][2] = FIXHR(ca/4) + FIXHR(cs/4);
  418.             csa_table[i][3] = FIXHR(ca/4) - FIXHR(cs/4); 
  419.             csa_table_float[i][0] = cs;
  420.             csa_table_float[i][1] = ca;
  421.             csa_table_float[i][2] = ca + cs;
  422.             csa_table_float[i][3] = ca - cs; 
  423. //            printf("%d %d %d %dn", FIX(cs), FIX(cs-1), FIX(ca), FIX(cs)-FIX(ca));
  424. //            av_log(NULL, AV_LOG_DEBUG,"%f %f %f %fn", cs, ca, ca+cs, ca-cs);
  425.         }
  426.         /* compute mdct windows */
  427.         for(i=0;i<36;i++) {
  428.             for(j=0; j<4; j++){
  429.                 double d;
  430.                 
  431.                 if(j==2 && i%3 != 1)
  432.                     continue;
  433.                 
  434.                 d= sin(M_PI * (i + 0.5) / 36.0);
  435.                 if(j==1){
  436.                     if     (i>=30) d= 0;
  437.                     else if(i>=24) d= sin(M_PI * (i - 18 + 0.5) / 12.0);
  438.                     else if(i>=18) d= 1;
  439.                 }else if(j==3){
  440.                     if     (i<  6) d= 0;
  441.                     else if(i< 12) d= sin(M_PI * (i -  6 + 0.5) / 12.0);
  442.                     else if(i< 18) d= 1;
  443.                 }
  444.                 //merge last stage of imdct into the window coefficients
  445.                 d*= 0.5 / cos(M_PI*(2*i + 19)/72);
  446.                 if(j==2)
  447.                     mdct_win[j][i/3] = FIXHR((d / (1<<5)));
  448.                 else
  449.                     mdct_win[j][i  ] = FIXHR((d / (1<<5)));
  450. //                av_log(NULL, AV_LOG_DEBUG, "%2d %d %fn", i,j,d / (1<<5));
  451.             }
  452.         }
  453.         /* NOTE: we do frequency inversion adter the MDCT by changing
  454.            the sign of the right window coefs */
  455.         for(j=0;j<4;j++) {
  456.             for(i=0;i<36;i+=2) {
  457.                 mdct_win[j + 4][i] = mdct_win[j][i];
  458.                 mdct_win[j + 4][i + 1] = -mdct_win[j][i + 1];
  459.             }
  460.         }
  461. #if defined(DEBUG)
  462.         for(j=0;j<8;j++) {
  463.             printf("win%d=n", j);
  464.             for(i=0;i<36;i++)
  465.                 printf("%f, ", (double)mdct_win[j][i] / FRAC_ONE);
  466.             printf("n");
  467.         }
  468. #endif
  469.         init = 1;
  470.     }
  471.     s->inbuf_index = 0;
  472.     s->inbuf = &s->inbuf1[s->inbuf_index][BACKSTEP_SIZE];
  473.     s->inbuf_ptr = s->inbuf;
  474. #ifdef DEBUG
  475.     s->frame_count = 0;
  476. #endif
  477.     if (avctx->codec_id == CODEC_ID_MP3ADU)
  478.         s->adu_mode = 1;
  479.     return 0;
  480. }
  481. /* tab[i][j] = 1.0 / (2.0 * cos(pi*(2*k+1) / 2^(6 - j))) */
  482. /* cos(i*pi/64) */
  483. #define COS0_0  FIXR(0.50060299823519630134)
  484. #define COS0_1  FIXR(0.50547095989754365998)
  485. #define COS0_2  FIXR(0.51544730992262454697)
  486. #define COS0_3  FIXR(0.53104259108978417447)
  487. #define COS0_4  FIXR(0.55310389603444452782)
  488. #define COS0_5  FIXR(0.58293496820613387367)
  489. #define COS0_6  FIXR(0.62250412303566481615)
  490. #define COS0_7  FIXR(0.67480834145500574602)
  491. #define COS0_8  FIXR(0.74453627100229844977)
  492. #define COS0_9  FIXR(0.83934964541552703873)
  493. #define COS0_10 FIXR(0.97256823786196069369)
  494. #define COS0_11 FIXR(1.16943993343288495515)
  495. #define COS0_12 FIXR(1.48416461631416627724)
  496. #define COS0_13 FIXR(2.05778100995341155085)
  497. #define COS0_14 FIXR(3.40760841846871878570)
  498. #define COS0_15 FIXR(10.19000812354805681150)
  499. #define COS1_0 FIXR(0.50241928618815570551)
  500. #define COS1_1 FIXR(0.52249861493968888062)
  501. #define COS1_2 FIXR(0.56694403481635770368)
  502. #define COS1_3 FIXR(0.64682178335999012954)
  503. #define COS1_4 FIXR(0.78815462345125022473)
  504. #define COS1_5 FIXR(1.06067768599034747134)
  505. #define COS1_6 FIXR(1.72244709823833392782)
  506. #define COS1_7 FIXR(5.10114861868916385802)
  507. #define COS2_0 FIXR(0.50979557910415916894)
  508. #define COS2_1 FIXR(0.60134488693504528054)
  509. #define COS2_2 FIXR(0.89997622313641570463)
  510. #define COS2_3 FIXR(2.56291544774150617881)
  511. #define COS3_0 FIXR(0.54119610014619698439)
  512. #define COS3_1 FIXR(1.30656296487637652785)
  513. #define COS4_0 FIXR(0.70710678118654752439)
  514. /* butterfly operator */
  515. #define BF(a, b, c)
  516. {
  517.     tmp0 = tab[a] + tab[b];
  518.     tmp1 = tab[a] - tab[b];
  519.     tab[a] = tmp0;
  520.     tab[b] = MULL(tmp1, c);
  521. }
  522. #define BF1(a, b, c, d)
  523. {
  524.     BF(a, b, COS4_0);
  525.     BF(c, d, -COS4_0);
  526.     tab[c] += tab[d];
  527. }
  528. #define BF2(a, b, c, d)
  529. {
  530.     BF(a, b, COS4_0);
  531.     BF(c, d, -COS4_0);
  532.     tab[c] += tab[d];
  533.     tab[a] += tab[c];
  534.     tab[c] += tab[b];
  535.     tab[b] += tab[d];
  536. }
  537. #define ADD(a, b) tab[a] += tab[b]
  538. /* DCT32 without 1/sqrt(2) coef zero scaling. */
  539. static void dct32(int32_t *out, int32_t *tab)
  540. {
  541.     int tmp0, tmp1;
  542.     /* pass 1 */
  543.     BF(0, 31, COS0_0);
  544.     BF(1, 30, COS0_1);
  545.     BF(2, 29, COS0_2);
  546.     BF(3, 28, COS0_3);
  547.     BF(4, 27, COS0_4);
  548.     BF(5, 26, COS0_5);
  549.     BF(6, 25, COS0_6);
  550.     BF(7, 24, COS0_7);
  551.     BF(8, 23, COS0_8);
  552.     BF(9, 22, COS0_9);
  553.     BF(10, 21, COS0_10);
  554.     BF(11, 20, COS0_11);
  555.     BF(12, 19, COS0_12);
  556.     BF(13, 18, COS0_13);
  557.     BF(14, 17, COS0_14);
  558.     BF(15, 16, COS0_15);
  559.     /* pass 2 */
  560.     BF(0, 15, COS1_0);
  561.     BF(1, 14, COS1_1);
  562.     BF(2, 13, COS1_2);
  563.     BF(3, 12, COS1_3);
  564.     BF(4, 11, COS1_4);
  565.     BF(5, 10, COS1_5);
  566.     BF(6,  9, COS1_6);
  567.     BF(7,  8, COS1_7);
  568.     
  569.     BF(16, 31, -COS1_0);
  570.     BF(17, 30, -COS1_1);
  571.     BF(18, 29, -COS1_2);
  572.     BF(19, 28, -COS1_3);
  573.     BF(20, 27, -COS1_4);
  574.     BF(21, 26, -COS1_5);
  575.     BF(22, 25, -COS1_6);
  576.     BF(23, 24, -COS1_7);
  577.     
  578.     /* pass 3 */
  579.     BF(0, 7, COS2_0);
  580.     BF(1, 6, COS2_1);
  581.     BF(2, 5, COS2_2);
  582.     BF(3, 4, COS2_3);
  583.     
  584.     BF(8, 15, -COS2_0);
  585.     BF(9, 14, -COS2_1);
  586.     BF(10, 13, -COS2_2);
  587.     BF(11, 12, -COS2_3);
  588.     
  589.     BF(16, 23, COS2_0);
  590.     BF(17, 22, COS2_1);
  591.     BF(18, 21, COS2_2);
  592.     BF(19, 20, COS2_3);
  593.     
  594.     BF(24, 31, -COS2_0);
  595.     BF(25, 30, -COS2_1);
  596.     BF(26, 29, -COS2_2);
  597.     BF(27, 28, -COS2_3);
  598.     /* pass 4 */
  599.     BF(0, 3, COS3_0);
  600.     BF(1, 2, COS3_1);
  601.     
  602.     BF(4, 7, -COS3_0);
  603.     BF(5, 6, -COS3_1);
  604.     
  605.     BF(8, 11, COS3_0);
  606.     BF(9, 10, COS3_1);
  607.     
  608.     BF(12, 15, -COS3_0);
  609.     BF(13, 14, -COS3_1);
  610.     
  611.     BF(16, 19, COS3_0);
  612.     BF(17, 18, COS3_1);
  613.     
  614.     BF(20, 23, -COS3_0);
  615.     BF(21, 22, -COS3_1);
  616.     
  617.     BF(24, 27, COS3_0);
  618.     BF(25, 26, COS3_1);
  619.     
  620.     BF(28, 31, -COS3_0);
  621.     BF(29, 30, -COS3_1);
  622.     
  623.     /* pass 5 */
  624.     BF1(0, 1, 2, 3);
  625.     BF2(4, 5, 6, 7);
  626.     BF1(8, 9, 10, 11);
  627.     BF2(12, 13, 14, 15);
  628.     BF1(16, 17, 18, 19);
  629.     BF2(20, 21, 22, 23);
  630.     BF1(24, 25, 26, 27);
  631.     BF2(28, 29, 30, 31);
  632.     
  633.     /* pass 6 */
  634.     
  635.     ADD( 8, 12);
  636.     ADD(12, 10);
  637.     ADD(10, 14);
  638.     ADD(14,  9);
  639.     ADD( 9, 13);
  640.     ADD(13, 11);
  641.     ADD(11, 15);
  642.     out[ 0] = tab[0];
  643.     out[16] = tab[1];
  644.     out[ 8] = tab[2];
  645.     out[24] = tab[3];
  646.     out[ 4] = tab[4];
  647.     out[20] = tab[5];
  648.     out[12] = tab[6];
  649.     out[28] = tab[7];
  650.     out[ 2] = tab[8];
  651.     out[18] = tab[9];
  652.     out[10] = tab[10];
  653.     out[26] = tab[11];
  654.     out[ 6] = tab[12];
  655.     out[22] = tab[13];
  656.     out[14] = tab[14];
  657.     out[30] = tab[15];
  658.     
  659.     ADD(24, 28);
  660.     ADD(28, 26);
  661.     ADD(26, 30);
  662.     ADD(30, 25);
  663.     ADD(25, 29);
  664.     ADD(29, 27);
  665.     ADD(27, 31);
  666.     out[ 1] = tab[16] + tab[24];
  667.     out[17] = tab[17] + tab[25];
  668.     out[ 9] = tab[18] + tab[26];
  669.     out[25] = tab[19] + tab[27];
  670.     out[ 5] = tab[20] + tab[28];
  671.     out[21] = tab[21] + tab[29];
  672.     out[13] = tab[22] + tab[30];
  673.     out[29] = tab[23] + tab[31];
  674.     out[ 3] = tab[24] + tab[20];
  675.     out[19] = tab[25] + tab[21];
  676.     out[11] = tab[26] + tab[22];
  677.     out[27] = tab[27] + tab[23];
  678.     out[ 7] = tab[28] + tab[18];
  679.     out[23] = tab[29] + tab[19];
  680.     out[15] = tab[30] + tab[17];
  681.     out[31] = tab[31];
  682. }
  683. #if FRAC_BITS <= 15
  684. static inline int round_sample(int *sum)
  685. {
  686.     int sum1;
  687.     sum1 = (*sum) >> OUT_SHIFT;
  688.     *sum &= (1<<OUT_SHIFT)-1;
  689.     if (sum1 < OUT_MIN)
  690.         sum1 = OUT_MIN;
  691.     else if (sum1 > OUT_MAX)
  692.         sum1 = OUT_MAX;
  693.     return sum1;
  694. }
  695. #if defined(ARCH_POWERPC_405)
  696. /* signed 16x16 -> 32 multiply add accumulate */
  697. #define MACS(rt, ra, rb) 
  698.     asm ("maclhw %0, %2, %3" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
  699. /* signed 16x16 -> 32 multiply */
  700. #define MULS(ra, rb) 
  701.     ({ int __rt; asm ("mullhw %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); __rt; })
  702. #else
  703. /* signed 16x16 -> 32 multiply add accumulate */
  704. #define MACS(rt, ra, rb) rt += (ra) * (rb)
  705. /* signed 16x16 -> 32 multiply */
  706. #define MULS(ra, rb) ((ra) * (rb))
  707. #endif
  708. #else
  709. static inline int round_sample(int64_t *sum) 
  710. {
  711.     int sum1;
  712.     sum1 = (int)((*sum) >> OUT_SHIFT);
  713.     *sum &= (1<<OUT_SHIFT)-1;
  714.     if (sum1 < OUT_MIN)
  715.         sum1 = OUT_MIN;
  716.     else if (sum1 > OUT_MAX)
  717.         sum1 = OUT_MAX;
  718.     return sum1;
  719. }
  720. #define MULS(ra, rb) MUL64(ra, rb)
  721. #endif
  722. #define SUM8(sum, op, w, p) 
  723. {                                               
  724.     sum op MULS((w)[0 * 64], p[0 * 64]);
  725.     sum op MULS((w)[1 * 64], p[1 * 64]);
  726.     sum op MULS((w)[2 * 64], p[2 * 64]);
  727.     sum op MULS((w)[3 * 64], p[3 * 64]);
  728.     sum op MULS((w)[4 * 64], p[4 * 64]);
  729.     sum op MULS((w)[5 * 64], p[5 * 64]);
  730.     sum op MULS((w)[6 * 64], p[6 * 64]);
  731.     sum op MULS((w)[7 * 64], p[7 * 64]);
  732. }
  733. #define SUM8P2(sum1, op1, sum2, op2, w1, w2, p) 
  734. {                                               
  735.     int tmp;
  736.     tmp = p[0 * 64];
  737.     sum1 op1 MULS((w1)[0 * 64], tmp);
  738.     sum2 op2 MULS((w2)[0 * 64], tmp);
  739.     tmp = p[1 * 64];
  740.     sum1 op1 MULS((w1)[1 * 64], tmp);
  741.     sum2 op2 MULS((w2)[1 * 64], tmp);
  742.     tmp = p[2 * 64];
  743.     sum1 op1 MULS((w1)[2 * 64], tmp);
  744.     sum2 op2 MULS((w2)[2 * 64], tmp);
  745.     tmp = p[3 * 64];
  746.     sum1 op1 MULS((w1)[3 * 64], tmp);
  747.     sum2 op2 MULS((w2)[3 * 64], tmp);
  748.     tmp = p[4 * 64];
  749.     sum1 op1 MULS((w1)[4 * 64], tmp);
  750.     sum2 op2 MULS((w2)[4 * 64], tmp);
  751.     tmp = p[5 * 64];
  752.     sum1 op1 MULS((w1)[5 * 64], tmp);
  753.     sum2 op2 MULS((w2)[5 * 64], tmp);
  754.     tmp = p[6 * 64];
  755.     sum1 op1 MULS((w1)[6 * 64], tmp);
  756.     sum2 op2 MULS((w2)[6 * 64], tmp);
  757.     tmp = p[7 * 64];
  758.     sum1 op1 MULS((w1)[7 * 64], tmp);
  759.     sum2 op2 MULS((w2)[7 * 64], tmp);
  760. }
  761. void ff_mpa_synth_init(MPA_INT *window)
  762. {
  763.     int i;
  764.     /* max = 18760, max sum over all 16 coefs : 44736 */
  765.     for(i=0;i<257;i++) {
  766.         int v;
  767.         v = mpa_enwindow[i];
  768. #if WFRAC_BITS < 16
  769.         v = (v + (1 << (16 - WFRAC_BITS - 1))) >> (16 - WFRAC_BITS);
  770. #endif
  771.         window[i] = v;
  772.         if ((i & 63) != 0)
  773.             v = -v;
  774.         if (i != 0)
  775.             window[512 - i] = v;
  776.     }
  777. }
  778. /* 32 sub band synthesis filter. Input: 32 sub band samples, Output:
  779.    32 samples. */
  780. /* XXX: optimize by avoiding ring buffer usage */
  781. void ff_mpa_synth_filter(MPA_INT *synth_buf_ptr, int *synth_buf_offset,
  782.  MPA_INT *window, int *dither_state,
  783.                          OUT_INT *samples, int incr, 
  784.                          int32_t sb_samples[SBLIMIT])
  785. {
  786.     int32_t tmp[32];
  787.     register MPA_INT *synth_buf;
  788.     register const MPA_INT *w, *w2, *p;
  789.     int j, offset, v;
  790.     OUT_INT *samples2;
  791. #if FRAC_BITS <= 15
  792.     int sum, sum2;
  793. #else
  794.     int64_t sum, sum2;
  795. #endif
  796.     dct32(tmp, sb_samples);
  797.     
  798.     offset = *synth_buf_offset;
  799.     synth_buf = synth_buf_ptr + offset;
  800.     for(j=0;j<32;j++) {
  801.         v = tmp[j];
  802. #if FRAC_BITS <= 15
  803.         /* NOTE: can cause a loss in precision if very high amplitude
  804.            sound */
  805.         if (v > 32767)
  806.             v = 32767;
  807.         else if (v < -32768)
  808.             v = -32768;
  809. #endif
  810.         synth_buf[j] = v;
  811.     }
  812.     /* copy to avoid wrap */
  813.     memcpy(synth_buf + 512, synth_buf, 32 * sizeof(MPA_INT));
  814.     samples2 = samples + 31 * incr;
  815.     w = window;
  816.     w2 = window + 31;
  817.     sum = *dither_state;
  818.     p = synth_buf + 16;
  819.     SUM8(sum, +=, w, p);
  820.     p = synth_buf + 48;
  821.     SUM8(sum, -=, w + 32, p);
  822.     *samples = round_sample(&sum);
  823.     samples += incr;
  824.     w++;
  825.     /* we calculate two samples at the same time to avoid one memory
  826.        access per two sample */
  827.     for(j=1;j<16;j++) {
  828.         sum2 = 0;
  829.         p = synth_buf + 16 + j;
  830.         SUM8P2(sum, +=, sum2, -=, w, w2, p);
  831.         p = synth_buf + 48 - j;
  832.         SUM8P2(sum, -=, sum2, -=, w + 32, w2 + 32, p);
  833.         *samples = round_sample(&sum);
  834.         samples += incr;
  835.         sum += sum2;
  836.         *samples2 = round_sample(&sum);
  837.         samples2 -= incr;
  838.         w++;
  839.         w2--;
  840.     }
  841.     
  842.     p = synth_buf + 32;
  843.     SUM8(sum, -=, w + 32, p);
  844.     *samples = round_sample(&sum);
  845.     *dither_state= sum;
  846.     offset = (offset - 32) & 511;
  847.     *synth_buf_offset = offset;
  848. }
  849. #define C3 FIXHR(0.86602540378443864676/2)
  850. /* 0.5 / cos(pi*(2*i+1)/36) */
  851. static const int icos36[9] = {
  852.     FIXR(0.50190991877167369479),
  853.     FIXR(0.51763809020504152469), //0
  854.     FIXR(0.55168895948124587824),
  855.     FIXR(0.61038729438072803416),
  856.     FIXR(0.70710678118654752439), //1
  857.     FIXR(0.87172339781054900991),
  858.     FIXR(1.18310079157624925896),
  859.     FIXR(1.93185165257813657349), //2
  860.     FIXR(5.73685662283492756461),
  861. };
  862. /* 12 points IMDCT. We compute it "by hand" by factorizing obvious
  863.    cases. */
  864. static void imdct12(int *out, int *in)
  865. {
  866.     int in0, in1, in2, in3, in4, in5, t1, t2;
  867.     in0= in[0*3];
  868.     in1= in[1*3] + in[0*3];
  869.     in2= in[2*3] + in[1*3];
  870.     in3= in[3*3] + in[2*3];
  871.     in4= in[4*3] + in[3*3];
  872.     in5= in[5*3] + in[4*3];
  873.     in5 += in3;
  874.     in3 += in1;
  875.     in2= MULH(2*in2, C3);
  876.     in3= MULH(2*in3, C3);
  877.     
  878.     t1 = in0 - in4;
  879.     t2 = MULL(in1 - in5, icos36[4]);
  880.     out[ 7]= 
  881.     out[10]= t1 + t2;
  882.     out[ 1]=
  883.     out[ 4]= t1 - t2;
  884.     in0 += in4>>1;
  885.     in4 = in0 + in2;
  886.     in1 += in5>>1;
  887.     in5 = MULL(in1 + in3, icos36[1]);    
  888.     out[ 8]= 
  889.     out[ 9]= in4 + in5;
  890.     out[ 2]=
  891.     out[ 3]= in4 - in5;
  892.     
  893.     in0 -= in2;
  894.     in1 = MULL(in1 - in3, icos36[7]);
  895.     out[ 0]=
  896.     out[ 5]= in0 - in1;
  897.     out[ 6]=
  898.     out[11]= in0 + in1;    
  899. }
  900. /* cos(pi*i/18) */
  901. #define C1 FIXHR(0.98480775301220805936/2)
  902. #define C2 FIXHR(0.93969262078590838405/2)
  903. #define C3 FIXHR(0.86602540378443864676/2)
  904. #define C4 FIXHR(0.76604444311897803520/2)
  905. #define C5 FIXHR(0.64278760968653932632/2)
  906. #define C6 FIXHR(0.5/2)
  907. #define C7 FIXHR(0.34202014332566873304/2)
  908. #define C8 FIXHR(0.17364817766693034885/2)
  909. /* using Lee like decomposition followed by hand coded 9 points DCT */
  910. static void imdct36(int *out, int *buf, int *in, int *win)
  911. {
  912.     int i, j, t0, t1, t2, t3, s0, s1, s2, s3;
  913.     int tmp[18], *tmp1, *in1;
  914.     for(i=17;i>=1;i--)
  915.         in[i] += in[i-1];
  916.     for(i=17;i>=3;i-=2)
  917.         in[i] += in[i-2];
  918.     for(j=0;j<2;j++) {
  919.         tmp1 = tmp + j;
  920.         in1 = in + j;
  921. #if 0
  922. //more accurate but slower
  923.         int64_t t0, t1, t2, t3;
  924.         t2 = in1[2*4] + in1[2*8] - in1[2*2];
  925.         
  926.         t3 = (in1[2*0] + (int64_t)(in1[2*6]>>1))<<32;
  927.         t1 = in1[2*0] - in1[2*6];
  928.         tmp1[ 6] = t1 - (t2>>1);
  929.         tmp1[16] = t1 + t2;
  930.         t0 = MUL64(2*(in1[2*2] + in1[2*4]),    C2);
  931.         t1 = MUL64(   in1[2*4] - in1[2*8] , -2*C8);
  932.         t2 = MUL64(2*(in1[2*2] + in1[2*8]),   -C4);
  933.         
  934.         tmp1[10] = (t3 - t0 - t2) >> 32;
  935.         tmp1[ 2] = (t3 + t0 + t1) >> 32;
  936.         tmp1[14] = (t3 + t2 - t1) >> 32;
  937.         
  938.         tmp1[ 4] = MULH(2*(in1[2*5] + in1[2*7] - in1[2*1]), -C3);
  939.         t2 = MUL64(2*(in1[2*1] + in1[2*5]),    C1);
  940.         t3 = MUL64(   in1[2*5] - in1[2*7] , -2*C7);
  941.         t0 = MUL64(2*in1[2*3], C3);
  942.         t1 = MUL64(2*(in1[2*1] + in1[2*7]),   -C5);
  943.         tmp1[ 0] = (t2 + t3 + t0) >> 32;
  944.         tmp1[12] = (t2 + t1 - t0) >> 32;
  945.         tmp1[ 8] = (t3 - t1 - t0) >> 32;
  946. #else
  947.         t2 = in1[2*4] + in1[2*8] - in1[2*2];
  948.         
  949.         t3 = in1[2*0] + (in1[2*6]>>1);
  950.         t1 = in1[2*0] - in1[2*6];
  951.         tmp1[ 6] = t1 - (t2>>1);
  952.         tmp1[16] = t1 + t2;
  953.         t0 = MULH(2*(in1[2*2] + in1[2*4]),    C2);
  954.         t1 = MULH(   in1[2*4] - in1[2*8] , -2*C8);
  955.         t2 = MULH(2*(in1[2*2] + in1[2*8]),   -C4);
  956.         
  957.         tmp1[10] = t3 - t0 - t2;
  958.         tmp1[ 2] = t3 + t0 + t1;
  959.         tmp1[14] = t3 + t2 - t1;
  960.         
  961.         tmp1[ 4] = MULH(2*(in1[2*5] + in1[2*7] - in1[2*1]), -C3);
  962.         t2 = MULH(2*(in1[2*1] + in1[2*5]),    C1);
  963.         t3 = MULH(   in1[2*5] - in1[2*7] , -2*C7);
  964.         t0 = MULH(2*in1[2*3], C3);
  965.         t1 = MULH(2*(in1[2*1] + in1[2*7]),   -C5);
  966.         tmp1[ 0] = t2 + t3 + t0;
  967.         tmp1[12] = t2 + t1 - t0;
  968.         tmp1[ 8] = t3 - t1 - t0;
  969. #endif
  970.     }
  971.     i = 0;
  972.     for(j=0;j<4;j++) {
  973.         t0 = tmp[i];
  974.         t1 = tmp[i + 2];
  975.         s0 = t1 + t0;
  976.         s2 = t1 - t0;
  977.         t2 = tmp[i + 1];
  978.         t3 = tmp[i + 3];
  979.         s1 = MULL(t3 + t2, icos36[j]);
  980.         s3 = MULL(t3 - t2, icos36[8 - j]);
  981.         
  982.         t0 = s0 + s1;
  983.         t1 = s0 - s1;
  984.         out[(9 + j)*SBLIMIT] =  MULH(t1, win[9 + j]) + buf[9 + j];
  985.         out[(8 - j)*SBLIMIT] =  MULH(t1, win[8 - j]) + buf[8 - j];
  986.         buf[9 + j] = MULH(t0, win[18 + 9 + j]);
  987.         buf[8 - j] = MULH(t0, win[18 + 8 - j]);
  988.         
  989.         t0 = s2 + s3;
  990.         t1 = s2 - s3;
  991.         out[(9 + 8 - j)*SBLIMIT] =  MULH(t1, win[9 + 8 - j]) + buf[9 + 8 - j];
  992.         out[(        j)*SBLIMIT] =  MULH(t1, win[        j]) + buf[        j];
  993.         buf[9 + 8 - j] = MULH(t0, win[18 + 9 + 8 - j]);
  994.         buf[      + j] = MULH(t0, win[18         + j]);
  995.         i += 4;
  996.     }
  997.     s0 = tmp[16];
  998.     s1 = MULL(tmp[17], icos36[4]);
  999.     t0 = s0 + s1;
  1000.     t1 = s0 - s1;
  1001.     out[(9 + 4)*SBLIMIT] =  MULH(t1, win[9 + 4]) + buf[9 + 4];
  1002.     out[(8 - 4)*SBLIMIT] =  MULH(t1, win[8 - 4]) + buf[8 - 4];
  1003.     buf[9 + 4] = MULH(t0, win[18 + 9 + 4]);
  1004.     buf[8 - 4] = MULH(t0, win[18 + 8 - 4]);
  1005. }
  1006. /* header decoding. MUST check the header before because no
  1007.    consistency check is done there. Return 1 if free format found and
  1008.    that the frame size must be computed externally */
  1009. static int decode_header(MPADecodeContext *s, uint32_t header)
  1010. {
  1011.     int sample_rate, frame_size, mpeg25, padding;
  1012.     int sample_rate_index, bitrate_index;
  1013.     if (header & (1<<20)) {
  1014.         s->lsf = (header & (1<<19)) ? 0 : 1;
  1015.         mpeg25 = 0;
  1016.     } else {
  1017.         s->lsf = 1;
  1018.         mpeg25 = 1;
  1019.     }
  1020.     
  1021.     s->layer = 4 - ((header >> 17) & 3);
  1022.     /* extract frequency */
  1023.     sample_rate_index = (header >> 10) & 3;
  1024.     sample_rate = mpa_freq_tab[sample_rate_index] >> (s->lsf + mpeg25);
  1025.     sample_rate_index += 3 * (s->lsf + mpeg25);
  1026.     s->sample_rate_index = sample_rate_index;
  1027.     s->error_protection = ((header >> 16) & 1) ^ 1;
  1028.     s->sample_rate = sample_rate;
  1029.     bitrate_index = (header >> 12) & 0xf;
  1030.     padding = (header >> 9) & 1;
  1031.     //extension = (header >> 8) & 1;
  1032.     s->mode = (header >> 6) & 3;
  1033.     s->mode_ext = (header >> 4) & 3;
  1034.     //copyright = (header >> 3) & 1;
  1035.     //original = (header >> 2) & 1;
  1036.     //emphasis = header & 3;
  1037.     if (s->mode == MPA_MONO)
  1038.         s->nb_channels = 1;
  1039.     else
  1040.         s->nb_channels = 2;
  1041.     
  1042.     if (bitrate_index != 0) {
  1043.         frame_size = mpa_bitrate_tab[s->lsf][s->layer - 1][bitrate_index];
  1044.         s->bit_rate = frame_size * 1000;
  1045.         switch(s->layer) {
  1046.         case 1:
  1047.             frame_size = (frame_size * 12000) / sample_rate;
  1048.             frame_size = (frame_size + padding) * 4;
  1049.             break;
  1050.         case 2:
  1051.             frame_size = (frame_size * 144000) / sample_rate;
  1052.             frame_size += padding;
  1053.             break;
  1054.         default:
  1055.         case 3:
  1056.             frame_size = (frame_size * 144000) / (sample_rate << s->lsf);
  1057.             frame_size += padding;
  1058.             break;
  1059.         }
  1060.         s->frame_size = frame_size;
  1061.     } else {
  1062.         /* if no frame size computed, signal it */
  1063.         if (!s->free_format_frame_size)
  1064.             return 1;
  1065.         /* free format: compute bitrate and real frame size from the
  1066.            frame size we extracted by reading the bitstream */
  1067.         s->frame_size = s->free_format_frame_size;
  1068.         switch(s->layer) {
  1069.         case 1:
  1070.             s->frame_size += padding  * 4;
  1071.             s->bit_rate = (s->frame_size * sample_rate) / 48000;
  1072.             break;
  1073.         case 2:
  1074.             s->frame_size += padding;
  1075.             s->bit_rate = (s->frame_size * sample_rate) / 144000;
  1076.             break;
  1077.         default:
  1078.         case 3:
  1079.             s->frame_size += padding;
  1080.             s->bit_rate = (s->frame_size * (sample_rate << s->lsf)) / 144000;
  1081.             break;
  1082.         }
  1083.     }
  1084.     
  1085. #if defined(DEBUG)
  1086.     printf("layer%d, %d Hz, %d kbits/s, ",
  1087.            s->layer, s->sample_rate, s->bit_rate);
  1088.     if (s->nb_channels == 2) {
  1089.         if (s->layer == 3) {
  1090.             if (s->mode_ext & MODE_EXT_MS_STEREO)
  1091.                 printf("ms-");
  1092.             if (s->mode_ext & MODE_EXT_I_STEREO)
  1093.                 printf("i-");
  1094.         }
  1095.         printf("stereo");
  1096.     } else {
  1097.         printf("mono");
  1098.     }
  1099.     printf("n");
  1100. #endif
  1101.     return 0;
  1102. }
  1103. /* useful helper to get mpeg audio stream infos. Return -1 if error in
  1104.    header, otherwise the coded frame size in bytes */
  1105. int mpa_decode_header(AVCodecContext *avctx, uint32_t head)
  1106. {
  1107.     MPADecodeContext s1, *s = &s1;
  1108.     memset( s, 0, sizeof(MPADecodeContext) );
  1109.     if (ff_mpa_check_header(head) != 0)
  1110.         return -1;
  1111.     if (decode_header(s, head) != 0) {
  1112.         return -1;
  1113.     }
  1114.     switch(s->layer) {
  1115.     case 1:
  1116.         avctx->frame_size = 384;
  1117.         break;
  1118.     case 2:
  1119.         avctx->frame_size = 1152;
  1120.         break;
  1121.     default:
  1122.     case 3:
  1123.         if (s->lsf)
  1124.             avctx->frame_size = 576;
  1125.         else
  1126.             avctx->frame_size = 1152;
  1127.         break;
  1128.     }
  1129.     avctx->sample_rate = s->sample_rate;
  1130.     avctx->channels = s->nb_channels;
  1131.     avctx->bit_rate = s->bit_rate;
  1132.     avctx->sub_id = s->layer;
  1133.     return s->frame_size;
  1134. }
  1135. /* return the number of decoded frames */
  1136. static int mp_decode_layer1(MPADecodeContext *s)
  1137. {
  1138.     int bound, i, v, n, ch, j, mant;
  1139.     uint8_t allocation[MPA_MAX_CHANNELS][SBLIMIT];
  1140.     uint8_t scale_factors[MPA_MAX_CHANNELS][SBLIMIT];
  1141.     if (s->mode == MPA_JSTEREO) 
  1142.         bound = (s->mode_ext + 1) * 4;
  1143.     else
  1144.         bound = SBLIMIT;
  1145.     /* allocation bits */
  1146.     for(i=0;i<bound;i++) {
  1147.         for(ch=0;ch<s->nb_channels;ch++) {
  1148.             allocation[ch][i] = get_bits(&s->gb, 4);
  1149.         }
  1150.     }
  1151.     for(i=bound;i<SBLIMIT;i++) {
  1152.         allocation[0][i] = get_bits(&s->gb, 4);
  1153.     }
  1154.     /* scale factors */
  1155.     for(i=0;i<bound;i++) {
  1156.         for(ch=0;ch<s->nb_channels;ch++) {
  1157.             if (allocation[ch][i])
  1158.                 scale_factors[ch][i] = get_bits(&s->gb, 6);
  1159.         }
  1160.     }
  1161.     for(i=bound;i<SBLIMIT;i++) {
  1162.         if (allocation[0][i]) {
  1163.             scale_factors[0][i] = get_bits(&s->gb, 6);
  1164.             scale_factors[1][i] = get_bits(&s->gb, 6);
  1165.         }
  1166.     }
  1167.     
  1168.     /* compute samples */
  1169.     for(j=0;j<12;j++) {
  1170.         for(i=0;i<bound;i++) {
  1171.             for(ch=0;ch<s->nb_channels;ch++) {
  1172.                 n = allocation[ch][i];
  1173.                 if (n) {
  1174.                     mant = get_bits(&s->gb, n + 1);
  1175.                     v = l1_unscale(n, mant, scale_factors[ch][i]);
  1176.                 } else {
  1177.                     v = 0;
  1178.                 }
  1179.                 s->sb_samples[ch][j][i] = v;
  1180.             }
  1181.         }
  1182.         for(i=bound;i<SBLIMIT;i++) {
  1183.             n = allocation[0][i];
  1184.             if (n) {
  1185.                 mant = get_bits(&s->gb, n + 1);
  1186.                 v = l1_unscale(n, mant, scale_factors[0][i]);
  1187.                 s->sb_samples[0][j][i] = v;
  1188.                 v = l1_unscale(n, mant, scale_factors[1][i]);
  1189.                 s->sb_samples[1][j][i] = v;
  1190.             } else {
  1191.                 s->sb_samples[0][j][i] = 0;
  1192.                 s->sb_samples[1][j][i] = 0;
  1193.             }
  1194.         }
  1195.     }
  1196.     return 12;
  1197. }
  1198. /* bitrate is in kb/s */
  1199. int l2_select_table(int bitrate, int nb_channels, int freq, int lsf)
  1200. {
  1201.     int ch_bitrate, table;
  1202.     
  1203.     ch_bitrate = bitrate / nb_channels;
  1204.     if (!lsf) {
  1205.         if ((freq == 48000 && ch_bitrate >= 56) ||
  1206.             (ch_bitrate >= 56 && ch_bitrate <= 80)) 
  1207.             table = 0;
  1208.         else if (freq != 48000 && ch_bitrate >= 96) 
  1209.             table = 1;
  1210.         else if (freq != 32000 && ch_bitrate <= 48) 
  1211.             table = 2;
  1212.         else 
  1213.             table = 3;
  1214.     } else {
  1215.         table = 4;
  1216.     }
  1217.     return table;
  1218. }
  1219. static int mp_decode_layer2(MPADecodeContext *s)
  1220. {
  1221.     int sblimit; /* number of used subbands */
  1222.     const unsigned char *alloc_table;
  1223.     int table, bit_alloc_bits, i, j, ch, bound, v;
  1224.     unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
  1225.     unsigned char scale_code[MPA_MAX_CHANNELS][SBLIMIT];
  1226.     unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3], *sf;
  1227.     int scale, qindex, bits, steps, k, l, m, b;
  1228.     /* select decoding table */
  1229.     table = l2_select_table(s->bit_rate / 1000, s->nb_channels, 
  1230.                             s->sample_rate, s->lsf);
  1231.     sblimit = sblimit_table[table];
  1232.     alloc_table = alloc_tables[table];
  1233.     if (s->mode == MPA_JSTEREO) 
  1234.         bound = (s->mode_ext + 1) * 4;
  1235.     else
  1236.         bound = sblimit;
  1237.     dprintf("bound=%d sblimit=%dn", bound, sblimit);
  1238.     /* sanity check */
  1239.     if( bound > sblimit ) bound = sblimit;
  1240.     /* parse bit allocation */
  1241.     j = 0;
  1242.     for(i=0;i<bound;i++) {
  1243.         bit_alloc_bits = alloc_table[j];
  1244.         for(ch=0;ch<s->nb_channels;ch++) {
  1245.             bit_alloc[ch][i] = get_bits(&s->gb, bit_alloc_bits);
  1246.         }
  1247.         j += 1 << bit_alloc_bits;
  1248.     }
  1249.     for(i=bound;i<sblimit;i++) {
  1250.         bit_alloc_bits = alloc_table[j];
  1251.         v = get_bits(&s->gb, bit_alloc_bits);
  1252.         bit_alloc[0][i] = v;
  1253.         bit_alloc[1][i] = v;
  1254.         j += 1 << bit_alloc_bits;
  1255.     }
  1256. #ifdef DEBUG
  1257.     {
  1258.         for(ch=0;ch<s->nb_channels;ch++) {
  1259.             for(i=0;i<sblimit;i++)
  1260.                 printf(" %d", bit_alloc[ch][i]);
  1261.             printf("n");
  1262.         }
  1263.     }
  1264. #endif
  1265.     /* scale codes */
  1266.     for(i=0;i<sblimit;i++) {
  1267.         for(ch=0;ch<s->nb_channels;ch++) {
  1268.             if (bit_alloc[ch][i]) 
  1269.                 scale_code[ch][i] = get_bits(&s->gb, 2);
  1270.         }
  1271.     }
  1272.     
  1273.     /* scale factors */
  1274.     for(i=0;i<sblimit;i++) {
  1275.         for(ch=0;ch<s->nb_channels;ch++) {
  1276.             if (bit_alloc[ch][i]) {
  1277.                 sf = scale_factors[ch][i];
  1278.                 switch(scale_code[ch][i]) {
  1279.                 default:
  1280.                 case 0:
  1281.                     sf[0] = get_bits(&s->gb, 6);
  1282.                     sf[1] = get_bits(&s->gb, 6);
  1283.                     sf[2] = get_bits(&s->gb, 6);
  1284.                     break;
  1285.                 case 2:
  1286.                     sf[0] = get_bits(&s->gb, 6);
  1287.                     sf[1] = sf[0];
  1288.                     sf[2] = sf[0];
  1289.                     break;
  1290.                 case 1:
  1291.                     sf[0] = get_bits(&s->gb, 6);
  1292.                     sf[2] = get_bits(&s->gb, 6);
  1293.                     sf[1] = sf[0];
  1294.                     break;
  1295.                 case 3:
  1296.                     sf[0] = get_bits(&s->gb, 6);
  1297.                     sf[2] = get_bits(&s->gb, 6);
  1298.                     sf[1] = sf[2];
  1299.                     break;
  1300.                 }
  1301.             }
  1302.         }
  1303.     }
  1304. #ifdef DEBUG
  1305.     for(ch=0;ch<s->nb_channels;ch++) {
  1306.         for(i=0;i<sblimit;i++) {
  1307.             if (bit_alloc[ch][i]) {
  1308.                 sf = scale_factors[ch][i];
  1309.                 printf(" %d %d %d", sf[0], sf[1], sf[2]);
  1310.             } else {
  1311.                 printf(" -");
  1312.             }
  1313.         }
  1314.         printf("n");
  1315.     }
  1316. #endif
  1317.     /* samples */
  1318.     for(k=0;k<3;k++) {
  1319.         for(l=0;l<12;l+=3) {
  1320.             j = 0;
  1321.             for(i=0;i<bound;i++) {
  1322.                 bit_alloc_bits = alloc_table[j];
  1323.                 for(ch=0;ch<s->nb_channels;ch++) {
  1324.                     b = bit_alloc[ch][i];
  1325.                     if (b) {
  1326.                         scale = scale_factors[ch][i][k];
  1327.                         qindex = alloc_table[j+b];
  1328.                         bits = quant_bits[qindex];
  1329.                         if (bits < 0) {
  1330.                             /* 3 values at the same time */
  1331.                             v = get_bits(&s->gb, -bits);
  1332.                             steps = quant_steps[qindex];
  1333.                             s->sb_samples[ch][k * 12 + l + 0][i] = 
  1334.                                 l2_unscale_group(steps, v % steps, scale);
  1335.                             v = v / steps;
  1336.                             s->sb_samples[ch][k * 12 + l + 1][i] = 
  1337.                                 l2_unscale_group(steps, v % steps, scale);
  1338.                             v = v / steps;
  1339.                             s->sb_samples[ch][k * 12 + l + 2][i] = 
  1340.                                 l2_unscale_group(steps, v, scale);
  1341.                         } else {
  1342.                             for(m=0;m<3;m++) {
  1343.                                 v = get_bits(&s->gb, bits);
  1344.                                 v = l1_unscale(bits - 1, v, scale);
  1345.                                 s->sb_samples[ch][k * 12 + l + m][i] = v;
  1346.                             }
  1347.                         }
  1348.                     } else {
  1349.                         s->sb_samples[ch][k * 12 + l + 0][i] = 0;
  1350.                         s->sb_samples[ch][k * 12 + l + 1][i] = 0;
  1351.                         s->sb_samples[ch][k * 12 + l + 2][i] = 0;
  1352.                     }
  1353.                 }
  1354.                 /* next subband in alloc table */
  1355.                 j += 1 << bit_alloc_bits; 
  1356.             }
  1357.             /* XXX: find a way to avoid this duplication of code */
  1358.             for(i=bound;i<sblimit;i++) {
  1359.                 bit_alloc_bits = alloc_table[j];
  1360.                 b = bit_alloc[0][i];
  1361.                 if (b) {
  1362.                     int mant, scale0, scale1;
  1363.                     scale0 = scale_factors[0][i][k];
  1364.                     scale1 = scale_factors[1][i][k];
  1365.                     qindex = alloc_table[j+b];
  1366.                     bits = quant_bits[qindex];
  1367.                     if (bits < 0) {
  1368.                         /* 3 values at the same time */
  1369.                         v = get_bits(&s->gb, -bits);
  1370.                         steps = quant_steps[qindex];
  1371.                         mant = v % steps;
  1372.                         v = v / steps;
  1373.                         s->sb_samples[0][k * 12 + l + 0][i] = 
  1374.                             l2_unscale_group(steps, mant, scale0);
  1375.                         s->sb_samples[1][k * 12 + l + 0][i] = 
  1376.                             l2_unscale_group(steps, mant, scale1);
  1377.                         mant = v % steps;
  1378.                         v = v / steps;
  1379.                         s->sb_samples[0][k * 12 + l + 1][i] = 
  1380.                             l2_unscale_group(steps, mant, scale0);
  1381.                         s->sb_samples[1][k * 12 + l + 1][i] = 
  1382.                             l2_unscale_group(steps, mant, scale1);
  1383.                         s->sb_samples[0][k * 12 + l + 2][i] = 
  1384.                             l2_unscale_group(steps, v, scale0);
  1385.                         s->sb_samples[1][k * 12 + l + 2][i] = 
  1386.                             l2_unscale_group(steps, v, scale1);
  1387.                     } else {
  1388.                         for(m=0;m<3;m++) {
  1389.                             mant = get_bits(&s->gb, bits);
  1390.                             s->sb_samples[0][k * 12 + l + m][i] = 
  1391.                                 l1_unscale(bits - 1, mant, scale0);
  1392.                             s->sb_samples[1][k * 12 + l + m][i] = 
  1393.                                 l1_unscale(bits - 1, mant, scale1);
  1394.                         }
  1395.                     }
  1396.                 } else {
  1397.                     s->sb_samples[0][k * 12 + l + 0][i] = 0;
  1398.                     s->sb_samples[0][k * 12 + l + 1][i] = 0;
  1399.                     s->sb_samples[0][k * 12 + l + 2][i] = 0;
  1400.                     s->sb_samples[1][k * 12 + l + 0][i] = 0;
  1401.                     s->sb_samples[1][k * 12 + l + 1][i] = 0;
  1402.                     s->sb_samples[1][k * 12 + l + 2][i] = 0;
  1403.                 }
  1404.                 /* next subband in alloc table */
  1405.                 j += 1 << bit_alloc_bits; 
  1406.             }
  1407.             /* fill remaining samples to zero */
  1408.             for(i=sblimit;i<SBLIMIT;i++) {
  1409.                 for(ch=0;ch<s->nb_channels;ch++) {
  1410.                     s->sb_samples[ch][k * 12 + l + 0][i] = 0;
  1411.                     s->sb_samples[ch][k * 12 + l + 1][i] = 0;
  1412.                     s->sb_samples[ch][k * 12 + l + 2][i] = 0;
  1413.                 }
  1414.             }
  1415.         }
  1416.     }
  1417.     return 3 * 12;
  1418. }
  1419. /*
  1420.  * Seek back in the stream for backstep bytes (at most 511 bytes)
  1421.  */
  1422. static void seek_to_maindata(MPADecodeContext *s, unsigned int backstep)
  1423. {
  1424.     uint8_t *ptr;
  1425.     /* compute current position in stream */
  1426.     ptr = (uint8_t *)(s->gb.buffer + (get_bits_count(&s->gb)>>3));
  1427.     /* copy old data before current one */
  1428.     ptr -= backstep;
  1429.     memcpy(ptr, s->inbuf1[s->inbuf_index ^ 1] + 
  1430.            BACKSTEP_SIZE + s->old_frame_size - backstep, backstep);
  1431.     /* init get bits again */
  1432.     init_get_bits(&s->gb, ptr, (s->frame_size + backstep)*8);
  1433.     /* prepare next buffer */
  1434.     s->inbuf_index ^= 1;
  1435.     s->inbuf = &s->inbuf1[s->inbuf_index][BACKSTEP_SIZE];
  1436.     s->old_frame_size = s->frame_size;
  1437. }
  1438. static inline void lsf_sf_expand(int *slen,
  1439.                                  int sf, int n1, int n2, int n3)
  1440. {
  1441.     if (n3) {
  1442.         slen[3] = sf % n3;
  1443.         sf /= n3;
  1444.     } else {
  1445.         slen[3] = 0;
  1446.     }
  1447.     if (n2) {
  1448.         slen[2] = sf % n2;
  1449.         sf /= n2;
  1450.     } else {
  1451.         slen[2] = 0;
  1452.     }
  1453.     slen[1] = sf % n1;
  1454.     sf /= n1;
  1455.     slen[0] = sf;
  1456. }
  1457. static void exponents_from_scale_factors(MPADecodeContext *s, 
  1458.                                          GranuleDef *g,
  1459.                                          int16_t *exponents)
  1460. {
  1461.     const uint8_t *bstab, *pretab;
  1462.     int len, i, j, k, l, v0, shift, gain, gains[3];
  1463.     int16_t *exp_ptr;
  1464.     exp_ptr = exponents;
  1465.     gain = g->global_gain - 210;
  1466.     shift = g->scalefac_scale + 1;
  1467.     bstab = band_size_long[s->sample_rate_index];
  1468.     pretab = mpa_pretab[g->preflag];
  1469.     for(i=0;i<g->long_end;i++) {
  1470.         v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift);
  1471.         len = bstab[i];
  1472.         for(j=len;j>0;j--)
  1473.             *exp_ptr++ = v0;
  1474.     }
  1475.     if (g->short_start < 13) {
  1476.         bstab = band_size_short[s->sample_rate_index];
  1477.         gains[0] = gain - (g->subblock_gain[0] << 3);
  1478.         gains[1] = gain - (g->subblock_gain[1] << 3);
  1479.         gains[2] = gain - (g->subblock_gain[2] << 3);
  1480.         k = g->long_end;
  1481.         for(i=g->short_start;i<13;i++) {
  1482.             len = bstab[i];
  1483.             for(l=0;l<3;l++) {
  1484.                 v0 = gains[l] - (g->scale_factors[k++] << shift);
  1485.                 for(j=len;j>0;j--)
  1486.                 *exp_ptr++ = v0;
  1487.             }
  1488.         }
  1489.     }
  1490. }
  1491. /* handle n = 0 too */
  1492. static inline int get_bitsz(GetBitContext *s, int n)
  1493. {
  1494.     if (n == 0)
  1495.         return 0;
  1496.     else
  1497.         return get_bits(s, n);
  1498. }
  1499. static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
  1500.                           int16_t *exponents, int end_pos)
  1501. {
  1502.     int s_index;
  1503.     int linbits, code, x, y, l, v, i, j, k, pos;
  1504.     GetBitContext last_gb;
  1505.     VLC *vlc;
  1506.     uint8_t *code_table;
  1507.     /* low frequencies (called big values) */
  1508.     s_index = 0;
  1509.     for(i=0;i<3;i++) {
  1510.         j = g->region_size[i];
  1511.         if (j == 0)
  1512.             continue;
  1513.         /* select vlc table */
  1514.         k = g->table_select[i];
  1515.         l = mpa_huff_data[k][0];
  1516.         linbits = mpa_huff_data[k][1];
  1517.         vlc = &huff_vlc[l];
  1518.         code_table = huff_code_table[l];
  1519.         /* read huffcode and compute each couple */
  1520.         for(;j>0;j--) {
  1521.             if (get_bits_count(&s->gb) >= end_pos)
  1522.                 break;
  1523.             if (code_table) {
  1524.                 code = get_vlc(&s->gb, vlc);
  1525.                 if (code < 0)
  1526.                     return -1;
  1527.                 y = code_table[code];
  1528.                 x = y >> 4;
  1529.                 y = y & 0x0f;
  1530.             } else {
  1531.                 x = 0;
  1532.                 y = 0;
  1533.             }
  1534.             dprintf("region=%d n=%d x=%d y=%d exp=%dn", 
  1535.                     i, g->region_size[i] - j, x, y, exponents[s_index]);
  1536.             if (x) {
  1537.                 if (x == 15)
  1538.                     x += get_bitsz(&s->gb, linbits);
  1539.                 v = l3_unscale(x, exponents[s_index]);
  1540.                 if (get_bits1(&s->gb))
  1541.                     v = -v;
  1542.             } else {
  1543.                 v = 0;
  1544.             }
  1545.             g->sb_hybrid[s_index++] = v;
  1546.             if (y) {
  1547.                 if (y == 15)
  1548.                     y += get_bitsz(&s->gb, linbits);
  1549.                 v = l3_unscale(y, exponents[s_index]);
  1550.                 if (get_bits1(&s->gb))
  1551.                     v = -v;
  1552.             } else {
  1553.                 v = 0;
  1554.             }
  1555.             g->sb_hybrid[s_index++] = v;
  1556.         }
  1557.     }
  1558.             
  1559.     /* high frequencies */
  1560.     vlc = &huff_quad_vlc[g->count1table_select];
  1561.     last_gb.buffer = NULL;
  1562.     while (s_index <= 572) {
  1563.         pos = get_bits_count(&s->gb);
  1564.         if (pos >= end_pos) {
  1565.             if (pos > end_pos && last_gb.buffer != NULL) {
  1566.                 /* some encoders generate an incorrect size for this
  1567.                    part. We must go back into the data */
  1568.                 s_index -= 4;
  1569.                 s->gb = last_gb;
  1570.             }
  1571.             break;
  1572.         }
  1573.         last_gb= s->gb;
  1574.         code = get_vlc(&s->gb, vlc);
  1575.         dprintf("t=%d code=%dn", g->count1table_select, code);
  1576.         if (code < 0)
  1577.             return -1;
  1578.         for(i=0;i<4;i++) {
  1579.             if (code & (8 >> i)) {
  1580.                 /* non zero value. Could use a hand coded function for
  1581.                    'one' value */
  1582.                 v = l3_unscale(1, exponents[s_index]);
  1583.                 if(get_bits1(&s->gb))
  1584.                     v = -v;
  1585.             } else {
  1586.                 v = 0;
  1587.             }
  1588.             g->sb_hybrid[s_index++] = v;
  1589.         }
  1590.     }
  1591.     while (s_index < 576)
  1592.         g->sb_hybrid[s_index++] = 0;
  1593.     return 0;
  1594. }
  1595. /* Reorder short blocks from bitstream order to interleaved order. It
  1596.    would be faster to do it in parsing, but the code would be far more
  1597.    complicated */
  1598. static void reorder_block(MPADecodeContext *s, GranuleDef *g)
  1599. {
  1600.     int i, j, k, len;
  1601.     int32_t *ptr, *dst, *ptr1;
  1602.     int32_t tmp[576];
  1603.     if (g->block_type != 2)
  1604.         return;
  1605.     if (g->switch_point) {
  1606.         if (s->sample_rate_index != 8) {
  1607.             ptr = g->sb_hybrid + 36;
  1608.         } else {
  1609.             ptr = g->sb_hybrid + 48;
  1610.         }
  1611.     } else {
  1612.         ptr = g->sb_hybrid;
  1613.     }
  1614.     
  1615.     for(i=g->short_start;i<13;i++) {
  1616.         len = band_size_short[s->sample_rate_index][i];
  1617.         ptr1 = ptr;
  1618.         for(k=0;k<3;k++) {
  1619.             dst = tmp + k;
  1620.             for(j=len;j>0;j--) {
  1621.                 *dst = *ptr++;
  1622.                 dst += 3;
  1623.             }
  1624.         }
  1625.         memcpy(ptr1, tmp, len * 3 * sizeof(int32_t));
  1626.     }
  1627. }
  1628. #define ISQRT2 FIXR(0.70710678118654752440)
  1629. static void compute_stereo(MPADecodeContext *s,
  1630.                            GranuleDef *g0, GranuleDef *g1)
  1631. {
  1632.     int i, j, k, l;
  1633.     int32_t v1, v2;
  1634.     int sf_max, tmp0, tmp1, sf, len, non_zero_found;
  1635.     int32_t (*is_tab)[16];
  1636.     int32_t *tab0, *tab1;
  1637.     int non_zero_found_short[3];
  1638.     /* intensity stereo */
  1639.     if (s->mode_ext & MODE_EXT_I_STEREO) {
  1640.         if (!s->lsf) {
  1641.             is_tab = is_table;
  1642.             sf_max = 7;
  1643.         } else {
  1644.             is_tab = is_table_lsf[g1->scalefac_compress & 1];
  1645.             sf_max = 16;
  1646.         }
  1647.             
  1648.         tab0 = g0->sb_hybrid + 576;
  1649.         tab1 = g1->sb_hybrid + 576;
  1650.         non_zero_found_short[0] = 0;
  1651.         non_zero_found_short[1] = 0;
  1652.         non_zero_found_short[2] = 0;
  1653.         k = (13 - g1->short_start) * 3 + g1->long_end - 3;
  1654.         for(i = 12;i >= g1->short_start;i--) {
  1655.             /* for last band, use previous scale factor */
  1656.             if (i != 11)
  1657.                 k -= 3;
  1658.             len = band_size_short[s->sample_rate_index][i];
  1659.             for(l=2;l>=0;l--) {
  1660.                 tab0 -= len;
  1661.                 tab1 -= len;
  1662.                 if (!non_zero_found_short[l]) {
  1663.                     /* test if non zero band. if so, stop doing i-stereo */
  1664.                     for(j=0;j<len;j++) {
  1665.                         if (tab1[j] != 0) {
  1666.                             non_zero_found_short[l] = 1;
  1667.                             goto found1;
  1668.                         }
  1669.                     }
  1670.                     sf = g1->scale_factors[k + l];
  1671.                     if (sf >= sf_max)
  1672.                         goto found1;
  1673.                     v1 = is_tab[0][sf];
  1674.                     v2 = is_tab[1][sf];
  1675.                     for(j=0;j<len;j++) {
  1676.                         tmp0 = tab0[j];
  1677.                         tab0[j] = MULL(tmp0, v1);
  1678.                         tab1[j] = MULL(tmp0, v2);
  1679.                     }
  1680.                 } else {
  1681.                 found1:
  1682.                     if (s->mode_ext & MODE_EXT_MS_STEREO) {
  1683.                         /* lower part of the spectrum : do ms stereo
  1684.                            if enabled */
  1685.                         for(j=0;j<len;j++) {
  1686.                             tmp0 = tab0[j];
  1687.                             tmp1 = tab1[j];
  1688.                             tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
  1689.                             tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
  1690.                         }
  1691.                     }
  1692.                 }
  1693.             }
  1694.         }
  1695.         non_zero_found = non_zero_found_short[0] | 
  1696.             non_zero_found_short[1] | 
  1697.             non_zero_found_short[2];
  1698.         for(i = g1->long_end - 1;i >= 0;i--) {
  1699.             len = band_size_long[s->sample_rate_index][i];
  1700.             tab0 -= len;
  1701.             tab1 -= len;
  1702.             /* test if non zero band. if so, stop doing i-stereo */
  1703.             if (!non_zero_found) {
  1704.                 for(j=0;j<len;j++) {
  1705.                     if (tab1[j] != 0) {
  1706.                         non_zero_found = 1;
  1707.                         goto found2;
  1708.                     }
  1709.                 }
  1710.                 /* for last band, use previous scale factor */
  1711.                 k = (i == 21) ? 20 : i;
  1712.                 sf = g1->scale_factors[k];
  1713.                 if (sf >= sf_max)
  1714.                     goto found2;
  1715.                 v1 = is_tab[0][sf];
  1716.                 v2 = is_tab[1][sf];
  1717.                 for(j=0;j<len;j++) {
  1718.                     tmp0 = tab0[j];
  1719.                     tab0[j] = MULL(tmp0, v1);
  1720.                     tab1[j] = MULL(tmp0, v2);
  1721.                 }
  1722.             } else {
  1723.             found2:
  1724.                 if (s->mode_ext & MODE_EXT_MS_STEREO) {
  1725.                     /* lower part of the spectrum : do ms stereo
  1726.                        if enabled */
  1727.                     for(j=0;j<len;j++) {
  1728.                         tmp0 = tab0[j];
  1729.                         tmp1 = tab1[j];
  1730.                         tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
  1731.                         tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
  1732.                     }
  1733.                 }
  1734.             }
  1735.         }
  1736.     } else if (s->mode_ext & MODE_EXT_MS_STEREO) {
  1737.         /* ms stereo ONLY */
  1738.         /* NOTE: the 1/sqrt(2) normalization factor is included in the
  1739.            global gain */
  1740.         tab0 = g0->sb_hybrid;
  1741.         tab1 = g1->sb_hybrid;
  1742.         for(i=0;i<576;i++) {
  1743.             tmp0 = tab0[i];
  1744.             tmp1 = tab1[i];
  1745.             tab0[i] = tmp0 + tmp1;
  1746.             tab1[i] = tmp0 - tmp1;
  1747.         }
  1748.     }
  1749. }
  1750. static void compute_antialias_integer(MPADecodeContext *s,
  1751.                               GranuleDef *g)
  1752. {
  1753.     int32_t *ptr, *csa;
  1754.     int n, i;
  1755.     /* we antialias only "long" bands */
  1756.     if (g->block_type == 2) {
  1757.         if (!g->switch_point)
  1758.             return;
  1759.         /* XXX: check this for 8000Hz case */
  1760.         n = 1;
  1761.     } else {
  1762.         n = SBLIMIT - 1;
  1763.     }
  1764.     
  1765.     ptr = g->sb_hybrid + 18;
  1766.     for(i = n;i > 0;i--) {
  1767.         int tmp0, tmp1, tmp2;
  1768.         csa = &csa_table[0][0];
  1769. #define INT_AA(j) 
  1770.             tmp0 = ptr[-1-j];
  1771.             tmp1 = ptr[   j];
  1772.             tmp2= MULH(tmp0 + tmp1, csa[0+4*j]);
  1773.             ptr[-1-j] = 4*(tmp2 - MULH(tmp1, csa[2+4*j]));
  1774.             ptr[   j] = 4*(tmp2 + MULH(tmp0, csa[3+4*j]));
  1775.         INT_AA(0)
  1776.         INT_AA(1)
  1777.         INT_AA(2)
  1778.         INT_AA(3)
  1779.         INT_AA(4)
  1780.         INT_AA(5)
  1781.         INT_AA(6)
  1782.         INT_AA(7)
  1783.             
  1784.         ptr += 18;       
  1785.     }
  1786. }
  1787. static void compute_antialias_float(MPADecodeContext *s,
  1788.                               GranuleDef *g)
  1789. {
  1790.     int32_t *ptr;
  1791.     int n, i;
  1792.     /* we antialias only "long" bands */
  1793.     if (g->block_type == 2) {
  1794.         if (!g->switch_point)
  1795.             return;
  1796.         /* XXX: check this for 8000Hz case */
  1797.         n = 1;
  1798.     } else {
  1799.         n = SBLIMIT - 1;
  1800.     }
  1801.     
  1802.     ptr = g->sb_hybrid + 18;
  1803.     for(i = n;i > 0;i--) {
  1804.         float tmp0, tmp1;
  1805.         float *csa = &csa_table_float[0][0];       
  1806. #define FLOAT_AA(j)
  1807.         tmp0= ptr[-1-j];
  1808.         tmp1= ptr[   j];
  1809.         ptr[-1-j] = lrintf(tmp0 * csa[0+4*j] - tmp1 * csa[1+4*j]);
  1810.         ptr[   j] = lrintf(tmp0 * csa[1+4*j] + tmp1 * csa[0+4*j]);
  1811.         
  1812.         FLOAT_AA(0)
  1813.         FLOAT_AA(1)
  1814.         FLOAT_AA(2)
  1815.         FLOAT_AA(3)
  1816.         FLOAT_AA(4)
  1817.         FLOAT_AA(5)
  1818.         FLOAT_AA(6)
  1819.         FLOAT_AA(7)
  1820.         ptr += 18;       
  1821.     }
  1822. }
  1823. static void compute_imdct(MPADecodeContext *s,
  1824.                           GranuleDef *g, 
  1825.                           int32_t *sb_samples,
  1826.                           int32_t *mdct_buf)
  1827. {
  1828.     int32_t *ptr, *win, *win1, *buf, *out_ptr, *ptr1;
  1829.     int32_t out2[12];
  1830.     int i, j, mdct_long_end, v, sblimit;
  1831.     /* find last non zero block */
  1832.     ptr = g->sb_hybrid + 576;
  1833.     ptr1 = g->sb_hybrid + 2 * 18;
  1834.     while (ptr >= ptr1) {
  1835.         ptr -= 6;
  1836.         v = ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5];
  1837.         if (v != 0)
  1838.             break;
  1839.     }
  1840.     sblimit = ((ptr - g->sb_hybrid) / 18) + 1;
  1841.     if (g->block_type == 2) {
  1842.         /* XXX: check for 8000 Hz */
  1843.         if (g->switch_point)
  1844.             mdct_long_end = 2;
  1845.         else
  1846.             mdct_long_end = 0;
  1847.     } else {
  1848.         mdct_long_end = sblimit;
  1849.     }
  1850.     buf = mdct_buf;
  1851.     ptr = g->sb_hybrid;
  1852.     for(j=0;j<mdct_long_end;j++) {
  1853.         /* apply window & overlap with previous buffer */
  1854.         out_ptr = sb_samples + j;
  1855.         /* select window */
  1856.         if (g->switch_point && j < 2)
  1857.             win1 = mdct_win[0];
  1858.         else
  1859.             win1 = mdct_win[g->block_type];
  1860.         /* select frequency inversion */
  1861.         win = win1 + ((4 * 36) & -(j & 1));
  1862.         imdct36(out_ptr, buf, ptr, win);
  1863.         out_ptr += 18*SBLIMIT;
  1864.         ptr += 18;
  1865.         buf += 18;
  1866.     }
  1867.     for(j=mdct_long_end;j<sblimit;j++) {
  1868.         /* select frequency inversion */
  1869.         win = mdct_win[2] + ((4 * 36) & -(j & 1));
  1870.         out_ptr = sb_samples + j;
  1871.         
  1872.         for(i=0; i<6; i++){
  1873.             *out_ptr = buf[i];
  1874.             out_ptr += SBLIMIT;
  1875.         }
  1876.         imdct12(out2, ptr + 0);
  1877.         for(i=0;i<6;i++) {
  1878.             *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*1];
  1879.             buf[i + 6*2] = MULH(out2[i + 6], win[i + 6]);
  1880.             out_ptr += SBLIMIT;
  1881.         }
  1882.         imdct12(out2, ptr + 1);
  1883.         for(i=0;i<6;i++) {
  1884.             *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*2];
  1885.             buf[i + 6*0] = MULH(out2[i + 6], win[i + 6]);
  1886.             out_ptr += SBLIMIT;
  1887.         }
  1888.         imdct12(out2, ptr + 2);
  1889.         for(i=0;i<6;i++) {
  1890.             buf[i + 6*0] = MULH(out2[i], win[i]) + buf[i + 6*0];
  1891.             buf[i + 6*1] = MULH(out2[i + 6], win[i + 6]);
  1892.             buf[i + 6*2] = 0;
  1893.         }
  1894.         ptr += 18;
  1895.         buf += 18;
  1896.     }
  1897.     /* zero bands */
  1898.     for(j=sblimit;j<SBLIMIT;j++) {
  1899.         /* overlap */
  1900.         out_ptr = sb_samples + j;
  1901.         for(i=0;i<18;i++) {
  1902.             *out_ptr = buf[i];
  1903.             buf[i] = 0;
  1904.             out_ptr += SBLIMIT;
  1905.         }
  1906.         buf += 18;
  1907.     }
  1908. }
  1909. #if defined(DEBUG)
  1910. void sample_dump(int fnum, int32_t *tab, int n)
  1911. {
  1912.     static FILE *files[16], *f;
  1913.     char buf[512];
  1914.     int i;
  1915.     int32_t v;
  1916.     
  1917.     f = files[fnum];
  1918.     if (!f) {
  1919.         snprintf(buf, sizeof(buf), "/tmp/out%d.%s.pcm", 
  1920.                 fnum, 
  1921. #ifdef USE_HIGHPRECISION
  1922.                 "hp"
  1923. #else
  1924.                 "lp"
  1925. #endif
  1926.                 );
  1927.         f = fopen(buf, "w");
  1928.         if (!f)
  1929.             return;
  1930.         files[fnum] = f;
  1931.     }
  1932.     
  1933.     if (fnum == 0) {
  1934.         static int pos = 0;
  1935.         av_log(NULL, AV_LOG_DEBUG, "pos=%dn", pos);
  1936.         for(i=0;i<n;i++) {
  1937.             av_log(NULL, AV_LOG_DEBUG, " %0.4f", (double)tab[i] / FRAC_ONE);
  1938.             if ((i % 18) == 17)
  1939.                 av_log(NULL, AV_LOG_DEBUG, "n");
  1940.         }
  1941.         pos += n;
  1942.     }
  1943.     for(i=0;i<n;i++) {
  1944.         /* normalize to 23 frac bits */
  1945.         v = tab[i] << (23 - FRAC_BITS);
  1946.         fwrite(&v, 1, sizeof(int32_t), f);
  1947.     }
  1948. }
  1949. #endif
  1950. /* main layer3 decoding function */
  1951. static int mp_decode_layer3(MPADecodeContext *s)
  1952. {
  1953.     int nb_granules, main_data_begin, private_bits;
  1954.     int gr, ch, blocksplit_flag, i, j, k, n, bits_pos, bits_left;
  1955.     GranuleDef granules[2][2], *g;
  1956.     int16_t exponents[576];
  1957.     /* read side info */
  1958.     if (s->lsf) {
  1959.         main_data_begin = get_bits(&s->gb, 8);
  1960.         if (s->nb_channels == 2)
  1961.             private_bits = get_bits(&s->gb, 2);
  1962.         else
  1963.             private_bits = get_bits(&s->gb, 1);
  1964.         nb_granules = 1;
  1965.     } else {
  1966.         main_data_begin = get_bits(&s->gb, 9);
  1967.         if (s->nb_channels == 2)
  1968.             private_bits = get_bits(&s->gb, 3);
  1969.         else
  1970.             private_bits = get_bits(&s->gb, 5);
  1971.         nb_granules = 2;
  1972.         for(ch=0;ch<s->nb_channels;ch++) {
  1973.             granules[ch][0].scfsi = 0; /* all scale factors are transmitted */
  1974.             granules[ch][1].scfsi = get_bits(&s->gb, 4);
  1975.         }
  1976.     }
  1977.     
  1978.     for(gr=0;gr<nb_granules;gr++) {
  1979.         for(ch=0;ch<s->nb_channels;ch++) {
  1980.             dprintf("gr=%d ch=%d: side_infon", gr, ch);
  1981.             g = &granules[ch][gr];
  1982.             g->part2_3_length = get_bits(&s->gb, 12);
  1983.             g->big_values = get_bits(&s->gb, 9);
  1984.             g->global_gain = get_bits(&s->gb, 8);
  1985.             /* if MS stereo only is selected, we precompute the
  1986.                1/sqrt(2) renormalization factor */
  1987.             if ((s->mode_ext & (MODE_EXT_MS_STEREO | MODE_EXT_I_STEREO)) == 
  1988.                 MODE_EXT_MS_STEREO)
  1989.                 g->global_gain -= 2;
  1990.             if (s->lsf)
  1991.                 g->scalefac_compress = get_bits(&s->gb, 9);
  1992.             else
  1993.                 g->scalefac_compress = get_bits(&s->gb, 4);
  1994.             blocksplit_flag = get_bits(&s->gb, 1);
  1995.             if (blocksplit_flag) {
  1996.                 g->block_type = get_bits(&s->gb, 2);
  1997.                 if (g->block_type == 0)
  1998.                     return -1;
  1999.                 g->switch_point = get_bits(&s->gb, 1);
  2000.                 for(i=0;i<2;i++)
  2001.                     g->table_select[i] = get_bits(&s->gb, 5);
  2002.                 for(i=0;i<3;i++) 
  2003.                     g->subblock_gain[i] = get_bits(&s->gb, 3);
  2004.                 /* compute huffman coded region sizes */
  2005.                 if (g->block_type == 2)
  2006.                     g->region_size[0] = (36 / 2);
  2007.                 else {
  2008.                     if (s->sample_rate_index <= 2) 
  2009.                         g->region_size[0] = (36 / 2);
  2010.                     else if (s->sample_rate_index != 8) 
  2011.                         g->region_size[0] = (54 / 2);
  2012.                     else
  2013.                         g->region_size[0] = (108 / 2);
  2014.                 }
  2015.                 g->region_size[1] = (576 / 2);
  2016.             } else {
  2017.                 int region_address1, region_address2, l;
  2018.                 g->block_type = 0;
  2019.                 g->switch_point = 0;
  2020.                 for(i=0;i<3;i++)
  2021.                     g->table_select[i] = get_bits(&s->gb, 5);
  2022.                 /* compute huffman coded region sizes */
  2023.                 region_address1 = get_bits(&s->gb, 4);
  2024.                 region_address2 = get_bits(&s->gb, 3);
  2025.                 dprintf("region1=%d region2=%dn", 
  2026.                         region_address1, region_address2);
  2027.                 g->region_size[0] = 
  2028.                     band_index_long[s->sample_rate_index][region_address1 + 1] >> 1;
  2029.                 l = region_address1 + region_address2 + 2;
  2030.                 /* should not overflow */
  2031.                 if (l > 22)
  2032.                     l = 22;
  2033.                 g->region_size[1] = 
  2034.                     band_index_long[s->sample_rate_index][l] >> 1;
  2035.             }
  2036.             /* convert region offsets to region sizes and truncate
  2037.                size to big_values */
  2038.             g->region_size[2] = (576 / 2);
  2039.             j = 0;
  2040.             for(i=0;i<3;i++) {
  2041.                 k = g->region_size[i];
  2042.                 if (k > g->big_values)
  2043.                     k = g->big_values;
  2044.                 g->region_size[i] = k - j;
  2045.                 j = k;
  2046.             }
  2047.             /* compute band indexes */
  2048.             if (g->block_type == 2) {
  2049.                 if (g->switch_point) {
  2050.                     /* if switched mode, we handle the 36 first samples as
  2051.                        long blocks.  For 8000Hz, we handle the 48 first
  2052.                        exponents as long blocks (XXX: check this!) */
  2053.                     if (s->sample_rate_index <= 2)
  2054.                         g->long_end = 8;
  2055.                     else if (s->sample_rate_index != 8)
  2056.                         g->long_end = 6;
  2057.                     else
  2058.                         g->long_end = 4; /* 8000 Hz */
  2059.                     
  2060.                     if (s->sample_rate_index != 8)
  2061.                         g->short_start = 3;
  2062.                     else
  2063.                         g->short_start = 2; 
  2064.                 } else {
  2065.                     g->long_end = 0;
  2066.                     g->short_start = 0;
  2067.                 }
  2068.             } else {
  2069.                 g->short_start = 13;
  2070.                 g->long_end = 22;
  2071.             }
  2072.             
  2073.             g->preflag = 0;
  2074.             if (!s->lsf)
  2075.                 g->preflag = get_bits(&s->gb, 1);
  2076.             g->scalefac_scale = get_bits(&s->gb, 1);
  2077.             g->count1table_select = get_bits(&s->gb, 1);
  2078.             dprintf("block_type=%d switch_point=%dn",
  2079.                     g->block_type, g->switch_point);
  2080.         }
  2081.     }
  2082.   if (!s->adu_mode) {
  2083.     /* now we get bits from the main_data_begin offset */
  2084.     dprintf("seekback: %dn", main_data_begin);
  2085.     seek_to_maindata(s, main_data_begin);
  2086.   }
  2087.     for(gr=0;gr<nb_granules;gr++) {
  2088.         for(ch=0;ch<s->nb_channels;ch++) {
  2089.             g = &granules[ch][gr];
  2090.             
  2091.             bits_pos = get_bits_count(&s->gb);
  2092.             
  2093.             if (!s->lsf) {
  2094.                 uint8_t *sc;
  2095.                 int slen, slen1, slen2;
  2096.                 /* MPEG1 scale factors */
  2097.                 slen1 = slen_table[0][g->scalefac_compress];
  2098.                 slen2 = slen_table[1][g->scalefac_compress];
  2099.                 dprintf("slen1=%d slen2=%dn", slen1, slen2);
  2100.                 if (g->block_type == 2) {
  2101.                     n = g->switch_point ? 17 : 18;
  2102.                     j = 0;
  2103.                     for(i=0;i<n;i++)
  2104.                         g->scale_factors[j++] = get_bitsz(&s->gb, slen1);
  2105.                     for(i=0;i<18;i++)
  2106.                         g->scale_factors[j++] = get_bitsz(&s->gb, slen2);
  2107.                     for(i=0;i<3;i++)
  2108.                         g->scale_factors[j++] = 0;
  2109.                 } else {
  2110.                     sc = granules[ch][0].scale_factors;
  2111.                     j = 0;
  2112.                     for(k=0;k<4;k++) {
  2113.                         n = (k == 0 ? 6 : 5);
  2114.                         if ((g->scfsi & (0x8 >> k)) == 0) {
  2115.                             slen = (k < 2) ? slen1 : slen2;
  2116.                             for(i=0;i<n;i++)
  2117.                                 g->scale_factors[j++] = get_bitsz(&s->gb, slen);
  2118.                         } else {
  2119.                             /* simply copy from last granule */
  2120.                             for(i=0;i<n;i++) {
  2121.                                 g->scale_factors[j] = sc[j];
  2122.                                 j++;
  2123.                             }
  2124.                         }
  2125.                     }
  2126.                     g->scale_factors[j++] = 0;
  2127.                 }
  2128. #if defined(DEBUG)
  2129.                 {
  2130.                     printf("scfsi=%x gr=%d ch=%d scale_factors:n", 
  2131.                            g->scfsi, gr, ch);
  2132.                     for(i=0;i<j;i++)
  2133.                         printf(" %d", g->scale_factors[i]);
  2134.                     printf("n");
  2135.                 }
  2136. #endif
  2137.             } else {
  2138.                 int tindex, tindex2, slen[4], sl, sf;
  2139.                 /* LSF scale factors */
  2140.                 if (g->block_type == 2) {
  2141.                     tindex = g->switch_point ? 2 : 1;
  2142.                 } else {
  2143.                     tindex = 0;
  2144.                 }
  2145.                 sf = g->scalefac_compress;
  2146.                 if ((s->mode_ext & MODE_EXT_I_STEREO) && ch == 1) {
  2147.                     /* intensity stereo case */
  2148.                     sf >>= 1;
  2149.                     if (sf < 180) {
  2150.                         lsf_sf_expand(slen, sf, 6, 6, 0);
  2151.                         tindex2 = 3;
  2152.                     } else if (sf < 244) {
  2153.                         lsf_sf_expand(slen, sf - 180, 4, 4, 0);
  2154.                         tindex2 = 4;
  2155.                     } else {
  2156.                         lsf_sf_expand(slen, sf - 244, 3, 0, 0);
  2157.                         tindex2 = 5;
  2158.                     }
  2159.                 } else {
  2160.                     /* normal case */
  2161.                     if (sf < 400) {
  2162.                         lsf_sf_expand(slen, sf, 5, 4, 4);
  2163.                         tindex2 = 0;
  2164.                     } else if (sf < 500) {
  2165.                         lsf_sf_expand(slen, sf - 400, 5, 4, 0);
  2166.                         tindex2 = 1;
  2167.                     } else {
  2168.                         lsf_sf_expand(slen, sf - 500, 3, 0, 0);
  2169.                         tindex2 = 2;
  2170.                         g->preflag = 1;
  2171.                     }
  2172.                 }
  2173.                 j = 0;
  2174.                 for(k=0;k<4;k++) {
  2175.                     n = lsf_nsf_table[tindex2][tindex][k];
  2176.                     sl = slen[k];
  2177.                     for(i=0;i<n;i++)
  2178.                         g->scale_factors[j++] = get_bitsz(&s->gb, sl);
  2179.                 }
  2180.                 /* XXX: should compute exact size */
  2181.                 for(;j<40;j++)
  2182.                     g->scale_factors[j] = 0;
  2183. #if defined(DEBUG)
  2184.                 {
  2185.                     printf("gr=%d ch=%d scale_factors:n", 
  2186.                            gr, ch);
  2187.                     for(i=0;i<40;i++)
  2188.                         printf(" %d", g->scale_factors[i]);
  2189.                     printf("n");
  2190.                 }
  2191. #endif
  2192.             }
  2193.             exponents_from_scale_factors(s, g, exponents);
  2194.             /* read Huffman coded residue */
  2195.             if (huffman_decode(s, g, exponents,
  2196.                                bits_pos + g->part2_3_length) < 0)
  2197.                 return -1;
  2198. #if defined(DEBUG)
  2199.             sample_dump(0, g->sb_hybrid, 576);
  2200. #endif
  2201.             /* skip extension bits */
  2202.             bits_left = g->part2_3_length - (get_bits_count(&s->gb) - bits_pos);
  2203.             if (bits_left < 0) {
  2204.                 dprintf("bits_left=%dn", bits_left);
  2205.                 return -1;
  2206.             }
  2207.             while (bits_left >= 16) {
  2208.                 skip_bits(&s->gb, 16);
  2209.                 bits_left -= 16;
  2210.             }
  2211.             if (bits_left > 0)
  2212.                 skip_bits(&s->gb, bits_left);
  2213.         } /* ch */
  2214.         if (s->nb_channels == 2)
  2215.             compute_stereo(s, &granules[0][gr], &granules[1][gr]);
  2216.         for(ch=0;ch<s->nb_channels;ch++) {
  2217.             g = &granules[ch][gr];
  2218.             reorder_block(s, g);
  2219. #if defined(DEBUG)
  2220.             sample_dump(0, g->sb_hybrid, 576);
  2221. #endif
  2222.             s->compute_antialias(s, g);
  2223. #if defined(DEBUG)
  2224.             sample_dump(1, g->sb_hybrid, 576);
  2225. #endif
  2226.             compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]); 
  2227. #if defined(DEBUG)
  2228.             sample_dump(2, &s->sb_samples[ch][18 * gr][0], 576);
  2229. #endif
  2230.         }
  2231.     } /* gr */
  2232.     return nb_granules * 18;
  2233. }
  2234. static int mp_decode_frame(MPADecodeContext *s, 
  2235.                            OUT_INT *samples)
  2236. {
  2237.     int i, nb_frames, ch;
  2238.     OUT_INT *samples_ptr;
  2239.     init_get_bits(&s->gb, s->inbuf + HEADER_SIZE, 
  2240.                   (s->inbuf_ptr - s->inbuf - HEADER_SIZE)*8);
  2241.     
  2242.     /* skip error protection field */
  2243.     if (s->error_protection)
  2244.         get_bits(&s->gb, 16);
  2245.     dprintf("frame %d:n", s->frame_count);
  2246.     switch(s->layer) {
  2247.     case 1:
  2248.         nb_frames = mp_decode_layer1(s);
  2249.         break;
  2250.     case 2:
  2251.         nb_frames = mp_decode_layer2(s);
  2252.         break;
  2253.     case 3:
  2254.     default:
  2255.         nb_frames = mp_decode_layer3(s);
  2256.         break;
  2257.     }
  2258. #if defined(DEBUG)
  2259.     for(i=0;i<nb_frames;i++) {
  2260.         for(ch=0;ch<s->nb_channels;ch++) {
  2261.             int j;
  2262.             printf("%d-%d:", i, ch);
  2263.             for(j=0;j<SBLIMIT;j++)
  2264.                 printf(" %0.6f", (double)s->sb_samples[ch][i][j] / FRAC_ONE);
  2265.             printf("n");
  2266.         }
  2267.     }
  2268. #endif
  2269.     /* apply the synthesis filter */
  2270.     for(ch=0;ch<s->nb_channels;ch++) {
  2271.         samples_ptr = samples + ch;
  2272.         for(i=0;i<nb_frames;i++) {
  2273.             ff_mpa_synth_filter(s->synth_buf[ch], &(s->synth_buf_offset[ch]),
  2274.  window, &s->dither_state,
  2275.  samples_ptr, s->nb_channels,
  2276.                          s->sb_samples[ch][i]);
  2277.             samples_ptr += 32 * s->nb_channels;
  2278.         }
  2279.     }
  2280. #ifdef DEBUG
  2281.     s->frame_count++;        
  2282. #endif
  2283.     return nb_frames * 32 * sizeof(OUT_INT) * s->nb_channels;
  2284. }
  2285. static int decode_frame(AVCodecContext * avctx,
  2286. void *data, int *data_size,
  2287. uint8_t * buf, int buf_size)
  2288. {
  2289.     MPADecodeContext *s = avctx->priv_data;
  2290.     uint32_t header;
  2291.     uint8_t *buf_ptr;
  2292.     int len, out_size;
  2293.     OUT_INT *out_samples = data;
  2294.     buf_ptr = buf;
  2295.     while (buf_size > 0) {
  2296. len = s->inbuf_ptr - s->inbuf;
  2297. if (s->frame_size == 0) {
  2298.             /* special case for next header for first frame in free
  2299.                format case (XXX: find a simpler method) */
  2300.             if (s->free_format_next_header != 0) {
  2301.                 s->inbuf[0] = s->free_format_next_header >> 24;
  2302.                 s->inbuf[1] = s->free_format_next_header >> 16;
  2303.                 s->inbuf[2] = s->free_format_next_header >> 8;
  2304.                 s->inbuf[3] = s->free_format_next_header;
  2305.                 s->inbuf_ptr = s->inbuf + 4;
  2306.                 s->free_format_next_header = 0;
  2307.                 goto got_header;
  2308.             }
  2309.     /* no header seen : find one. We need at least HEADER_SIZE
  2310.                bytes to parse it */
  2311.     len = HEADER_SIZE - len;
  2312.     if (len > buf_size)
  2313. len = buf_size;
  2314.     if (len > 0) {
  2315. memcpy(s->inbuf_ptr, buf_ptr, len);
  2316. buf_ptr += len;
  2317. buf_size -= len;
  2318. s->inbuf_ptr += len;
  2319.     }
  2320.     if ((s->inbuf_ptr - s->inbuf) >= HEADER_SIZE) {
  2321.             got_header:
  2322. header = (s->inbuf[0] << 24) | (s->inbuf[1] << 16) |
  2323.     (s->inbuf[2] << 8) | s->inbuf[3];
  2324. if (ff_mpa_check_header(header) < 0) {
  2325.     /* no sync found : move by one byte (inefficient, but simple!) */
  2326.     memmove(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf - 1);
  2327.     s->inbuf_ptr--;
  2328.                     dprintf("skip %xn", header);
  2329.                     /* reset free format frame size to give a chance
  2330.                        to get a new bitrate */
  2331.                     s->free_format_frame_size = 0;
  2332. } else {
  2333.     if (decode_header(s, header) == 1) {
  2334.                         /* free format: prepare to compute frame size */
  2335. s->frame_size = -1;
  2336.                     }
  2337.                     /* update codec info */
  2338.                     avctx->sample_rate = s->sample_rate;
  2339.                     avctx->channels = s->nb_channels;
  2340.                     avctx->bit_rate = s->bit_rate;
  2341.                     avctx->sub_id = s->layer;
  2342.                     switch(s->layer) {
  2343.                     case 1:
  2344.                         avctx->frame_size = 384;
  2345.                         break;
  2346.                     case 2:
  2347.                         avctx->frame_size = 1152;
  2348.                         break;
  2349.                     case 3:
  2350.                         if (s->lsf)
  2351.                             avctx->frame_size = 576;
  2352.                         else
  2353.                             avctx->frame_size = 1152;
  2354.                         break;
  2355.                     }
  2356. }
  2357.     }
  2358.         } else if (s->frame_size == -1) {
  2359.             /* free format : find next sync to compute frame size */
  2360.     len = MPA_MAX_CODED_FRAME_SIZE - len;
  2361.     if (len > buf_size)
  2362. len = buf_size;
  2363.             if (len == 0) {
  2364. /* frame too long: resync */
  2365.                 s->frame_size = 0;
  2366. memmove(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf - 1);
  2367. s->inbuf_ptr--;
  2368.             } else {
  2369.                 uint8_t *p, *pend;
  2370.                 uint32_t header1;
  2371.                 int padding;
  2372.                 memcpy(s->inbuf_ptr, buf_ptr, len);
  2373.                 /* check for header */
  2374.                 p = s->inbuf_ptr - 3;
  2375.                 pend = s->inbuf_ptr + len - 4;
  2376.                 while (p <= pend) {
  2377.                     header = (p[0] << 24) | (p[1] << 16) |
  2378.                         (p[2] << 8) | p[3];
  2379.                     header1 = (s->inbuf[0] << 24) | (s->inbuf[1] << 16) |
  2380.                         (s->inbuf[2] << 8) | s->inbuf[3];
  2381.                     /* check with high probability that we have a
  2382.                        valid header */
  2383.                     if ((header & SAME_HEADER_MASK) ==
  2384.                         (header1 & SAME_HEADER_MASK)) {
  2385.                         /* header found: update pointers */
  2386.                         len = (p + 4) - s->inbuf_ptr;
  2387.                         buf_ptr += len;
  2388.                         buf_size -= len;
  2389.                         s->inbuf_ptr = p;
  2390.                         /* compute frame size */
  2391.                         s->free_format_next_header = header;
  2392.                         s->free_format_frame_size = s->inbuf_ptr - s->inbuf;
  2393.                         padding = (header1 >> 9) & 1;
  2394.                         if (s->layer == 1)
  2395.                             s->free_format_frame_size -= padding * 4;
  2396.                         else
  2397.                             s->free_format_frame_size -= padding;
  2398.                         dprintf("free frame size=%d padding=%dn", 
  2399.                                 s->free_format_frame_size, padding);
  2400.                         decode_header(s, header1);
  2401.                         goto next_data;
  2402.                     }
  2403.                     p++;
  2404.                 }
  2405.                 /* not found: simply increase pointers */
  2406.                 buf_ptr += len;
  2407.                 s->inbuf_ptr += len;
  2408.                 buf_size -= len;
  2409.             }
  2410. } else if (len < s->frame_size) {
  2411.             if (s->frame_size > MPA_MAX_CODED_FRAME_SIZE)
  2412.                 s->frame_size = MPA_MAX_CODED_FRAME_SIZE;
  2413.     len = s->frame_size - len;
  2414.     if (len > buf_size)
  2415. len = buf_size;
  2416.     memcpy(s->inbuf_ptr, buf_ptr, len);
  2417.     buf_ptr += len;
  2418.     s->inbuf_ptr += len;
  2419.     buf_size -= len;
  2420. }
  2421.     next_data:
  2422.         if (s->frame_size > 0 && 
  2423.             (s->inbuf_ptr - s->inbuf) >= s->frame_size) {
  2424.             if (avctx->parse_only) {
  2425.                 /* simply return the frame data */
  2426.                 *(uint8_t **)data = s->inbuf;
  2427.                 out_size = s->inbuf_ptr - s->inbuf;
  2428.             } else {
  2429.                 out_size = mp_decode_frame(s, out_samples);
  2430.             }
  2431.     s->inbuf_ptr = s->inbuf;
  2432.     s->frame_size = 0;
  2433.             if(out_size>=0)
  2434.         *data_size = out_size;
  2435.             else
  2436.                 av_log(avctx, AV_LOG_DEBUG, "Error while decoding mpeg audio framen"); //FIXME return -1 / but also return the number of bytes consumed
  2437.     break;
  2438. }
  2439.     }
  2440.     return buf_ptr - buf;
  2441. }
  2442. static int decode_frame_adu(AVCodecContext * avctx,
  2443. void *data, int *data_size,
  2444. uint8_t * buf, int buf_size)
  2445. {
  2446.     MPADecodeContext *s = avctx->priv_data;
  2447.     uint32_t header;
  2448.     int len, out_size;
  2449.     OUT_INT *out_samples = data;
  2450.     len = buf_size;
  2451.     // Discard too short frames
  2452.     if (buf_size < HEADER_SIZE) {
  2453.         *data_size = 0;
  2454.         return buf_size;
  2455.     }
  2456.     if (len > MPA_MAX_CODED_FRAME_SIZE)
  2457.         len = MPA_MAX_CODED_FRAME_SIZE;
  2458.     memcpy(s->inbuf, buf, len);
  2459.     s->inbuf_ptr = s->inbuf + len;
  2460.     // Get header and restore sync word
  2461.     header = (s->inbuf[0] << 24) | (s->inbuf[1] << 16) |
  2462.               (s->inbuf[2] << 8) | s->inbuf[3] | 0xffe00000;
  2463.     if (ff_mpa_check_header(header) < 0) { // Bad header, discard frame
  2464.         *data_size = 0;
  2465.         return buf_size;
  2466.     }
  2467.     decode_header(s, header);
  2468.     /* update codec info */
  2469.     avctx->sample_rate = s->sample_rate;
  2470.     avctx->channels = s->nb_channels;
  2471.     avctx->bit_rate = s->bit_rate;
  2472.     avctx->sub_id = s->layer;
  2473.     avctx->frame_size=s->frame_size = len;
  2474.     if (avctx->parse_only) {
  2475.         /* simply return the frame data */
  2476.         *(uint8_t **)data = s->inbuf;
  2477.         out_size = s->inbuf_ptr - s->inbuf;
  2478.     } else {
  2479.         out_size = mp_decode_frame(s, out_samples);
  2480.     }
  2481.     *data_size = out_size;
  2482.     return buf_size;
  2483. }
  2484. /* Next 3 arrays are indexed by channel config number (passed via codecdata) */
  2485. static int mp3Frames[16] = {0,1,1,2,3,3,4,5,2};   /* number of mp3 decoder instances */
  2486. static int mp3Channels[16] = {0,1,2,3,4,5,6,8,4}; /* total output channels */
  2487. /* offsets into output buffer, assume output order is FL FR BL BR C LFE */
  2488. static int chan_offset[9][5] = {
  2489.     {0},
  2490.     {0},            // C
  2491.     {0},            // FLR
  2492.     {2,0},          // C FLR
  2493.     {2,0,3},        // C FLR BS
  2494.     {4,0,2},        // C FLR BLRS
  2495.     {4,0,2,5},      // C FLR BLRS LFE
  2496.     {4,0,2,6,5},    // C FLR BLRS BLR LFE
  2497.     {0,2}           // FLR BLRS
  2498. };
  2499. static int decode_init_mp3on4(AVCodecContext * avctx)
  2500. {
  2501.     MP3On4DecodeContext *s = avctx->priv_data;
  2502.     int i;
  2503.     if ((avctx->extradata_size < 2) || (avctx->extradata == NULL)) {
  2504.         av_log(avctx, AV_LOG_ERROR, "Codec extradata missing or too short.n");
  2505.         return -1;
  2506.     }
  2507.     s->chan_cfg = (((unsigned char *)avctx->extradata)[1] >> 3) & 0x0f;
  2508.     s->frames = mp3Frames[s->chan_cfg];
  2509.     if(!s->frames) {
  2510.         av_log(avctx, AV_LOG_ERROR, "Invalid channel config number.n");
  2511.         return -1;
  2512.     }
  2513.     avctx->channels = mp3Channels[s->chan_cfg];
  2514.     /* Init the first mp3 decoder in standard way, so that all tables get builded
  2515.      * We replace avctx->priv_data with the context of the first decoder so that
  2516.      * decode_init() does not have to be changed.
  2517.      * Other decoders will be inited here copying data from the first context
  2518.      */
  2519.     // Allocate zeroed memory for the first decoder context
  2520.     s->mp3decctx[0] = av_mallocz(sizeof(MPADecodeContext));
  2521.     // Put decoder context in place to make init_decode() happy
  2522.     avctx->priv_data = s->mp3decctx[0];
  2523.     decode_init(avctx);
  2524.     // Restore mp3on4 context pointer
  2525.     avctx->priv_data = s;
  2526.     s->mp3decctx[0]->adu_mode = 1; // Set adu mode
  2527.     /* Create a separate codec/context for each frame (first is already ok).
  2528.      * Each frame is 1 or 2 channels - up to 5 frames allowed
  2529.      */
  2530.     for (i = 1; i < s->frames; i++) {
  2531.         s->mp3decctx[i] = av_mallocz(sizeof(MPADecodeContext));
  2532.         s->mp3decctx[i]->compute_antialias = s->mp3decctx[0]->compute_antialias;
  2533.         s->mp3decctx[i]->inbuf = &s->mp3decctx[i]->inbuf1[0][BACKSTEP_SIZE];
  2534.         s->mp3decctx[i]->inbuf_ptr = s->mp3decctx[i]->inbuf;
  2535.         s->mp3decctx[i]->adu_mode = 1;
  2536.     }
  2537.     return 0;
  2538. }
  2539. static int decode_close_mp3on4(AVCodecContext * avctx)
  2540. {
  2541.     MP3On4DecodeContext *s = avctx->priv_data;
  2542.     int i;
  2543.     for (i = 0; i < s->frames; i++)
  2544.         if (s->mp3decctx[i])
  2545.             av_free(s->mp3decctx[i]);
  2546.     return 0;
  2547. }
  2548. static int decode_frame_mp3on4(AVCodecContext * avctx,
  2549. void *data, int *data_size,
  2550. uint8_t * buf, int buf_size)
  2551. {
  2552.     MP3On4DecodeContext *s = avctx->priv_data;
  2553.     MPADecodeContext *m;
  2554.     int len, out_size = 0;
  2555.     uint32_t header;
  2556.     OUT_INT *out_samples = data;
  2557.     OUT_INT decoded_buf[MPA_FRAME_SIZE * MPA_MAX_CHANNELS];
  2558.     OUT_INT *outptr, *bp;
  2559.     int fsize;
  2560.     unsigned char *start2 = buf, *start;
  2561.     int fr, i, j, n;
  2562.     int off = avctx->channels;
  2563.     int *coff = chan_offset[s->chan_cfg];
  2564.     len = buf_size;
  2565.     // Discard too short frames
  2566.     if (buf_size < HEADER_SIZE) {
  2567.         *data_size = 0;
  2568.         return buf_size;
  2569.     }
  2570.     // If only one decoder interleave is not needed
  2571.     outptr = s->frames == 1 ? out_samples : decoded_buf;
  2572.     for (fr = 0; fr < s->frames; fr++) {
  2573.         start = start2;
  2574.         fsize = (start[0] << 4) | (start[1] >> 4);
  2575.         start2 += fsize;
  2576.         if (fsize > len)
  2577.             fsize = len;
  2578.         len -= fsize;
  2579.         if (fsize > MPA_MAX_CODED_FRAME_SIZE)
  2580.             fsize = MPA_MAX_CODED_FRAME_SIZE;
  2581.         m = s->mp3decctx[fr];
  2582.         assert (m != NULL);
  2583.         /* copy original to new */
  2584.         m->inbuf_ptr = m->inbuf + fsize;
  2585.         memcpy(m->inbuf, start, fsize);
  2586.         // Get header
  2587.         header = (m->inbuf[0] << 24) | (m->inbuf[1] << 16) |
  2588.                   (m->inbuf[2] << 8) | m->inbuf[3] | 0xfff00000;
  2589.         if (ff_mpa_check_header(header) < 0) { // Bad header, discard block
  2590.             *data_size = 0;
  2591.             return buf_size;
  2592.         }
  2593.         decode_header(m, header);
  2594.         mp_decode_frame(m, decoded_buf);
  2595.         n = MPA_FRAME_SIZE * m->nb_channels;
  2596.         out_size += n * sizeof(OUT_INT);
  2597.         if(s->frames > 1) {
  2598.             /* interleave output data */
  2599.             bp = out_samples + coff[fr];
  2600.             if(m->nb_channels == 1) {
  2601.                 for(j = 0; j < n; j++) {
  2602.                     *bp = decoded_buf[j];
  2603.                     bp += off;
  2604.                 }
  2605.             } else {
  2606.                 for(j = 0; j < n; j++) {
  2607.                     bp[0] = decoded_buf[j++];
  2608.                     bp[1] = decoded_buf[j];
  2609.                     bp += off;
  2610.                 }
  2611.             }
  2612.         }
  2613.     }
  2614.     /* update codec info */
  2615.     avctx->sample_rate = s->mp3decctx[0]->sample_rate;
  2616.     avctx->frame_size= buf_size;
  2617.     avctx->bit_rate = 0;
  2618.     for (i = 0; i < s->frames; i++)
  2619.         avctx->bit_rate += s->mp3decctx[i]->bit_rate;
  2620.     *data_size = out_size;
  2621.     return buf_size;
  2622. }
  2623. AVCodec mp2_decoder =
  2624. {
  2625.     "mp2",
  2626.     CODEC_TYPE_AUDIO,
  2627.     CODEC_ID_MP2,
  2628.     sizeof(MPADecodeContext),
  2629.     decode_init,
  2630.     NULL,
  2631.     NULL,
  2632.     decode_frame,
  2633.     CODEC_CAP_PARSE_ONLY,
  2634. };
  2635. AVCodec mp3_decoder =
  2636. {
  2637.     "mp3",
  2638.     CODEC_TYPE_AUDIO,
  2639.     CODEC_ID_MP3,
  2640.     sizeof(MPADecodeContext),
  2641.     decode_init,
  2642.     NULL,
  2643.     NULL,
  2644.     decode_frame,
  2645.     CODEC_CAP_PARSE_ONLY,
  2646. };
  2647. AVCodec mp3adu_decoder =
  2648. {
  2649.     "mp3adu",
  2650.     CODEC_TYPE_AUDIO,
  2651.     CODEC_ID_MP3ADU,
  2652.     sizeof(MPADecodeContext),
  2653.     decode_init,
  2654.     NULL,
  2655.     NULL,
  2656.     decode_frame_adu,
  2657.     CODEC_CAP_PARSE_ONLY,
  2658. };
  2659. AVCodec mp3on4_decoder =
  2660. {
  2661.     "mp3on4",
  2662.     CODEC_TYPE_AUDIO,
  2663.     CODEC_ID_MP3ON4,
  2664.     sizeof(MP3On4DecodeContext),
  2665.     decode_init_mp3on4,
  2666.     NULL,
  2667.     decode_close_mp3on4,
  2668.     decode_frame_mp3on4,
  2669.     0
  2670. };