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

多媒体编程

开发平台:

Visual C++

  1. /*
  2. ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
  3. ** Copyright (C) 2003 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. ** Commercial non-GPL licensing of this software is possible.
  23. ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
  24. **
  25. ** $Id: hcb.h,v 1.2 2005/11/01 21:41:43 gabest Exp $
  26. **/
  27. #ifndef __HCB_H__
  28. #define __HCB_H__
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. /*
  33.  *  Optimal huffman decoding for AAC taken from:
  34.  *  "SELECTING AN OPTIMAL HUFFMAN DECODER FOR AAC" by
  35.  *  VLADIMIR Z. MESAROVIC , RAGHUNATH RAO, MIROSLAV V. DOKIC, and SACHIN DEO
  36.  *  AES paper 5436
  37.  *
  38.  *   2 methods are used for huffman decoding:
  39.  *   - binary search
  40.  *   - 2-step table lookup
  41.  *
  42.  *   The choice of the "optimal" method is based on the fact that if the
  43.  *   memory size for the Two-step is exorbitantly high then the decision
  44.  *   is Binary search for that codebook. However, for marginally more memory
  45.  *   size, if Twostep outperforms even the best case of Binary then the
  46.  *   decision is Two-step for that codebook.
  47.  *
  48.  *   The following methods are used for the different tables.
  49.  *   codebook   "optimal" method
  50.  *    HCB_1      2-Step
  51.  *    HCB_2      2-Step
  52.  *    HCB_3      Binary
  53.  *    HCB_4      2-Step
  54.  *    HCB_5      Binary
  55.  *    HCB_6      2-Step
  56.  *    HCB_7      Binary
  57.  *    HCB_8      2-Step
  58.  *    HCB_9      Binary
  59.  *    HCB_10     2-Step
  60.  *    HCB_11     2-Step
  61.  *    HCB_SF     Binary
  62.  *
  63.  */
  64. #define ZERO_HCB       0
  65. #define FIRST_PAIR_HCB 5
  66. #define ESC_HCB        11
  67. #define QUAD_LEN       4
  68. #define PAIR_LEN       2
  69. #define NOISE_HCB      13
  70. #define INTENSITY_HCB2 14
  71. #define INTENSITY_HCB  15
  72. /* 1st step table */
  73. typedef struct
  74. {
  75.     uint8_t offset;
  76.     uint8_t extra_bits;
  77. } hcb;
  78. /* 2nd step table with quadruple data */
  79. typedef struct
  80. {
  81.     uint8_t bits;
  82.     int8_t x;
  83.     int8_t y;
  84. } hcb_2_pair;
  85. typedef struct
  86. {
  87.     uint8_t bits;
  88.     int8_t x;
  89.     int8_t y;
  90.     int8_t v;
  91.     int8_t w;
  92. } hcb_2_quad;
  93. /* binary search table */
  94. typedef struct
  95. {
  96.     uint8_t is_leaf;
  97.     int8_t data[4];
  98. } hcb_bin_quad;
  99. typedef struct
  100. {
  101.     uint8_t is_leaf;
  102.     int8_t data[2];
  103. } hcb_bin_pair;
  104. hcb *hcb_table[];
  105. hcb_2_quad *hcb_2_quad_table[];
  106. hcb_2_pair *hcb_2_pair_table[];
  107. hcb_bin_pair *hcb_bin_table[];
  108. uint8_t hcbN[];
  109. uint8_t unsigned_cb[];
  110. int hcb_2_quad_table_size[];
  111. int hcb_2_pair_table_size[];
  112. int hcb_bin_table_size[];
  113. #include "codebook/hcb_1.h"
  114. #include "codebook/hcb_2.h"
  115. #include "codebook/hcb_3.h"
  116. #include "codebook/hcb_4.h"
  117. #include "codebook/hcb_5.h"
  118. #include "codebook/hcb_6.h"
  119. #include "codebook/hcb_7.h"
  120. #include "codebook/hcb_8.h"
  121. #include "codebook/hcb_9.h"
  122. #include "codebook/hcb_10.h"
  123. #include "codebook/hcb_11.h"
  124. #include "codebook/hcb_sf.h"
  125. #ifdef __cplusplus
  126. }
  127. #endif
  128. #endif