📄 ac3.h
字号:
/*
* This source code is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* File Name: ac3.h
*
* Reference:
*
* Author:
*
* Description:
*
*
*
* History:
* 02/23/2005
*
*
*CodeReview Log:
*
*/
#ifndef _AC3_H
#define _AC3_H
typedef unsigned long uint_32;typedef unsigned short uint_16;typedef unsigned char uint_8;typedef signed long sint_32;typedef signed short sint_16;typedef signed char sint_8;/* Exponent strategy constants */#define EXP_REUSE (0)#define EXP_D15 (1)#define EXP_D25 (2)#define EXP_D45 (3)/* Delta bit allocation constants */#define DELTA_BIT_REUSE (0)#define DELTA_BIT_NEW (1)#define DELTA_BIT_NONE (2)#define DELTA_BIT_RESERVED (3)typedef struct syncinfo_s{ uint_32 magic; /* Sync word == 0x0B77 */ /* uint_16 syncword; */ /* crc for the first 5/8 of the sync block */ /* uint_16 crc1; */ /* Stream Sampling Rate (kHz) 0 = 48, 1 = 44.1, 2 = 32, 3 = reserved */ uint_16 fscod; /* Frame size code */ uint_16 frmsizecod; /* Information not in the AC-3 bitstream, but derived */ /* Frame size in 16 bit words */ uint_16 frame_size; /* Bit rate in kilobits */ uint_16 bit_rate;} syncinfo_t;typedef struct bsi_s{ uint_32 magic; /* Bit stream identification == 0x8 */ uint_16 bsid; /* Bit stream mode */ uint_16 bsmod; /* Audio coding mode */ uint_16 acmod; /* If we're using the centre channel then */ /* centre mix level */ uint_16 cmixlev; /* If we're using the surround channel then */ /* surround mix level */ uint_16 surmixlev; /* If we're in 2/0 mode then */ /* Dolby surround mix level - NOT USED - */ uint_16 dsurmod; /* Low frequency effects on */ uint_16 lfeon; /* Dialogue Normalization level */ uint_16 dialnorm; /* Compression exists */ uint_16 compre; /* Compression level */ uint_16 compr; /* Language code exists */ uint_16 langcode; /* Language code */ uint_16 langcod; /* Audio production info exists*/ uint_16 audprodie; uint_16 mixlevel; uint_16 roomtyp; /* If we're in dual mono mode (acmod == 0) then extra stuff */ uint_16 dialnorm2; uint_16 compr2e; uint_16 compr2; uint_16 langcod2e; uint_16 langcod2; uint_16 audprodi2e; uint_16 mixlevel2; uint_16 roomtyp2; /* Copyright bit */ uint_16 copyrightb; /* Original bit */ uint_16 origbs; /* Timecode 1 exists */ uint_16 timecod1e; /* Timecode 1 */ uint_16 timecod1; /* Timecode 2 exists */ uint_16 timecod2e; /* Timecode 2 */ uint_16 timecod2; /* Additional bit stream info exists */ uint_16 addbsie; /* Additional bit stream length - 1 (in bytes) */ uint_16 addbsil; /* Additional bit stream information (max 64 bytes) */ uint_8 addbsi[64]; /* Information not in the AC-3 bitstream, but derived */ /* Number of channels (excluding LFE) * Derived from acmod */ uint_16 nfchans;} bsi_t;/* more pain */typedef struct audblk_s{ uint_32 magic1; /* block switch bit indexed by channel num */ uint_16 blksw[5]; /* dither enable bit indexed by channel num */ uint_16 dithflag[5]; /* dynamic range gain exists */ uint_16 dynrnge; /* dynamic range gain */ uint_16 dynrng; /* if acmod==0 then */ /* dynamic range 2 gain exists */ uint_16 dynrng2e; /* dynamic range 2 gain */ uint_16 dynrng2; /* coupling strategy exists */ uint_16 cplstre; /* coupling in use */ uint_16 cplinu; /* channel coupled */ uint_16 chincpl[5]; /* if acmod==2 then */ /* Phase flags in use */ uint_16 phsflginu; /* coupling begin frequency code */ uint_16 cplbegf; /* coupling end frequency code */ uint_16 cplendf; /* coupling band structure bits */ uint_16 cplbndstrc[18]; /* Do coupling co-ords exist for this channel? */ uint_16 cplcoe[5]; /* Master coupling co-ordinate */ uint_16 mstrcplco[5]; /* Per coupling band coupling co-ordinates */ uint_16 cplcoexp[5][18]; uint_16 cplcomant[5][18]; /* Phase flags for dual mono */ uint_16 phsflg[18]; /* Is there a rematrixing strategy */ uint_16 rematstr; /* Rematrixing bits */ uint_16 rematflg[4]; /* Coupling exponent strategy */ uint_16 cplexpstr; /* Exponent strategy for full bandwidth channels */ uint_16 chexpstr[5]; /* Exponent strategy for lfe channel */ uint_16 lfeexpstr; /* Channel bandwidth for independent channels */ uint_16 chbwcod[5]; /* The absolute coupling exponent */ uint_16 cplabsexp; /* Coupling channel exponents (D15 mode gives 18 * 12 /3 encoded exponents */ uint_16 cplexps[18 * 12 / 3]; /* Sanity checking constant */ uint_32 magic2; /* fbw channel exponents */ uint_16 exps[5][252 / 3]; /* channel gain range */ uint_16 gainrng[5]; /* low frequency exponents */ uint_16 lfeexps[3]; /* Bit allocation info */ uint_16 baie; /* Slow decay code */ uint_16 sdcycod; /* Fast decay code */ uint_16 fdcycod; /* Slow gain code */ uint_16 sgaincod; /* dB per bit code */ uint_16 dbpbcod; /* masking floor code */ uint_16 floorcod; /* SNR offset info */ uint_16 snroffste; /* coarse SNR offset */ uint_16 csnroffst; /* coupling fine SNR offset */ uint_16 cplfsnroffst; /* coupling fast gain code */ uint_16 cplfgaincod; /* fbw fine SNR offset */ uint_16 fsnroffst[5]; /* fbw fast gain code */ uint_16 fgaincod[5]; /* lfe fine SNR offset */ uint_16 lfefsnroffst; /* lfe fast gain code */ uint_16 lfefgaincod; /* Coupling leak info */ uint_16 cplleake; /* coupling fast leak initialization */ uint_16 cplfleak; /* coupling slow leak initialization */ uint_16 cplsleak; /* delta bit allocation info */ uint_16 deltbaie; /* coupling delta bit allocation exists */ uint_16 cpldeltbae; /* fbw delta bit allocation exists */ uint_16 deltbae[5]; /* number of cpl delta bit segments */ uint_16 cpldeltnseg; /* coupling delta bit allocation offset */ uint_16 cpldeltoffst[8]; /* coupling delta bit allocation length */ uint_16 cpldeltlen[8]; /* coupling delta bit allocation length */ uint_16 cpldeltba[8]; /* number of delta bit segments */ uint_16 deltnseg[5]; /* fbw delta bit allocation offset */ uint_16 deltoffst[5][8]; /* fbw delta bit allocation length */ uint_16 deltlen[5][8]; /* fbw delta bit allocation length */ uint_16 deltba[5][8]; /* skip length exists */ uint_16 skiple; /* skip length */ uint_16 skipl; /* channel mantissas */ uint_16 chmant[5][256]; /* coupling mantissas */ uint_16 cplmant[256]; /* coupling mantissas */ uint_16 lfemant[7]; /* -- Information not in the bitstream, but derived thereof -- */ /* Number of coupling sub-bands */ uint_16 ncplsubnd; /* Number of combined coupling sub-bands * Derived from ncplsubnd and cplbndstrc */ uint_16 ncplbnd; /* Number of exponent groups by channel * Derived from strmant, endmant */ uint_16 nchgrps[5]; /* Number of coupling exponent groups * Derived from cplbegf, cplendf, cplexpstr */ uint_16 ncplgrps; /* End mantissa numbers of fbw channels */ uint_16 endmant[5]; /* Start and end mantissa numbers for the coupling channel */ uint_16 cplstrtmant; uint_16 cplendmant; /* Decoded exponent info */ uint_16 fbw_exp[5][256]; uint_16 cpl_exp[256]; uint_16 lfe_exp[7]; /* Bit allocation pointer results */ uint_16 fbw_bap[5][256]; //FIXME figure out exactly how many entries there should be (253-37?) uint_16 cpl_bap[256]; uint_16 lfe_bap[7]; uint_32 magic3;} audblk_t;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -