summaryrefslogtreecommitdiff
path: root/ac3dec/ac3_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'ac3dec/ac3_internal.h')
-rw-r--r--ac3dec/ac3_internal.h344
1 files changed, 344 insertions, 0 deletions
diff --git a/ac3dec/ac3_internal.h b/ac3dec/ac3_internal.h
new file mode 100644
index 00000000..235189ed
--- /dev/null
+++ b/ac3dec/ac3_internal.h
@@ -0,0 +1,344 @@
+/*
+ * ac3_internal.h
+ *
+ * Copyright (C) Aaron Holtzman - May 1999
+ *
+ * This file is part of ac3dec, a free Dolby AC-3 stream decoder.
+ *
+ * ac3dec is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * ac3dec 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifndef __GNUC__
+#define inline
+#endif
+
+/* 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)
+
+/* samples work structure */
+typedef float stream_samples_t[6][256];
+
+/* global config structure */
+extern ac3_config_t ac3_config;
+/* global error flag */
+extern uint_32 error_flag;
+
+/* Everything you wanted to know about band structure */
+/*
+ * The entire frequency domain is represented by 256 real
+ * floating point fourier coefficients. Only the lower 253
+ * coefficients are actually utilized however. We use arrays
+ * of 256 to be efficient in some cases.
+ *
+ * The 5 full bandwidth channels (fbw) can have their higher
+ * frequencies coupled together. These coupled channels then
+ * share their high frequency components.
+ *
+ * This coupling band is broken up into 18 sub-bands starting
+ * at mantissa number 37. Each sub-band is 12 bins wide.
+ *
+ * There are 50 bit allocation sub-bands which cover the entire
+ * frequency range. The sub-bands are of non-uniform width, and
+ * approximate a 1/6 octave scale.
+ */
+
+/* The following structures are filled in by their corresponding parse_*
+ * functions. See http://www.atsc.org/Standards/A52/a_52.pdf for
+ * full details on each field. Indented fields are used to denote
+ * conditional fields.
+ */
+
+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;
+ /* sampling rate in hertz */
+ uint_32 sampling_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;
+
+ //Removed Feb 2000 -ah
+ /* channel mantissas */
+ //uint_16 chmant[5][256];
+
+ /* coupling mantissas */
+ uint_16 cplmant[256];
+
+ //Removed Feb 2000 -ah
+ /* 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];
+ uint_16 cpl_bap[256];
+ uint_16 lfe_bap[7];
+
+ uint_32 magic3;
+} audblk_t;
+
+