diff options
author | Guenter Bartsch <guenter@users.sourceforge.net> | 2001-07-10 21:50:31 +0000 |
---|---|---|
committer | Guenter Bartsch <guenter@users.sourceforge.net> | 2001-07-10 21:50:31 +0000 |
commit | d8b2a2e6ab69169bab5ca40b69bfa5dac893bd0e (patch) | |
tree | 6d2879e005ef8db84801c81e52450ee8736c6454 /src/libac3/ac3.h | |
parent | 4cc9fd313df701f722a81ad4bb551155415ce5cc (diff) | |
download | xine-lib-d8b2a2e6ab69169bab5ca40b69bfa5dac893bd0e.tar.gz xine-lib-d8b2a2e6ab69169bab5ca40b69bfa5dac893bd0e.tar.bz2 |
latest libac3 from walken
CVS patchset: 265
CVS date: 2001/07/10 21:50:31
Diffstat (limited to 'src/libac3/ac3.h')
-rw-r--r-- | src/libac3/ac3.h | 108 |
1 files changed, 81 insertions, 27 deletions
diff --git a/src/libac3/ac3.h b/src/libac3/ac3.h index 69c11b9ed..305a10e49 100644 --- a/src/libac3/ac3.h +++ b/src/libac3/ac3.h @@ -22,30 +22,84 @@ * */ -#include <inttypes.h> - -#define AC3_DOLBY_SURR_ENABLE 0x1 - -typedef struct ac3_config_s -{ - //Bit flags that enable various things - uint32_t flags; - //Callback that points the decoder to new stream data - void (* fill_buffer_callback) (uint8_t **, uint8_t **); - //Number of discrete channels in final output (for downmixing) - uint16_t num_output_ch; - //Which channel of a dual mono stream to select - uint16_t dual_mono_ch_sel; -} ac3_config_t; - -typedef struct ac3_frame_s -{ - uint32_t sampling_rate; - int16_t * audio_data; - int num_channels; -} ac3_frame_t; - -void ac3_init(void); -int ac3_frame_length(uint8_t * buf); -int ac3_sampling_rate(uint8_t * buf); -ac3_frame_t* ac3_decode_frame(uint8_t * buf, int max_num_channels); +typedef struct ac3_ba_s { + uint16_t fsnroffst; // fine SNR offset + uint16_t fgaincod; // fast gain + uint16_t deltbae; // delta bit allocation exists + int8_t deltba[50]; // per-band delta bit allocation +} ac3_ba_t; + +typedef struct ac3_state_s { + uint8_t fscod; // sample rate + uint8_t halfrate; // halfrate factor + uint8_t acmod; // coded channels + float clev; // centre channel mix level + float slev; // surround channels mix level + uint8_t lfeon; // coded lfe channel + + int output; // type of output + float level; // output level + float bias; // output bias + + uint16_t cplinu; // coupling in use + uint16_t chincpl[5]; // channel coupled + uint16_t phsflginu; // phase flags in use (stereo only) + uint16_t cplbndstrc[18]; // coupling band structure + uint16_t cplstrtmant; // coupling channel start mantissa + uint16_t cplendmant; // coupling channel end mantissa + float cplco[5][18]; // coupling coordinates + + // derived information + uint16_t cplstrtbnd; // coupling start band (for bit allocation) + uint16_t ncplbnd; // number of coupling bands + + uint16_t rematflg[4]; // stereo rematrixing + + uint16_t endmant[5]; // channel end mantissa + + uint8_t cpl_exp[256]; // decoded coupling channel exponents + uint8_t fbw_exp[5][256]; // decoded channel exponents + uint8_t lfe_exp[7]; // decoded lfe channel exponents + + uint16_t sdcycod; // slow decay + uint16_t fdcycod; // fast decay + uint16_t sgaincod; // slow gain + uint16_t dbpbcod; // dB per bit - encodes the dbknee value + uint16_t floorcod; // masking floor + + uint16_t csnroffst; // coarse SNR offset + ac3_ba_t cplba; // coupling bit allocation parameters + ac3_ba_t ba[5]; // channel bit allocation parameters + ac3_ba_t lfeba; // lfe bit allocation parameters + + uint16_t cplfleak; // coupling fast leak init + uint16_t cplsleak; // coupling slow leak init + + // derived bit allocation information + int8_t fbw_bap[5][256]; + int8_t cpl_bap[256]; + int8_t lfe_bap[7]; +} ac3_state_t; + +#define AC3_CHANNEL 0 +#define AC3_MONO 1 +#define AC3_STEREO 2 +#define AC3_3F 3 +#define AC3_2F1R 4 +#define AC3_3F1R 5 +#define AC3_2F2R 6 +#define AC3_3F2R 7 +#define AC3_CHANNEL1 8 +#define AC3_CHANNEL2 9 +#define AC3_DOLBY 10 +#define AC3_CHANNEL_MASK 15 + +#define AC3_LFE 16 +#define AC3_ADJUST_LEVEL 32 + +void ac3_init (void); +int ac3_syncinfo (uint8_t * buf, int * flags, + int * sample_rate, int * bit_rate); +int ac3_frame (ac3_state_t * state, uint8_t * buf, int * flags, + float * level, float bias); +int ac3_block (ac3_state_t * state); |