annotate liba52/a52.h @ 14216:0d4589ab4d28

Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins. Compilation is optional and can be controled by configure. You need to have the LADSPA SDK installed in order to have it autodetected by configure. Manual page is updated.
author ivo
date Thu, 23 Dec 2004 02:09:49 +0000
parents ef32c8bdee81
children 07f1e7669772
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
1 /*
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
2 * a52.h
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
3 * Copyright (C) 2000-2001 Michel Lespinasse <walken@zoy.org>
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
5 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
6 * This file is part of a52dec, a free ATSC A-52 stream decoder.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
7 * See http://liba52.sourceforge.net/ for updates.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
8 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
9 * a52dec is free software; you can redistribute it and/or modify
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
12 * (at your option) any later version.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
13 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
14 * a52dec is distributed in the hope that it will be useful,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
17 * GNU General Public License for more details.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
18 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
22 */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
23
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
24 #ifndef A52_H
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
25 #define A52_H
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
26
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
27 #ifndef LIBA52_DOUBLE
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
28 typedef float sample_t;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
29 #else
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
30 typedef double sample_t;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
31 #endif
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
32
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
33 typedef struct a52_ba_s {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
34 uint16_t fsnroffst; /* fine SNR offset */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
35 uint16_t fgaincod; /* fast gain */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
36 uint16_t deltbae; /* delta bit allocation exists */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
37 int8_t deltba[50]; /* per-band delta bit allocation */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
38 } a52_ba_t;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
39
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
40 typedef struct a52_state_s {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
41 uint8_t fscod; /* sample rate */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
42 uint8_t halfrate; /* halfrate factor */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
43 uint8_t acmod; /* coded channels */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
44 sample_t clev; /* centre channel mix level */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
45 sample_t slev; /* surround channels mix level */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
46 uint8_t lfeon; /* coded lfe channel */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
47
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
48 int output; /* type of output */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
49 sample_t level; /* output level */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
50 sample_t bias; /* output bias */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
51
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
52 int dynrnge; /* apply dynamic range */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
53 sample_t dynrng; /* dynamic range */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
54 void * dynrngdata; /* dynamic range callback funtion and data */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
55 sample_t (* dynrngcall) (sample_t range, void * dynrngdata);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
56
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
57 uint16_t cplinu; /* coupling in use */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
58 uint16_t chincpl[5]; /* channel coupled */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
59 uint16_t phsflginu; /* phase flags in use (stereo only) */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
60 uint16_t cplbndstrc[18]; /* coupling band structure */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
61 uint16_t cplstrtmant; /* coupling channel start mantissa */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
62 uint16_t cplendmant; /* coupling channel end mantissa */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
63 sample_t cplco[5][18]; /* coupling coordinates */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
64
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
65 /* derived information */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
66 uint16_t cplstrtbnd; /* coupling start band (for bit allocation) */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
67 uint16_t ncplbnd; /* number of coupling bands */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
68
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
69 uint16_t rematflg[4]; /* stereo rematrixing */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
70
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
71 uint16_t endmant[5]; /* channel end mantissa */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
72
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
73 uint8_t cpl_exp[256]; /* decoded coupling channel exponents */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
74 uint8_t fbw_exp[5][256]; /* decoded channel exponents */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
75 uint8_t lfe_exp[7]; /* decoded lfe channel exponents */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
76
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
77 uint16_t sdcycod; /* slow decay */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
78 uint16_t fdcycod; /* fast decay */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
79 uint16_t sgaincod; /* slow gain */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
80 uint16_t dbpbcod; /* dB per bit - encodes the dbknee value */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
81 uint16_t floorcod; /* masking floor */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
82
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
83 uint16_t csnroffst; /* coarse SNR offset */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
84 a52_ba_t cplba; /* coupling bit allocation parameters */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
85 a52_ba_t ba[5]; /* channel bit allocation parameters */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
86 a52_ba_t lfeba; /* lfe bit allocation parameters */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
87
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
88 uint16_t cplfleak; /* coupling fast leak init */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
89 uint16_t cplsleak; /* coupling slow leak init */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
90
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
91 /* derived bit allocation information */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
92 int8_t fbw_bap[5][256];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
93 int8_t cpl_bap[256];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
94 int8_t lfe_bap[7];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
95 } a52_state_t;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
96
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
97 #define A52_CHANNEL 0
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
98 #define A52_MONO 1
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
99 #define A52_STEREO 2
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
100 #define A52_3F 3
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
101 #define A52_2F1R 4
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
102 #define A52_3F1R 5
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
103 #define A52_2F2R 6
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
104 #define A52_3F2R 7
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
105 #define A52_CHANNEL1 8
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
106 #define A52_CHANNEL2 9
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
107 #define A52_DOLBY 10
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
108 #define A52_CHANNEL_MASK 15
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
109
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
110 #define A52_LFE 16
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
111 #define A52_ADJUST_LEVEL 32
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
112
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
113 sample_t * a52_init (uint32_t mm_accel);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
114 int a52_syncinfo (uint8_t * buf, int * flags,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
115 int * sample_rate, int * bit_rate);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
116 int a52_frame (a52_state_t * state, uint8_t * buf, int * flags,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
117 sample_t * level, sample_t bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
118 void a52_dynrng (a52_state_t * state,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
119 sample_t (* call) (sample_t, void *), void * data);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
120 int a52_block (a52_state_t * state, sample_t * samples);
3890
c3e62caf9ec6 CRC code ported from libac3
arpi
parents: 3626
diff changeset
121
3909
ef32c8bdee81 c, mmx versions separated. a52 style runtime stuff
arpi
parents: 3907
diff changeset
122 void* a52_resample_init(uint32_t mm_accel,int flags,int chans);
3626
e22ff7ebdc05 runtime cpu detection for the resample stuff
michael
parents: 3394
diff changeset
123 extern int (* a52_resample) (float * _f, int16_t * s16);
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
124
3890
c3e62caf9ec6 CRC code ported from libac3
arpi
parents: 3626
diff changeset
125 uint16_t crc16_block(uint8_t *data,uint32_t num_bytes);
c3e62caf9ec6 CRC code ported from libac3
arpi
parents: 3626
diff changeset
126
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
127 #endif /* A52_H */