ac3.h
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:9k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /* 
  2.  *    ac3.h
  3.  *
  4.  * Copyright (C) Aaron Holtzman - May 1999
  5.  *
  6.  *  This file is part of ac3dec, a free Dolby AC-3 stream decoder.
  7.  *
  8.  *  ac3dec is free software; you can redistribute it and/or modify
  9.  *  it under the terms of the GNU General Public License as published by
  10.  *  the Free Software Foundation; either version 2, or (at your option)
  11.  *  any later version.
  12.  *   
  13.  *  ac3dec is distributed in the hope that it will be useful,
  14.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *  GNU General Public License for more details.
  17.  *   
  18.  *  You should have received a copy of the GNU General Public License
  19.  *  along with GNU Make; see the file COPYING.  If not, write to
  20.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  21.  *
  22.  */
  23. #ifndef __GNUC__
  24. #define inline 
  25. #endif
  26. typedef unsigned long long uint_64;
  27. typedef unsigned long  uint_32;
  28. typedef unsigned short uint_16;
  29. typedef unsigned char  uint_8;
  30. typedef signed long    sint_32;
  31. typedef signed short   sint_16;
  32. typedef signed char    sint_8;
  33. /* Exponent strategy constants */
  34. #define EXP_REUSE (0)
  35. #define EXP_D15   (1)
  36. #define EXP_D25   (2)
  37. #define EXP_D45   (3)
  38. /* Delta bit allocation constants */
  39. #define DELTA_BIT_REUSE (0)
  40. #define DELTA_BIT_NEW (1)
  41. #define DELTA_BIT_NONE (2)
  42. #define DELTA_BIT_RESERVED (3)
  43. /* global preferences structure */
  44. typedef struct prefs_s
  45. {
  46. uint_16 use_dolby_surround;
  47. uint_16 dual_mono_channel_select;
  48. } prefs_t;
  49. extern prefs_t global_prefs;
  50. /* The following structures are filled in by their corresponding parse_*
  51.  * functions. See http://www.atsc.org/Standards/A52/a_52.pdf for
  52.  * full details on each field. Indented fields are used to denote
  53.  * conditional fields.
  54.  */
  55. typedef struct syncinfo_s
  56. {
  57. uint_32 magic;
  58. /* Sync word == 0x0B77 */
  59. /* uint_16   syncword; */
  60. /* crc for the first 5/8 of the sync block */
  61. /* uint_16   crc1; */
  62. /* Stream Sampling Rate (kHz) 0 = 48, 1 = 44.1, 2 = 32, 3 = reserved */
  63. uint_16 fscod;
  64. /* Frame size code */
  65. uint_16 frmsizecod;
  66. /* Information not in the AC-3 bitstream, but derived */
  67. /* Frame size in 16 bit words */
  68. uint_16 frame_size;
  69. /* Bit rate in kilobits */
  70. uint_16 bit_rate;
  71. } syncinfo_t;
  72. typedef struct bsi_s
  73. {
  74. uint_32 magic;
  75. /* Bit stream identification == 0x8 */
  76. uint_16 bsid;
  77. /* Bit stream mode */
  78. uint_16 bsmod;
  79. /* Audio coding mode */
  80. uint_16 acmod;
  81. /* If we're using the centre channel then */
  82. /* centre mix level */
  83. uint_16 cmixlev;
  84. /* If we're using the surround channel then */
  85. /* surround mix level */
  86. uint_16 surmixlev;
  87. /* If we're in 2/0 mode then */
  88. /* Dolby surround mix level - NOT USED - */
  89. uint_16 dsurmod;
  90. /* Low frequency effects on */
  91. uint_16 lfeon;
  92. /* Dialogue Normalization level */
  93. uint_16 dialnorm;
  94. /* Compression exists */
  95. uint_16 compre;
  96. /* Compression level */
  97. uint_16 compr;
  98. /* Language code exists */
  99. uint_16 langcode;
  100. /* Language code */
  101. uint_16 langcod;
  102. /* Audio production info exists*/
  103. uint_16 audprodie;
  104. uint_16 mixlevel;
  105. uint_16 roomtyp;
  106. /* If we're in dual mono mode (acmod == 0) then extra stuff */
  107. uint_16 dialnorm2;
  108. uint_16 compr2e;
  109. uint_16 compr2;
  110. uint_16 langcod2e;
  111. uint_16 langcod2;
  112. uint_16 audprodi2e;
  113. uint_16 mixlevel2;
  114. uint_16 roomtyp2;
  115. /* Copyright bit */
  116. uint_16 copyrightb;
  117. /* Original bit */
  118. uint_16 origbs;
  119. /* Timecode 1 exists */
  120. uint_16 timecod1e;
  121. /* Timecode 1 */
  122. uint_16 timecod1;
  123. /* Timecode 2 exists */
  124. uint_16 timecod2e;
  125. /* Timecode 2 */
  126. uint_16 timecod2;
  127. /* Additional bit stream info exists */
  128. uint_16 addbsie;
  129. /* Additional bit stream length - 1 (in bytes) */
  130. uint_16 addbsil;
  131. /* Additional bit stream information (max 64 bytes) */
  132. uint_8 addbsi[64];
  133. /* Information not in the AC-3 bitstream, but derived */
  134. /* Number of channels (excluding LFE)
  135.  * Derived from acmod */
  136. uint_16 nfchans;
  137. } bsi_t;
  138. /* more pain */
  139. typedef struct audblk_s
  140. {
  141. uint_32 magic1;
  142. /* block switch bit indexed by channel num */
  143. uint_16 blksw[5];
  144. /* dither enable bit indexed by channel num */
  145. uint_16 dithflag[5];
  146. /* dynamic range gain exists */
  147. uint_16 dynrnge;
  148. /* dynamic range gain */
  149. uint_16 dynrng;
  150. /* if acmod==0 then */
  151. /* dynamic range 2 gain exists */
  152. uint_16 dynrng2e;
  153. /* dynamic range 2 gain */
  154. uint_16 dynrng2;
  155. /* coupling strategy exists */
  156. uint_16 cplstre;
  157. /* coupling in use */
  158. uint_16 cplinu;
  159. /* channel coupled */
  160. uint_16 chincpl[5];
  161. /* if acmod==2 then */
  162. /* Phase flags in use */
  163. uint_16 phsflginu;
  164. /* coupling begin frequency code */
  165. uint_16 cplbegf;
  166. /* coupling end frequency code */
  167. uint_16 cplendf;
  168. /* coupling band structure bits */
  169. uint_16 cplbndstrc[18];
  170. /* Do coupling co-ords exist for this channel? */
  171. uint_16 cplcoe[5];
  172. /* Master coupling co-ordinate */
  173. uint_16 mstrcplco[5];
  174. /* Per coupling band coupling co-ordinates */
  175. uint_16 cplcoexp[5][18];
  176. uint_16 cplcomant[5][18];
  177. /* Phase flags for dual mono */
  178. uint_16 phsflg[18];
  179. /* Is there a rematrixing strategy */
  180. uint_16 rematstr;
  181. /* Rematrixing bits */
  182. uint_16 rematflg[4];
  183. /* Coupling exponent strategy */
  184. uint_16 cplexpstr;
  185. /* Exponent strategy for full bandwidth channels */
  186. uint_16 chexpstr[5];
  187. /* Exponent strategy for lfe channel */
  188. uint_16 lfeexpstr;
  189. /* Channel bandwidth for independent channels */
  190. uint_16 chbwcod[5];
  191. /* The absolute coupling exponent */
  192. uint_16 cplabsexp;
  193. /* Coupling channel exponents (D15 mode gives 18 * 12 /3  encoded exponents */
  194. uint_16 cplexps[18 * 12 / 3];
  195. /* Sanity checking constant */
  196. uint_32 magic2;
  197. /* fbw channel exponents */
  198. uint_16 exps[5][252 / 3];
  199. /* channel gain range */
  200. uint_16 gainrng[5];
  201. /* low frequency exponents */
  202. uint_16 lfeexps[3];
  203. /* Bit allocation info */
  204. uint_16 baie;
  205. /* Slow decay code */
  206. uint_16 sdcycod;
  207. /* Fast decay code */
  208. uint_16 fdcycod;
  209. /* Slow gain code */
  210. uint_16 sgaincod;
  211. /* dB per bit code */
  212. uint_16 dbpbcod;
  213. /* masking floor code */
  214. uint_16 floorcod;
  215. /* SNR offset info */
  216. uint_16 snroffste;
  217. /* coarse SNR offset */
  218. uint_16 csnroffst;
  219. /* coupling fine SNR offset */
  220. uint_16 cplfsnroffst;
  221. /* coupling fast gain code */
  222. uint_16 cplfgaincod;
  223. /* fbw fine SNR offset */
  224. uint_16 fsnroffst[5];
  225. /* fbw fast gain code */
  226. uint_16 fgaincod[5];
  227. /* lfe fine SNR offset */
  228. uint_16 lfefsnroffst;
  229. /* lfe fast gain code */
  230. uint_16 lfefgaincod;
  231. /* Coupling leak info */
  232. uint_16 cplleake;
  233. /* coupling fast leak initialization */
  234. uint_16 cplfleak;
  235. /* coupling slow leak initialization */
  236. uint_16 cplsleak;
  237. /* delta bit allocation info */
  238. uint_16 deltbaie;
  239. /* coupling delta bit allocation exists */
  240. uint_16 cpldeltbae;
  241. /* fbw delta bit allocation exists */
  242. uint_16 deltbae[5];
  243. /* number of cpl delta bit segments */
  244. uint_16 cpldeltnseg;
  245. /* coupling delta bit allocation offset */
  246. uint_16 cpldeltoffst[8];
  247. /* coupling delta bit allocation length */
  248. uint_16 cpldeltlen[8];
  249. /* coupling delta bit allocation length */
  250. uint_16 cpldeltba[8];
  251. /* number of delta bit segments */
  252. uint_16 deltnseg[5];
  253. /* fbw delta bit allocation offset */
  254. uint_16 deltoffst[5][8];
  255. /* fbw delta bit allocation length */
  256. uint_16 deltlen[5][8];
  257. /* fbw delta bit allocation length */
  258. uint_16 deltba[5][8];
  259. /* skip length exists */
  260. uint_16 skiple;
  261. /* skip length */
  262. uint_16 skipl;
  263. /* channel mantissas */
  264. uint_16 chmant[5][256];
  265. /* coupling mantissas */
  266. uint_16 cplmant[256];
  267. /* coupling mantissas */
  268. uint_16 lfemant[7];
  269. /*  -- Information not in the bitstream, but derived thereof  -- */
  270. /* Number of coupling sub-bands */
  271. uint_16 ncplsubnd;
  272. /* Number of combined coupling sub-bands
  273.  * Derived from ncplsubnd and cplbndstrc */
  274. uint_16 ncplbnd;
  275. /* Number of exponent groups by channel
  276.  * Derived from strmant, endmant */
  277. uint_16 nchgrps[5];
  278. /* Number of coupling exponent groups
  279.  * Derived from cplbegf, cplendf, cplexpstr */
  280. uint_16 ncplgrps;
  281. /* End mantissa numbers of fbw channels */
  282. uint_16 endmant[5];
  283. /* Start and end mantissa numbers for the coupling channel */
  284. uint_16 cplstrtmant;
  285. uint_16 cplendmant;
  286. /* Decoded exponent info */
  287. uint_16 fbw_exp[5][256];
  288. uint_16 cpl_exp[256];
  289. uint_16 lfe_exp[7];
  290. /* Bit allocation pointer results */
  291. uint_16 fbw_bap[5][256];
  292. //FIXME figure out exactly how many entries there should be (253-37?) 
  293. uint_16 cpl_bap[256];
  294. uint_16 lfe_bap[7];
  295. uint_32 magic3;
  296. } audblk_t;
  297. /* Everything you wanted to know about band structure */
  298. /*
  299.  * The entire frequency domain is represented by 256 real
  300.  * floating point fourier coefficients. Only the lower 253
  301.  * coefficients are actually utilized however. We use arrays
  302.  * of 256 to be efficient in some cases.
  303.  *
  304.  * The 5 full bandwidth channels (fbw) can have their higher
  305.  * frequencies coupled together. These coupled channels then
  306.  * share their high frequency components.
  307.  *
  308.  * This coupling band is broken up into 18 sub-bands starting
  309.  * at mantissa number 37. Each sub-band is 12 bins wide.
  310.  *
  311.  * There are 50 bit allocation sub-bands which cover the entire
  312.  * frequency range. The sub-bands are of non-uniform width, and
  313.  * approximate a 1/6 octave scale.
  314.  */