summaryrefslogtreecommitdiff
path: root/src/libac3/ac3.h
diff options
context:
space:
mode:
authorGuenter Bartsch <guenter@users.sourceforge.net>2001-07-10 21:50:31 +0000
committerGuenter Bartsch <guenter@users.sourceforge.net>2001-07-10 21:50:31 +0000
commitd8b2a2e6ab69169bab5ca40b69bfa5dac893bd0e (patch)
tree6d2879e005ef8db84801c81e52450ee8736c6454 /src/libac3/ac3.h
parent4cc9fd313df701f722a81ad4bb551155415ce5cc (diff)
downloadxine-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.h108
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);