huffman.c
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:16k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2. ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
  3. ** Copyright (C) 2003-2005 M. Bakker, Ahead Software AG, http://www.nero.com
  4. **  
  5. ** This program is free software; you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation; either version 2 of the License, or
  8. ** (at your option) any later version.
  9. ** 
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. ** GNU General Public License for more details.
  14. ** 
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program; if not, write to the Free Software 
  17. ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18. **
  19. ** Any non-GPL usage of this software or parts of this software is strictly
  20. ** forbidden.
  21. **
  22. ** Software using this code must display the following message visibly in the
  23. ** software:
  24. ** "FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Ahead Software, www.nero.com"
  25. ** in, for example, the about-box or help/startup screen.
  26. **
  27. ** Commercial non-GPL licensing of this software is possible.
  28. ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
  29. **
  30. ** $Id: huffman.c,v 1.2 2005/11/01 21:41:43 gabest Exp $
  31. **/
  32. #include "common.h"
  33. #include "structs.h"
  34. #include <stdlib.h>
  35. #ifdef ANALYSIS
  36. #include <stdio.h>
  37. #endif
  38. #include "bits.h"
  39. #include "huffman.h"
  40. #include "codebook/hcb.h"
  41. /* static function declarations */
  42. static INLINE void huffman_sign_bits(bitfile *ld, int16_t *sp, uint8_t len);
  43. static INLINE int16_t huffman_getescape(bitfile *ld, int16_t sp);
  44. static uint8_t huffman_2step_quad(uint8_t cb, bitfile *ld, int16_t *sp);
  45. static uint8_t huffman_2step_quad_sign(uint8_t cb, bitfile *ld, int16_t *sp);
  46. static uint8_t huffman_2step_pair(uint8_t cb, bitfile *ld, int16_t *sp);
  47. static uint8_t huffman_2step_pair_sign(uint8_t cb, bitfile *ld, int16_t *sp);
  48. static uint8_t huffman_binary_quad(uint8_t cb, bitfile *ld, int16_t *sp);
  49. static uint8_t huffman_binary_quad_sign(uint8_t cb, bitfile *ld, int16_t *sp);
  50. static uint8_t huffman_binary_pair(uint8_t cb, bitfile *ld, int16_t *sp);
  51. static uint8_t huffman_binary_pair_sign(uint8_t cb, bitfile *ld, int16_t *sp);
  52. static int16_t huffman_codebook(uint8_t i);
  53. static void vcb11_check_LAV(uint8_t cb, int16_t *sp);
  54. int8_t huffman_scale_factor(bitfile *ld)
  55. {
  56.     uint16_t offset = 0;
  57.     while (hcb_sf[offset][1])
  58.     {
  59.         uint8_t b = faad_get1bit(ld
  60.             DEBUGVAR(1,255,"huffman_scale_factor()"));
  61.         offset += hcb_sf[offset][b];
  62.         if (offset > 240)
  63.         {
  64.             /* printf("ERROR: offset into hcb_sf = %d >240!n", offset); */
  65.             return -1;
  66.         }
  67.     }
  68.     return hcb_sf[offset][0];
  69. }
  70. hcb *hcb_table[] = {
  71.     0, hcb1_1, hcb2_1, 0, hcb4_1, 0, hcb6_1, 0, hcb8_1, 0, hcb10_1, hcb11_1
  72. };
  73. hcb_2_quad *hcb_2_quad_table[] = {
  74.     0, hcb1_2, hcb2_2, 0, hcb4_2, 0, 0, 0, 0, 0, 0, 0
  75. };
  76. hcb_2_pair *hcb_2_pair_table[] = {
  77.     0, 0, 0, 0, 0, 0, hcb6_2, 0, hcb8_2, 0, hcb10_2, hcb11_2
  78. };
  79. hcb_bin_pair *hcb_bin_table[] = {
  80.     0, 0, 0, 0, 0, hcb5, 0, hcb7, 0, hcb9, 0, 0
  81. };
  82. uint8_t hcbN[] = { 0, 5, 5, 0, 5, 0, 5, 0, 5, 0, 6, 5 };
  83. /* defines whether a huffman codebook is unsigned or not */
  84. /* Table 4.6.2 */
  85. uint8_t unsigned_cb[] = { 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  86.   /* codebook 16 to 31 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
  87. };
  88. int hcb_2_quad_table_size[] = { 0, 114, 86, 0, 185, 0, 0, 0, 0, 0, 0, 0 };
  89. int hcb_2_pair_table_size[] = { 0, 0, 0, 0, 0, 0, 126, 0, 83, 0, 210, 373 };
  90. int hcb_bin_table_size[] = { 0, 0, 0, 161, 0, 161, 0, 127, 0, 337, 0, 0 };
  91. static INLINE void huffman_sign_bits(bitfile *ld, int16_t *sp, uint8_t len)
  92. {
  93.     uint8_t i;
  94.     for (i = 0; i < len; i++)
  95.     {
  96.         if(sp[i])
  97.         {
  98.             if(faad_get1bit(ld
  99.                 DEBUGVAR(1,5,"huffman_sign_bits(): sign bit")) & 1)
  100.             {
  101.                 sp[i] = -sp[i];
  102.             }
  103.         }
  104.     }
  105. }
  106. static INLINE int16_t huffman_getescape(bitfile *ld, int16_t sp)
  107. {
  108.     uint8_t neg, i;
  109.     int16_t j;
  110. int16_t off;
  111.     if (sp < 0)
  112.     {
  113.         if (sp != -16)
  114.             return sp;
  115.         neg = 1;
  116.     } else {
  117.         if (sp != 16)
  118.             return sp;
  119.         neg = 0;
  120.     }
  121.     for (i = 4; ; i++)
  122.     {
  123.         if (faad_get1bit(ld
  124.             DEBUGVAR(1,6,"huffman_getescape(): escape size")) == 0)
  125.         {
  126.             break;
  127.         }
  128.     }
  129.     off = (int16_t)faad_getbits(ld, i
  130.         DEBUGVAR(1,9,"huffman_getescape(): escape"));
  131.     j = off | (1<<i);
  132.     if (neg)
  133.         j = -j;
  134.     return j;
  135. }
  136. static uint8_t huffman_2step_quad(uint8_t cb, bitfile *ld, int16_t *sp)
  137. {
  138.     uint32_t cw;
  139.     uint16_t offset = 0;
  140.     uint8_t extra_bits;
  141.     cw = faad_showbits(ld, hcbN[cb]);
  142.     offset = hcb_table[cb][cw].offset;
  143.     extra_bits = hcb_table[cb][cw].extra_bits;
  144.     if (extra_bits)
  145.     {
  146.         /* we know for sure it's more than hcbN[cb] bits long */
  147.         faad_flushbits(ld, hcbN[cb]);
  148.         offset += (uint16_t)faad_showbits(ld, extra_bits);
  149.         faad_flushbits(ld, hcb_2_quad_table[cb][offset].bits - hcbN[cb]);
  150.     } else {
  151.         faad_flushbits(ld, hcb_2_quad_table[cb][offset].bits);
  152.     }
  153.     if (offset > hcb_2_quad_table_size[cb])
  154.     {
  155.         /* printf("ERROR: offset into hcb_2_quad_table = %d >%d!n", offset,
  156.            hcb_2_quad_table_size[cb]); */
  157.         return 10;
  158.     }
  159.     sp[0] = hcb_2_quad_table[cb][offset].x;
  160.     sp[1] = hcb_2_quad_table[cb][offset].y;
  161.     sp[2] = hcb_2_quad_table[cb][offset].v;
  162.     sp[3] = hcb_2_quad_table[cb][offset].w;
  163.     return 0;
  164. }
  165. static uint8_t huffman_2step_quad_sign(uint8_t cb, bitfile *ld, int16_t *sp)
  166. {
  167.     uint8_t err = huffman_2step_quad(cb, ld, sp);
  168.     huffman_sign_bits(ld, sp, QUAD_LEN);
  169.     return err;
  170. }
  171. static uint8_t huffman_2step_pair(uint8_t cb, bitfile *ld, int16_t *sp)
  172. {
  173.     uint32_t cw;
  174.     uint16_t offset = 0;
  175.     uint8_t extra_bits;
  176.     cw = faad_showbits(ld, hcbN[cb]);
  177.     offset = hcb_table[cb][cw].offset;
  178.     extra_bits = hcb_table[cb][cw].extra_bits;
  179.     if (extra_bits)
  180.     {
  181.         /* we know for sure it's more than hcbN[cb] bits long */
  182.         faad_flushbits(ld, hcbN[cb]);
  183.         offset += (uint16_t)faad_showbits(ld, extra_bits);
  184.         faad_flushbits(ld, hcb_2_pair_table[cb][offset].bits - hcbN[cb]);
  185.     } else {
  186.         faad_flushbits(ld, hcb_2_pair_table[cb][offset].bits);
  187.     }
  188.     if (offset > hcb_2_pair_table_size[cb])
  189.     {
  190.         /* printf("ERROR: offset into hcb_2_pair_table = %d >%d!n", offset,
  191.            hcb_2_pair_table_size[cb]); */
  192.         return 10;
  193.     }
  194.     sp[0] = hcb_2_pair_table[cb][offset].x;
  195.     sp[1] = hcb_2_pair_table[cb][offset].y;
  196.     return 0;
  197. }
  198. static uint8_t huffman_2step_pair_sign(uint8_t cb, bitfile *ld, int16_t *sp)
  199. {
  200.     uint8_t err = huffman_2step_pair(cb, ld, sp);
  201.     huffman_sign_bits(ld, sp, PAIR_LEN);
  202.     return err;
  203. }
  204. static uint8_t huffman_binary_quad(uint8_t cb, bitfile *ld, int16_t *sp)
  205. {
  206.     uint16_t offset = 0;
  207.     while (!hcb3[offset].is_leaf)
  208.     {
  209.         uint8_t b = faad_get1bit(ld
  210.             DEBUGVAR(1,255,"huffman_spectral_data():3"));
  211.         offset += hcb3[offset].data[b];
  212.     }
  213.     if (offset > hcb_bin_table_size[cb])
  214.     {
  215.         /* printf("ERROR: offset into hcb_bin_table = %d >%d!n", offset,
  216.            hcb_bin_table_size[cb]); */
  217.         return 10;
  218.     }
  219.     sp[0] = hcb3[offset].data[0];
  220.     sp[1] = hcb3[offset].data[1];
  221.     sp[2] = hcb3[offset].data[2];
  222.     sp[3] = hcb3[offset].data[3];
  223.     return 0;
  224. }
  225. static uint8_t huffman_binary_quad_sign(uint8_t cb, bitfile *ld, int16_t *sp)
  226. {
  227.     uint8_t err = huffman_binary_quad(cb, ld, sp);
  228.     huffman_sign_bits(ld, sp, QUAD_LEN);
  229.     return err;
  230. }
  231. static uint8_t huffman_binary_pair(uint8_t cb, bitfile *ld, int16_t *sp)
  232. {
  233.     uint16_t offset = 0;
  234.     while (!hcb_bin_table[cb][offset].is_leaf)
  235.     {
  236.         uint8_t b = faad_get1bit(ld
  237.             DEBUGVAR(1,255,"huffman_spectral_data():9"));
  238.         offset += hcb_bin_table[cb][offset].data[b];
  239.     }
  240.     if (offset > hcb_bin_table_size[cb])
  241.     {
  242.         /* printf("ERROR: offset into hcb_bin_table = %d >%d!n", offset,
  243.            hcb_bin_table_size[cb]); */
  244.         return 10;
  245.     }
  246.     sp[0] = hcb_bin_table[cb][offset].data[0];
  247.     sp[1] = hcb_bin_table[cb][offset].data[1];
  248.     return 0;
  249. }
  250. static uint8_t huffman_binary_pair_sign(uint8_t cb, bitfile *ld, int16_t *sp)
  251. {
  252.     uint8_t err = huffman_binary_pair(cb, ld, sp);
  253.     huffman_sign_bits(ld, sp, PAIR_LEN);
  254.     return err;
  255. }
  256. static int16_t huffman_codebook(uint8_t i)
  257. {
  258.     static const uint32_t data = 16428320;
  259.     if (i == 0) return (int16_t)(data >> 16) & 0xFFFF;
  260.     else        return (int16_t)data & 0xFFFF;
  261. }
  262. static void vcb11_check_LAV(uint8_t cb, int16_t *sp)
  263. {
  264.     static const uint16_t vcb11_LAV_tab[] = {
  265.         16, 31, 47, 63, 95, 127, 159, 191, 223,
  266.         255, 319, 383, 511, 767, 1023, 2047
  267.     };
  268.     uint16_t max = 0;
  269.     if (cb < 16 || cb > 31)
  270.         return;
  271.     max = vcb11_LAV_tab[cb - 16];
  272.     if ((abs(sp[0]) > max) || (abs(sp[1]) > max))
  273.     {
  274.         sp[0] = 0;
  275.         sp[1] = 0;
  276.     }
  277. }
  278. uint8_t huffman_spectral_data(uint8_t cb, bitfile *ld, int16_t *sp)
  279. {
  280.     switch (cb)
  281.     {
  282.     case 1: /* 2-step method for data quadruples */
  283.     case 2:
  284.         return huffman_2step_quad(cb, ld, sp);
  285.     case 3: /* binary search for data quadruples */
  286.         return huffman_binary_quad_sign(cb, ld, sp);
  287.     case 4: /* 2-step method for data quadruples */
  288.         return huffman_2step_quad_sign(cb, ld, sp);
  289.     case 5: /* binary search for data pairs */
  290.         return huffman_binary_pair(cb, ld, sp);
  291.     case 6: /* 2-step method for data pairs */
  292.         return huffman_2step_pair(cb, ld, sp);
  293.     case 7: /* binary search for data pairs */
  294.     case 9:
  295.         return huffman_binary_pair_sign(cb, ld, sp);
  296.     case 8: /* 2-step method for data pairs */
  297.     case 10:
  298.         return huffman_2step_pair_sign(cb, ld, sp);
  299.     case 12: {
  300.         uint8_t err = huffman_2step_pair(11, ld, sp);
  301.         sp[0] = huffman_codebook(0); sp[1] = huffman_codebook(1); 
  302.         return err; }
  303.     case 11:
  304.     {
  305.         uint8_t err = huffman_2step_pair_sign(11, ld, sp);
  306.         sp[0] = huffman_getescape(ld, sp[0]);
  307.         sp[1] = huffman_getescape(ld, sp[1]);
  308.         return err;
  309.     }
  310. #ifdef ERROR_RESILIENCE
  311.     /* VCB11 uses codebook 11 */
  312.     case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23:
  313.     case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31:
  314.     {
  315.         uint8_t err = huffman_2step_pair_sign(11, ld, sp);
  316.         sp[0] = huffman_getescape(ld, sp[0]);
  317.         sp[1] = huffman_getescape(ld, sp[1]);
  318.         /* check LAV (Largest Absolute Value) */
  319.         /* this finds errors in the ESCAPE signal */
  320.         vcb11_check_LAV(cb, sp);
  321.         return err;
  322.     }
  323. #endif
  324.     default:
  325.         /* Non existent codebook number, something went wrong */
  326.         return 11;
  327.     }
  328.     return 0;
  329. }
  330. #ifdef ERROR_RESILIENCE
  331. /* Special version of huffman_spectral_data
  332. Will not read from a bitfile but a bits_t structure.
  333. Will keep track of the bits decoded and return the number of bits remaining.
  334. Do not read more than ld->len, return -1 if codeword would be longer */
  335. int8_t huffman_spectral_data_2(uint8_t cb, bits_t *ld, int16_t *sp)
  336. {
  337.     uint32_t cw;
  338.     uint16_t offset = 0;
  339.     uint8_t extra_bits;
  340.     uint8_t i, vcb11 = 0;
  341.     switch (cb)
  342.     {
  343.     case 1: /* 2-step method for data quadruples */
  344.     case 2:
  345.     case 4:
  346.         cw = showbits_hcr(ld, hcbN[cb]);
  347.         offset = hcb_table[cb][cw].offset;
  348.         extra_bits = hcb_table[cb][cw].extra_bits;
  349.         if (extra_bits)
  350.         {
  351.             /* we know for sure it's more than hcbN[cb] bits long */
  352.             if ( flushbits_hcr(ld, hcbN[cb]) ) return -1;
  353.             offset += (uint16_t)showbits_hcr(ld, extra_bits);
  354.             if ( flushbits_hcr(ld, hcb_2_quad_table[cb][offset].bits - hcbN[cb]) ) return -1;
  355.         } else {
  356.             if ( flushbits_hcr(ld, hcb_2_quad_table[cb][offset].bits) ) return -1;
  357.         }
  358.         sp[0] = hcb_2_quad_table[cb][offset].x;
  359.         sp[1] = hcb_2_quad_table[cb][offset].y;
  360.         sp[2] = hcb_2_quad_table[cb][offset].v;
  361.         sp[3] = hcb_2_quad_table[cb][offset].w;
  362.         break;
  363.     case 6: /* 2-step method for data pairs */
  364.     case 8:
  365.     case 10:
  366.     case 11:
  367.     /* VCB11 uses codebook 11 */
  368.     case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23:
  369.     case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31:
  370.         if (cb >= 16)
  371.         {
  372.             /* store the virtual codebook */
  373.             vcb11 = cb;
  374.             cb = 11;
  375.         }
  376.             
  377.         cw = showbits_hcr(ld, hcbN[cb]);
  378.         offset = hcb_table[cb][cw].offset;
  379.         extra_bits = hcb_table[cb][cw].extra_bits;
  380.         if (extra_bits)
  381.         {
  382.             /* we know for sure it's more than hcbN[cb] bits long */
  383.             if ( flushbits_hcr(ld, hcbN[cb]) ) return -1;
  384.             offset += (uint16_t)showbits_hcr(ld, extra_bits);
  385.             if ( flushbits_hcr(ld, hcb_2_pair_table[cb][offset].bits - hcbN[cb]) ) return -1;
  386.         } else {
  387.             if ( flushbits_hcr(ld, hcb_2_pair_table[cb][offset].bits) ) return -1;
  388.         }
  389.         sp[0] = hcb_2_pair_table[cb][offset].x;
  390.         sp[1] = hcb_2_pair_table[cb][offset].y;
  391.         break;
  392.     case 3: /* binary search for data quadruples */
  393.         while (!hcb3[offset].is_leaf)
  394.         {
  395.             uint8_t b;
  396.             
  397.             if ( get1bit_hcr(ld, &b) ) return -1;
  398.             offset += hcb3[offset].data[b];
  399.         }
  400.         sp[0] = hcb3[offset].data[0];
  401.         sp[1] = hcb3[offset].data[1];
  402.         sp[2] = hcb3[offset].data[2];
  403.         sp[3] = hcb3[offset].data[3];
  404.         break;
  405.     case 5: /* binary search for data pairs */
  406.     case 7:
  407.     case 9:
  408.         while (!hcb_bin_table[cb][offset].is_leaf)
  409.         {
  410.             uint8_t b;
  411.             
  412.             if (get1bit_hcr(ld, &b) ) return -1;
  413.             offset += hcb_bin_table[cb][offset].data[b];
  414.         }
  415.         sp[0] = hcb_bin_table[cb][offset].data[0];
  416.         sp[1] = hcb_bin_table[cb][offset].data[1];
  417.         break;
  418.     }
  419. /* decode sign bits */
  420.     if (unsigned_cb[cb])
  421.     {
  422.         for(i = 0; i < ((cb < FIRST_PAIR_HCB) ? QUAD_LEN : PAIR_LEN); i++)
  423.         {
  424.             if(sp[i])
  425.             {
  426.              uint8_t b;
  427.                 if ( get1bit_hcr(ld, &b) ) return -1;
  428.                 if (b != 0) {
  429.                     sp[i] = -sp[i];
  430.                 }
  431.            }
  432.         }
  433.     }
  434.     /* decode huffman escape bits */
  435.     if ((cb == ESC_HCB) || (cb >= 16))
  436.     {
  437.         uint8_t k;
  438.         for (k = 0; k < 2; k++)
  439.         {
  440.             if ((sp[k] == 16) || (sp[k] == -16))
  441.             {
  442.                 uint8_t neg, i;
  443.                 int32_t j;
  444.                 uint32_t off;
  445.                 neg = (sp[k] < 0) ? 1 : 0; 
  446.                 for (i = 4; ; i++)
  447.                 {
  448.                     uint8_t b;
  449.                     if (get1bit_hcr(ld, &b))
  450.                         return -1;
  451.                     if (b == 0)
  452.                         break;
  453.                 }
  454.                 if (getbits_hcr(ld, i, &off))
  455.                     return -1;
  456.                 j = off + (1<<i);
  457.                 sp[k] = (int16_t)((neg) ? -j : j);
  458.             }
  459.         }
  460.         if (vcb11 != 0)
  461.         {
  462.             /* check LAV (Largest Absolute Value) */
  463.             /* this finds errors in the ESCAPE signal */
  464.             vcb11_check_LAV(vcb11, sp);
  465.         }
  466.     }    
  467.     return ld->len;
  468. }
  469. #endif