Home | History | Annotate | Download | only in src
      1 
      2 /* -----------------------------------------------------------------------------------------------------------
      3 Software License for The Fraunhofer FDK AAC Codec Library for Android
      4 
      5  Copyright  1995 - 2012 Fraunhofer-Gesellschaft zur Frderung der angewandten Forschung e.V.
      6   All rights reserved.
      7 
      8  1.    INTRODUCTION
      9 The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
     10 the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
     11 This FDK AAC Codec software is intended to be used on a wide variety of Android devices.
     12 
     13 AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
     14 audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
     15 independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
     16 of the MPEG specifications.
     17 
     18 Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
     19 may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
     20 individually for the purpose of encoding or decoding bit streams in products that are compliant with
     21 the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
     22 these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
     23 software may already be covered under those patent licenses when it is used for those licensed purposes only.
     24 
     25 Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
     26 are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
     27 applications information and documentation.
     28 
     29 2.    COPYRIGHT LICENSE
     30 
     31 Redistribution and use in source and binary forms, with or without modification, are permitted without
     32 payment of copyright license fees provided that you satisfy the following conditions:
     33 
     34 You must retain the complete text of this software license in redistributions of the FDK AAC Codec or
     35 your modifications thereto in source code form.
     36 
     37 You must retain the complete text of this software license in the documentation and/or other materials
     38 provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
     39 You must make available free of charge copies of the complete source code of the FDK AAC Codec and your
     40 modifications thereto to recipients of copies in binary form.
     41 
     42 The name of Fraunhofer may not be used to endorse or promote products derived from this library without
     43 prior written permission.
     44 
     45 You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
     46 software or your modifications thereto.
     47 
     48 Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
     49 and the date of any change. For modified versions of the FDK AAC Codec, the term
     50 "Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
     51 "Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
     52 
     53 3.    NO PATENT LICENSE
     54 
     55 NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
     56 ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
     57 respect to this software.
     58 
     59 You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
     60 by appropriate patent licenses.
     61 
     62 4.    DISCLAIMER
     63 
     64 This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
     65 "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
     66 of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
     67 CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
     68 including but not limited to procurement of substitute goods or services; loss of use, data, or profits,
     69 or business interruption, however caused and on any theory of liability, whether in contract, strict
     70 liability, or tort (including negligence), arising in any way out of the use of this software, even if
     71 advised of the possibility of such damage.
     72 
     73 5.    CONTACT INFORMATION
     74 
     75 Fraunhofer Institute for Integrated Circuits IIS
     76 Attention: Audio and Multimedia Departments - FDK AAC LL
     77 Am Wolfsmantel 33
     78 91058 Erlangen, Germany
     79 
     80 www.iis.fraunhofer.de/amm
     81 amm-info (at) iis.fraunhofer.de
     82 ----------------------------------------------------------------------------------------------------------- */
     83 
     84 /******************************** MPEG Audio Encoder **************************
     85 
     86    Initial author:       M.Werner
     87    contents/description: Huffman Bitcounter & coder
     88 
     89 ******************************************************************************/
     90 
     91 #include "bit_cnt.h"
     92 
     93 #include "aacEnc_ram.h"
     94 
     95 #define HI_LTAB(a) (a>>16)
     96 #define LO_LTAB(a) (a & 0xffff)
     97 
     98 /*****************************************************************************
     99 
    100 
    101     functionname: FDKaacEnc_count1_2_3_4_5_6_7_8_9_10_11
    102     description:  counts tables 1-11
    103     returns:
    104     input:        quantized spectrum
    105     output:       bitCount for tables 1-11
    106 
    107 *****************************************************************************/
    108 
    109 static void FDKaacEnc_count1_2_3_4_5_6_7_8_9_10_11(const SHORT *RESTRICT values,
    110                                          const INT  width,
    111                                          INT       *bitCount)
    112 {
    113 
    114   INT i;
    115   INT bc1_2,bc3_4,bc5_6,bc7_8,bc9_10,bc11,sc;
    116   INT t0,t1,t2,t3;
    117   bc1_2=0;
    118   bc3_4=0;
    119   bc5_6=0;
    120   bc7_8=0;
    121   bc9_10=0;
    122   bc11=0;
    123   sc=0;
    124 
    125   for(i=0;i<width;i+=4){
    126 
    127     t0= values[i+0];
    128     t1= values[i+1];
    129     t2= values[i+2];
    130     t3= values[i+3];
    131 
    132     /* 1,2 */
    133 
    134     bc1_2+=FDKaacEnc_huff_ltab1_2[t0+1][t1+1][t2+1][t3+1];
    135 
    136     /* 5,6 */
    137     bc5_6+=FDKaacEnc_huff_ltab5_6[t0+4][t1+4];
    138     bc5_6+=FDKaacEnc_huff_ltab5_6[t2+4][t3+4];
    139 
    140     t0=fixp_abs(t0);
    141     t1=fixp_abs(t1);
    142     t2=fixp_abs(t2);
    143     t3=fixp_abs(t3);
    144 
    145 
    146     bc3_4+= FDKaacEnc_huff_ltab3_4[t0][t1][t2][t3];
    147 
    148     bc7_8+=FDKaacEnc_huff_ltab7_8[t0][t1];
    149     bc7_8+=FDKaacEnc_huff_ltab7_8[t2][t3];
    150 
    151     bc9_10+=FDKaacEnc_huff_ltab9_10[t0][t1];
    152     bc9_10+=FDKaacEnc_huff_ltab9_10[t2][t3];
    153 
    154     bc11+= (INT) FDKaacEnc_huff_ltab11[t0][t1];
    155     bc11+= (INT) FDKaacEnc_huff_ltab11[t2][t3];
    156 
    157     sc+=(t0>0)+(t1>0)+(t2>0)+(t3>0);
    158   }
    159 
    160   bitCount[1]=HI_LTAB(bc1_2);
    161   bitCount[2]=LO_LTAB(bc1_2);
    162   bitCount[3]=HI_LTAB(bc3_4)+sc;
    163   bitCount[4]=LO_LTAB(bc3_4)+sc;
    164   bitCount[5]=HI_LTAB(bc5_6);
    165   bitCount[6]=LO_LTAB(bc5_6);
    166   bitCount[7]=HI_LTAB(bc7_8)+sc;
    167   bitCount[8]=LO_LTAB(bc7_8)+sc;
    168   bitCount[9]=HI_LTAB(bc9_10)+sc;
    169   bitCount[10]=LO_LTAB(bc9_10)+sc;
    170   bitCount[11]=bc11+sc;
    171 
    172 }
    173 
    174 
    175 /*****************************************************************************
    176 
    177     functionname: FDKaacEnc_count3_4_5_6_7_8_9_10_11
    178     description:  counts tables 3-11
    179     returns:
    180     input:        quantized spectrum
    181     output:       bitCount for tables 3-11
    182 
    183 *****************************************************************************/
    184 
    185 static void FDKaacEnc_count3_4_5_6_7_8_9_10_11(const SHORT *RESTRICT values,
    186                                      const INT  width,
    187                                      INT       *bitCount)
    188 {
    189 
    190   INT i;
    191   INT bc3_4,bc5_6,bc7_8,bc9_10,bc11,sc;
    192   INT t0,t1,t2,t3;
    193 
    194   bc3_4=0;
    195   bc5_6=0;
    196   bc7_8=0;
    197   bc9_10=0;
    198   bc11=0;
    199   sc=0;
    200 
    201   for(i=0;i<width;i+=4){
    202 
    203     t0= values[i+0];
    204     t1= values[i+1];
    205     t2= values[i+2];
    206     t3= values[i+3];
    207 
    208     bc5_6+=FDKaacEnc_huff_ltab5_6[t0+4][t1+4];
    209     bc5_6+=FDKaacEnc_huff_ltab5_6[t2+4][t3+4];
    210 
    211     t0=fixp_abs(t0);
    212     t1=fixp_abs(t1);
    213     t2=fixp_abs(t2);
    214     t3=fixp_abs(t3);
    215 
    216     bc3_4+= FDKaacEnc_huff_ltab3_4[t0][t1][t2][t3];
    217 
    218     bc7_8+=FDKaacEnc_huff_ltab7_8[t0][t1];
    219     bc7_8+=FDKaacEnc_huff_ltab7_8[t2][t3];
    220 
    221     bc9_10+=FDKaacEnc_huff_ltab9_10[t0][t1];
    222     bc9_10+=FDKaacEnc_huff_ltab9_10[t2][t3];
    223 
    224     bc11+= (INT) FDKaacEnc_huff_ltab11[t0][t1];
    225     bc11+= (INT) FDKaacEnc_huff_ltab11[t2][t3];
    226 
    227     sc+=(t0>0)+(t1>0)+(t2>0)+(t3>0);
    228   }
    229 
    230   bitCount[1]=INVALID_BITCOUNT;
    231   bitCount[2]=INVALID_BITCOUNT;
    232   bitCount[3]=HI_LTAB(bc3_4)+sc;
    233   bitCount[4]=LO_LTAB(bc3_4)+sc;
    234   bitCount[5]=HI_LTAB(bc5_6);
    235   bitCount[6]=LO_LTAB(bc5_6);
    236   bitCount[7]=HI_LTAB(bc7_8)+sc;
    237   bitCount[8]=LO_LTAB(bc7_8)+sc;
    238   bitCount[9]=HI_LTAB(bc9_10)+sc;
    239   bitCount[10]=LO_LTAB(bc9_10)+sc;
    240   bitCount[11]=bc11+sc;
    241 }
    242 
    243 
    244 
    245 /*****************************************************************************
    246 
    247     functionname: FDKaacEnc_count5_6_7_8_9_10_11
    248     description:  counts tables 5-11
    249     returns:
    250     input:        quantized spectrum
    251     output:       bitCount for tables 5-11
    252 
    253 *****************************************************************************/
    254 
    255 
    256 static void FDKaacEnc_count5_6_7_8_9_10_11(const SHORT *RESTRICT values,
    257                                  const INT  width,
    258                                  INT       *bitCount)
    259 {
    260 
    261   INT i;
    262   INT bc5_6,bc7_8,bc9_10,bc11,sc;
    263   INT t0,t1;
    264   bc5_6=0;
    265   bc7_8=0;
    266   bc9_10=0;
    267   bc11=0;
    268   sc=0;
    269 
    270   for(i=0;i<width;i+=2){
    271 
    272     t0 = values[i+0];
    273     t1 = values[i+1];
    274 
    275     bc5_6+=FDKaacEnc_huff_ltab5_6[t0+4][t1+4];
    276 
    277     t0=fixp_abs(t0);
    278     t1=fixp_abs(t1);
    279 
    280     bc7_8+=FDKaacEnc_huff_ltab7_8[t0][t1];
    281     bc9_10+=FDKaacEnc_huff_ltab9_10[t0][t1];
    282     bc11+= (INT) FDKaacEnc_huff_ltab11[t0][t1];
    283 
    284     sc+=(t0>0)+(t1>0);
    285   }
    286   bitCount[1]=INVALID_BITCOUNT;
    287   bitCount[2]=INVALID_BITCOUNT;
    288   bitCount[3]=INVALID_BITCOUNT;
    289   bitCount[4]=INVALID_BITCOUNT;
    290   bitCount[5]=HI_LTAB(bc5_6);
    291   bitCount[6]=LO_LTAB(bc5_6);
    292   bitCount[7]=HI_LTAB(bc7_8)+sc;
    293   bitCount[8]=LO_LTAB(bc7_8)+sc;
    294   bitCount[9]=HI_LTAB(bc9_10)+sc;
    295   bitCount[10]=LO_LTAB(bc9_10)+sc;
    296   bitCount[11]=bc11+sc;
    297 
    298 }
    299 
    300 
    301 /*****************************************************************************
    302 
    303     functionname: FDKaacEnc_count7_8_9_10_11
    304     description:  counts tables 7-11
    305     returns:
    306     input:        quantized spectrum
    307     output:       bitCount for tables 7-11
    308 
    309 *****************************************************************************/
    310 
    311 static void FDKaacEnc_count7_8_9_10_11(const SHORT *RESTRICT values,
    312                              const INT  width,
    313                              INT       *bitCount)
    314 {
    315 
    316   INT i;
    317   INT bc7_8,bc9_10,bc11,sc;
    318   INT t0,t1;
    319 
    320   bc7_8=0;
    321   bc9_10=0;
    322   bc11=0;
    323   sc=0;
    324 
    325   for(i=0;i<width;i+=2){
    326     t0=fixp_abs(values[i+0]);
    327     t1=fixp_abs(values[i+1]);
    328 
    329     bc7_8+=FDKaacEnc_huff_ltab7_8[t0][t1];
    330     bc9_10+=FDKaacEnc_huff_ltab9_10[t0][t1];
    331     bc11+= (INT) FDKaacEnc_huff_ltab11[t0][t1];
    332     sc+=(t0>0)+(t1>0);
    333   }
    334 
    335   bitCount[1]=INVALID_BITCOUNT;
    336   bitCount[2]=INVALID_BITCOUNT;
    337   bitCount[3]=INVALID_BITCOUNT;
    338   bitCount[4]=INVALID_BITCOUNT;
    339   bitCount[5]=INVALID_BITCOUNT;
    340   bitCount[6]=INVALID_BITCOUNT;
    341   bitCount[7]=HI_LTAB(bc7_8)+sc;
    342   bitCount[8]=LO_LTAB(bc7_8)+sc;
    343   bitCount[9]=HI_LTAB(bc9_10)+sc;
    344   bitCount[10]=LO_LTAB(bc9_10)+sc;
    345   bitCount[11]=bc11+sc;
    346 
    347 }
    348 
    349 /*****************************************************************************
    350 
    351     functionname: FDKaacEnc_count9_10_11
    352     description:  counts tables 9-11
    353     returns:
    354     input:        quantized spectrum
    355     output:       bitCount for tables 9-11
    356 
    357 *****************************************************************************/
    358 
    359 
    360 
    361 static void FDKaacEnc_count9_10_11(const SHORT *RESTRICT values,
    362                          const INT  width,
    363                          INT       *bitCount)
    364 {
    365 
    366   INT i;
    367   INT bc9_10,bc11,sc;
    368   INT t0,t1;
    369 
    370   bc9_10=0;
    371   bc11=0;
    372   sc=0;
    373 
    374   for(i=0;i<width;i+=2){
    375     t0=fixp_abs(values[i+0]);
    376     t1=fixp_abs(values[i+1]);
    377 
    378     bc9_10+=FDKaacEnc_huff_ltab9_10[t0][t1];
    379     bc11+= (INT) FDKaacEnc_huff_ltab11[t0][t1];
    380 
    381     sc+=(t0>0)+(t1>0);
    382   }
    383 
    384   bitCount[1]=INVALID_BITCOUNT;
    385   bitCount[2]=INVALID_BITCOUNT;
    386   bitCount[3]=INVALID_BITCOUNT;
    387   bitCount[4]=INVALID_BITCOUNT;
    388   bitCount[5]=INVALID_BITCOUNT;
    389   bitCount[6]=INVALID_BITCOUNT;
    390   bitCount[7]=INVALID_BITCOUNT;
    391   bitCount[8]=INVALID_BITCOUNT;
    392   bitCount[9]=HI_LTAB(bc9_10)+sc;
    393   bitCount[10]=LO_LTAB(bc9_10)+sc;
    394   bitCount[11]=bc11+sc;
    395 
    396 }
    397 
    398 /*****************************************************************************
    399 
    400     functionname: FDKaacEnc_count11
    401     description:  counts table 11
    402     returns:
    403     input:        quantized spectrum
    404     output:       bitCount for table 11
    405 
    406 *****************************************************************************/
    407 
    408 static void FDKaacEnc_count11(const SHORT *RESTRICT values,
    409                     const INT  width,
    410                     INT        *bitCount)
    411 {
    412 
    413   INT i;
    414   INT bc11,sc;
    415   INT t0,t1;
    416 
    417   bc11=0;
    418   sc=0;
    419   for(i=0;i<width;i+=2){
    420     t0=fixp_abs(values[i+0]);
    421     t1=fixp_abs(values[i+1]);
    422     bc11+= (INT) FDKaacEnc_huff_ltab11[t0][t1];
    423     sc+=(t0>0)+(t1>0);
    424   }
    425 
    426   bitCount[1]=INVALID_BITCOUNT;
    427   bitCount[2]=INVALID_BITCOUNT;
    428   bitCount[3]=INVALID_BITCOUNT;
    429   bitCount[4]=INVALID_BITCOUNT;
    430   bitCount[5]=INVALID_BITCOUNT;
    431   bitCount[6]=INVALID_BITCOUNT;
    432   bitCount[7]=INVALID_BITCOUNT;
    433   bitCount[8]=INVALID_BITCOUNT;
    434   bitCount[9]=INVALID_BITCOUNT;
    435   bitCount[10]=INVALID_BITCOUNT;
    436   bitCount[11]=bc11+sc;
    437 }
    438 
    439 /*****************************************************************************
    440 
    441     functionname: FDKaacEnc_countEsc
    442     description:  counts table 11 (with Esc)
    443     returns:
    444     input:        quantized spectrum
    445     output:       bitCount for tables 11 (with Esc)
    446 
    447 *****************************************************************************/
    448 
    449 static void FDKaacEnc_countEsc(const SHORT *RESTRICT values,
    450                      const INT  width,
    451                      INT       *RESTRICT bitCount)
    452 {
    453 
    454   INT i;
    455   INT bc11,ec,sc;
    456   INT t0,t1,t00,t01;
    457 
    458   bc11=0;
    459   sc=0;
    460   ec=0;
    461   for(i=0;i<width;i+=2){
    462     t0=fixp_abs(values[i+0]);
    463     t1=fixp_abs(values[i+1]);
    464 
    465     sc+=(t0>0)+(t1>0);
    466 
    467     t00 = fixMin(t0,16);
    468     t01 = fixMin(t1,16);
    469     bc11+= (INT) FDKaacEnc_huff_ltab11[t00][t01];
    470 
    471     if(t0>=16){
    472       ec+=5;
    473       while((t0>>=1) >= 16)
    474         ec+=2;
    475     }
    476 
    477     if(t1>=16){
    478       ec+=5;
    479       while((t1>>=1) >= 16)
    480         ec+=2;
    481     }
    482   }
    483 
    484   for (i=0; i<11; i++)
    485     bitCount[i]=INVALID_BITCOUNT;
    486 
    487   bitCount[11]=bc11+sc+ec;
    488 }
    489 
    490 
    491 typedef void (*COUNT_FUNCTION)(const SHORT *RESTRICT values,
    492                                const INT  width,
    493                                INT       *RESTRICT bitCount);
    494 
    495 static const COUNT_FUNCTION countFuncTable[CODE_BOOK_ESC_LAV+1] =
    496 {
    497 
    498  FDKaacEnc_count1_2_3_4_5_6_7_8_9_10_11,  /* 0  */
    499  FDKaacEnc_count1_2_3_4_5_6_7_8_9_10_11,  /* 1  */
    500  FDKaacEnc_count3_4_5_6_7_8_9_10_11,      /* 2  */
    501  FDKaacEnc_count5_6_7_8_9_10_11,          /* 3  */
    502  FDKaacEnc_count5_6_7_8_9_10_11,          /* 4  */
    503  FDKaacEnc_count7_8_9_10_11,              /* 5  */
    504  FDKaacEnc_count7_8_9_10_11,              /* 6  */
    505  FDKaacEnc_count7_8_9_10_11,              /* 7  */
    506  FDKaacEnc_count9_10_11,                  /* 8  */
    507  FDKaacEnc_count9_10_11,                  /* 9  */
    508  FDKaacEnc_count9_10_11,                  /* 10 */
    509  FDKaacEnc_count9_10_11,                  /* 11 */
    510  FDKaacEnc_count9_10_11,                  /* 12 */
    511  FDKaacEnc_count11,                       /* 13 */
    512  FDKaacEnc_count11,                       /* 14 */
    513  FDKaacEnc_count11,                       /* 15 */
    514  FDKaacEnc_countEsc                       /* 16 */
    515 };
    516 
    517 
    518 
    519 INT    FDKaacEnc_bitCount(const SHORT *values,
    520                           const INT   width,
    521                           INT         maxVal,
    522                           INT        *bitCount)
    523 {
    524 
    525   /*
    526     check if we can use codebook 0
    527   */
    528 
    529   if(maxVal == 0)
    530     bitCount[0] = 0;
    531   else
    532     bitCount[0] = INVALID_BITCOUNT;
    533 
    534   maxVal = fixMin(maxVal,(INT)CODE_BOOK_ESC_LAV);
    535   countFuncTable[maxVal](values,width,bitCount);
    536   return(0);
    537 }
    538 
    539 
    540 
    541 
    542 /*
    543   count difference between actual and zeroed lines
    544 */
    545 INT FDKaacEnc_countValues(SHORT *RESTRICT values, INT width, INT codeBook)
    546 {
    547 
    548   INT i,t0,t1,t2,t3,t00,t01;
    549   INT codeLength;
    550   INT signLength;
    551   INT bitCnt=0;
    552 
    553   switch(codeBook){
    554   case CODE_BOOK_ZERO_NO:
    555     break;
    556 
    557   case CODE_BOOK_1_NO:
    558     for(i=0; i<width; i+=4) {
    559       t0         = values[i+0];
    560       t1         = values[i+1];
    561       t2         = values[i+2];
    562       t3         = values[i+3];
    563       codeLength = HI_LTAB(FDKaacEnc_huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]);
    564       bitCnt+= codeLength;
    565     }
    566     break;
    567 
    568   case CODE_BOOK_2_NO:
    569     for(i=0; i<width; i+=4) {
    570       t0         = values[i+0];
    571       t1         = values[i+1];
    572       t2         = values[i+2];
    573       t3         = values[i+3];
    574       codeLength = LO_LTAB(FDKaacEnc_huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]);
    575       bitCnt+= codeLength;
    576     }
    577     break;
    578 
    579   case CODE_BOOK_3_NO:
    580     for(i=0; i<width; i+=4) {
    581       signLength=0;
    582       t0 = values[i+0];
    583       if(t0 != 0){
    584         signLength++;
    585         t0=fixp_abs(t0);
    586       }
    587       t1 = values[i+1];
    588       if(t1 != 0){
    589         signLength++;
    590         t1=fixp_abs(t1);
    591       }
    592       t2 = values[i+2];
    593       if(t2 != 0){
    594         signLength++;
    595         t2=fixp_abs(t2);
    596       }
    597       t3 = values[i+3];
    598       if(t3 != 0){
    599         signLength++;
    600         t3=fixp_abs(t3);
    601       }
    602 
    603       codeLength = HI_LTAB(FDKaacEnc_huff_ltab3_4[t0][t1][t2][t3]);
    604       bitCnt+=codeLength+signLength;
    605     }
    606     break;
    607 
    608   case CODE_BOOK_4_NO:
    609     for(i=0; i<width; i+=4) {
    610       signLength=0;
    611       t0 = values[i+0];
    612       if(t0 != 0){
    613         signLength++;
    614         t0=fixp_abs(t0);
    615       }
    616       t1 = values[i+1];
    617       if(t1 != 0){
    618         signLength++;
    619         t1=fixp_abs(t1);
    620       }
    621       t2 = values[i+2];
    622       if(t2 != 0){
    623         signLength++;
    624         t2=fixp_abs(t2);
    625       }
    626       t3 = values[i+3];
    627       if(t3 != 0){
    628         signLength++;
    629         t3=fixp_abs(t3);
    630       }
    631       codeLength = LO_LTAB(FDKaacEnc_huff_ltab3_4[t0][t1][t2][t3]);
    632       bitCnt+=codeLength+signLength;
    633     }
    634     break;
    635 
    636   case CODE_BOOK_5_NO:
    637     for(i=0; i<width; i+=2) {
    638       t0         = values[i+0];
    639       t1         = values[i+1];
    640       codeLength = HI_LTAB(FDKaacEnc_huff_ltab5_6[t0+4][t1+4]);
    641       bitCnt+=codeLength;
    642     }
    643     break;
    644 
    645   case CODE_BOOK_6_NO:
    646     for(i=0; i<width; i+=2) {
    647       t0         = values[i+0];
    648       t1         = values[i+1];
    649       codeLength = LO_LTAB(FDKaacEnc_huff_ltab5_6[t0+4][t1+4]);
    650       bitCnt+=codeLength;
    651     }
    652     break;
    653 
    654   case CODE_BOOK_7_NO:
    655     for(i=0; i<width; i+=2){
    656       signLength=0;
    657       t0 = values[i+0];
    658       if(t0 != 0){
    659         signLength++;
    660         t0=fixp_abs(t0);
    661       }
    662 
    663       t1 = values[i+1];
    664       if(t1 != 0){
    665         signLength++;
    666         t1=fixp_abs(t1);
    667       }
    668       codeLength = HI_LTAB(FDKaacEnc_huff_ltab7_8[t0][t1]);
    669       bitCnt+=codeLength +signLength;
    670     }
    671     break;
    672 
    673   case CODE_BOOK_8_NO:
    674     for(i=0; i<width; i+=2) {
    675       signLength=0;
    676       t0 = values[i+0];
    677       if(t0 != 0){
    678         signLength++;
    679         t0=fixp_abs(t0);
    680       }
    681 
    682       t1 = values[i+1];
    683       if(t1 != 0){
    684         signLength++;
    685         t1=fixp_abs(t1);
    686       }
    687       codeLength = LO_LTAB(FDKaacEnc_huff_ltab7_8[t0][t1]);
    688       bitCnt+=codeLength +signLength;
    689     }
    690     break;
    691 
    692   case CODE_BOOK_9_NO:
    693     for(i=0; i<width; i+=2) {
    694       signLength=0;
    695       t0 = values[i+0];
    696       if(t0 != 0){
    697         signLength++;
    698         t0=fixp_abs(t0);
    699       }
    700       t1 = values[i+1];
    701       if(t1 != 0){
    702         signLength++;
    703         t1=fixp_abs(t1);
    704       }
    705       codeLength = HI_LTAB(FDKaacEnc_huff_ltab9_10[t0][t1]);
    706       bitCnt+=codeLength +signLength;
    707     }
    708     break;
    709 
    710   case CODE_BOOK_10_NO:
    711     for(i=0; i<width; i+=2) {
    712       signLength=0;
    713       t0 = values[i+0];
    714       if(t0 != 0){
    715         signLength++;
    716         t0=fixp_abs(t0);
    717       }
    718 
    719       t1 = values[i+1];
    720       if(t1 != 0){
    721         signLength++;
    722         t1=fixp_abs(t1);
    723       }
    724       codeLength = LO_LTAB(FDKaacEnc_huff_ltab9_10[t0][t1]);
    725       bitCnt+=codeLength +signLength;
    726     }
    727     break;
    728 
    729   case CODE_BOOK_ESC_NO:
    730     for(i=0; i<width; i+=2) {
    731       signLength=0;
    732       t0 = values[i+0];
    733       if(t0 != 0){
    734         signLength++;
    735         t0=fixp_abs(t0);
    736       }
    737       t1 = values[i+1];
    738       if(t1 != 0){
    739         signLength++;
    740         t1=fixp_abs(t1);
    741       }
    742       t00 = fixMin(t0,16);
    743       t01 = fixMin(t1,16);
    744 
    745       codeLength = (INT) FDKaacEnc_huff_ltab11[t00][t01];
    746       bitCnt+=codeLength +signLength;
    747       if(t0 >=16){
    748         INT n,p;
    749         n=0;
    750         p=t0;
    751         while((p>>=1) >=16){
    752           bitCnt++;
    753           n++;
    754         }
    755         bitCnt+=(n+5);
    756       }
    757       if(t1 >=16){
    758         INT n,p;
    759         n=0;
    760         p=t1;
    761         while((p>>=1) >=16){
    762           bitCnt++;
    763           n++;
    764         }
    765         bitCnt+=(n+5);
    766       }
    767     }
    768     break;
    769 
    770   default:
    771     break;
    772   }
    773 
    774   return(bitCnt);
    775 }
    776 
    777 
    778 
    779 INT FDKaacEnc_codeValues(SHORT *RESTRICT values, INT width, INT codeBook,  HANDLE_FDK_BITSTREAM hBitstream)
    780 {
    781 
    782   INT i,t0,t1,t2,t3,t00,t01;
    783   INT codeWord,codeLength;
    784   INT sign,signLength;
    785 
    786   switch(codeBook){
    787   case CODE_BOOK_ZERO_NO:
    788     break;
    789 
    790   case CODE_BOOK_1_NO:
    791     for(i=0; i<width; i+=4) {
    792       t0         = values[i+0]+1;
    793       t1         = values[i+1]+1;
    794       t2         = values[i+2]+1;
    795       t3         = values[i+3]+1;
    796       codeWord   = FDKaacEnc_huff_ctab1[t0][t1][t2][t3];
    797       codeLength = HI_LTAB(FDKaacEnc_huff_ltab1_2[t0][t1][t2][t3]);
    798       FDKwriteBits(hBitstream,codeWord,codeLength);
    799     }
    800     break;
    801 
    802   case CODE_BOOK_2_NO:
    803     for(i=0; i<width; i+=4) {
    804       t0         = values[i+0]+1;
    805       t1         = values[i+1]+1;
    806       t2         = values[i+2]+1;
    807       t3         = values[i+3]+1;
    808       codeWord   = FDKaacEnc_huff_ctab2[t0][t1][t2][t3];
    809       codeLength = LO_LTAB(FDKaacEnc_huff_ltab1_2[t0][t1][t2][t3]);
    810       FDKwriteBits(hBitstream,codeWord,codeLength);
    811     }
    812     break;
    813 
    814   case CODE_BOOK_3_NO:
    815     for(i=0; i<width; i+=4) {
    816       sign=0;
    817       signLength=0;
    818       t0 = values[i+0];
    819       if(t0 != 0){
    820         signLength++;
    821         sign<<=1;
    822         if(t0 < 0){
    823           sign|=1;
    824           t0=fixp_abs(t0);
    825         }
    826       }
    827       t1 = values[i+1];
    828       if(t1 != 0){
    829         signLength++;
    830         sign<<=1;
    831         if(t1 < 0){
    832           sign|=1;
    833           t1=fixp_abs(t1);
    834         }
    835       }
    836       t2 = values[i+2];
    837       if(t2 != 0){
    838         signLength++;
    839         sign<<=1;
    840         if(t2 < 0){
    841           sign|=1;
    842           t2=fixp_abs(t2);
    843         }
    844       }
    845       t3 = values[i+3];
    846       if(t3 != 0){
    847         signLength++;
    848         sign<<=1;
    849         if(t3 < 0){
    850           sign|=1;
    851           t3=fixp_abs(t3);
    852         }
    853       }
    854 
    855       codeWord   = FDKaacEnc_huff_ctab3[t0][t1][t2][t3];
    856       codeLength = HI_LTAB(FDKaacEnc_huff_ltab3_4[t0][t1][t2][t3]);
    857       FDKwriteBits(hBitstream,codeWord,codeLength);
    858       FDKwriteBits(hBitstream,sign,signLength);
    859     }
    860     break;
    861 
    862   case CODE_BOOK_4_NO:
    863     for(i=0; i<width; i+=4) {
    864       sign=0;
    865       signLength=0;
    866       t0 = values[i+0];
    867       if(t0 != 0){
    868         signLength++;
    869         sign<<=1;
    870         if(t0 < 0){
    871           sign|=1;
    872           t0=fixp_abs(t0);
    873         }
    874       }
    875       t1 = values[i+1];
    876       if(t1 != 0){
    877         signLength++;
    878         sign<<=1;
    879         if(t1 < 0){
    880           sign|=1;
    881           t1=fixp_abs(t1);
    882         }
    883       }
    884       t2 = values[i+2];
    885       if(t2 != 0){
    886         signLength++;
    887         sign<<=1;
    888         if(t2 < 0){
    889           sign|=1;
    890           t2=fixp_abs(t2);
    891         }
    892       }
    893       t3 = values[i+3];
    894       if(t3 != 0){
    895         signLength++;
    896         sign<<=1;
    897         if(t3 < 0){
    898           sign|=1;
    899           t3=fixp_abs(t3);
    900         }
    901       }
    902       codeWord   = FDKaacEnc_huff_ctab4[t0][t1][t2][t3];
    903       codeLength = LO_LTAB(FDKaacEnc_huff_ltab3_4[t0][t1][t2][t3]);
    904       FDKwriteBits(hBitstream,codeWord,codeLength);
    905       FDKwriteBits(hBitstream,sign,signLength);
    906     }
    907     break;
    908 
    909   case CODE_BOOK_5_NO:
    910     for(i=0; i<width; i+=2) {
    911       t0         = values[i+0]+4;
    912       t1         = values[i+1]+4;
    913       codeWord   = FDKaacEnc_huff_ctab5[t0][t1];
    914       codeLength = HI_LTAB(FDKaacEnc_huff_ltab5_6[t0][t1]);
    915       FDKwriteBits(hBitstream,codeWord,codeLength);
    916     }
    917     break;
    918 
    919   case CODE_BOOK_6_NO:
    920     for(i=0; i<width; i+=2) {
    921       t0         = values[i+0]+4;
    922       t1         = values[i+1]+4;
    923       codeWord   = FDKaacEnc_huff_ctab6[t0][t1];
    924       codeLength = LO_LTAB(FDKaacEnc_huff_ltab5_6[t0][t1]);
    925       FDKwriteBits(hBitstream,codeWord,codeLength);
    926     }
    927     break;
    928 
    929   case CODE_BOOK_7_NO:
    930     for(i=0; i<width; i+=2){
    931       sign=0;
    932       signLength=0;
    933       t0 = values[i+0];
    934       if(t0 != 0){
    935         signLength++;
    936         sign<<=1;
    937         if(t0 < 0){
    938           sign|=1;
    939           t0=fixp_abs(t0);
    940         }
    941       }
    942 
    943       t1 = values[i+1];
    944       if(t1 != 0){
    945         signLength++;
    946         sign<<=1;
    947         if(t1 < 0){
    948           sign|=1;
    949           t1=fixp_abs(t1);
    950         }
    951       }
    952       codeWord   = FDKaacEnc_huff_ctab7[t0][t1];
    953       codeLength = HI_LTAB(FDKaacEnc_huff_ltab7_8[t0][t1]);
    954       FDKwriteBits(hBitstream,codeWord,codeLength);
    955       FDKwriteBits(hBitstream,sign,signLength);
    956     }
    957     break;
    958 
    959   case CODE_BOOK_8_NO:
    960     for(i=0; i<width; i+=2) {
    961       sign=0;
    962       signLength=0;
    963       t0 = values[i+0];
    964       if(t0 != 0){
    965         signLength++;
    966         sign<<=1;
    967         if(t0 < 0){
    968           sign|=1;
    969           t0=fixp_abs(t0);
    970         }
    971       }
    972 
    973       t1 = values[i+1];
    974       if(t1 != 0){
    975         signLength++;
    976         sign<<=1;
    977         if(t1 < 0){
    978           sign|=1;
    979           t1=fixp_abs(t1);
    980         }
    981       }
    982       codeWord   = FDKaacEnc_huff_ctab8[t0][t1];
    983       codeLength = LO_LTAB(FDKaacEnc_huff_ltab7_8[t0][t1]);
    984       FDKwriteBits(hBitstream,codeWord,codeLength);
    985       FDKwriteBits(hBitstream,sign,signLength);
    986     }
    987     break;
    988 
    989   case CODE_BOOK_9_NO:
    990     for(i=0; i<width; i+=2) {
    991       sign=0;
    992       signLength=0;
    993       t0 = values[i+0];
    994       if(t0 != 0){
    995         signLength++;
    996         sign<<=1;
    997         if(t0 < 0){
    998           sign|=1;
    999           t0=fixp_abs(t0);
   1000         }
   1001       }
   1002       t1 = values[i+1];
   1003       if(t1 != 0){
   1004         signLength++;
   1005         sign<<=1;
   1006         if(t1 < 0){
   1007           sign|=1;
   1008           t1=fixp_abs(t1);
   1009         }
   1010       }
   1011       codeWord   = FDKaacEnc_huff_ctab9[t0][t1];
   1012       codeLength = HI_LTAB(FDKaacEnc_huff_ltab9_10[t0][t1]);
   1013       FDKwriteBits(hBitstream,codeWord,codeLength);
   1014       FDKwriteBits(hBitstream,sign,signLength);
   1015     }
   1016     break;
   1017 
   1018   case CODE_BOOK_10_NO:
   1019     for(i=0; i<width; i+=2) {
   1020       sign=0;
   1021       signLength=0;
   1022       t0 = values[i+0];
   1023       if(t0 != 0){
   1024         signLength++;
   1025         sign<<=1;
   1026         if(t0 < 0){
   1027           sign|=1;
   1028           t0=fixp_abs(t0);
   1029         }
   1030       }
   1031 
   1032       t1 = values[i+1];
   1033       if(t1 != 0){
   1034         signLength++;
   1035         sign<<=1;
   1036         if(t1 < 0){
   1037           sign|=1;
   1038           t1=fixp_abs(t1);
   1039         }
   1040       }
   1041       codeWord   = FDKaacEnc_huff_ctab10[t0][t1];
   1042       codeLength = LO_LTAB(FDKaacEnc_huff_ltab9_10[t0][t1]);
   1043       FDKwriteBits(hBitstream,codeWord,codeLength);
   1044       FDKwriteBits(hBitstream,sign,signLength);
   1045     }
   1046     break;
   1047 
   1048   case CODE_BOOK_ESC_NO:
   1049     for(i=0; i<width; i+=2) {
   1050       sign=0;
   1051       signLength=0;
   1052       t0 = values[i+0];
   1053       if(t0 != 0){
   1054         signLength++;
   1055         sign<<=1;
   1056         if(t0 < 0){
   1057           sign|=1;
   1058           t0=fixp_abs(t0);
   1059         }
   1060       }
   1061       t1 = values[i+1];
   1062       if(t1 != 0){
   1063         signLength++;
   1064         sign<<=1;
   1065         if(t1 < 0){
   1066           sign|=1;
   1067           t1=fixp_abs(t1);
   1068         }
   1069       }
   1070       t00 = fixMin(t0,16);
   1071       t01 = fixMin(t1,16);
   1072 
   1073       codeWord   = FDKaacEnc_huff_ctab11[t00][t01];
   1074       codeLength = (INT) FDKaacEnc_huff_ltab11[t00][t01];
   1075       FDKwriteBits(hBitstream,codeWord,codeLength);
   1076       FDKwriteBits(hBitstream,sign,signLength);
   1077       if(t0 >=16){
   1078         INT n,p;
   1079         n=0;
   1080         p=t0;
   1081         while((p>>=1) >=16){
   1082           FDKwriteBits(hBitstream,1,1);
   1083           n++;
   1084         }
   1085         FDKwriteBits(hBitstream,0,1);
   1086         FDKwriteBits(hBitstream,t0-(1<<(n+4)),n+4);
   1087       }
   1088       if(t1 >=16){
   1089         INT n,p;
   1090         n=0;
   1091         p=t1;
   1092         while((p>>=1) >=16){
   1093           FDKwriteBits(hBitstream,1,1);
   1094           n++;
   1095         }
   1096         FDKwriteBits(hBitstream,0,1);
   1097         FDKwriteBits(hBitstream,t1-(1<<(n+4)),n+4);
   1098       }
   1099     }
   1100     break;
   1101 
   1102   default:
   1103     break;
   1104   }
   1105   return(0);
   1106 }
   1107 
   1108 INT FDKaacEnc_codeScalefactorDelta(INT delta, HANDLE_FDK_BITSTREAM hBitstream)
   1109 {
   1110   INT codeWord,codeLength;
   1111 
   1112   if(fixp_abs(delta) >CODE_BOOK_SCF_LAV)
   1113     return(1);
   1114 
   1115   codeWord   = FDKaacEnc_huff_ctabscf[delta+CODE_BOOK_SCF_LAV];
   1116   codeLength = (INT)FDKaacEnc_huff_ltabscf[delta+CODE_BOOK_SCF_LAV];
   1117   FDKwriteBits(hBitstream,codeWord,codeLength);
   1118   return(0);
   1119 }
   1120 
   1121 
   1122 
   1123