diff options
author | Andree Buschmann <AndreeBuschmann@t-online.de> | 2010-02-22 19:44:05 +0000 |
---|---|---|
committer | Andree Buschmann <AndreeBuschmann@t-online.de> | 2010-02-22 19:44:05 +0000 |
commit | 398b37124e870b3be69a03e5d89c5887204d6990 (patch) | |
tree | 2f8da4ae1b5a47db97a298db5e6ffa916beed90b /apps/codecs/liba52 | |
parent | c1bb06c3af4c5277e4a08c0084da86a69bc9d127 (diff) | |
download | rockbox-398b37124e870b3be69a03e5d89c5887204d6990.tar.gz rockbox-398b37124e870b3be69a03e5d89c5887204d6990.zip |
Remove all tabs within codec path.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24862 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/liba52')
-rw-r--r-- | apps/codecs/liba52/a52.h | 6 | ||||
-rw-r--r-- | apps/codecs/liba52/a52_internal.h | 84 | ||||
-rw-r--r-- | apps/codecs/liba52/bit_allocate.c | 242 | ||||
-rw-r--r-- | apps/codecs/liba52/bitstream.c | 12 | ||||
-rw-r--r-- | apps/codecs/liba52/bitstream.h | 16 | ||||
-rw-r--r-- | apps/codecs/liba52/downmix.c | 674 | ||||
-rw-r--r-- | apps/codecs/liba52/imdct.c | 172 | ||||
-rw-r--r-- | apps/codecs/liba52/imdct_lookups.h | 2 | ||||
-rw-r--r-- | apps/codecs/liba52/mm_accel.h | 8 | ||||
-rw-r--r-- | apps/codecs/liba52/parse.c | 1200 |
10 files changed, 1208 insertions, 1208 deletions
diff --git a/apps/codecs/liba52/a52.h b/apps/codecs/liba52/a52.h index aa4e7f6243..cae9ae6403 100644 --- a/apps/codecs/liba52/a52.h +++ b/apps/codecs/liba52/a52.h | |||
@@ -56,11 +56,11 @@ typedef struct a52_state_s a52_state_t; | |||
56 | a52_state_t * a52_init (uint32_t mm_accel); | 56 | a52_state_t * a52_init (uint32_t mm_accel); |
57 | sample_t * a52_samples (a52_state_t * state); | 57 | sample_t * a52_samples (a52_state_t * state); |
58 | int a52_syncinfo (uint8_t * buf, int * flags, | 58 | int a52_syncinfo (uint8_t * buf, int * flags, |
59 | int * sample_rate, int * bit_rate); | 59 | int * sample_rate, int * bit_rate); |
60 | int a52_frame (a52_state_t * state, uint8_t * buf, int * flags, | 60 | int a52_frame (a52_state_t * state, uint8_t * buf, int * flags, |
61 | level_t * level, sample_t bias); | 61 | level_t * level, sample_t bias); |
62 | void a52_dynrng (a52_state_t * state, | 62 | void a52_dynrng (a52_state_t * state, |
63 | level_t (* call) (level_t, void *), void * data); | 63 | level_t (* call) (level_t, void *), void * data); |
64 | int a52_block (a52_state_t * state); | 64 | int a52_block (a52_state_t * state); |
65 | void a52_free (a52_state_t * state); | 65 | void a52_free (a52_state_t * state); |
66 | 66 | ||
diff --git a/apps/codecs/liba52/a52_internal.h b/apps/codecs/liba52/a52_internal.h index 1e3b4a7edf..48f23836f7 100644 --- a/apps/codecs/liba52/a52_internal.h +++ b/apps/codecs/liba52/a52_internal.h | |||
@@ -22,62 +22,62 @@ | |||
22 | */ | 22 | */ |
23 | 23 | ||
24 | typedef struct { | 24 | typedef struct { |
25 | uint8_t bai; /* fine SNR offset, fast gain */ | 25 | uint8_t bai; /* fine SNR offset, fast gain */ |
26 | uint8_t deltbae; /* delta bit allocation exists */ | 26 | uint8_t deltbae; /* delta bit allocation exists */ |
27 | int8_t deltba[50]; /* per-band delta bit allocation */ | 27 | int8_t deltba[50]; /* per-band delta bit allocation */ |
28 | } ba_t; | 28 | } ba_t; |
29 | 29 | ||
30 | typedef struct { | 30 | typedef struct { |
31 | uint8_t exp[256]; /* decoded channel exponents */ | 31 | uint8_t exp[256]; /* decoded channel exponents */ |
32 | int8_t bap[256]; /* derived channel bit allocation */ | 32 | int8_t bap[256]; /* derived channel bit allocation */ |
33 | } expbap_t; | 33 | } expbap_t; |
34 | 34 | ||
35 | struct a52_state_s { | 35 | struct a52_state_s { |
36 | uint8_t fscod; /* sample rate */ | 36 | uint8_t fscod; /* sample rate */ |
37 | uint8_t halfrate; /* halfrate factor */ | 37 | uint8_t halfrate; /* halfrate factor */ |
38 | uint8_t acmod; /* coded channels */ | 38 | uint8_t acmod; /* coded channels */ |
39 | uint8_t lfeon; /* coded lfe channel */ | 39 | uint8_t lfeon; /* coded lfe channel */ |
40 | level_t clev; /* centre channel mix level */ | 40 | level_t clev; /* centre channel mix level */ |
41 | level_t slev; /* surround channels mix level */ | 41 | level_t slev; /* surround channels mix level */ |
42 | 42 | ||
43 | int output; /* type of output */ | 43 | int output; /* type of output */ |
44 | level_t level; /* output level */ | 44 | level_t level; /* output level */ |
45 | sample_t bias; /* output bias */ | 45 | sample_t bias; /* output bias */ |
46 | 46 | ||
47 | int dynrnge; /* apply dynamic range */ | 47 | int dynrnge; /* apply dynamic range */ |
48 | level_t dynrng; /* dynamic range */ | 48 | level_t dynrng; /* dynamic range */ |
49 | void * dynrngdata; /* dynamic range callback funtion and data */ | 49 | void * dynrngdata; /* dynamic range callback funtion and data */ |
50 | level_t (* dynrngcall) (level_t range, void * dynrngdata); | 50 | level_t (* dynrngcall) (level_t range, void * dynrngdata); |
51 | 51 | ||
52 | uint8_t chincpl; /* channel coupled */ | 52 | uint8_t chincpl; /* channel coupled */ |
53 | uint8_t phsflginu; /* phase flags in use (stereo only) */ | 53 | uint8_t phsflginu; /* phase flags in use (stereo only) */ |
54 | uint8_t cplstrtmant; /* coupling channel start mantissa */ | 54 | uint8_t cplstrtmant; /* coupling channel start mantissa */ |
55 | uint8_t cplendmant; /* coupling channel end mantissa */ | 55 | uint8_t cplendmant; /* coupling channel end mantissa */ |
56 | uint32_t cplbndstrc; /* coupling band structure */ | 56 | uint32_t cplbndstrc; /* coupling band structure */ |
57 | level_t cplco[5][18]; /* coupling coordinates */ | 57 | level_t cplco[5][18]; /* coupling coordinates */ |
58 | 58 | ||
59 | /* derived information */ | 59 | /* derived information */ |
60 | uint8_t cplstrtbnd; /* coupling start band (for bit allocation) */ | 60 | uint8_t cplstrtbnd; /* coupling start band (for bit allocation) */ |
61 | uint8_t ncplbnd; /* number of coupling bands */ | 61 | uint8_t ncplbnd; /* number of coupling bands */ |
62 | 62 | ||
63 | uint8_t rematflg; /* stereo rematrixing */ | 63 | uint8_t rematflg; /* stereo rematrixing */ |
64 | 64 | ||
65 | uint8_t endmant[5]; /* channel end mantissa */ | 65 | uint8_t endmant[5]; /* channel end mantissa */ |
66 | 66 | ||
67 | uint16_t bai; /* bit allocation information */ | 67 | uint16_t bai; /* bit allocation information */ |
68 | 68 | ||
69 | uint32_t * buffer_start; | 69 | uint32_t * buffer_start; |
70 | uint16_t lfsr_state; /* dither state */ | 70 | uint16_t lfsr_state; /* dither state */ |
71 | uint32_t bits_left; | 71 | uint32_t bits_left; |
72 | uint32_t current_word; | 72 | uint32_t current_word; |
73 | 73 | ||
74 | uint8_t csnroffst; /* coarse SNR offset */ | 74 | uint8_t csnroffst; /* coarse SNR offset */ |
75 | ba_t cplba; /* coupling bit allocation parameters */ | 75 | ba_t cplba; /* coupling bit allocation parameters */ |
76 | ba_t ba[5]; /* channel bit allocation parameters */ | 76 | ba_t ba[5]; /* channel bit allocation parameters */ |
77 | ba_t lfeba; /* lfe bit allocation parameters */ | 77 | ba_t lfeba; /* lfe bit allocation parameters */ |
78 | 78 | ||
79 | uint8_t cplfleak; /* coupling fast leak init */ | 79 | uint8_t cplfleak; /* coupling fast leak init */ |
80 | uint8_t cplsleak; /* coupling slow leak init */ | 80 | uint8_t cplsleak; /* coupling slow leak init */ |
81 | 81 | ||
82 | expbap_t cpl_expbap; | 82 | expbap_t cpl_expbap; |
83 | expbap_t fbw_expbap[5]; | 83 | expbap_t fbw_expbap[5]; |
@@ -104,15 +104,15 @@ struct a52_state_s { | |||
104 | #define DELTA_BIT_RESERVED (3) | 104 | #define DELTA_BIT_RESERVED (3) |
105 | 105 | ||
106 | void a52_bit_allocate (a52_state_t * state, ba_t * ba, int bndstart, | 106 | void a52_bit_allocate (a52_state_t * state, ba_t * ba, int bndstart, |
107 | int start, int end, int fastleak, int slowleak, | 107 | int start, int end, int fastleak, int slowleak, |
108 | expbap_t * expbap); | 108 | expbap_t * expbap); |
109 | 109 | ||
110 | int a52_downmix_init (int input, int flags, level_t * level, | 110 | int a52_downmix_init (int input, int flags, level_t * level, |
111 | level_t clev, level_t slev); | 111 | level_t clev, level_t slev); |
112 | int a52_downmix_coeff (level_t * coeff, int acmod, int output, level_t level, | 112 | int a52_downmix_coeff (level_t * coeff, int acmod, int output, level_t level, |
113 | level_t clev, level_t slev); | 113 | level_t clev, level_t slev); |
114 | void a52_downmix (sample_t * samples, int acmod, int output, | 114 | void a52_downmix (sample_t * samples, int acmod, int output, |
115 | level_t clev, level_t slev); | 115 | level_t clev, level_t slev); |
116 | void a52_upmix (sample_t * samples, int acmod, int output); | 116 | void a52_upmix (sample_t * samples, int acmod, int output); |
117 | 117 | ||
118 | void a52_imdct_init (uint32_t mm_accel); | 118 | void a52_imdct_init (uint32_t mm_accel); |
diff --git a/apps/codecs/liba52/bit_allocate.c b/apps/codecs/liba52/bit_allocate.c index f72cd75f0a..3f68c92c0c 100644 --- a/apps/codecs/liba52/bit_allocate.c +++ b/apps/codecs/liba52/bit_allocate.c | |||
@@ -52,7 +52,7 @@ static int8_t baptab[305] IDATA_ATTR = { | |||
52 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, | 52 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, |
53 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, | 53 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, |
54 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, | 54 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, |
55 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* 93 padding elems */ | 55 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* 93 padding elems */ |
56 | 56 | ||
57 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, | 57 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, |
58 | 14, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, | 58 | 14, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, |
@@ -68,12 +68,12 @@ static int8_t baptab[305] IDATA_ATTR = { | |||
68 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 68 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
69 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 69 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
70 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 70 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
71 | 0, 0, 0, 0 /* 148 padding elems */ | 71 | 0, 0, 0, 0 /* 148 padding elems */ |
72 | }; | 72 | }; |
73 | 73 | ||
74 | static int bndtab[30] IDATA_ATTR = {21, 22, 23, 24, 25, 26, 27, 28, 31, 34, | 74 | static int bndtab[30] IDATA_ATTR = {21, 22, 23, 24, 25, 26, 27, 28, 31, 34, |
75 | 37, 40, 43, 46, 49, 55, 61, 67, 73, 79, | 75 | 37, 40, 43, 46, 49, 55, 61, 67, 73, 79, |
76 | 85, 97, 109, 121, 133, 157, 181, 205, 229, 253}; | 76 | 85, 97, 109, 121, 133, 157, 181, 205, 229, 253}; |
77 | 77 | ||
78 | static int8_t latab[256] IDATA_ATTR = { | 78 | static int8_t latab[256] IDATA_ATTR = { |
79 | -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, | 79 | -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, |
@@ -100,35 +100,35 @@ static int8_t latab[256] IDATA_ATTR = { | |||
100 | 0, 0, 0, 0 | 100 | 0, 0, 0, 0 |
101 | }; | 101 | }; |
102 | 102 | ||
103 | #define UPDATE_LEAK() \ | 103 | #define UPDATE_LEAK() \ |
104 | do { \ | 104 | do { \ |
105 | fastleak += fdecay; \ | 105 | fastleak += fdecay; \ |
106 | if (fastleak > psd + fgain) \ | 106 | if (fastleak > psd + fgain) \ |
107 | fastleak = psd + fgain; \ | 107 | fastleak = psd + fgain; \ |
108 | slowleak += sdecay; \ | 108 | slowleak += sdecay; \ |
109 | if (slowleak > psd + sgain) \ | 109 | if (slowleak > psd + sgain) \ |
110 | slowleak = psd + sgain; \ | 110 | slowleak = psd + sgain; \ |
111 | } while (0) | 111 | } while (0) |
112 | 112 | ||
113 | #define COMPUTE_MASK() \ | 113 | #define COMPUTE_MASK() \ |
114 | do { \ | 114 | do { \ |
115 | if (psd > dbknee) \ | 115 | if (psd > dbknee) \ |
116 | mask -= (psd - dbknee) >> 2; \ | 116 | mask -= (psd - dbknee) >> 2; \ |
117 | if (mask > hth [i >> halfrate]) \ | 117 | if (mask > hth [i >> halfrate]) \ |
118 | mask = hth [i >> halfrate]; \ | 118 | mask = hth [i >> halfrate]; \ |
119 | mask -= snroffset + 128 * deltba[i]; \ | 119 | mask -= snroffset + 128 * deltba[i]; \ |
120 | mask = (mask > 0) ? 0 : ((-mask) >> 5); \ | 120 | mask = (mask > 0) ? 0 : ((-mask) >> 5); \ |
121 | mask -= floor; \ | 121 | mask -= floor; \ |
122 | } while (0) | 122 | } while (0) |
123 | 123 | ||
124 | void a52_bit_allocate (a52_state_t * state, ba_t * ba, int bndstart, | 124 | void a52_bit_allocate (a52_state_t * state, ba_t * ba, int bndstart, |
125 | int start, int end, int fastleak, int slowleak, | 125 | int start, int end, int fastleak, int slowleak, |
126 | expbap_t * expbap) | 126 | expbap_t * expbap) |
127 | { | 127 | { |
128 | static int slowgain[4] = {0x540, 0x4d8, 0x478, 0x410}; | 128 | static int slowgain[4] = {0x540, 0x4d8, 0x478, 0x410}; |
129 | static int dbpbtab[4] = {0xc00, 0x500, 0x300, 0x100}; | 129 | static int dbpbtab[4] = {0xc00, 0x500, 0x300, 0x100}; |
130 | static int floortab[8] = {0x910, 0x950, 0x990, 0x9d0, | 130 | static int floortab[8] = {0x910, 0x950, 0x990, 0x9d0, |
131 | 0xa10, 0xa90, 0xb10, 0x1400}; | 131 | 0xa10, 0xa90, 0xb10, 0x1400}; |
132 | 132 | ||
133 | int i, j; | 133 | int i, j; |
134 | uint8_t * exp; | 134 | uint8_t * exp; |
@@ -140,18 +140,18 @@ void a52_bit_allocate (a52_state_t * state, ba_t * ba, int bndstart, | |||
140 | int halfrate; | 140 | int halfrate; |
141 | 141 | ||
142 | halfrate = state->halfrate; | 142 | halfrate = state->halfrate; |
143 | fdecay = (63 + 20 * ((state->bai >> 7) & 3)) >> halfrate; /* fdcycod */ | 143 | fdecay = (63 + 20 * ((state->bai >> 7) & 3)) >> halfrate; /* fdcycod */ |
144 | fgain = 128 + 128 * (ba->bai & 7); /* fgaincod */ | 144 | fgain = 128 + 128 * (ba->bai & 7); /* fgaincod */ |
145 | sdecay = (15 + 2 * (state->bai >> 9)) >> halfrate; /* sdcycod */ | 145 | sdecay = (15 + 2 * (state->bai >> 9)) >> halfrate; /* sdcycod */ |
146 | sgain = slowgain[(state->bai >> 5) & 3]; /* sgaincod */ | 146 | sgain = slowgain[(state->bai >> 5) & 3]; /* sgaincod */ |
147 | dbknee = dbpbtab[(state->bai >> 3) & 3]; /* dbpbcod */ | 147 | dbknee = dbpbtab[(state->bai >> 3) & 3]; /* dbpbcod */ |
148 | hth = hthtab[state->fscod]; | 148 | hth = hthtab[state->fscod]; |
149 | /* | 149 | /* |
150 | * if there is no delta bit allocation, make deltba point to an area | 150 | * if there is no delta bit allocation, make deltba point to an area |
151 | * known to contain zeroes. baptab+156 here. | 151 | * known to contain zeroes. baptab+156 here. |
152 | */ | 152 | */ |
153 | deltba = (ba->deltbae == DELTA_BIT_NONE) ? baptab + 156 : ba->deltba; | 153 | deltba = (ba->deltbae == DELTA_BIT_NONE) ? baptab + 156 : ba->deltba; |
154 | floor = floortab[state->bai & 7]; /* floorcod */ | 154 | floor = floortab[state->bai & 7]; /* floorcod */ |
155 | snroffset = 960 - 64 * state->csnroffst - 4 * (ba->bai >> 3) + floor; | 155 | snroffset = 960 - 64 * state->csnroffst - 4 * (ba->bai >> 3) + floor; |
156 | floor >>= 5; | 156 | floor >>= 5; |
157 | 157 | ||
@@ -160,106 +160,106 @@ void a52_bit_allocate (a52_state_t * state, ba_t * ba, int bndstart, | |||
160 | 160 | ||
161 | i = bndstart; | 161 | i = bndstart; |
162 | j = start; | 162 | j = start; |
163 | if (start == 0) { /* not the coupling channel */ | 163 | if (start == 0) { /* not the coupling channel */ |
164 | int lowcomp; | 164 | int lowcomp; |
165 | 165 | ||
166 | lowcomp = 0; | 166 | lowcomp = 0; |
167 | j = end - 1; | 167 | j = end - 1; |
168 | do { | 168 | do { |
169 | if (i < j) { | 169 | if (i < j) { |
170 | if (exp[i+1] == exp[i] - 2) | 170 | if (exp[i+1] == exp[i] - 2) |
171 | lowcomp = 384; | 171 | lowcomp = 384; |
172 | else if (lowcomp && (exp[i+1] > exp[i])) | 172 | else if (lowcomp && (exp[i+1] > exp[i])) |
173 | lowcomp -= 64; | 173 | lowcomp -= 64; |
174 | } | 174 | } |
175 | psd = 128 * exp[i]; | 175 | psd = 128 * exp[i]; |
176 | mask = psd + fgain + lowcomp; | 176 | mask = psd + fgain + lowcomp; |
177 | COMPUTE_MASK (); | 177 | COMPUTE_MASK (); |
178 | bap[i] = (baptab+156)[mask + 4 * exp[i]]; | 178 | bap[i] = (baptab+156)[mask + 4 * exp[i]]; |
179 | i++; | 179 | i++; |
180 | } while ((i < 3) || ((i < 7) && (exp[i] > exp[i-1]))); | 180 | } while ((i < 3) || ((i < 7) && (exp[i] > exp[i-1]))); |
181 | fastleak = psd + fgain; | 181 | fastleak = psd + fgain; |
182 | slowleak = psd + sgain; | 182 | slowleak = psd + sgain; |
183 | 183 | ||
184 | while (i < 7) { | 184 | while (i < 7) { |
185 | if (i < j) { | 185 | if (i < j) { |
186 | if (exp[i+1] == exp[i] - 2) | 186 | if (exp[i+1] == exp[i] - 2) |
187 | lowcomp = 384; | 187 | lowcomp = 384; |
188 | else if (lowcomp && (exp[i+1] > exp[i])) | 188 | else if (lowcomp && (exp[i+1] > exp[i])) |
189 | lowcomp -= 64; | 189 | lowcomp -= 64; |
190 | } | 190 | } |
191 | psd = 128 * exp[i]; | 191 | psd = 128 * exp[i]; |
192 | UPDATE_LEAK (); | 192 | UPDATE_LEAK (); |
193 | mask = ((fastleak + lowcomp < slowleak) ? | 193 | mask = ((fastleak + lowcomp < slowleak) ? |
194 | fastleak + lowcomp : slowleak); | 194 | fastleak + lowcomp : slowleak); |
195 | COMPUTE_MASK (); | 195 | COMPUTE_MASK (); |
196 | bap[i] = (baptab+156)[mask + 4 * exp[i]]; | 196 | bap[i] = (baptab+156)[mask + 4 * exp[i]]; |
197 | i++; | 197 | i++; |
198 | } | 198 | } |
199 | 199 | ||
200 | if (end == 7) /* lfe channel */ | 200 | if (end == 7) /* lfe channel */ |
201 | return; | 201 | return; |
202 | 202 | ||
203 | do { | 203 | do { |
204 | if (exp[i+1] == exp[i] - 2) | 204 | if (exp[i+1] == exp[i] - 2) |
205 | lowcomp = 320; | 205 | lowcomp = 320; |
206 | else if (lowcomp && (exp[i+1] > exp[i])) | 206 | else if (lowcomp && (exp[i+1] > exp[i])) |
207 | lowcomp -= 64; | 207 | lowcomp -= 64; |
208 | psd = 128 * exp[i]; | 208 | psd = 128 * exp[i]; |
209 | UPDATE_LEAK (); | 209 | UPDATE_LEAK (); |
210 | mask = ((fastleak + lowcomp < slowleak) ? | 210 | mask = ((fastleak + lowcomp < slowleak) ? |
211 | fastleak + lowcomp : slowleak); | 211 | fastleak + lowcomp : slowleak); |
212 | COMPUTE_MASK (); | 212 | COMPUTE_MASK (); |
213 | bap[i] = (baptab+156)[mask + 4 * exp[i]]; | 213 | bap[i] = (baptab+156)[mask + 4 * exp[i]]; |
214 | i++; | 214 | i++; |
215 | } while (i < 20); | 215 | } while (i < 20); |
216 | 216 | ||
217 | while (lowcomp > 128) { /* two iterations maximum */ | 217 | while (lowcomp > 128) { /* two iterations maximum */ |
218 | lowcomp -= 128; | 218 | lowcomp -= 128; |
219 | psd = 128 * exp[i]; | 219 | psd = 128 * exp[i]; |
220 | UPDATE_LEAK (); | 220 | UPDATE_LEAK (); |
221 | mask = ((fastleak + lowcomp < slowleak) ? | 221 | mask = ((fastleak + lowcomp < slowleak) ? |
222 | fastleak + lowcomp : slowleak); | 222 | fastleak + lowcomp : slowleak); |
223 | COMPUTE_MASK (); | 223 | COMPUTE_MASK (); |
224 | bap[i] = (baptab+156)[mask + 4 * exp[i]]; | 224 | bap[i] = (baptab+156)[mask + 4 * exp[i]]; |
225 | i++; | 225 | i++; |
226 | } | 226 | } |
227 | j = i; | 227 | j = i; |
228 | } | 228 | } |
229 | 229 | ||
230 | do { | 230 | do { |
231 | int startband, endband; | 231 | int startband, endband; |
232 | 232 | ||
233 | startband = j; | 233 | startband = j; |
234 | endband = (bndtab[i-20] < end) ? bndtab[i-20] : end; | 234 | endband = (bndtab[i-20] < end) ? bndtab[i-20] : end; |
235 | psd = 128 * exp[j++]; | 235 | psd = 128 * exp[j++]; |
236 | while (j < endband) { | 236 | while (j < endband) { |
237 | int next, delta; | 237 | int next, delta; |
238 | 238 | ||
239 | next = 128 * exp[j++]; | 239 | next = 128 * exp[j++]; |
240 | delta = next - psd; | 240 | delta = next - psd; |
241 | switch (delta >> 9) { | 241 | switch (delta >> 9) { |
242 | case -6: case -5: case -4: case -3: case -2: | 242 | case -6: case -5: case -4: case -3: case -2: |
243 | psd = next; | 243 | psd = next; |
244 | break; | 244 | break; |
245 | case -1: | 245 | case -1: |
246 | psd = next + latab[(-delta) >> 1]; | 246 | psd = next + latab[(-delta) >> 1]; |
247 | break; | 247 | break; |
248 | case 0: | 248 | case 0: |
249 | psd += latab[delta >> 1]; | 249 | psd += latab[delta >> 1]; |
250 | break; | 250 | break; |
251 | } | 251 | } |
252 | } | 252 | } |
253 | /* minpsd = -289 */ | 253 | /* minpsd = -289 */ |
254 | UPDATE_LEAK (); | 254 | UPDATE_LEAK (); |
255 | mask = (fastleak < slowleak) ? fastleak : slowleak; | 255 | mask = (fastleak < slowleak) ? fastleak : slowleak; |
256 | COMPUTE_MASK (); | 256 | COMPUTE_MASK (); |
257 | i++; | 257 | i++; |
258 | j = startband; | 258 | j = startband; |
259 | do { | 259 | do { |
260 | /* max(mask+4*exp)=147=-(minpsd+fgain-deltba-snroffset)>>5+4*exp */ | 260 | /* max(mask+4*exp)=147=-(minpsd+fgain-deltba-snroffset)>>5+4*exp */ |
261 | /* min(mask+4*exp)=-156=-(sgain-deltba-snroffset)>>5 */ | 261 | /* min(mask+4*exp)=-156=-(sgain-deltba-snroffset)>>5 */ |
262 | bap[j] = (baptab+156)[mask + 4 * exp[j]]; | 262 | bap[j] = (baptab+156)[mask + 4 * exp[j]]; |
263 | } while (++j < endband); | 263 | } while (++j < endband); |
264 | } while (j < end); | 264 | } while (j < end); |
265 | } | 265 | } |
diff --git a/apps/codecs/liba52/bitstream.c b/apps/codecs/liba52/bitstream.c index 231654939a..f9f3ad76b0 100644 --- a/apps/codecs/liba52/bitstream.c +++ b/apps/codecs/liba52/bitstream.c | |||
@@ -40,7 +40,7 @@ void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf) | |||
40 | state->bits_left = 0; | 40 | state->bits_left = 0; |
41 | state->current_word = 0; | 41 | state->current_word = 0; |
42 | bitstream_get (state, align * 8); | 42 | bitstream_get (state, align * 8); |
43 | bitstream_get_2 (state, 0); /* pretend function is used - keep gcc happy */ | 43 | bitstream_get_2 (state, 0); /* pretend function is used - keep gcc happy */ |
44 | } | 44 | } |
45 | 45 | ||
46 | static inline void bitstream_fill_current (a52_state_t * state) | 46 | static inline void bitstream_fill_current (a52_state_t * state) |
@@ -66,12 +66,12 @@ uint32_t a52_bitstream_get_bh (a52_state_t * state, uint32_t num_bits) | |||
66 | 66 | ||
67 | num_bits -= state->bits_left; | 67 | num_bits -= state->bits_left; |
68 | result = ((state->current_word << (32 - state->bits_left)) >> | 68 | result = ((state->current_word << (32 - state->bits_left)) >> |
69 | (32 - state->bits_left)); | 69 | (32 - state->bits_left)); |
70 | 70 | ||
71 | bitstream_fill_current (state); | 71 | bitstream_fill_current (state); |
72 | 72 | ||
73 | if (num_bits != 0) | 73 | if (num_bits != 0) |
74 | result = (result << num_bits) | (state->current_word >> (32 - num_bits)); | 74 | result = (result << num_bits) | (state->current_word >> (32 - num_bits)); |
75 | 75 | ||
76 | state->bits_left = 32 - num_bits; | 76 | state->bits_left = 32 - num_bits; |
77 | 77 | ||
@@ -84,13 +84,13 @@ int32_t a52_bitstream_get_bh_2 (a52_state_t * state, uint32_t num_bits) | |||
84 | 84 | ||
85 | num_bits -= state->bits_left; | 85 | num_bits -= state->bits_left; |
86 | result = ((((int32_t)state->current_word) << (32 - state->bits_left)) >> | 86 | result = ((((int32_t)state->current_word) << (32 - state->bits_left)) >> |
87 | (32 - state->bits_left)); | 87 | (32 - state->bits_left)); |
88 | 88 | ||
89 | bitstream_fill_current(state); | 89 | bitstream_fill_current(state); |
90 | 90 | ||
91 | if (num_bits != 0) | 91 | if (num_bits != 0) |
92 | result = (result << num_bits) | (state->current_word >> (32 - num_bits)); | 92 | result = (result << num_bits) | (state->current_word >> (32 - num_bits)); |
93 | 93 | ||
94 | state->bits_left = 32 - num_bits; | 94 | state->bits_left = 32 - num_bits; |
95 | 95 | ||
96 | return result; | 96 | return result; |
diff --git a/apps/codecs/liba52/bitstream.h b/apps/codecs/liba52/bitstream.h index 88f8fc4660..c316a971b5 100644 --- a/apps/codecs/liba52/bitstream.h +++ b/apps/codecs/liba52/bitstream.h | |||
@@ -30,11 +30,11 @@ int32_t a52_bitstream_get_bh_2 (a52_state_t * state, uint32_t num_bits); | |||
30 | static inline uint32_t bitstream_get (a52_state_t * state, uint32_t num_bits) | 30 | static inline uint32_t bitstream_get (a52_state_t * state, uint32_t num_bits) |
31 | { | 31 | { |
32 | uint32_t result; | 32 | uint32_t result; |
33 | 33 | ||
34 | if (num_bits < state->bits_left) { | 34 | if (num_bits < state->bits_left) { |
35 | result = (state->current_word << (32 - state->bits_left)) >> (32 - num_bits); | 35 | result = (state->current_word << (32 - state->bits_left)) >> (32 - num_bits); |
36 | state->bits_left -= num_bits; | 36 | state->bits_left -= num_bits; |
37 | return result; | 37 | return result; |
38 | } | 38 | } |
39 | 39 | ||
40 | return a52_bitstream_get_bh (state, num_bits); | 40 | return a52_bitstream_get_bh (state, num_bits); |
@@ -43,11 +43,11 @@ static inline uint32_t bitstream_get (a52_state_t * state, uint32_t num_bits) | |||
43 | static inline int32_t bitstream_get_2 (a52_state_t * state, uint32_t num_bits) | 43 | static inline int32_t bitstream_get_2 (a52_state_t * state, uint32_t num_bits) |
44 | { | 44 | { |
45 | int32_t result; | 45 | int32_t result; |
46 | 46 | ||
47 | if (num_bits < state->bits_left) { | 47 | if (num_bits < state->bits_left) { |
48 | result = (((int32_t)state->current_word) << (32 - state->bits_left)) >> (32 - num_bits); | 48 | result = (((int32_t)state->current_word) << (32 - state->bits_left)) >> (32 - num_bits); |
49 | state->bits_left -= num_bits; | 49 | state->bits_left -= num_bits; |
50 | return result; | 50 | return result; |
51 | } | 51 | } |
52 | 52 | ||
53 | return a52_bitstream_get_bh_2 (state, num_bits); | 53 | return a52_bitstream_get_bh_2 (state, num_bits); |
diff --git a/apps/codecs/liba52/downmix.c b/apps/codecs/liba52/downmix.c index 2e8567bceb..b9506de8c1 100644 --- a/apps/codecs/liba52/downmix.c +++ b/apps/codecs/liba52/downmix.c | |||
@@ -32,135 +32,135 @@ | |||
32 | #define CONVERT(acmod,output) (((output) << 3) + (acmod)) | 32 | #define CONVERT(acmod,output) (((output) << 3) + (acmod)) |
33 | 33 | ||
34 | int a52_downmix_init (int input, int flags, level_t * level, | 34 | int a52_downmix_init (int input, int flags, level_t * level, |
35 | level_t clev, level_t slev) | 35 | level_t clev, level_t slev) |
36 | { | 36 | { |
37 | static uint8_t table[11][8] = { | 37 | static uint8_t table[11][8] = { |
38 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO, | 38 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO, |
39 | A52_STEREO, A52_STEREO, A52_STEREO, A52_STEREO}, | 39 | A52_STEREO, A52_STEREO, A52_STEREO, A52_STEREO}, |
40 | {A52_MONO, A52_MONO, A52_MONO, A52_MONO, | 40 | {A52_MONO, A52_MONO, A52_MONO, A52_MONO, |
41 | A52_MONO, A52_MONO, A52_MONO, A52_MONO}, | 41 | A52_MONO, A52_MONO, A52_MONO, A52_MONO}, |
42 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO, | 42 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO, |
43 | A52_STEREO, A52_STEREO, A52_STEREO, A52_STEREO}, | 43 | A52_STEREO, A52_STEREO, A52_STEREO, A52_STEREO}, |
44 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F, | 44 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F, |
45 | A52_STEREO, A52_3F, A52_STEREO, A52_3F}, | 45 | A52_STEREO, A52_3F, A52_STEREO, A52_3F}, |
46 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO, | 46 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO, |
47 | A52_2F1R, A52_2F1R, A52_2F1R, A52_2F1R}, | 47 | A52_2F1R, A52_2F1R, A52_2F1R, A52_2F1R}, |
48 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO, | 48 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO, |
49 | A52_2F1R, A52_3F1R, A52_2F1R, A52_3F1R}, | 49 | A52_2F1R, A52_3F1R, A52_2F1R, A52_3F1R}, |
50 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F, | 50 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F, |
51 | A52_2F2R, A52_2F2R, A52_2F2R, A52_2F2R}, | 51 | A52_2F2R, A52_2F2R, A52_2F2R, A52_2F2R}, |
52 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F, | 52 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F, |
53 | A52_2F2R, A52_3F2R, A52_2F2R, A52_3F2R}, | 53 | A52_2F2R, A52_3F2R, A52_2F2R, A52_3F2R}, |
54 | {A52_CHANNEL1, A52_MONO, A52_MONO, A52_MONO, | 54 | {A52_CHANNEL1, A52_MONO, A52_MONO, A52_MONO, |
55 | A52_MONO, A52_MONO, A52_MONO, A52_MONO}, | 55 | A52_MONO, A52_MONO, A52_MONO, A52_MONO}, |
56 | {A52_CHANNEL2, A52_MONO, A52_MONO, A52_MONO, | 56 | {A52_CHANNEL2, A52_MONO, A52_MONO, A52_MONO, |
57 | A52_MONO, A52_MONO, A52_MONO, A52_MONO}, | 57 | A52_MONO, A52_MONO, A52_MONO, A52_MONO}, |
58 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_DOLBY, | 58 | {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_DOLBY, |
59 | A52_DOLBY, A52_DOLBY, A52_DOLBY, A52_DOLBY} | 59 | A52_DOLBY, A52_DOLBY, A52_DOLBY, A52_DOLBY} |
60 | }; | 60 | }; |
61 | int output; | 61 | int output; |
62 | 62 | ||
63 | output = flags & A52_CHANNEL_MASK; | 63 | output = flags & A52_CHANNEL_MASK; |
64 | if (output > A52_DOLBY) | 64 | if (output > A52_DOLBY) |
65 | return -1; | 65 | return -1; |
66 | 66 | ||
67 | output = table[output][input & 7]; | 67 | output = table[output][input & 7]; |
68 | 68 | ||
69 | if (output == A52_STEREO && | 69 | if (output == A52_STEREO && |
70 | (input == A52_DOLBY || (input == A52_3F && clev == LEVEL (LEVEL_3DB)))) | 70 | (input == A52_DOLBY || (input == A52_3F && clev == LEVEL (LEVEL_3DB)))) |
71 | output = A52_DOLBY; | 71 | output = A52_DOLBY; |
72 | 72 | ||
73 | if (flags & A52_ADJUST_LEVEL) { | 73 | if (flags & A52_ADJUST_LEVEL) { |
74 | level_t adjust; | 74 | level_t adjust; |
75 | 75 | ||
76 | switch (CONVERT (input & 7, output)) { | 76 | switch (CONVERT (input & 7, output)) { |
77 | 77 | ||
78 | case CONVERT (A52_3F, A52_MONO): | 78 | case CONVERT (A52_3F, A52_MONO): |
79 | adjust = DIV (LEVEL_3DB, LEVEL (1) + clev); | 79 | adjust = DIV (LEVEL_3DB, LEVEL (1) + clev); |
80 | break; | 80 | break; |
81 | 81 | ||
82 | case CONVERT (A52_STEREO, A52_MONO): | 82 | case CONVERT (A52_STEREO, A52_MONO): |
83 | case CONVERT (A52_2F2R, A52_2F1R): | 83 | case CONVERT (A52_2F2R, A52_2F1R): |
84 | case CONVERT (A52_3F2R, A52_3F1R): | 84 | case CONVERT (A52_3F2R, A52_3F1R): |
85 | level_3db: | 85 | level_3db: |
86 | adjust = LEVEL (LEVEL_3DB); | 86 | adjust = LEVEL (LEVEL_3DB); |
87 | break; | 87 | break; |
88 | 88 | ||
89 | case CONVERT (A52_3F2R, A52_2F1R): | 89 | case CONVERT (A52_3F2R, A52_2F1R): |
90 | if (clev < LEVEL (LEVEL_PLUS3DB - 1)) | 90 | if (clev < LEVEL (LEVEL_PLUS3DB - 1)) |
91 | goto level_3db; | 91 | goto level_3db; |
92 | /* break thru */ | 92 | /* break thru */ |
93 | case CONVERT (A52_3F, A52_STEREO): | 93 | case CONVERT (A52_3F, A52_STEREO): |
94 | case CONVERT (A52_3F1R, A52_2F1R): | 94 | case CONVERT (A52_3F1R, A52_2F1R): |
95 | case CONVERT (A52_3F1R, A52_2F2R): | 95 | case CONVERT (A52_3F1R, A52_2F2R): |
96 | case CONVERT (A52_3F2R, A52_2F2R): | 96 | case CONVERT (A52_3F2R, A52_2F2R): |
97 | adjust = DIV (1, LEVEL (1) + clev); | 97 | adjust = DIV (1, LEVEL (1) + clev); |
98 | break; | 98 | break; |
99 | 99 | ||
100 | case CONVERT (A52_2F1R, A52_MONO): | 100 | case CONVERT (A52_2F1R, A52_MONO): |
101 | adjust = DIV (LEVEL_PLUS3DB, LEVEL (2) + slev); | 101 | adjust = DIV (LEVEL_PLUS3DB, LEVEL (2) + slev); |
102 | break; | 102 | break; |
103 | 103 | ||
104 | case CONVERT (A52_2F1R, A52_STEREO): | 104 | case CONVERT (A52_2F1R, A52_STEREO): |
105 | case CONVERT (A52_3F1R, A52_3F): | 105 | case CONVERT (A52_3F1R, A52_3F): |
106 | adjust = DIV (1, LEVEL (1) + MUL_C (slev, LEVEL_3DB)); | 106 | adjust = DIV (1, LEVEL (1) + MUL_C (slev, LEVEL_3DB)); |
107 | break; | 107 | break; |
108 | 108 | ||
109 | case CONVERT (A52_3F1R, A52_MONO): | 109 | case CONVERT (A52_3F1R, A52_MONO): |
110 | adjust = DIV (LEVEL_3DB, LEVEL (1) + clev + MUL_C (slev, 0.5)); | 110 | adjust = DIV (LEVEL_3DB, LEVEL (1) + clev + MUL_C (slev, 0.5)); |
111 | break; | 111 | break; |
112 | 112 | ||
113 | case CONVERT (A52_3F1R, A52_STEREO): | 113 | case CONVERT (A52_3F1R, A52_STEREO): |
114 | adjust = DIV (1, LEVEL (1) + clev + MUL_C (slev, LEVEL_3DB)); | 114 | adjust = DIV (1, LEVEL (1) + clev + MUL_C (slev, LEVEL_3DB)); |
115 | break; | 115 | break; |
116 | 116 | ||
117 | case CONVERT (A52_2F2R, A52_MONO): | 117 | case CONVERT (A52_2F2R, A52_MONO): |
118 | adjust = DIV (LEVEL_3DB, LEVEL (1) + slev); | 118 | adjust = DIV (LEVEL_3DB, LEVEL (1) + slev); |
119 | break; | 119 | break; |
120 | 120 | ||
121 | case CONVERT (A52_2F2R, A52_STEREO): | 121 | case CONVERT (A52_2F2R, A52_STEREO): |
122 | case CONVERT (A52_3F2R, A52_3F): | 122 | case CONVERT (A52_3F2R, A52_3F): |
123 | adjust = DIV (1, LEVEL (1) + slev); | 123 | adjust = DIV (1, LEVEL (1) + slev); |
124 | break; | 124 | break; |
125 | 125 | ||
126 | case CONVERT (A52_3F2R, A52_MONO): | 126 | case CONVERT (A52_3F2R, A52_MONO): |
127 | adjust = DIV (LEVEL_3DB, LEVEL (1) + clev + slev); | 127 | adjust = DIV (LEVEL_3DB, LEVEL (1) + clev + slev); |
128 | break; | 128 | break; |
129 | 129 | ||
130 | case CONVERT (A52_3F2R, A52_STEREO): | 130 | case CONVERT (A52_3F2R, A52_STEREO): |
131 | adjust = DIV (1, LEVEL (1) + clev + slev); | 131 | adjust = DIV (1, LEVEL (1) + clev + slev); |
132 | break; | 132 | break; |
133 | 133 | ||
134 | case CONVERT (A52_MONO, A52_DOLBY): | 134 | case CONVERT (A52_MONO, A52_DOLBY): |
135 | adjust = LEVEL (LEVEL_PLUS3DB); | 135 | adjust = LEVEL (LEVEL_PLUS3DB); |
136 | break; | 136 | break; |
137 | 137 | ||
138 | case CONVERT (A52_3F, A52_DOLBY): | 138 | case CONVERT (A52_3F, A52_DOLBY): |
139 | case CONVERT (A52_2F1R, A52_DOLBY): | 139 | case CONVERT (A52_2F1R, A52_DOLBY): |
140 | adjust = LEVEL (1 / (1 + LEVEL_3DB)); | 140 | adjust = LEVEL (1 / (1 + LEVEL_3DB)); |
141 | break; | 141 | break; |
142 | 142 | ||
143 | case CONVERT (A52_3F1R, A52_DOLBY): | 143 | case CONVERT (A52_3F1R, A52_DOLBY): |
144 | case CONVERT (A52_2F2R, A52_DOLBY): | 144 | case CONVERT (A52_2F2R, A52_DOLBY): |
145 | adjust = LEVEL (1 / (1 + 2 * LEVEL_3DB)); | 145 | adjust = LEVEL (1 / (1 + 2 * LEVEL_3DB)); |
146 | break; | 146 | break; |
147 | 147 | ||
148 | case CONVERT (A52_3F2R, A52_DOLBY): | 148 | case CONVERT (A52_3F2R, A52_DOLBY): |
149 | adjust = LEVEL (1 / (1 + 3 * LEVEL_3DB)); | 149 | adjust = LEVEL (1 / (1 + 3 * LEVEL_3DB)); |
150 | break; | 150 | break; |
151 | 151 | ||
152 | default: | 152 | default: |
153 | return output; | 153 | return output; |
154 | } | 154 | } |
155 | 155 | ||
156 | *level = MUL_L (*level, adjust); | 156 | *level = MUL_L (*level, adjust); |
157 | } | 157 | } |
158 | 158 | ||
159 | return output; | 159 | return output; |
160 | } | 160 | } |
161 | 161 | ||
162 | int a52_downmix_coeff (level_t * coeff, int acmod, int output, level_t level, | 162 | int a52_downmix_coeff (level_t * coeff, int acmod, int output, level_t level, |
163 | level_t clev, level_t slev) | 163 | level_t clev, level_t slev) |
164 | { | 164 | { |
165 | level_t level_3db; | 165 | level_t level_3db; |
166 | 166 | ||
@@ -177,156 +177,156 @@ int a52_downmix_coeff (level_t * coeff, int acmod, int output, level_t level, | |||
177 | case CONVERT (A52_2F2R, A52_2F2R): | 177 | case CONVERT (A52_2F2R, A52_2F2R): |
178 | case CONVERT (A52_3F2R, A52_3F2R): | 178 | case CONVERT (A52_3F2R, A52_3F2R): |
179 | case CONVERT (A52_STEREO, A52_DOLBY): | 179 | case CONVERT (A52_STEREO, A52_DOLBY): |
180 | coeff[0] = coeff[1] = coeff[2] = coeff[3] = coeff[4] = level; | 180 | coeff[0] = coeff[1] = coeff[2] = coeff[3] = coeff[4] = level; |
181 | return 0; | 181 | return 0; |
182 | 182 | ||
183 | case CONVERT (A52_CHANNEL, A52_MONO): | 183 | case CONVERT (A52_CHANNEL, A52_MONO): |
184 | coeff[0] = coeff[1] = MUL_C (level, LEVEL_6DB); | 184 | coeff[0] = coeff[1] = MUL_C (level, LEVEL_6DB); |
185 | return 3; | 185 | return 3; |
186 | 186 | ||
187 | case CONVERT (A52_STEREO, A52_MONO): | 187 | case CONVERT (A52_STEREO, A52_MONO): |
188 | coeff[0] = coeff[1] = level_3db; | 188 | coeff[0] = coeff[1] = level_3db; |
189 | return 3; | 189 | return 3; |
190 | 190 | ||
191 | case CONVERT (A52_3F, A52_MONO): | 191 | case CONVERT (A52_3F, A52_MONO): |
192 | coeff[0] = coeff[2] = level_3db; | 192 | coeff[0] = coeff[2] = level_3db; |
193 | coeff[1] = MUL_C (MUL_L (level_3db, clev), LEVEL_PLUS6DB); | 193 | coeff[1] = MUL_C (MUL_L (level_3db, clev), LEVEL_PLUS6DB); |
194 | return 7; | 194 | return 7; |
195 | 195 | ||
196 | case CONVERT (A52_2F1R, A52_MONO): | 196 | case CONVERT (A52_2F1R, A52_MONO): |
197 | coeff[0] = coeff[1] = level_3db; | 197 | coeff[0] = coeff[1] = level_3db; |
198 | coeff[2] = MUL_L (level_3db, slev); | 198 | coeff[2] = MUL_L (level_3db, slev); |
199 | return 7; | 199 | return 7; |
200 | 200 | ||
201 | case CONVERT (A52_2F2R, A52_MONO): | 201 | case CONVERT (A52_2F2R, A52_MONO): |
202 | coeff[0] = coeff[1] = level_3db; | 202 | coeff[0] = coeff[1] = level_3db; |
203 | coeff[2] = coeff[3] = MUL_L (level_3db, slev); | 203 | coeff[2] = coeff[3] = MUL_L (level_3db, slev); |
204 | return 15; | 204 | return 15; |
205 | 205 | ||
206 | case CONVERT (A52_3F1R, A52_MONO): | 206 | case CONVERT (A52_3F1R, A52_MONO): |
207 | coeff[0] = coeff[2] = level_3db; | 207 | coeff[0] = coeff[2] = level_3db; |
208 | coeff[1] = MUL_C (MUL_L (level_3db, clev), LEVEL_PLUS6DB); | 208 | coeff[1] = MUL_C (MUL_L (level_3db, clev), LEVEL_PLUS6DB); |
209 | coeff[3] = MUL_L (level_3db, slev); | 209 | coeff[3] = MUL_L (level_3db, slev); |
210 | return 15; | 210 | return 15; |
211 | 211 | ||
212 | case CONVERT (A52_3F2R, A52_MONO): | 212 | case CONVERT (A52_3F2R, A52_MONO): |
213 | coeff[0] = coeff[2] = level_3db; | 213 | coeff[0] = coeff[2] = level_3db; |
214 | coeff[1] = MUL_C (MUL_L (level_3db, clev), LEVEL_PLUS6DB); | 214 | coeff[1] = MUL_C (MUL_L (level_3db, clev), LEVEL_PLUS6DB); |
215 | coeff[3] = coeff[4] = MUL_L (level_3db, slev); | 215 | coeff[3] = coeff[4] = MUL_L (level_3db, slev); |
216 | return 31; | 216 | return 31; |
217 | 217 | ||
218 | case CONVERT (A52_MONO, A52_DOLBY): | 218 | case CONVERT (A52_MONO, A52_DOLBY): |
219 | coeff[0] = level_3db; | 219 | coeff[0] = level_3db; |
220 | return 0; | 220 | return 0; |
221 | 221 | ||
222 | case CONVERT (A52_3F, A52_DOLBY): | 222 | case CONVERT (A52_3F, A52_DOLBY): |
223 | coeff[0] = coeff[2] = coeff[3] = coeff[4] = level; | 223 | coeff[0] = coeff[2] = coeff[3] = coeff[4] = level; |
224 | coeff[1] = level_3db; | 224 | coeff[1] = level_3db; |
225 | return 7; | 225 | return 7; |
226 | 226 | ||
227 | case CONVERT (A52_3F, A52_STEREO): | 227 | case CONVERT (A52_3F, A52_STEREO): |
228 | case CONVERT (A52_3F1R, A52_2F1R): | 228 | case CONVERT (A52_3F1R, A52_2F1R): |
229 | case CONVERT (A52_3F2R, A52_2F2R): | 229 | case CONVERT (A52_3F2R, A52_2F2R): |
230 | coeff[0] = coeff[2] = coeff[3] = coeff[4] = level; | 230 | coeff[0] = coeff[2] = coeff[3] = coeff[4] = level; |
231 | coeff[1] = MUL_L (level, clev); | 231 | coeff[1] = MUL_L (level, clev); |
232 | return 7; | 232 | return 7; |
233 | 233 | ||
234 | case CONVERT (A52_2F1R, A52_DOLBY): | 234 | case CONVERT (A52_2F1R, A52_DOLBY): |
235 | coeff[0] = coeff[1] = level; | 235 | coeff[0] = coeff[1] = level; |
236 | coeff[2] = level_3db; | 236 | coeff[2] = level_3db; |
237 | return 7; | 237 | return 7; |
238 | 238 | ||
239 | case CONVERT (A52_2F1R, A52_STEREO): | 239 | case CONVERT (A52_2F1R, A52_STEREO): |
240 | coeff[0] = coeff[1] = level; | 240 | coeff[0] = coeff[1] = level; |
241 | coeff[2] = MUL_L (level_3db, slev); | 241 | coeff[2] = MUL_L (level_3db, slev); |
242 | return 7; | 242 | return 7; |
243 | 243 | ||
244 | case CONVERT (A52_3F1R, A52_DOLBY): | 244 | case CONVERT (A52_3F1R, A52_DOLBY): |
245 | coeff[0] = coeff[2] = level; | 245 | coeff[0] = coeff[2] = level; |
246 | coeff[1] = coeff[3] = level_3db; | 246 | coeff[1] = coeff[3] = level_3db; |
247 | return 15; | 247 | return 15; |
248 | 248 | ||
249 | case CONVERT (A52_3F1R, A52_STEREO): | 249 | case CONVERT (A52_3F1R, A52_STEREO): |
250 | coeff[0] = coeff[2] = level; | 250 | coeff[0] = coeff[2] = level; |
251 | coeff[1] = MUL_L (level, clev); | 251 | coeff[1] = MUL_L (level, clev); |
252 | coeff[3] = MUL_L (level_3db, slev); | 252 | coeff[3] = MUL_L (level_3db, slev); |
253 | return 15; | 253 | return 15; |
254 | 254 | ||
255 | case CONVERT (A52_2F2R, A52_DOLBY): | 255 | case CONVERT (A52_2F2R, A52_DOLBY): |
256 | coeff[0] = coeff[1] = level; | 256 | coeff[0] = coeff[1] = level; |
257 | coeff[2] = coeff[3] = level_3db; | 257 | coeff[2] = coeff[3] = level_3db; |
258 | return 15; | 258 | return 15; |
259 | 259 | ||
260 | case CONVERT (A52_2F2R, A52_STEREO): | 260 | case CONVERT (A52_2F2R, A52_STEREO): |
261 | coeff[0] = coeff[1] = level; | 261 | coeff[0] = coeff[1] = level; |
262 | coeff[2] = coeff[3] = MUL_L (level, slev); | 262 | coeff[2] = coeff[3] = MUL_L (level, slev); |
263 | return 15; | 263 | return 15; |
264 | 264 | ||
265 | case CONVERT (A52_3F2R, A52_DOLBY): | 265 | case CONVERT (A52_3F2R, A52_DOLBY): |
266 | coeff[0] = coeff[2] = level; | 266 | coeff[0] = coeff[2] = level; |
267 | coeff[1] = coeff[3] = coeff[4] = level_3db; | 267 | coeff[1] = coeff[3] = coeff[4] = level_3db; |
268 | return 31; | 268 | return 31; |
269 | 269 | ||
270 | case CONVERT (A52_3F2R, A52_2F1R): | 270 | case CONVERT (A52_3F2R, A52_2F1R): |
271 | coeff[0] = coeff[2] = level; | 271 | coeff[0] = coeff[2] = level; |
272 | coeff[1] = MUL_L (level, clev); | 272 | coeff[1] = MUL_L (level, clev); |
273 | coeff[3] = coeff[4] = level_3db; | 273 | coeff[3] = coeff[4] = level_3db; |
274 | return 31; | 274 | return 31; |
275 | 275 | ||
276 | case CONVERT (A52_3F2R, A52_STEREO): | 276 | case CONVERT (A52_3F2R, A52_STEREO): |
277 | coeff[0] = coeff[2] = level; | 277 | coeff[0] = coeff[2] = level; |
278 | coeff[1] = MUL_L (level, clev); | 278 | coeff[1] = MUL_L (level, clev); |
279 | coeff[3] = coeff[4] = MUL_L (level, slev); | 279 | coeff[3] = coeff[4] = MUL_L (level, slev); |
280 | return 31; | 280 | return 31; |
281 | 281 | ||
282 | case CONVERT (A52_3F1R, A52_3F): | 282 | case CONVERT (A52_3F1R, A52_3F): |
283 | coeff[0] = coeff[1] = coeff[2] = level; | 283 | coeff[0] = coeff[1] = coeff[2] = level; |
284 | coeff[3] = MUL_L (level_3db, slev); | 284 | coeff[3] = MUL_L (level_3db, slev); |
285 | return 13; | 285 | return 13; |
286 | 286 | ||
287 | case CONVERT (A52_3F2R, A52_3F): | 287 | case CONVERT (A52_3F2R, A52_3F): |
288 | coeff[0] = coeff[1] = coeff[2] = level; | 288 | coeff[0] = coeff[1] = coeff[2] = level; |
289 | coeff[3] = coeff[4] = MUL_L (level, slev); | 289 | coeff[3] = coeff[4] = MUL_L (level, slev); |
290 | return 29; | 290 | return 29; |
291 | 291 | ||
292 | case CONVERT (A52_2F2R, A52_2F1R): | 292 | case CONVERT (A52_2F2R, A52_2F1R): |
293 | coeff[0] = coeff[1] = level; | 293 | coeff[0] = coeff[1] = level; |
294 | coeff[2] = coeff[3] = level_3db; | 294 | coeff[2] = coeff[3] = level_3db; |
295 | return 12; | 295 | return 12; |
296 | 296 | ||
297 | case CONVERT (A52_3F2R, A52_3F1R): | 297 | case CONVERT (A52_3F2R, A52_3F1R): |
298 | coeff[0] = coeff[1] = coeff[2] = level; | 298 | coeff[0] = coeff[1] = coeff[2] = level; |
299 | coeff[3] = coeff[4] = level_3db; | 299 | coeff[3] = coeff[4] = level_3db; |
300 | return 24; | 300 | return 24; |
301 | 301 | ||
302 | case CONVERT (A52_2F1R, A52_2F2R): | 302 | case CONVERT (A52_2F1R, A52_2F2R): |
303 | coeff[0] = coeff[1] = level; | 303 | coeff[0] = coeff[1] = level; |
304 | coeff[2] = level_3db; | 304 | coeff[2] = level_3db; |
305 | return 0; | 305 | return 0; |
306 | 306 | ||
307 | case CONVERT (A52_3F1R, A52_2F2R): | 307 | case CONVERT (A52_3F1R, A52_2F2R): |
308 | coeff[0] = coeff[2] = level; | 308 | coeff[0] = coeff[2] = level; |
309 | coeff[1] = MUL_L (level, clev); | 309 | coeff[1] = MUL_L (level, clev); |
310 | coeff[3] = level_3db; | 310 | coeff[3] = level_3db; |
311 | return 7; | 311 | return 7; |
312 | 312 | ||
313 | case CONVERT (A52_3F1R, A52_3F2R): | 313 | case CONVERT (A52_3F1R, A52_3F2R): |
314 | coeff[0] = coeff[1] = coeff[2] = level; | 314 | coeff[0] = coeff[1] = coeff[2] = level; |
315 | coeff[3] = level_3db; | 315 | coeff[3] = level_3db; |
316 | return 0; | 316 | return 0; |
317 | 317 | ||
318 | case CONVERT (A52_CHANNEL, A52_CHANNEL1): | 318 | case CONVERT (A52_CHANNEL, A52_CHANNEL1): |
319 | coeff[0] = level; | 319 | coeff[0] = level; |
320 | coeff[1] = 0; | 320 | coeff[1] = 0; |
321 | return 0; | 321 | return 0; |
322 | 322 | ||
323 | case CONVERT (A52_CHANNEL, A52_CHANNEL2): | 323 | case CONVERT (A52_CHANNEL, A52_CHANNEL2): |
324 | coeff[0] = 0; | 324 | coeff[0] = 0; |
325 | coeff[1] = level; | 325 | coeff[1] = level; |
326 | return 0; | 326 | return 0; |
327 | } | 327 | } |
328 | 328 | ||
329 | return -1; /* NOTREACHED */ | 329 | return -1; /* NOTREACHED */ |
330 | } | 330 | } |
331 | 331 | ||
332 | static void mix2to1 (sample_t * dest, sample_t * src) | 332 | static void mix2to1 (sample_t * dest, sample_t * src) |
@@ -334,7 +334,7 @@ static void mix2to1 (sample_t * dest, sample_t * src) | |||
334 | int i; | 334 | int i; |
335 | 335 | ||
336 | for (i = 0; i < 256; i++) | 336 | for (i = 0; i < 256; i++) |
337 | dest[i] += BIAS (src[i]); | 337 | dest[i] += BIAS (src[i]); |
338 | } | 338 | } |
339 | 339 | ||
340 | static void mix3to1 (sample_t * samples) | 340 | static void mix3to1 (sample_t * samples) |
@@ -342,7 +342,7 @@ static void mix3to1 (sample_t * samples) | |||
342 | int i; | 342 | int i; |
343 | 343 | ||
344 | for (i = 0; i < 256; i++) | 344 | for (i = 0; i < 256; i++) |
345 | samples[i] += BIAS (samples[i + 256] + samples[i + 512]); | 345 | samples[i] += BIAS (samples[i + 256] + samples[i + 512]); |
346 | } | 346 | } |
347 | 347 | ||
348 | static void mix4to1 (sample_t * samples) | 348 | static void mix4to1 (sample_t * samples) |
@@ -350,8 +350,8 @@ static void mix4to1 (sample_t * samples) | |||
350 | int i; | 350 | int i; |
351 | 351 | ||
352 | for (i = 0; i < 256; i++) | 352 | for (i = 0; i < 256; i++) |
353 | samples[i] += BIAS (samples[i + 256] + samples[i + 512] + | 353 | samples[i] += BIAS (samples[i + 256] + samples[i + 512] + |
354 | samples[i + 768]); | 354 | samples[i + 768]); |
355 | } | 355 | } |
356 | 356 | ||
357 | static void mix5to1 (sample_t * samples) | 357 | static void mix5to1 (sample_t * samples) |
@@ -359,8 +359,8 @@ static void mix5to1 (sample_t * samples) | |||
359 | int i; | 359 | int i; |
360 | 360 | ||
361 | for (i = 0; i < 256; i++) | 361 | for (i = 0; i < 256; i++) |
362 | samples[i] += BIAS (samples[i + 256] + samples[i + 512] + | 362 | samples[i] += BIAS (samples[i + 256] + samples[i + 512] + |
363 | samples[i + 768] + samples[i + 1024]); | 363 | samples[i + 768] + samples[i + 1024]); |
364 | } | 364 | } |
365 | 365 | ||
366 | static void mix3to2 (sample_t * samples) | 366 | static void mix3to2 (sample_t * samples) |
@@ -369,9 +369,9 @@ static void mix3to2 (sample_t * samples) | |||
369 | sample_t common; | 369 | sample_t common; |
370 | 370 | ||
371 | for (i = 0; i < 256; i++) { | 371 | for (i = 0; i < 256; i++) { |
372 | common = BIAS (samples[i + 256]); | 372 | common = BIAS (samples[i + 256]); |
373 | samples[i] += common; | 373 | samples[i] += common; |
374 | samples[i + 256] = samples[i + 512] + common; | 374 | samples[i + 256] = samples[i + 512] + common; |
375 | } | 375 | } |
376 | } | 376 | } |
377 | 377 | ||
@@ -381,9 +381,9 @@ static void mix21to2 (sample_t * left, sample_t * right) | |||
381 | sample_t common; | 381 | sample_t common; |
382 | 382 | ||
383 | for (i = 0; i < 256; i++) { | 383 | for (i = 0; i < 256; i++) { |
384 | common = BIAS (right[i + 256]); | 384 | common = BIAS (right[i + 256]); |
385 | left[i] += common; | 385 | left[i] += common; |
386 | right[i] += common; | 386 | right[i] += common; |
387 | } | 387 | } |
388 | } | 388 | } |
389 | 389 | ||
@@ -393,9 +393,9 @@ static void mix21toS (sample_t * samples) | |||
393 | sample_t surround; | 393 | sample_t surround; |
394 | 394 | ||
395 | for (i = 0; i < 256; i++) { | 395 | for (i = 0; i < 256; i++) { |
396 | surround = samples[i + 512]; | 396 | surround = samples[i + 512]; |
397 | samples[i] += BIAS (-surround); | 397 | samples[i] += BIAS (-surround); |
398 | samples[i + 256] += BIAS (surround); | 398 | samples[i + 256] += BIAS (surround); |
399 | } | 399 | } |
400 | } | 400 | } |
401 | 401 | ||
@@ -405,9 +405,9 @@ static void mix31to2 (sample_t * samples) | |||
405 | sample_t common; | 405 | sample_t common; |
406 | 406 | ||
407 | for (i = 0; i < 256; i++) { | 407 | for (i = 0; i < 256; i++) { |
408 | common = BIAS (samples[i + 256] + samples[i + 768]); | 408 | common = BIAS (samples[i + 256] + samples[i + 768]); |
409 | samples[i] += common; | 409 | samples[i] += common; |
410 | samples[i + 256] = samples[i + 512] + common; | 410 | samples[i + 256] = samples[i + 512] + common; |
411 | } | 411 | } |
412 | } | 412 | } |
413 | 413 | ||
@@ -417,10 +417,10 @@ static void mix31toS (sample_t * samples) | |||
417 | sample_t common, surround; | 417 | sample_t common, surround; |
418 | 418 | ||
419 | for (i = 0; i < 256; i++) { | 419 | for (i = 0; i < 256; i++) { |
420 | common = BIAS (samples[i + 256]); | 420 | common = BIAS (samples[i + 256]); |
421 | surround = samples[i + 768]; | 421 | surround = samples[i + 768]; |
422 | samples[i] += common - surround; | 422 | samples[i] += common - surround; |
423 | samples[i + 256] = samples[i + 512] + common + surround; | 423 | samples[i + 256] = samples[i + 512] + common + surround; |
424 | } | 424 | } |
425 | } | 425 | } |
426 | 426 | ||
@@ -430,9 +430,9 @@ static void mix22toS (sample_t * samples) | |||
430 | sample_t surround; | 430 | sample_t surround; |
431 | 431 | ||
432 | for (i = 0; i < 256; i++) { | 432 | for (i = 0; i < 256; i++) { |
433 | surround = samples[i + 512] + samples[i + 768]; | 433 | surround = samples[i + 512] + samples[i + 768]; |
434 | samples[i] += BIAS (-surround); | 434 | samples[i] += BIAS (-surround); |
435 | samples[i + 256] += BIAS (surround); | 435 | samples[i + 256] += BIAS (surround); |
436 | } | 436 | } |
437 | } | 437 | } |
438 | 438 | ||
@@ -442,9 +442,9 @@ static void mix32to2 (sample_t * samples) | |||
442 | sample_t common; | 442 | sample_t common; |
443 | 443 | ||
444 | for (i = 0; i < 256; i++) { | 444 | for (i = 0; i < 256; i++) { |
445 | common = BIAS (samples[i + 256]); | 445 | common = BIAS (samples[i + 256]); |
446 | samples[i] += common + samples[i + 768]; | 446 | samples[i] += common + samples[i + 768]; |
447 | samples[i + 256] = common + samples[i + 512] + samples[i + 1024]; | 447 | samples[i + 256] = common + samples[i + 512] + samples[i + 1024]; |
448 | } | 448 | } |
449 | } | 449 | } |
450 | 450 | ||
@@ -454,10 +454,10 @@ static void mix32toS (sample_t * samples) | |||
454 | sample_t common, surround; | 454 | sample_t common, surround; |
455 | 455 | ||
456 | for (i = 0; i < 256; i++) { | 456 | for (i = 0; i < 256; i++) { |
457 | common = BIAS (samples[i + 256]); | 457 | common = BIAS (samples[i + 256]); |
458 | surround = samples[i + 768] + samples[i + 1024]; | 458 | surround = samples[i + 768] + samples[i + 1024]; |
459 | samples[i] += common - surround; | 459 | samples[i] += common - surround; |
460 | samples[i + 256] = samples[i + 512] + common + surround; | 460 | samples[i + 256] = samples[i + 512] + common + surround; |
461 | } | 461 | } |
462 | } | 462 | } |
463 | 463 | ||
@@ -466,7 +466,7 @@ static void move2to1 (sample_t * src, sample_t * dest) | |||
466 | int i; | 466 | int i; |
467 | 467 | ||
468 | for (i = 0; i < 256; i++) | 468 | for (i = 0; i < 256; i++) |
469 | dest[i] = BIAS (src[i] + src[i + 256]); | 469 | dest[i] = BIAS (src[i] + src[i + 256]); |
470 | } | 470 | } |
471 | 471 | ||
472 | static void zero (sample_t * samples) | 472 | static void zero (sample_t * samples) |
@@ -474,11 +474,11 @@ static void zero (sample_t * samples) | |||
474 | int i; | 474 | int i; |
475 | 475 | ||
476 | for (i = 0; i < 256; i++) | 476 | for (i = 0; i < 256; i++) |
477 | samples[i] = 0; | 477 | samples[i] = 0; |
478 | } | 478 | } |
479 | 479 | ||
480 | void a52_downmix (sample_t * samples, int acmod, int output, | 480 | void a52_downmix (sample_t * samples, int acmod, int output, |
481 | level_t clev, level_t slev) | 481 | level_t clev, level_t slev) |
482 | { | 482 | { |
483 | /* avoid compiler warning */ | 483 | /* avoid compiler warning */ |
484 | (void)clev; | 484 | (void)clev; |
@@ -486,138 +486,138 @@ void a52_downmix (sample_t * samples, int acmod, int output, | |||
486 | switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) { | 486 | switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) { |
487 | 487 | ||
488 | case CONVERT (A52_CHANNEL, A52_CHANNEL2): | 488 | case CONVERT (A52_CHANNEL, A52_CHANNEL2): |
489 | memcpy (samples, samples + 256, 256 * sizeof (sample_t)); | 489 | memcpy (samples, samples + 256, 256 * sizeof (sample_t)); |
490 | break; | 490 | break; |
491 | 491 | ||
492 | case CONVERT (A52_CHANNEL, A52_MONO): | 492 | case CONVERT (A52_CHANNEL, A52_MONO): |
493 | case CONVERT (A52_STEREO, A52_MONO): | 493 | case CONVERT (A52_STEREO, A52_MONO): |
494 | mix_2to1: | 494 | mix_2to1: |
495 | mix2to1 (samples, samples + 256); | 495 | mix2to1 (samples, samples + 256); |
496 | break; | 496 | break; |
497 | 497 | ||
498 | case CONVERT (A52_2F1R, A52_MONO): | 498 | case CONVERT (A52_2F1R, A52_MONO): |
499 | if (slev == 0) | 499 | if (slev == 0) |
500 | goto mix_2to1; | 500 | goto mix_2to1; |
501 | case CONVERT (A52_3F, A52_MONO): | 501 | case CONVERT (A52_3F, A52_MONO): |
502 | mix_3to1: | 502 | mix_3to1: |
503 | mix3to1 (samples); | 503 | mix3to1 (samples); |
504 | break; | 504 | break; |
505 | 505 | ||
506 | case CONVERT (A52_3F1R, A52_MONO): | 506 | case CONVERT (A52_3F1R, A52_MONO): |
507 | if (slev == 0) | 507 | if (slev == 0) |
508 | goto mix_3to1; | 508 | goto mix_3to1; |
509 | case CONVERT (A52_2F2R, A52_MONO): | 509 | case CONVERT (A52_2F2R, A52_MONO): |
510 | if (slev == 0) | 510 | if (slev == 0) |
511 | goto mix_2to1; | 511 | goto mix_2to1; |
512 | mix4to1 (samples); | 512 | mix4to1 (samples); |
513 | break; | 513 | break; |
514 | 514 | ||
515 | case CONVERT (A52_3F2R, A52_MONO): | 515 | case CONVERT (A52_3F2R, A52_MONO): |
516 | if (slev == 0) | 516 | if (slev == 0) |
517 | goto mix_3to1; | 517 | goto mix_3to1; |
518 | mix5to1 (samples); | 518 | mix5to1 (samples); |
519 | break; | 519 | break; |
520 | 520 | ||
521 | case CONVERT (A52_MONO, A52_DOLBY): | 521 | case CONVERT (A52_MONO, A52_DOLBY): |
522 | memcpy (samples + 256, samples, 256 * sizeof (sample_t)); | 522 | memcpy (samples + 256, samples, 256 * sizeof (sample_t)); |
523 | break; | 523 | break; |
524 | 524 | ||
525 | case CONVERT (A52_3F, A52_STEREO): | 525 | case CONVERT (A52_3F, A52_STEREO): |
526 | case CONVERT (A52_3F, A52_DOLBY): | 526 | case CONVERT (A52_3F, A52_DOLBY): |
527 | mix_3to2: | 527 | mix_3to2: |
528 | mix3to2 (samples); | 528 | mix3to2 (samples); |
529 | break; | 529 | break; |
530 | 530 | ||
531 | case CONVERT (A52_2F1R, A52_STEREO): | 531 | case CONVERT (A52_2F1R, A52_STEREO): |
532 | if (slev == 0) | 532 | if (slev == 0) |
533 | break; | 533 | break; |
534 | mix21to2 (samples, samples + 256); | 534 | mix21to2 (samples, samples + 256); |
535 | break; | 535 | break; |
536 | 536 | ||
537 | case CONVERT (A52_2F1R, A52_DOLBY): | 537 | case CONVERT (A52_2F1R, A52_DOLBY): |
538 | mix21toS (samples); | 538 | mix21toS (samples); |
539 | break; | 539 | break; |
540 | 540 | ||
541 | case CONVERT (A52_3F1R, A52_STEREO): | 541 | case CONVERT (A52_3F1R, A52_STEREO): |
542 | if (slev == 0) | 542 | if (slev == 0) |
543 | goto mix_3to2; | 543 | goto mix_3to2; |
544 | mix31to2 (samples); | 544 | mix31to2 (samples); |
545 | break; | 545 | break; |
546 | 546 | ||
547 | case CONVERT (A52_3F1R, A52_DOLBY): | 547 | case CONVERT (A52_3F1R, A52_DOLBY): |
548 | mix31toS (samples); | 548 | mix31toS (samples); |
549 | break; | 549 | break; |
550 | 550 | ||
551 | case CONVERT (A52_2F2R, A52_STEREO): | 551 | case CONVERT (A52_2F2R, A52_STEREO): |
552 | if (slev == 0) | 552 | if (slev == 0) |
553 | break; | 553 | break; |
554 | mix2to1 (samples, samples + 512); | 554 | mix2to1 (samples, samples + 512); |
555 | mix2to1 (samples + 256, samples + 768); | 555 | mix2to1 (samples + 256, samples + 768); |
556 | break; | 556 | break; |
557 | 557 | ||
558 | case CONVERT (A52_2F2R, A52_DOLBY): | 558 | case CONVERT (A52_2F2R, A52_DOLBY): |
559 | mix22toS (samples); | 559 | mix22toS (samples); |
560 | break; | 560 | break; |
561 | 561 | ||
562 | case CONVERT (A52_3F2R, A52_STEREO): | 562 | case CONVERT (A52_3F2R, A52_STEREO): |
563 | if (slev == 0) | 563 | if (slev == 0) |
564 | goto mix_3to2; | 564 | goto mix_3to2; |
565 | mix32to2 (samples); | 565 | mix32to2 (samples); |
566 | break; | 566 | break; |
567 | 567 | ||
568 | case CONVERT (A52_3F2R, A52_DOLBY): | 568 | case CONVERT (A52_3F2R, A52_DOLBY): |
569 | mix32toS (samples); | 569 | mix32toS (samples); |
570 | break; | 570 | break; |
571 | 571 | ||
572 | case CONVERT (A52_3F1R, A52_3F): | 572 | case CONVERT (A52_3F1R, A52_3F): |
573 | if (slev == 0) | 573 | if (slev == 0) |
574 | break; | 574 | break; |
575 | mix21to2 (samples, samples + 512); | 575 | mix21to2 (samples, samples + 512); |
576 | break; | 576 | break; |
577 | 577 | ||
578 | case CONVERT (A52_3F2R, A52_3F): | 578 | case CONVERT (A52_3F2R, A52_3F): |
579 | if (slev == 0) | 579 | if (slev == 0) |
580 | break; | 580 | break; |
581 | mix2to1 (samples, samples + 768); | 581 | mix2to1 (samples, samples + 768); |
582 | mix2to1 (samples + 512, samples + 1024); | 582 | mix2to1 (samples + 512, samples + 1024); |
583 | break; | 583 | break; |
584 | 584 | ||
585 | case CONVERT (A52_3F1R, A52_2F1R): | 585 | case CONVERT (A52_3F1R, A52_2F1R): |
586 | mix3to2 (samples); | 586 | mix3to2 (samples); |
587 | memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t)); | 587 | memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t)); |
588 | break; | 588 | break; |
589 | 589 | ||
590 | case CONVERT (A52_2F2R, A52_2F1R): | 590 | case CONVERT (A52_2F2R, A52_2F1R): |
591 | mix2to1 (samples + 512, samples + 768); | 591 | mix2to1 (samples + 512, samples + 768); |
592 | break; | 592 | break; |
593 | 593 | ||
594 | case CONVERT (A52_3F2R, A52_2F1R): | 594 | case CONVERT (A52_3F2R, A52_2F1R): |
595 | mix3to2 (samples); | 595 | mix3to2 (samples); |
596 | move2to1 (samples + 768, samples + 512); | 596 | move2to1 (samples + 768, samples + 512); |
597 | break; | 597 | break; |
598 | 598 | ||
599 | case CONVERT (A52_3F2R, A52_3F1R): | 599 | case CONVERT (A52_3F2R, A52_3F1R): |
600 | mix2to1 (samples + 768, samples + 1024); | 600 | mix2to1 (samples + 768, samples + 1024); |
601 | break; | 601 | break; |
602 | 602 | ||
603 | case CONVERT (A52_2F1R, A52_2F2R): | 603 | case CONVERT (A52_2F1R, A52_2F2R): |
604 | memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t)); | 604 | memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t)); |
605 | break; | 605 | break; |
606 | 606 | ||
607 | case CONVERT (A52_3F1R, A52_2F2R): | 607 | case CONVERT (A52_3F1R, A52_2F2R): |
608 | mix3to2 (samples); | 608 | mix3to2 (samples); |
609 | memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t)); | 609 | memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t)); |
610 | break; | 610 | break; |
611 | 611 | ||
612 | case CONVERT (A52_3F2R, A52_2F2R): | 612 | case CONVERT (A52_3F2R, A52_2F2R): |
613 | mix3to2 (samples); | 613 | mix3to2 (samples); |
614 | memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t)); | 614 | memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t)); |
615 | memcpy (samples + 768, samples + 1024, 256 * sizeof (sample_t)); | 615 | memcpy (samples + 768, samples + 1024, 256 * sizeof (sample_t)); |
616 | break; | 616 | break; |
617 | 617 | ||
618 | case CONVERT (A52_3F1R, A52_3F2R): | 618 | case CONVERT (A52_3F1R, A52_3F2R): |
619 | memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t)); | 619 | memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t)); |
620 | break; | 620 | break; |
621 | } | 621 | } |
622 | } | 622 | } |
623 | 623 | ||
@@ -626,63 +626,63 @@ void a52_upmix (sample_t * samples, int acmod, int output) | |||
626 | switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) { | 626 | switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) { |
627 | 627 | ||
628 | case CONVERT (A52_CHANNEL, A52_CHANNEL2): | 628 | case CONVERT (A52_CHANNEL, A52_CHANNEL2): |
629 | memcpy (samples + 256, samples, 256 * sizeof (sample_t)); | 629 | memcpy (samples + 256, samples, 256 * sizeof (sample_t)); |
630 | break; | 630 | break; |
631 | 631 | ||
632 | case CONVERT (A52_3F2R, A52_MONO): | 632 | case CONVERT (A52_3F2R, A52_MONO): |
633 | zero (samples + 1024); | 633 | zero (samples + 1024); |
634 | case CONVERT (A52_3F1R, A52_MONO): | 634 | case CONVERT (A52_3F1R, A52_MONO): |
635 | case CONVERT (A52_2F2R, A52_MONO): | 635 | case CONVERT (A52_2F2R, A52_MONO): |
636 | zero (samples + 768); | 636 | zero (samples + 768); |
637 | case CONVERT (A52_3F, A52_MONO): | 637 | case CONVERT (A52_3F, A52_MONO): |
638 | case CONVERT (A52_2F1R, A52_MONO): | 638 | case CONVERT (A52_2F1R, A52_MONO): |
639 | zero (samples + 512); | 639 | zero (samples + 512); |
640 | case CONVERT (A52_CHANNEL, A52_MONO): | 640 | case CONVERT (A52_CHANNEL, A52_MONO): |
641 | case CONVERT (A52_STEREO, A52_MONO): | 641 | case CONVERT (A52_STEREO, A52_MONO): |
642 | zero (samples + 256); | 642 | zero (samples + 256); |
643 | break; | 643 | break; |
644 | 644 | ||
645 | case CONVERT (A52_3F2R, A52_STEREO): | 645 | case CONVERT (A52_3F2R, A52_STEREO): |
646 | case CONVERT (A52_3F2R, A52_DOLBY): | 646 | case CONVERT (A52_3F2R, A52_DOLBY): |
647 | zero (samples + 1024); | 647 | zero (samples + 1024); |
648 | case CONVERT (A52_3F1R, A52_STEREO): | 648 | case CONVERT (A52_3F1R, A52_STEREO): |
649 | case CONVERT (A52_3F1R, A52_DOLBY): | 649 | case CONVERT (A52_3F1R, A52_DOLBY): |
650 | zero (samples + 768); | 650 | zero (samples + 768); |
651 | case CONVERT (A52_3F, A52_STEREO): | 651 | case CONVERT (A52_3F, A52_STEREO): |
652 | case CONVERT (A52_3F, A52_DOLBY): | 652 | case CONVERT (A52_3F, A52_DOLBY): |
653 | mix_3to2: | 653 | mix_3to2: |
654 | memcpy (samples + 512, samples + 256, 256 * sizeof (sample_t)); | 654 | memcpy (samples + 512, samples + 256, 256 * sizeof (sample_t)); |
655 | zero (samples + 256); | 655 | zero (samples + 256); |
656 | break; | 656 | break; |
657 | 657 | ||
658 | case CONVERT (A52_2F2R, A52_STEREO): | 658 | case CONVERT (A52_2F2R, A52_STEREO): |
659 | case CONVERT (A52_2F2R, A52_DOLBY): | 659 | case CONVERT (A52_2F2R, A52_DOLBY): |
660 | zero (samples + 768); | 660 | zero (samples + 768); |
661 | case CONVERT (A52_2F1R, A52_STEREO): | 661 | case CONVERT (A52_2F1R, A52_STEREO): |
662 | case CONVERT (A52_2F1R, A52_DOLBY): | 662 | case CONVERT (A52_2F1R, A52_DOLBY): |
663 | zero (samples + 512); | 663 | zero (samples + 512); |
664 | break; | 664 | break; |
665 | 665 | ||
666 | case CONVERT (A52_3F2R, A52_3F): | 666 | case CONVERT (A52_3F2R, A52_3F): |
667 | zero (samples + 1024); | 667 | zero (samples + 1024); |
668 | case CONVERT (A52_3F1R, A52_3F): | 668 | case CONVERT (A52_3F1R, A52_3F): |
669 | case CONVERT (A52_2F2R, A52_2F1R): | 669 | case CONVERT (A52_2F2R, A52_2F1R): |
670 | zero (samples + 768); | 670 | zero (samples + 768); |
671 | break; | 671 | break; |
672 | 672 | ||
673 | case CONVERT (A52_3F2R, A52_3F1R): | 673 | case CONVERT (A52_3F2R, A52_3F1R): |
674 | zero (samples + 1024); | 674 | zero (samples + 1024); |
675 | break; | 675 | break; |
676 | 676 | ||
677 | case CONVERT (A52_3F2R, A52_2F1R): | 677 | case CONVERT (A52_3F2R, A52_2F1R): |
678 | zero (samples + 1024); | 678 | zero (samples + 1024); |
679 | case CONVERT (A52_3F1R, A52_2F1R): | 679 | case CONVERT (A52_3F1R, A52_2F1R): |
680 | mix_31to21: | 680 | mix_31to21: |
681 | memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t)); | 681 | memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t)); |
682 | goto mix_3to2; | 682 | goto mix_3to2; |
683 | 683 | ||
684 | case CONVERT (A52_3F2R, A52_2F2R): | 684 | case CONVERT (A52_3F2R, A52_2F2R): |
685 | memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t)); | 685 | memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t)); |
686 | goto mix_31to21; | 686 | goto mix_31to21; |
687 | } | 687 | } |
688 | } | 688 | } |
diff --git a/apps/codecs/liba52/imdct.c b/apps/codecs/liba52/imdct.c index 4483bd0667..9aaa9d85ad 100644 --- a/apps/codecs/liba52/imdct.c +++ b/apps/codecs/liba52/imdct.c | |||
@@ -114,73 +114,73 @@ static inline void ifft4 (complex_t * buf) | |||
114 | */ | 114 | */ |
115 | /* basic radix-2 ifft butterfly */ | 115 | /* basic radix-2 ifft butterfly */ |
116 | 116 | ||
117 | #define BUTTERFLY_0(t0,t1,W0,W1,d0,d1) do { \ | 117 | #define BUTTERFLY_0(t0,t1,W0,W1,d0,d1) do { \ |
118 | t0 = MUL (W1, d1) + MUL (W0, d0); \ | 118 | t0 = MUL (W1, d1) + MUL (W0, d0); \ |
119 | t1 = MUL (W0, d1) - MUL (W1, d0); \ | 119 | t1 = MUL (W0, d1) - MUL (W1, d0); \ |
120 | } while (0) | 120 | } while (0) |
121 | 121 | ||
122 | /* radix-2 ifft butterfly with bias */ | 122 | /* radix-2 ifft butterfly with bias */ |
123 | 123 | ||
124 | #define BUTTERFLY_B(t0,t1,W0,W1,d0,d1) do { \ | 124 | #define BUTTERFLY_B(t0,t1,W0,W1,d0,d1) do { \ |
125 | t0 = BIAS (MUL (d1, W1) + MUL (d0, W0)); \ | 125 | t0 = BIAS (MUL (d1, W1) + MUL (d0, W0)); \ |
126 | t1 = BIAS (MUL (d1, W0) - MUL (d0, W1)); \ | 126 | t1 = BIAS (MUL (d1, W0) - MUL (d0, W1)); \ |
127 | } while (0) | 127 | } while (0) |
128 | 128 | ||
129 | /* the basic split-radix ifft butterfly */ | 129 | /* the basic split-radix ifft butterfly */ |
130 | 130 | ||
131 | #define BUTTERFLY(a0,a1,a2,a3,wr,wi) do { \ | 131 | #define BUTTERFLY(a0,a1,a2,a3,wr,wi) do { \ |
132 | BUTTERFLY_0 (tmp5, tmp6, wr, wi, a2.real, a2.imag); \ | 132 | BUTTERFLY_0 (tmp5, tmp6, wr, wi, a2.real, a2.imag); \ |
133 | BUTTERFLY_0 (tmp8, tmp7, wr, wi, a3.imag, a3.real); \ | 133 | BUTTERFLY_0 (tmp8, tmp7, wr, wi, a3.imag, a3.real); \ |
134 | tmp1 = tmp5 + tmp7; \ | 134 | tmp1 = tmp5 + tmp7; \ |
135 | tmp2 = tmp6 + tmp8; \ | 135 | tmp2 = tmp6 + tmp8; \ |
136 | tmp3 = tmp6 - tmp8; \ | 136 | tmp3 = tmp6 - tmp8; \ |
137 | tmp4 = tmp7 - tmp5; \ | 137 | tmp4 = tmp7 - tmp5; \ |
138 | a2.real = a0.real - tmp1; \ | 138 | a2.real = a0.real - tmp1; \ |
139 | a2.imag = a0.imag - tmp2; \ | 139 | a2.imag = a0.imag - tmp2; \ |
140 | a3.real = a1.real - tmp3; \ | 140 | a3.real = a1.real - tmp3; \ |
141 | a3.imag = a1.imag - tmp4; \ | 141 | a3.imag = a1.imag - tmp4; \ |
142 | a0.real += tmp1; \ | 142 | a0.real += tmp1; \ |
143 | a0.imag += tmp2; \ | 143 | a0.imag += tmp2; \ |
144 | a1.real += tmp3; \ | 144 | a1.real += tmp3; \ |
145 | a1.imag += tmp4; \ | 145 | a1.imag += tmp4; \ |
146 | } while (0) | 146 | } while (0) |
147 | 147 | ||
148 | /* split-radix ifft butterfly, specialized for wr=1 wi=0 */ | 148 | /* split-radix ifft butterfly, specialized for wr=1 wi=0 */ |
149 | 149 | ||
150 | #define BUTTERFLY_ZERO(a0,a1,a2,a3) do { \ | 150 | #define BUTTERFLY_ZERO(a0,a1,a2,a3) do { \ |
151 | tmp1 = a2.real + a3.real; \ | 151 | tmp1 = a2.real + a3.real; \ |
152 | tmp2 = a2.imag + a3.imag; \ | 152 | tmp2 = a2.imag + a3.imag; \ |
153 | tmp3 = a2.imag - a3.imag; \ | 153 | tmp3 = a2.imag - a3.imag; \ |
154 | tmp4 = a3.real - a2.real; \ | 154 | tmp4 = a3.real - a2.real; \ |
155 | a2.real = a0.real - tmp1; \ | 155 | a2.real = a0.real - tmp1; \ |
156 | a2.imag = a0.imag - tmp2; \ | 156 | a2.imag = a0.imag - tmp2; \ |
157 | a3.real = a1.real - tmp3; \ | 157 | a3.real = a1.real - tmp3; \ |
158 | a3.imag = a1.imag - tmp4; \ | 158 | a3.imag = a1.imag - tmp4; \ |
159 | a0.real += tmp1; \ | 159 | a0.real += tmp1; \ |
160 | a0.imag += tmp2; \ | 160 | a0.imag += tmp2; \ |
161 | a1.real += tmp3; \ | 161 | a1.real += tmp3; \ |
162 | a1.imag += tmp4; \ | 162 | a1.imag += tmp4; \ |
163 | } while (0) | 163 | } while (0) |
164 | 164 | ||
165 | /* split-radix ifft butterfly, specialized for wr=wi */ | 165 | /* split-radix ifft butterfly, specialized for wr=wi */ |
166 | /* | 166 | /* |
167 | #define BUTTERFLY_HALF(a0,a1,a2,a3,w) do { \ | 167 | #define BUTTERFLY_HALF(a0,a1,a2,a3,w) do { \ |
168 | tmp5 = MUL (a2.real + a2.imag, w); \ | 168 | tmp5 = MUL (a2.real + a2.imag, w); \ |
169 | tmp6 = MUL (a2.imag - a2.real, w); \ | 169 | tmp6 = MUL (a2.imag - a2.real, w); \ |
170 | tmp7 = MUL (a3.real - a3.imag, w); \ | 170 | tmp7 = MUL (a3.real - a3.imag, w); \ |
171 | tmp8 = MUL (a3.imag + a3.real, w); \ | 171 | tmp8 = MUL (a3.imag + a3.real, w); \ |
172 | tmp1 = tmp5 + tmp7; \ | 172 | tmp1 = tmp5 + tmp7; \ |
173 | tmp2 = tmp6 + tmp8; \ | 173 | tmp2 = tmp6 + tmp8; \ |
174 | tmp3 = tmp6 - tmp8; \ | 174 | tmp3 = tmp6 - tmp8; \ |
175 | tmp4 = tmp7 - tmp5; \ | 175 | tmp4 = tmp7 - tmp5; \ |
176 | a2.real = a0.real - tmp1; \ | 176 | a2.real = a0.real - tmp1; \ |
177 | a2.imag = a0.imag - tmp2; \ | 177 | a2.imag = a0.imag - tmp2; \ |
178 | a3.real = a1.real - tmp3; \ | 178 | a3.real = a1.real - tmp3; \ |
179 | a3.imag = a1.imag - tmp4; \ | 179 | a3.imag = a1.imag - tmp4; \ |
180 | a0.real += tmp1; \ | 180 | a0.real += tmp1; \ |
181 | a0.imag += tmp2; \ | 181 | a0.imag += tmp2; \ |
182 | a1.real += tmp3; \ | 182 | a1.real += tmp3; \ |
183 | a1.imag += tmp4; \ | 183 | a1.imag += tmp4; \ |
184 | } while (0) | 184 | } while (0) |
185 | 185 | ||
186 | static inline void ifft8 (complex_t * buf) | 186 | static inline void ifft8 (complex_t * buf) |
@@ -212,13 +212,13 @@ static void ifft_pass (complex_t * buf, const sample_t * weight, int n) | |||
212 | i = n - 1; | 212 | i = n - 1; |
213 | 213 | ||
214 | do { | 214 | do { |
215 | BUTTERFLY (buf[0], buf1[0], buf2[0], buf3[0], | 215 | BUTTERFLY (buf[0], buf1[0], buf2[0], buf3[0], |
216 | weight[0], weight[2*i-n]); | 216 | weight[0], weight[2*i-n]); |
217 | buf++; | 217 | buf++; |
218 | buf1++; | 218 | buf1++; |
219 | buf2++; | 219 | buf2++; |
220 | buf3++; | 220 | buf3++; |
221 | weight++; | 221 | weight++; |
222 | } while (--i); | 222 | } while (--i); |
223 | } | 223 | } |
224 | 224 | ||
@@ -264,7 +264,7 @@ void a52_imdct_512 (sample_t * data, sample_t * delay) | |||
264 | sample_t t_r, t_i, a_r, a_i, b_r, b_i, w_1, w_2; | 264 | sample_t t_r, t_i, a_r, a_i, b_r, b_i, w_1, w_2; |
265 | const sample_t * window = a52_imdct_window; | 265 | const sample_t * window = a52_imdct_window; |
266 | FFTComplex buf[128]; | 266 | FFTComplex buf[128]; |
267 | 267 | ||
268 | for (i = 0; i < 128; i++) { | 268 | for (i = 0; i < 128; i++) { |
269 | k = fftorder[i]; | 269 | k = fftorder[i]; |
270 | t_r = pre1[i].real; | 270 | t_r = pre1[i].real; |
@@ -357,7 +357,7 @@ static double besselI0 (double x) | |||
357 | int i = 100; | 357 | int i = 100; |
358 | 358 | ||
359 | do | 359 | do |
360 | bessel = bessel * x / (i * i) + 1; | 360 | bessel = bessel * x / (i * i) + 1; |
361 | while (--i); | 361 | while (--i); |
362 | return bessel; | 362 | return bessel; |
363 | } | 363 | } |
@@ -376,13 +376,13 @@ void a52_imdct_init (uint32_t mm_accel) | |||
376 | /* compute imdct window - kaiser-bessel derived window, alpha = 5.0 */ | 376 | /* compute imdct window - kaiser-bessel derived window, alpha = 5.0 */ |
377 | /* sum = 0; | 377 | /* sum = 0; |
378 | for (i = 0; i < 256; i++) { | 378 | for (i = 0; i < 256; i++) { |
379 | sum += besselI0 (i * (256 - i) * (5 * M_PI / 256) * (5 * M_PI / 256)); | 379 | sum += besselI0 (i * (256 - i) * (5 * M_PI / 256) * (5 * M_PI / 256)); |
380 | local_imdct_window[i] = sum; | 380 | local_imdct_window[i] = sum; |
381 | } | 381 | } |
382 | sum++; | 382 | sum++; |
383 | */ | 383 | */ |
384 | /* for (i = 0; i < 256; i++) | 384 | /* for (i = 0; i < 256; i++) |
385 | a52_imdct_window[i] = SAMPLE (sqrt (local_imdct_window[i] / sum)); | 385 | a52_imdct_window[i] = SAMPLE (sqrt (local_imdct_window[i] / sum)); |
386 | 386 | ||
387 | printf("static sample_t a52_imdct_window[256]={"); | 387 | printf("static sample_t a52_imdct_window[256]={"); |
388 | for (i=0;i<256;i++) { | 388 | for (i=0;i<256;i++) { |
@@ -393,26 +393,26 @@ void a52_imdct_init (uint32_t mm_accel) | |||
393 | */ | 393 | */ |
394 | 394 | ||
395 | /* for (i = 0; i < 3; i++) | 395 | /* for (i = 0; i < 3; i++) |
396 | roots16[i] = SAMPLE (cos ((M_PI / 8) * (i + 1))); | 396 | roots16[i] = SAMPLE (cos ((M_PI / 8) * (i + 1))); |
397 | 397 | ||
398 | printf("static sample_t roots16[3]={%d,%d,%d};\n\n",roots16[0],roots16[1],roots16[2]); | 398 | printf("static sample_t roots16[3]={%d,%d,%d};\n\n",roots16[0],roots16[1],roots16[2]); |
399 | 399 | ||
400 | for (i = 0; i < 7; i++) | 400 | for (i = 0; i < 7; i++) |
401 | roots32[i] = SAMPLE (cos ((M_PI / 16) * (i + 1))); | 401 | roots32[i] = SAMPLE (cos ((M_PI / 16) * (i + 1))); |
402 | 402 | ||
403 | printf("static sample_t roots32[7]={"); | 403 | printf("static sample_t roots32[7]={"); |
404 | for (i=0;i<7;i++) { printf("%d%s",roots32[i],(i < 6 ? "," : "")); } | 404 | for (i=0;i<7;i++) { printf("%d%s",roots32[i],(i < 6 ? "," : "")); } |
405 | printf("};\n"); | 405 | printf("};\n"); |
406 | 406 | ||
407 | for (i = 0; i < 15; i++) | 407 | for (i = 0; i < 15; i++) |
408 | roots64[i] = SAMPLE (cos ((M_PI / 32) * (i + 1))); | 408 | roots64[i] = SAMPLE (cos ((M_PI / 32) * (i + 1))); |
409 | 409 | ||
410 | printf("static sample_t roots64[15]={"); | 410 | printf("static sample_t roots64[15]={"); |
411 | for (i=0;i<15;i++) { printf("%d%s",roots64[i],(i < 14 ? "," : "")); } | 411 | for (i=0;i<15;i++) { printf("%d%s",roots64[i],(i < 14 ? "," : "")); } |
412 | printf("};\n"); | 412 | printf("};\n"); |
413 | 413 | ||
414 | for (i = 0; i < 31; i++) | 414 | for (i = 0; i < 31; i++) |
415 | roots128[i] = SAMPLE (cos ((M_PI / 64) * (i + 1))); | 415 | roots128[i] = SAMPLE (cos ((M_PI / 64) * (i + 1))); |
416 | 416 | ||
417 | printf("static sample_t roots128[31]={"); | 417 | printf("static sample_t roots128[31]={"); |
418 | for (i=0;i<31;i++) { printf("%d%s",roots128[i],(i < 30 ? "," : "")); } | 418 | for (i=0;i<31;i++) { printf("%d%s",roots128[i],(i < 30 ? "," : "")); } |
@@ -420,15 +420,15 @@ void a52_imdct_init (uint32_t mm_accel) | |||
420 | */ | 420 | */ |
421 | /* | 421 | /* |
422 | for (i = 0; i < 64; i++) { | 422 | for (i = 0; i < 64; i++) { |
423 | k = fftorder[i] / 2 + 64; | 423 | k = fftorder[i] / 2 + 64; |
424 | pre1[i].real = SAMPLE (cos ((M_PI / 256) * (k - 0.25))); | 424 | pre1[i].real = SAMPLE (cos ((M_PI / 256) * (k - 0.25))); |
425 | pre1[i].imag = SAMPLE (sin ((M_PI / 256) * (k - 0.25))); | 425 | pre1[i].imag = SAMPLE (sin ((M_PI / 256) * (k - 0.25))); |
426 | } | 426 | } |
427 | 427 | ||
428 | for (i = 64; i < 128; i++) { | 428 | for (i = 64; i < 128; i++) { |
429 | k = fftorder[i] / 2 + 64; | 429 | k = fftorder[i] / 2 + 64; |
430 | pre1[i].real = SAMPLE (-cos ((M_PI / 256) * (k - 0.25))); | 430 | pre1[i].real = SAMPLE (-cos ((M_PI / 256) * (k - 0.25))); |
431 | pre1[i].imag = SAMPLE (-sin ((M_PI / 256) * (k - 0.25))); | 431 | pre1[i].imag = SAMPLE (-sin ((M_PI / 256) * (k - 0.25))); |
432 | } | 432 | } |
433 | 433 | ||
434 | printf("static complex_t pre1[128]={"); | 434 | printf("static complex_t pre1[128]={"); |
@@ -437,8 +437,8 @@ void a52_imdct_init (uint32_t mm_accel) | |||
437 | */ | 437 | */ |
438 | /* | 438 | /* |
439 | for (i = 0; i < 64; i++) { | 439 | for (i = 0; i < 64; i++) { |
440 | post1[i].real = SAMPLE (cos ((M_PI / 256) * (i + 0.5))); | 440 | post1[i].real = SAMPLE (cos ((M_PI / 256) * (i + 0.5))); |
441 | post1[i].imag = SAMPLE (sin ((M_PI / 256) * (i + 0.5))); | 441 | post1[i].imag = SAMPLE (sin ((M_PI / 256) * (i + 0.5))); |
442 | } | 442 | } |
443 | 443 | ||
444 | printf("static complex_t post1[64]={"); | 444 | printf("static complex_t post1[64]={"); |
@@ -448,9 +448,9 @@ void a52_imdct_init (uint32_t mm_accel) | |||
448 | 448 | ||
449 | /* | 449 | /* |
450 | for (i = 0; i < 64; i++) { | 450 | for (i = 0; i < 64; i++) { |
451 | k = fftorder[i] / 4; | 451 | k = fftorder[i] / 4; |
452 | pre2[i].real = SAMPLE (cos ((M_PI / 128) * (k - 0.25))); | 452 | pre2[i].real = SAMPLE (cos ((M_PI / 128) * (k - 0.25))); |
453 | pre2[i].imag = SAMPLE (sin ((M_PI / 128) * (k - 0.25))); | 453 | pre2[i].imag = SAMPLE (sin ((M_PI / 128) * (k - 0.25))); |
454 | } | 454 | } |
455 | 455 | ||
456 | printf("static complex_t pre2[64]={"); | 456 | printf("static complex_t pre2[64]={"); |
@@ -458,8 +458,8 @@ void a52_imdct_init (uint32_t mm_accel) | |||
458 | printf("};\n"); | 458 | printf("};\n"); |
459 | 459 | ||
460 | for (i = 0; i < 32; i++) { | 460 | for (i = 0; i < 32; i++) { |
461 | post2[i].real = SAMPLE (cos ((M_PI / 128) * (i + 0.5))); | 461 | post2[i].real = SAMPLE (cos ((M_PI / 128) * (i + 0.5))); |
462 | post2[i].imag = SAMPLE (sin ((M_PI / 128) * (i + 0.5))); | 462 | post2[i].imag = SAMPLE (sin ((M_PI / 128) * (i + 0.5))); |
463 | } | 463 | } |
464 | 464 | ||
465 | printf("static complex_t post2[32]={"); | 465 | printf("static complex_t post2[32]={"); |
@@ -470,17 +470,17 @@ void a52_imdct_init (uint32_t mm_accel) | |||
470 | #ifdef LIBA52_DJBFFT | 470 | #ifdef LIBA52_DJBFFT |
471 | if (mm_accel & MM_ACCEL_DJBFFT) { | 471 | if (mm_accel & MM_ACCEL_DJBFFT) { |
472 | #ifndef LIBA52_DOUBLE | 472 | #ifndef LIBA52_DOUBLE |
473 | ifft128 = (void (*) (complex_t *)) fftc4_un128; | 473 | ifft128 = (void (*) (complex_t *)) fftc4_un128; |
474 | ifft64 = (void (*) (complex_t *)) fftc4_un64; | 474 | ifft64 = (void (*) (complex_t *)) fftc4_un64; |
475 | #else | 475 | #else |
476 | ifft128 = (void (*) (complex_t *)) fftc8_un128; | 476 | ifft128 = (void (*) (complex_t *)) fftc8_un128; |
477 | ifft64 = (void (*) (complex_t *)) fftc8_un64; | 477 | ifft64 = (void (*) (complex_t *)) fftc8_un64; |
478 | #endif | 478 | #endif |
479 | } else | 479 | } else |
480 | #endif | 480 | #endif |
481 | { | 481 | { |
482 | ifft128 = ifft128_c; | 482 | ifft128 = ifft128_c; |
483 | ifft64 = ifft64_c; | 483 | ifft64 = ifft64_c; |
484 | } | 484 | } |
485 | */ | 485 | */ |
486 | } | 486 | } |
diff --git a/apps/codecs/liba52/imdct_lookups.h b/apps/codecs/liba52/imdct_lookups.h index 88e0ec3fd8..769623ff53 100644 --- a/apps/codecs/liba52/imdct_lookups.h +++ b/apps/codecs/liba52/imdct_lookups.h | |||
@@ -1,5 +1,5 @@ | |||
1 | static const sample_t a52_imdct_window[256]ICONST_ATTR={ | 1 | static const sample_t a52_imdct_window[256]ICONST_ATTR={ |
2 | 146020,261886,393529,545197,719447,918478,1144416,1399394,1685589,2005234,2360623,2754115,3188134,3665170,4187773,4758556, 5380193,6055411,6786995,7577779,8430645,9348521,10334375,11391212,12522071,13730020,15018150,16389576,17847424,19394833,21034947,22770912, 24605865,26542938,28585242,30735872,32997891,35374332,37868188,40482408,43219889,46083473,49075937,52199993,55458273,58853331,62387636,66063559, 69883377,73849259,77963266,82227341,86643307,91212859,95937560,100818835,105857968,111056092,116414194,121933098,127613474,133455822,139460477,145627601, 151957182,158449029,165102772,171917855,178893540,186028900,193322822,200774000,208380940,216141958,224055176,232118527,240329753,248686407,257185854,265825270, 274601649,283511802,292552357,301719768,311010314,320420105,329945084,339581031,349323572,359168178,369110174,379144743,389266934,399471665,409753732,420107815, 430528483,441010205,451547355,462134219,472765003,483433845,494134818,504861939,515609181,526370480,537139740,547910849,558677680,569434108,580174011,590891284, 601579849,612233658,622846709,633413050,643926788,654382103,664773249,675094567,685340494,695505569,705584441,715571877,725462772,735252152,744935184,754507184, 763963620,773300119,782512477,791596659,800548807,809365245,818042484,826577226,834966364,843206992,851296404,859232096,867011771,874633340,882094922,889394844, 896531647,903504079,910311101,916951881,923425798,929732436,935871584,941843233,947647575,953284997,958756080,964061593,969202490,974179906,978995149,983649698, 988145195,992483442,996666390,1000696136,1004574919,1008305104,1011889185,1015329772,1018629583,1021791439,1024818257,1027713038,1030478862,1033118881,1035636308,1038034411, 1040316504,1042485942,1044546109,1046500412,1048352275,1050105129,1051762405,1053327531,1054803917,1056194958,1057504020,1058734435,1059889501,1060972468,1061986539,1062934861, 1063820523,1064646551,1065415903,1066131467,1066796055,1067412403,1067983168,1068510924,1068998160,1069447282,1069860607,1070240366,1070588702,1070907668,1071199230,1071465266, 1071707567,1071927836,1072127692,1072308670,1072472221,1072619716,1072752449,1072871635,1072978415,1073073858,1073158963,1073234663,1073301826,1073361257,1073413702,1073459852, 1073500344,1073535763,1073566646,1073593486,1073616731,1073636791,1073654036,1073668804,1073681398,1073692090,1073701126,1073708726,1073715084,1073720373,1073724748,1073728344, 1073731279,1073733657,1073735568,1073737090,1073738291,1073739229,1073739951,1073740500,1073740912,1073741214,1073741431,1073741582,1073741685,1073741751,1073741792,1073741814 | 2 | 146020,261886,393529,545197,719447,918478,1144416,1399394,1685589,2005234,2360623,2754115,3188134,3665170,4187773,4758556, 5380193,6055411,6786995,7577779,8430645,9348521,10334375,11391212,12522071,13730020,15018150,16389576,17847424,19394833,21034947,22770912, 24605865,26542938,28585242,30735872,32997891,35374332,37868188,40482408,43219889,46083473,49075937,52199993,55458273,58853331,62387636,66063559, 69883377,73849259,77963266,82227341,86643307,91212859,95937560,100818835,105857968,111056092,116414194,121933098,127613474,133455822,139460477,145627601, 151957182,158449029,165102772,171917855,178893540,186028900,193322822,200774000,208380940,216141958,224055176,232118527,240329753,248686407,257185854,265825270, 274601649,283511802,292552357,301719768,311010314,320420105,329945084,339581031,349323572,359168178,369110174,379144743,389266934,399471665,409753732,420107815, 430528483,441010205,451547355,462134219,472765003,483433845,494134818,504861939,515609181,526370480,537139740,547910849,558677680,569434108,580174011,590891284, 601579849,612233658,622846709,633413050,643926788,654382103,664773249,675094567,685340494,695505569,705584441,715571877,725462772,735252152,744935184,754507184, 763963620,773300119,782512477,791596659,800548807,809365245,818042484,826577226,834966364,843206992,851296404,859232096,867011771,874633340,882094922,889394844, 896531647,903504079,910311101,916951881,923425798,929732436,935871584,941843233,947647575,953284997,958756080,964061593,969202490,974179906,978995149,983649698, 988145195,992483442,996666390,1000696136,1004574919,1008305104,1011889185,1015329772,1018629583,1021791439,1024818257,1027713038,1030478862,1033118881,1035636308,1038034411, 1040316504,1042485942,1044546109,1046500412,1048352275,1050105129,1051762405,1053327531,1054803917,1056194958,1057504020,1058734435,1059889501,1060972468,1061986539,1062934861, 1063820523,1064646551,1065415903,1066131467,1066796055,1067412403,1067983168,1068510924,1068998160,1069447282,1069860607,1070240366,1070588702,1070907668,1071199230,1071465266, 1071707567,1071927836,1072127692,1072308670,1072472221,1072619716,1072752449,1072871635,1072978415,1073073858,1073158963,1073234663,1073301826,1073361257,1073413702,1073459852, 1073500344,1073535763,1073566646,1073593486,1073616731,1073636791,1073654036,1073668804,1073681398,1073692090,1073701126,1073708726,1073715084,1073720373,1073724748,1073728344, 1073731279,1073733657,1073735568,1073737090,1073738291,1073739229,1073739951,1073740500,1073740912,1073741214,1073741431,1073741582,1073741685,1073741751,1073741792,1073741814 |
3 | }; | 3 | }; |
4 | 4 | ||
5 | static const sample_t roots16[3]ICONST_ATTR={992008094,759250124,410903206}; | 5 | static const sample_t roots16[3]ICONST_ATTR={992008094,759250124,410903206}; |
diff --git a/apps/codecs/liba52/mm_accel.h b/apps/codecs/liba52/mm_accel.h index f569787aec..8005930cc6 100644 --- a/apps/codecs/liba52/mm_accel.h +++ b/apps/codecs/liba52/mm_accel.h | |||
@@ -25,12 +25,12 @@ | |||
25 | #define MM_ACCEL_H | 25 | #define MM_ACCEL_H |
26 | 26 | ||
27 | /* generic accelerations */ | 27 | /* generic accelerations */ |
28 | #define MM_ACCEL_DJBFFT 0x00000001 | 28 | #define MM_ACCEL_DJBFFT 0x00000001 |
29 | 29 | ||
30 | /* x86 accelerations */ | 30 | /* x86 accelerations */ |
31 | #define MM_ACCEL_X86_MMX 0x80000000 | 31 | #define MM_ACCEL_X86_MMX 0x80000000 |
32 | #define MM_ACCEL_X86_3DNOW 0x40000000 | 32 | #define MM_ACCEL_X86_3DNOW 0x40000000 |
33 | #define MM_ACCEL_X86_MMXEXT 0x20000000 | 33 | #define MM_ACCEL_X86_MMXEXT 0x20000000 |
34 | 34 | ||
35 | uint32_t mm_accel (void); | 35 | uint32_t mm_accel (void); |
36 | 36 | ||
diff --git a/apps/codecs/liba52/parse.c b/apps/codecs/liba52/parse.c index f2b0ce4f6d..fd7e13006d 100644 --- a/apps/codecs/liba52/parse.c +++ b/apps/codecs/liba52/parse.c | |||
@@ -66,19 +66,19 @@ a52_state_t * a52_init (uint32_t mm_accel) | |||
66 | simultenously. NOTE, you also need to remove comments in a52_free. | 66 | simultenously. NOTE, you also need to remove comments in a52_free. |
67 | state = (a52_state_t *) malloc (sizeof (a52_state_t)); | 67 | state = (a52_state_t *) malloc (sizeof (a52_state_t)); |
68 | if (state == NULL) | 68 | if (state == NULL) |
69 | return NULL; | 69 | return NULL; |
70 | 70 | ||
71 | state->samples = (sample_t *) memalign (16, 256 * 12 * sizeof (sample_t)); | 71 | state->samples = (sample_t *) memalign (16, 256 * 12 * sizeof (sample_t)); |
72 | if (state->samples == NULL) { | 72 | if (state->samples == NULL) { |
73 | free (state); | 73 | free (state); |
74 | return NULL; | 74 | return NULL; |
75 | } | 75 | } |
76 | 76 | ||
77 | */ | 77 | */ |
78 | state = &istate; | 78 | state = &istate; |
79 | state->samples = isamples; | 79 | state->samples = isamples; |
80 | for (i = 0; i < 256 * 12; i++) | 80 | for (i = 0; i < 256 * 12; i++) |
81 | state->samples[i] = 0; | 81 | state->samples[i] = 0; |
82 | 82 | ||
83 | state->downmixed = 1; | 83 | state->downmixed = 1; |
84 | 84 | ||
@@ -95,57 +95,57 @@ sample_t * a52_samples (a52_state_t * state) | |||
95 | } | 95 | } |
96 | 96 | ||
97 | int a52_syncinfo (uint8_t * buf, int * flags, | 97 | int a52_syncinfo (uint8_t * buf, int * flags, |
98 | int * sample_rate, int * bit_rate) | 98 | int * sample_rate, int * bit_rate) |
99 | { | 99 | { |
100 | static int rate[] = { 32, 40, 48, 56, 64, 80, 96, 112, | 100 | static int rate[] = { 32, 40, 48, 56, 64, 80, 96, 112, |
101 | 128, 160, 192, 224, 256, 320, 384, 448, | 101 | 128, 160, 192, 224, 256, 320, 384, 448, |
102 | 512, 576, 640}; | 102 | 512, 576, 640}; |
103 | static uint8_t lfeon[8] = {0x10, 0x10, 0x04, 0x04, 0x04, 0x01, 0x04, 0x01}; | 103 | static uint8_t lfeon[8] = {0x10, 0x10, 0x04, 0x04, 0x04, 0x01, 0x04, 0x01}; |
104 | int frmsizecod; | 104 | int frmsizecod; |
105 | int bitrate; | 105 | int bitrate; |
106 | int half; | 106 | int half; |
107 | int acmod; | 107 | int acmod; |
108 | 108 | ||
109 | if ((buf[0] != 0x0b) || (buf[1] != 0x77)) /* syncword */ | 109 | if ((buf[0] != 0x0b) || (buf[1] != 0x77)) /* syncword */ |
110 | return 0; | 110 | return 0; |
111 | 111 | ||
112 | if (buf[5] >= 0x60) /* bsid >= 12 */ | 112 | if (buf[5] >= 0x60) /* bsid >= 12 */ |
113 | return 0; | 113 | return 0; |
114 | half = halfrate[buf[5] >> 3]; | 114 | half = halfrate[buf[5] >> 3]; |
115 | 115 | ||
116 | /* acmod, dsurmod and lfeon */ | 116 | /* acmod, dsurmod and lfeon */ |
117 | acmod = buf[6] >> 5; | 117 | acmod = buf[6] >> 5; |
118 | *flags = ((((buf[6] & 0xf8) == 0x50) ? A52_DOLBY : acmod) | | 118 | *flags = ((((buf[6] & 0xf8) == 0x50) ? A52_DOLBY : acmod) | |
119 | ((buf[6] & lfeon[acmod]) ? A52_LFE : 0)); | 119 | ((buf[6] & lfeon[acmod]) ? A52_LFE : 0)); |
120 | 120 | ||
121 | frmsizecod = buf[4] & 63; | 121 | frmsizecod = buf[4] & 63; |
122 | if (frmsizecod >= 38) | 122 | if (frmsizecod >= 38) |
123 | return 0; | 123 | return 0; |
124 | bitrate = rate [frmsizecod >> 1]; | 124 | bitrate = rate [frmsizecod >> 1]; |
125 | *bit_rate = (bitrate * 1000) >> half; | 125 | *bit_rate = (bitrate * 1000) >> half; |
126 | 126 | ||
127 | switch (buf[4] & 0xc0) { | 127 | switch (buf[4] & 0xc0) { |
128 | case 0: | 128 | case 0: |
129 | *sample_rate = 48000 >> half; | 129 | *sample_rate = 48000 >> half; |
130 | return 4 * bitrate; | 130 | return 4 * bitrate; |
131 | case 0x40: | 131 | case 0x40: |
132 | *sample_rate = 44100 >> half; | 132 | *sample_rate = 44100 >> half; |
133 | return 2 * (320 * bitrate / 147 + (frmsizecod & 1)); | 133 | return 2 * (320 * bitrate / 147 + (frmsizecod & 1)); |
134 | case 0x80: | 134 | case 0x80: |
135 | *sample_rate = 32000 >> half; | 135 | *sample_rate = 32000 >> half; |
136 | return 6 * bitrate; | 136 | return 6 * bitrate; |
137 | default: | 137 | default: |
138 | return 0; | 138 | return 0; |
139 | } | 139 | } |
140 | } | 140 | } |
141 | 141 | ||
142 | int a52_frame (a52_state_t * state, uint8_t * buf, int * flags, | 142 | int a52_frame (a52_state_t * state, uint8_t * buf, int * flags, |
143 | level_t * level, sample_t bias) | 143 | level_t * level, sample_t bias) |
144 | { | 144 | { |
145 | static level_t clev[4] = { LEVEL (LEVEL_3DB), LEVEL (LEVEL_45DB), | 145 | static level_t clev[4] = { LEVEL (LEVEL_3DB), LEVEL (LEVEL_45DB), |
146 | LEVEL (LEVEL_6DB), LEVEL (LEVEL_45DB) }; | 146 | LEVEL (LEVEL_6DB), LEVEL (LEVEL_45DB) }; |
147 | static level_t slev[4] = { LEVEL (LEVEL_3DB), LEVEL (LEVEL_6DB), | 147 | static level_t slev[4] = { LEVEL (LEVEL_3DB), LEVEL (LEVEL_6DB), |
148 | 0, LEVEL (LEVEL_6DB) }; | 148 | 0, LEVEL (LEVEL_6DB) }; |
149 | int chaninfo; | 149 | int chaninfo; |
150 | int acmod; | 150 | int acmod; |
151 | 151 | ||
@@ -154,27 +154,27 @@ int a52_frame (a52_state_t * state, uint8_t * buf, int * flags, | |||
154 | state->acmod = acmod = buf[6] >> 5; | 154 | state->acmod = acmod = buf[6] >> 5; |
155 | 155 | ||
156 | a52_bitstream_set_ptr (state, buf + 6); | 156 | a52_bitstream_set_ptr (state, buf + 6); |
157 | bitstream_get (state, 3); /* skip acmod we already parsed */ | 157 | bitstream_get (state, 3); /* skip acmod we already parsed */ |
158 | 158 | ||
159 | if ((acmod == 2) && (bitstream_get (state, 2) == 2)) /* dsurmod */ | 159 | if ((acmod == 2) && (bitstream_get (state, 2) == 2)) /* dsurmod */ |
160 | acmod = A52_DOLBY; | 160 | acmod = A52_DOLBY; |
161 | 161 | ||
162 | state->clev = state->slev = 0; | 162 | state->clev = state->slev = 0; |
163 | 163 | ||
164 | if ((acmod & 1) && (acmod != 1)) | 164 | if ((acmod & 1) && (acmod != 1)) |
165 | state->clev = clev[bitstream_get (state, 2)]; /* cmixlev */ | 165 | state->clev = clev[bitstream_get (state, 2)]; /* cmixlev */ |
166 | 166 | ||
167 | if (acmod & 4) | 167 | if (acmod & 4) |
168 | state->slev = slev[bitstream_get (state, 2)]; /* surmixlev */ | 168 | state->slev = slev[bitstream_get (state, 2)]; /* surmixlev */ |
169 | 169 | ||
170 | state->lfeon = bitstream_get (state, 1); | 170 | state->lfeon = bitstream_get (state, 1); |
171 | 171 | ||
172 | state->output = a52_downmix_init (acmod, *flags, level, | 172 | state->output = a52_downmix_init (acmod, *flags, level, |
173 | state->clev, state->slev); | 173 | state->clev, state->slev); |
174 | if (state->output < 0) | 174 | if (state->output < 0) |
175 | return 1; | 175 | return 1; |
176 | if (state->lfeon && (*flags & A52_LFE)) | 176 | if (state->lfeon && (*flags & A52_LFE)) |
177 | state->output |= A52_LFE; | 177 | state->output |= A52_LFE; |
178 | *flags = state->output; | 178 | *flags = state->output; |
179 | /* the 2* compensates for differences in imdct */ | 179 | /* the 2* compensates for differences in imdct */ |
180 | state->dynrng = state->level = MUL_C (*level, 2); | 180 | state->dynrng = state->level = MUL_C (*level, 2); |
@@ -183,99 +183,99 @@ int a52_frame (a52_state_t * state, uint8_t * buf, int * flags, | |||
183 | state->dynrngcall = NULL; | 183 | state->dynrngcall = NULL; |
184 | state->cplba.deltbae = DELTA_BIT_NONE; | 184 | state->cplba.deltbae = DELTA_BIT_NONE; |
185 | state->ba[0].deltbae = state->ba[1].deltbae = state->ba[2].deltbae = | 185 | state->ba[0].deltbae = state->ba[1].deltbae = state->ba[2].deltbae = |
186 | state->ba[3].deltbae = state->ba[4].deltbae = DELTA_BIT_NONE; | 186 | state->ba[3].deltbae = state->ba[4].deltbae = DELTA_BIT_NONE; |
187 | 187 | ||
188 | chaninfo = !acmod; | 188 | chaninfo = !acmod; |
189 | do { | 189 | do { |
190 | bitstream_get (state, 5); /* dialnorm */ | 190 | bitstream_get (state, 5); /* dialnorm */ |
191 | if (bitstream_get (state, 1)) /* compre */ | 191 | if (bitstream_get (state, 1)) /* compre */ |
192 | bitstream_get (state, 8); /* compr */ | 192 | bitstream_get (state, 8); /* compr */ |
193 | if (bitstream_get (state, 1)) /* langcode */ | 193 | if (bitstream_get (state, 1)) /* langcode */ |
194 | bitstream_get (state, 8); /* langcod */ | 194 | bitstream_get (state, 8); /* langcod */ |
195 | if (bitstream_get (state, 1)) /* audprodie */ | 195 | if (bitstream_get (state, 1)) /* audprodie */ |
196 | bitstream_get (state, 7); /* mixlevel + roomtyp */ | 196 | bitstream_get (state, 7); /* mixlevel + roomtyp */ |
197 | } while (chaninfo--); | 197 | } while (chaninfo--); |
198 | 198 | ||
199 | bitstream_get (state, 2); /* copyrightb + origbs */ | 199 | bitstream_get (state, 2); /* copyrightb + origbs */ |
200 | 200 | ||
201 | if (bitstream_get (state, 1)) /* timecod1e */ | 201 | if (bitstream_get (state, 1)) /* timecod1e */ |
202 | bitstream_get (state, 14); /* timecod1 */ | 202 | bitstream_get (state, 14); /* timecod1 */ |
203 | if (bitstream_get (state, 1)) /* timecod2e */ | 203 | if (bitstream_get (state, 1)) /* timecod2e */ |
204 | bitstream_get (state, 14); /* timecod2 */ | 204 | bitstream_get (state, 14); /* timecod2 */ |
205 | 205 | ||
206 | if (bitstream_get (state, 1)) { /* addbsie */ | 206 | if (bitstream_get (state, 1)) { /* addbsie */ |
207 | int addbsil; | 207 | int addbsil; |
208 | 208 | ||
209 | addbsil = bitstream_get (state, 6); | 209 | addbsil = bitstream_get (state, 6); |
210 | do { | 210 | do { |
211 | bitstream_get (state, 8); /* addbsi */ | 211 | bitstream_get (state, 8); /* addbsi */ |
212 | } while (addbsil--); | 212 | } while (addbsil--); |
213 | } | 213 | } |
214 | 214 | ||
215 | return 0; | 215 | return 0; |
216 | } | 216 | } |
217 | 217 | ||
218 | void a52_dynrng (a52_state_t * state, | 218 | void a52_dynrng (a52_state_t * state, |
219 | level_t (* call) (level_t, void *), void * data) | 219 | level_t (* call) (level_t, void *), void * data) |
220 | { | 220 | { |
221 | state->dynrnge = 0; | 221 | state->dynrnge = 0; |
222 | if (call) { | 222 | if (call) { |
223 | state->dynrnge = 1; | 223 | state->dynrnge = 1; |
224 | state->dynrngcall = call; | 224 | state->dynrngcall = call; |
225 | state->dynrngdata = data; | 225 | state->dynrngdata = data; |
226 | } | 226 | } |
227 | } | 227 | } |
228 | 228 | ||
229 | static int parse_exponents (a52_state_t * state, int expstr, int ngrps, | 229 | static int parse_exponents (a52_state_t * state, int expstr, int ngrps, |
230 | uint8_t exponent, uint8_t * dest) | 230 | uint8_t exponent, uint8_t * dest) |
231 | { | 231 | { |
232 | int exps; | 232 | int exps; |
233 | 233 | ||
234 | while (ngrps--) { | 234 | while (ngrps--) { |
235 | exps = bitstream_get (state, 7); | 235 | exps = bitstream_get (state, 7); |
236 | 236 | ||
237 | exponent += exp_1[exps]; | 237 | exponent += exp_1[exps]; |
238 | if (exponent > 24) | 238 | if (exponent > 24) |
239 | return 1; | 239 | return 1; |
240 | 240 | ||
241 | switch (expstr) { | 241 | switch (expstr) { |
242 | case EXP_D45: | 242 | case EXP_D45: |
243 | *(dest++) = exponent; | 243 | *(dest++) = exponent; |
244 | *(dest++) = exponent; | 244 | *(dest++) = exponent; |
245 | case EXP_D25: | 245 | case EXP_D25: |
246 | *(dest++) = exponent; | 246 | *(dest++) = exponent; |
247 | case EXP_D15: | 247 | case EXP_D15: |
248 | *(dest++) = exponent; | 248 | *(dest++) = exponent; |
249 | } | 249 | } |
250 | 250 | ||
251 | exponent += exp_2[exps]; | 251 | exponent += exp_2[exps]; |
252 | if (exponent > 24) | 252 | if (exponent > 24) |
253 | return 1; | 253 | return 1; |
254 | 254 | ||
255 | switch (expstr) { | 255 | switch (expstr) { |
256 | case EXP_D45: | 256 | case EXP_D45: |
257 | *(dest++) = exponent; | 257 | *(dest++) = exponent; |
258 | *(dest++) = exponent; | 258 | *(dest++) = exponent; |
259 | case EXP_D25: | 259 | case EXP_D25: |
260 | *(dest++) = exponent; | 260 | *(dest++) = exponent; |
261 | case EXP_D15: | 261 | case EXP_D15: |
262 | *(dest++) = exponent; | 262 | *(dest++) = exponent; |
263 | } | 263 | } |
264 | 264 | ||
265 | exponent += exp_3[exps]; | 265 | exponent += exp_3[exps]; |
266 | if (exponent > 24) | 266 | if (exponent > 24) |
267 | return 1; | 267 | return 1; |
268 | 268 | ||
269 | switch (expstr) { | 269 | switch (expstr) { |
270 | case EXP_D45: | 270 | case EXP_D45: |
271 | *(dest++) = exponent; | 271 | *(dest++) = exponent; |
272 | *(dest++) = exponent; | 272 | *(dest++) = exponent; |
273 | case EXP_D25: | 273 | case EXP_D25: |
274 | *(dest++) = exponent; | 274 | *(dest++) = exponent; |
275 | case EXP_D15: | 275 | case EXP_D15: |
276 | *(dest++) = exponent; | 276 | *(dest++) = exponent; |
277 | } | 277 | } |
278 | } | 278 | } |
279 | 279 | ||
280 | return 0; | 280 | return 0; |
281 | } | 281 | } |
@@ -289,16 +289,16 @@ static int parse_deltba (a52_state_t * state, int8_t * deltba) | |||
289 | deltnseg = bitstream_get (state, 3); | 289 | deltnseg = bitstream_get (state, 3); |
290 | j = 0; | 290 | j = 0; |
291 | do { | 291 | do { |
292 | j += bitstream_get (state, 5); | 292 | j += bitstream_get (state, 5); |
293 | deltlen = bitstream_get (state, 4); | 293 | deltlen = bitstream_get (state, 4); |
294 | delta = bitstream_get (state, 3); | 294 | delta = bitstream_get (state, 3); |
295 | delta -= (delta >= 4) ? 3 : 4; | 295 | delta -= (delta >= 4) ? 3 : 4; |
296 | if (!deltlen) | 296 | if (!deltlen) |
297 | continue; | 297 | continue; |
298 | if (j + deltlen >= 50) | 298 | if (j + deltlen >= 50) |
299 | return 1; | 299 | return 1; |
300 | while (deltlen--) | 300 | while (deltlen--) |
301 | deltba[j++] = delta; | 301 | deltba[j++] = delta; |
302 | } while (deltnseg--); | 302 | } while (deltnseg--); |
303 | 303 | ||
304 | return 0; | 304 | return 0; |
@@ -309,12 +309,12 @@ static inline int zero_snr_offsets (int nfchans, a52_state_t * state) | |||
309 | int i; | 309 | int i; |
310 | 310 | ||
311 | if ((state->csnroffst) || | 311 | if ((state->csnroffst) || |
312 | (state->chincpl && state->cplba.bai >> 3) || /* cplinu, fsnroffst */ | 312 | (state->chincpl && state->cplba.bai >> 3) || /* cplinu, fsnroffst */ |
313 | (state->lfeon && state->lfeba.bai >> 3)) /* fsnroffst */ | 313 | (state->lfeon && state->lfeba.bai >> 3)) /* fsnroffst */ |
314 | return 0; | 314 | return 0; |
315 | for (i = 0; i < nfchans; i++) | 315 | for (i = 0; i < nfchans; i++) |
316 | if (state->ba[i].bai >> 3) /* fsnroffst */ | 316 | if (state->ba[i].bai >> 3) /* fsnroffst */ |
317 | return 0; | 317 | return 0; |
318 | return 1; | 318 | return 1; |
319 | } | 319 | } |
320 | 320 | ||
@@ -323,7 +323,7 @@ static inline int16_t dither_gen (a52_state_t * state) | |||
323 | int16_t nstate; | 323 | int16_t nstate; |
324 | 324 | ||
325 | nstate = dither_lut[state->lfsr_state >> 8] ^ (state->lfsr_state << 8); | 325 | nstate = dither_lut[state->lfsr_state >> 8] ^ (state->lfsr_state << 8); |
326 | 326 | ||
327 | state->lfsr_state = (uint16_t) nstate; | 327 | state->lfsr_state = (uint16_t) nstate; |
328 | 328 | ||
329 | return (3 * nstate) >> 2; | 329 | return (3 * nstate) >> 2; |
@@ -332,21 +332,21 @@ static inline int16_t dither_gen (a52_state_t * state) | |||
332 | #ifndef LIBA52_FIXED | 332 | #ifndef LIBA52_FIXED |
333 | #define COEFF(c,t,l,s,e) (c) = (t) * (s)[e] | 333 | #define COEFF(c,t,l,s,e) (c) = (t) * (s)[e] |
334 | #else | 334 | #else |
335 | #define COEFF(c,_t,_l,s,e) do { \ | 335 | #define COEFF(c,_t,_l,s,e) do { \ |
336 | quantizer_t t = (_t); \ | 336 | quantizer_t t = (_t); \ |
337 | level_t l = (_l); \ | 337 | level_t l = (_l); \ |
338 | int shift = e - 5; \ | 338 | int shift = e - 5; \ |
339 | sample_t tmp = t * (l >> 16) + ((t * (l & 0xffff)) >> 16); \ | 339 | sample_t tmp = t * (l >> 16) + ((t * (l & 0xffff)) >> 16); \ |
340 | if (shift >= 0) \ | 340 | if (shift >= 0) \ |
341 | (c) = tmp >> shift; \ | 341 | (c) = tmp >> shift; \ |
342 | else \ | 342 | else \ |
343 | (c) = tmp << -shift; \ | 343 | (c) = tmp << -shift; \ |
344 | } while (0) | 344 | } while (0) |
345 | #endif | 345 | #endif |
346 | 346 | ||
347 | static void coeff_get (a52_state_t * state, sample_t * coeff, | 347 | static void coeff_get (a52_state_t * state, sample_t * coeff, |
348 | expbap_t * expbap, quantizer_set_t * quant, | 348 | expbap_t * expbap, quantizer_set_t * quant, |
349 | level_t level, int dither, int end) | 349 | level_t level, int dither, int end) |
350 | { | 350 | { |
351 | int i; | 351 | int i; |
352 | uint8_t * exp; | 352 | uint8_t * exp; |
@@ -356,96 +356,96 @@ static void coeff_get (a52_state_t * state, sample_t * coeff, | |||
356 | sample_t factor[25]; | 356 | sample_t factor[25]; |
357 | 357 | ||
358 | for (i = 0; i <= 24; i++) | 358 | for (i = 0; i <= 24; i++) |
359 | factor[i] = scale_factor[i] * level; | 359 | factor[i] = scale_factor[i] * level; |
360 | #endif | 360 | #endif |
361 | 361 | ||
362 | exp = expbap->exp; | 362 | exp = expbap->exp; |
363 | bap = expbap->bap; | 363 | bap = expbap->bap; |
364 | 364 | ||
365 | for (i = 0; i < end; i++) { | 365 | for (i = 0; i < end; i++) { |
366 | int bapi; | 366 | int bapi; |
367 | 367 | ||
368 | bapi = bap[i]; | 368 | bapi = bap[i]; |
369 | switch (bapi) { | 369 | switch (bapi) { |
370 | case 0: | 370 | case 0: |
371 | if (dither) { | 371 | if (dither) { |
372 | COEFF (coeff[i], dither_gen (state), level, factor, exp[i]); | 372 | COEFF (coeff[i], dither_gen (state), level, factor, exp[i]); |
373 | continue; | 373 | continue; |
374 | } else { | 374 | } else { |
375 | coeff[i] = 0; | 375 | coeff[i] = 0; |
376 | continue; | 376 | continue; |
377 | } | 377 | } |
378 | 378 | ||
379 | case -1: | 379 | case -1: |
380 | if (quant->q1_ptr >= 0) { | 380 | if (quant->q1_ptr >= 0) { |
381 | COEFF (coeff[i], quant->q1[quant->q1_ptr--], level, | 381 | COEFF (coeff[i], quant->q1[quant->q1_ptr--], level, |
382 | factor, exp[i]); | 382 | factor, exp[i]); |
383 | continue; | 383 | continue; |
384 | } else { | 384 | } else { |
385 | int code; | 385 | int code; |
386 | 386 | ||
387 | code = bitstream_get (state, 5); | 387 | code = bitstream_get (state, 5); |
388 | 388 | ||
389 | quant->q1_ptr = 1; | 389 | quant->q1_ptr = 1; |
390 | quant->q1[0] = q_1_2[code]; | 390 | quant->q1[0] = q_1_2[code]; |
391 | quant->q1[1] = q_1_1[code]; | 391 | quant->q1[1] = q_1_1[code]; |
392 | COEFF (coeff[i], q_1_0[code], level, factor, exp[i]); | 392 | COEFF (coeff[i], q_1_0[code], level, factor, exp[i]); |
393 | continue; | 393 | continue; |
394 | } | 394 | } |
395 | 395 | ||
396 | case -2: | 396 | case -2: |
397 | if (quant->q2_ptr >= 0) { | 397 | if (quant->q2_ptr >= 0) { |
398 | COEFF (coeff[i], quant->q2[quant->q2_ptr--], level, | 398 | COEFF (coeff[i], quant->q2[quant->q2_ptr--], level, |
399 | factor, exp[i]); | 399 | factor, exp[i]); |
400 | continue; | 400 | continue; |
401 | } else { | 401 | } else { |
402 | int code; | 402 | int code; |
403 | 403 | ||
404 | code = bitstream_get (state, 7); | 404 | code = bitstream_get (state, 7); |
405 | 405 | ||
406 | quant->q2_ptr = 1; | 406 | quant->q2_ptr = 1; |
407 | quant->q2[0] = q_2_2[code]; | 407 | quant->q2[0] = q_2_2[code]; |
408 | quant->q2[1] = q_2_1[code]; | 408 | quant->q2[1] = q_2_1[code]; |
409 | COEFF (coeff[i], q_2_0[code], level, factor, exp[i]); | 409 | COEFF (coeff[i], q_2_0[code], level, factor, exp[i]); |
410 | continue; | 410 | continue; |
411 | } | 411 | } |
412 | 412 | ||
413 | case 3: | 413 | case 3: |
414 | COEFF (coeff[i], q_3[bitstream_get (state, 3)], level, | 414 | COEFF (coeff[i], q_3[bitstream_get (state, 3)], level, |
415 | factor, exp[i]); | 415 | factor, exp[i]); |
416 | continue; | 416 | continue; |
417 | 417 | ||
418 | case -3: | 418 | case -3: |
419 | if (quant->q4_ptr == 0) { | 419 | if (quant->q4_ptr == 0) { |
420 | quant->q4_ptr = -1; | 420 | quant->q4_ptr = -1; |
421 | COEFF (coeff[i], quant->q4, level, factor, exp[i]); | 421 | COEFF (coeff[i], quant->q4, level, factor, exp[i]); |
422 | continue; | 422 | continue; |
423 | } else { | 423 | } else { |
424 | int code; | 424 | int code; |
425 | 425 | ||
426 | code = bitstream_get (state, 7); | 426 | code = bitstream_get (state, 7); |
427 | 427 | ||
428 | quant->q4_ptr = 0; | 428 | quant->q4_ptr = 0; |
429 | quant->q4 = q_4_1[code]; | 429 | quant->q4 = q_4_1[code]; |
430 | COEFF (coeff[i], q_4_0[code], level, factor, exp[i]); | 430 | COEFF (coeff[i], q_4_0[code], level, factor, exp[i]); |
431 | continue; | 431 | continue; |
432 | } | 432 | } |
433 | 433 | ||
434 | case 4: | 434 | case 4: |
435 | COEFF (coeff[i], q_5[bitstream_get (state, 4)], level, | 435 | COEFF (coeff[i], q_5[bitstream_get (state, 4)], level, |
436 | factor, exp[i]); | 436 | factor, exp[i]); |
437 | continue; | 437 | continue; |
438 | 438 | ||
439 | default: | 439 | default: |
440 | COEFF (coeff[i], bitstream_get_2 (state, bapi) << (16 - bapi), | 440 | COEFF (coeff[i], bitstream_get_2 (state, bapi) << (16 - bapi), |
441 | level, factor, exp[i]); | 441 | level, factor, exp[i]); |
442 | } | 442 | } |
443 | } | 443 | } |
444 | } | 444 | } |
445 | 445 | ||
446 | static void coeff_get_coupling (a52_state_t * state, int nfchans, | 446 | static void coeff_get_coupling (a52_state_t * state, int nfchans, |
447 | level_t * coeff, sample_t (* samples)[256], | 447 | level_t * coeff, sample_t (* samples)[256], |
448 | quantizer_set_t * quant, uint8_t dithflag[5]) | 448 | quantizer_set_t * quant, uint8_t dithflag[5]) |
449 | { | 449 | { |
450 | int cplbndstrc, bnd, i, i_end, ch; | 450 | int cplbndstrc, bnd, i, i_end, ch; |
451 | uint8_t * exp; | 451 | uint8_t * exp; |
@@ -458,111 +458,111 @@ static void coeff_get_coupling (a52_state_t * state, int nfchans, | |||
458 | cplbndstrc = state->cplbndstrc; | 458 | cplbndstrc = state->cplbndstrc; |
459 | i = state->cplstrtmant; | 459 | i = state->cplstrtmant; |
460 | while (i < state->cplendmant) { | 460 | while (i < state->cplendmant) { |
461 | i_end = i + 12; | 461 | i_end = i + 12; |
462 | while (cplbndstrc & 1) { | 462 | while (cplbndstrc & 1) { |
463 | cplbndstrc >>= 1; | 463 | cplbndstrc >>= 1; |
464 | i_end += 12; | 464 | i_end += 12; |
465 | } | 465 | } |
466 | cplbndstrc >>= 1; | 466 | cplbndstrc >>= 1; |
467 | for (ch = 0; ch < nfchans; ch++) | 467 | for (ch = 0; ch < nfchans; ch++) |
468 | cplco[ch] = MUL_L (state->cplco[ch][bnd], coeff[ch]); | 468 | cplco[ch] = MUL_L (state->cplco[ch][bnd], coeff[ch]); |
469 | bnd++; | 469 | bnd++; |
470 | 470 | ||
471 | while (i < i_end) { | 471 | while (i < i_end) { |
472 | quantizer_t cplcoeff; | 472 | quantizer_t cplcoeff; |
473 | int bapi; | 473 | int bapi; |
474 | 474 | ||
475 | bapi = bap[i]; | 475 | bapi = bap[i]; |
476 | switch (bapi) { | 476 | switch (bapi) { |
477 | case 0: | 477 | case 0: |
478 | for (ch = 0; ch < nfchans; ch++) | 478 | for (ch = 0; ch < nfchans; ch++) |
479 | if ((state->chincpl >> ch) & 1) { | 479 | if ((state->chincpl >> ch) & 1) { |
480 | if (dithflag[ch]) | 480 | if (dithflag[ch]) |
481 | #ifndef LIBA52_FIXED | 481 | #ifndef LIBA52_FIXED |
482 | samples[ch][i] = (scale_factor[exp[i]] * | 482 | samples[ch][i] = (scale_factor[exp[i]] * |
483 | cplco[ch] * dither_gen (state)); | 483 | cplco[ch] * dither_gen (state)); |
484 | #else | 484 | #else |
485 | COEFF (samples[ch][i], dither_gen (state), | 485 | COEFF (samples[ch][i], dither_gen (state), |
486 | cplco[ch], scale_factor, exp[i]); | 486 | cplco[ch], scale_factor, exp[i]); |
487 | #endif | 487 | #endif |
488 | else | 488 | else |
489 | samples[ch][i] = 0; | 489 | samples[ch][i] = 0; |
490 | } | 490 | } |
491 | i++; | 491 | i++; |
492 | continue; | 492 | continue; |
493 | 493 | ||
494 | case -1: | 494 | case -1: |
495 | if (quant->q1_ptr >= 0) { | 495 | if (quant->q1_ptr >= 0) { |
496 | cplcoeff = quant->q1[quant->q1_ptr--]; | 496 | cplcoeff = quant->q1[quant->q1_ptr--]; |
497 | break; | 497 | break; |
498 | } else { | 498 | } else { |
499 | int code; | 499 | int code; |
500 | 500 | ||
501 | code = bitstream_get (state, 5); | 501 | code = bitstream_get (state, 5); |
502 | 502 | ||
503 | quant->q1_ptr = 1; | 503 | quant->q1_ptr = 1; |
504 | quant->q1[0] = q_1_2[code]; | 504 | quant->q1[0] = q_1_2[code]; |
505 | quant->q1[1] = q_1_1[code]; | 505 | quant->q1[1] = q_1_1[code]; |
506 | cplcoeff = q_1_0[code]; | 506 | cplcoeff = q_1_0[code]; |
507 | break; | 507 | break; |
508 | } | 508 | } |
509 | 509 | ||
510 | case -2: | 510 | case -2: |
511 | if (quant->q2_ptr >= 0) { | 511 | if (quant->q2_ptr >= 0) { |
512 | cplcoeff = quant->q2[quant->q2_ptr--]; | 512 | cplcoeff = quant->q2[quant->q2_ptr--]; |
513 | break; | 513 | break; |
514 | } else { | 514 | } else { |
515 | int code; | 515 | int code; |
516 | 516 | ||
517 | code = bitstream_get (state, 7); | 517 | code = bitstream_get (state, 7); |
518 | 518 | ||
519 | quant->q2_ptr = 1; | 519 | quant->q2_ptr = 1; |
520 | quant->q2[0] = q_2_2[code]; | 520 | quant->q2[0] = q_2_2[code]; |
521 | quant->q2[1] = q_2_1[code]; | 521 | quant->q2[1] = q_2_1[code]; |
522 | cplcoeff = q_2_0[code]; | 522 | cplcoeff = q_2_0[code]; |
523 | break; | 523 | break; |
524 | } | 524 | } |
525 | 525 | ||
526 | case 3: | 526 | case 3: |
527 | cplcoeff = q_3[bitstream_get (state, 3)]; | 527 | cplcoeff = q_3[bitstream_get (state, 3)]; |
528 | break; | 528 | break; |
529 | 529 | ||
530 | case -3: | 530 | case -3: |
531 | if (quant->q4_ptr == 0) { | 531 | if (quant->q4_ptr == 0) { |
532 | quant->q4_ptr = -1; | 532 | quant->q4_ptr = -1; |
533 | cplcoeff = quant->q4; | 533 | cplcoeff = quant->q4; |
534 | break; | 534 | break; |
535 | } else { | 535 | } else { |
536 | int code; | 536 | int code; |
537 | 537 | ||
538 | code = bitstream_get (state, 7); | 538 | code = bitstream_get (state, 7); |
539 | 539 | ||
540 | quant->q4_ptr = 0; | 540 | quant->q4_ptr = 0; |
541 | quant->q4 = q_4_1[code]; | 541 | quant->q4 = q_4_1[code]; |
542 | cplcoeff = q_4_0[code]; | 542 | cplcoeff = q_4_0[code]; |
543 | break; | 543 | break; |
544 | } | 544 | } |
545 | 545 | ||
546 | case 4: | 546 | case 4: |
547 | cplcoeff = q_5[bitstream_get (state, 4)]; | 547 | cplcoeff = q_5[bitstream_get (state, 4)]; |
548 | break; | 548 | break; |
549 | 549 | ||
550 | default: | 550 | default: |
551 | cplcoeff = bitstream_get_2 (state, bapi) << (16 - bapi); | 551 | cplcoeff = bitstream_get_2 (state, bapi) << (16 - bapi); |
552 | } | 552 | } |
553 | #ifndef LIBA52_FIXED | 553 | #ifndef LIBA52_FIXED |
554 | cplcoeff *= scale_factor[exp[i]]; | 554 | cplcoeff *= scale_factor[exp[i]]; |
555 | #endif | 555 | #endif |
556 | for (ch = 0; ch < nfchans; ch++) | 556 | for (ch = 0; ch < nfchans; ch++) |
557 | if ((state->chincpl >> ch) & 1) | 557 | if ((state->chincpl >> ch) & 1) |
558 | #ifndef LIBA52_FIXED | 558 | #ifndef LIBA52_FIXED |
559 | samples[ch][i] = cplcoeff * cplco[ch]; | 559 | samples[ch][i] = cplcoeff * cplco[ch]; |
560 | #else | 560 | #else |
561 | COEFF (samples[ch][i], cplcoeff, cplco[ch], | 561 | COEFF (samples[ch][i], cplcoeff, cplco[ch], |
562 | scale_factor, exp[i]); | 562 | scale_factor, exp[i]); |
563 | #endif | 563 | #endif |
564 | i++; | 564 | i++; |
565 | } | 565 | } |
566 | } | 566 | } |
567 | } | 567 | } |
568 | 568 | ||
@@ -581,366 +581,366 @@ int a52_block (a52_state_t * state) | |||
581 | nfchans = nfchans_tbl[state->acmod]; | 581 | nfchans = nfchans_tbl[state->acmod]; |
582 | 582 | ||
583 | for (i = 0; i < nfchans; i++) | 583 | for (i = 0; i < nfchans; i++) |
584 | blksw[i] = bitstream_get (state, 1); | 584 | blksw[i] = bitstream_get (state, 1); |
585 | 585 | ||
586 | for (i = 0; i < nfchans; i++) | 586 | for (i = 0; i < nfchans; i++) |
587 | dithflag[i] = bitstream_get (state, 1); | 587 | dithflag[i] = bitstream_get (state, 1); |
588 | 588 | ||
589 | chaninfo = !state->acmod; | 589 | chaninfo = !state->acmod; |
590 | do { | 590 | do { |
591 | if (bitstream_get (state, 1)) { /* dynrnge */ | 591 | if (bitstream_get (state, 1)) { /* dynrnge */ |
592 | int dynrng; | 592 | int dynrng; |
593 | 593 | ||
594 | dynrng = bitstream_get_2 (state, 8); | 594 | dynrng = bitstream_get_2 (state, 8); |
595 | if (state->dynrnge) { | 595 | if (state->dynrnge) { |
596 | level_t range; | 596 | level_t range; |
597 | 597 | ||
598 | #if !defined(LIBA52_FIXED) | 598 | #if !defined(LIBA52_FIXED) |
599 | range = ((((dynrng & 0x1f) | 0x20) << 13) * | 599 | range = ((((dynrng & 0x1f) | 0x20) << 13) * |
600 | scale_factor[3 - (dynrng >> 5)]); | 600 | scale_factor[3 - (dynrng >> 5)]); |
601 | #else | 601 | #else |
602 | range = ((dynrng & 0x1f) | 0x20) << (21 + (dynrng >> 5)); | 602 | range = ((dynrng & 0x1f) | 0x20) << (21 + (dynrng >> 5)); |
603 | #endif | 603 | #endif |
604 | if (state->dynrngcall) | 604 | if (state->dynrngcall) |
605 | range = state->dynrngcall (range, state->dynrngdata); | 605 | range = state->dynrngcall (range, state->dynrngdata); |
606 | state->dynrng = MUL_L (state->level, range); | 606 | state->dynrng = MUL_L (state->level, range); |
607 | } | 607 | } |
608 | } | 608 | } |
609 | } while (chaninfo--); | 609 | } while (chaninfo--); |
610 | 610 | ||
611 | if (bitstream_get (state, 1)) { /* cplstre */ | 611 | if (bitstream_get (state, 1)) { /* cplstre */ |
612 | state->chincpl = 0; | 612 | state->chincpl = 0; |
613 | if (bitstream_get (state, 1)) { /* cplinu */ | 613 | if (bitstream_get (state, 1)) { /* cplinu */ |
614 | static uint8_t bndtab[16] = {31, 35, 37, 39, 41, 42, 43, 44, | 614 | static uint8_t bndtab[16] = {31, 35, 37, 39, 41, 42, 43, 44, |
615 | 45, 45, 46, 46, 47, 47, 48, 48}; | 615 | 45, 45, 46, 46, 47, 47, 48, 48}; |
616 | int cplbegf; | 616 | int cplbegf; |
617 | int cplendf; | 617 | int cplendf; |
618 | int ncplsubnd; | 618 | int ncplsubnd; |
619 | 619 | ||
620 | for (i = 0; i < nfchans; i++) | 620 | for (i = 0; i < nfchans; i++) |
621 | state->chincpl |= bitstream_get (state, 1) << i; | 621 | state->chincpl |= bitstream_get (state, 1) << i; |
622 | switch (state->acmod) { | 622 | switch (state->acmod) { |
623 | case 0: case 1: | 623 | case 0: case 1: |
624 | return 1; | 624 | return 1; |
625 | case 2: | 625 | case 2: |
626 | state->phsflginu = bitstream_get (state, 1); | 626 | state->phsflginu = bitstream_get (state, 1); |
627 | } | 627 | } |
628 | cplbegf = bitstream_get (state, 4); | 628 | cplbegf = bitstream_get (state, 4); |
629 | cplendf = bitstream_get (state, 4); | 629 | cplendf = bitstream_get (state, 4); |
630 | 630 | ||
631 | if (cplendf + 3 - cplbegf < 0) | 631 | if (cplendf + 3 - cplbegf < 0) |
632 | return 1; | 632 | return 1; |
633 | state->ncplbnd = ncplsubnd = cplendf + 3 - cplbegf; | 633 | state->ncplbnd = ncplsubnd = cplendf + 3 - cplbegf; |
634 | state->cplstrtbnd = bndtab[cplbegf]; | 634 | state->cplstrtbnd = bndtab[cplbegf]; |
635 | state->cplstrtmant = cplbegf * 12 + 37; | 635 | state->cplstrtmant = cplbegf * 12 + 37; |
636 | state->cplendmant = cplendf * 12 + 73; | 636 | state->cplendmant = cplendf * 12 + 73; |
637 | 637 | ||
638 | state->cplbndstrc = 0; | 638 | state->cplbndstrc = 0; |
639 | for (i = 0; i < ncplsubnd - 1; i++) | 639 | for (i = 0; i < ncplsubnd - 1; i++) |
640 | if (bitstream_get (state, 1)) { | 640 | if (bitstream_get (state, 1)) { |
641 | state->cplbndstrc |= 1 << i; | 641 | state->cplbndstrc |= 1 << i; |
642 | state->ncplbnd--; | 642 | state->ncplbnd--; |
643 | } | 643 | } |
644 | } | 644 | } |
645 | } | 645 | } |
646 | 646 | ||
647 | if (state->chincpl) { /* cplinu */ | 647 | if (state->chincpl) { /* cplinu */ |
648 | int j, cplcoe; | 648 | int j, cplcoe; |
649 | 649 | ||
650 | cplcoe = 0; | 650 | cplcoe = 0; |
651 | for (i = 0; i < nfchans; i++) | 651 | for (i = 0; i < nfchans; i++) |
652 | if ((state->chincpl) >> i & 1) | 652 | if ((state->chincpl) >> i & 1) |
653 | if (bitstream_get (state, 1)) { /* cplcoe */ | 653 | if (bitstream_get (state, 1)) { /* cplcoe */ |
654 | int mstrcplco, cplcoexp, cplcomant; | 654 | int mstrcplco, cplcoexp, cplcomant; |
655 | 655 | ||
656 | cplcoe = 1; | 656 | cplcoe = 1; |
657 | mstrcplco = 3 * bitstream_get (state, 2); | 657 | mstrcplco = 3 * bitstream_get (state, 2); |
658 | for (j = 0; j < state->ncplbnd; j++) { | 658 | for (j = 0; j < state->ncplbnd; j++) { |
659 | cplcoexp = bitstream_get (state, 4); | 659 | cplcoexp = bitstream_get (state, 4); |
660 | cplcomant = bitstream_get (state, 4); | 660 | cplcomant = bitstream_get (state, 4); |
661 | if (cplcoexp == 15) | 661 | if (cplcoexp == 15) |
662 | cplcomant <<= 14; | 662 | cplcomant <<= 14; |
663 | else | 663 | else |
664 | cplcomant = (cplcomant | 0x10) << 13; | 664 | cplcomant = (cplcomant | 0x10) << 13; |
665 | #ifndef LIBA52_FIXED | 665 | #ifndef LIBA52_FIXED |
666 | state->cplco[i][j] = | 666 | state->cplco[i][j] = |
667 | cplcomant * scale_factor[cplcoexp + mstrcplco]; | 667 | cplcomant * scale_factor[cplcoexp + mstrcplco]; |
668 | #else | 668 | #else |
669 | state->cplco[i][j] = (cplcomant << 11) >> (cplcoexp + mstrcplco); | 669 | state->cplco[i][j] = (cplcomant << 11) >> (cplcoexp + mstrcplco); |
670 | #endif | 670 | #endif |
671 | 671 | ||
672 | } | 672 | } |
673 | } | 673 | } |
674 | if ((state->acmod == 2) && state->phsflginu && cplcoe) | 674 | if ((state->acmod == 2) && state->phsflginu && cplcoe) |
675 | for (j = 0; j < state->ncplbnd; j++) | 675 | for (j = 0; j < state->ncplbnd; j++) |
676 | if (bitstream_get (state, 1)) /* phsflg */ | 676 | if (bitstream_get (state, 1)) /* phsflg */ |
677 | state->cplco[1][j] = -state->cplco[1][j]; | 677 | state->cplco[1][j] = -state->cplco[1][j]; |
678 | } | 678 | } |
679 | 679 | ||
680 | if ((state->acmod == 2) && (bitstream_get (state, 1))) { /* rematstr */ | 680 | if ((state->acmod == 2) && (bitstream_get (state, 1))) { /* rematstr */ |
681 | int end; | 681 | int end; |
682 | 682 | ||
683 | state->rematflg = 0; | 683 | state->rematflg = 0; |
684 | end = (state->chincpl) ? state->cplstrtmant : 253; /* cplinu */ | 684 | end = (state->chincpl) ? state->cplstrtmant : 253; /* cplinu */ |
685 | i = 0; | 685 | i = 0; |
686 | do | 686 | do |
687 | state->rematflg |= bitstream_get (state, 1) << i; | 687 | state->rematflg |= bitstream_get (state, 1) << i; |
688 | while (rematrix_band[i++] < end); | 688 | while (rematrix_band[i++] < end); |
689 | } | 689 | } |
690 | 690 | ||
691 | cplexpstr = EXP_REUSE; | 691 | cplexpstr = EXP_REUSE; |
692 | lfeexpstr = EXP_REUSE; | 692 | lfeexpstr = EXP_REUSE; |
693 | if (state->chincpl) /* cplinu */ | 693 | if (state->chincpl) /* cplinu */ |
694 | cplexpstr = bitstream_get (state, 2); | 694 | cplexpstr = bitstream_get (state, 2); |
695 | for (i = 0; i < nfchans; i++) | 695 | for (i = 0; i < nfchans; i++) |
696 | chexpstr[i] = bitstream_get (state, 2); | 696 | chexpstr[i] = bitstream_get (state, 2); |
697 | if (state->lfeon) | 697 | if (state->lfeon) |
698 | lfeexpstr = bitstream_get (state, 1); | 698 | lfeexpstr = bitstream_get (state, 1); |
699 | 699 | ||
700 | for (i = 0; i < nfchans; i++) | 700 | for (i = 0; i < nfchans; i++) |
701 | if (chexpstr[i] != EXP_REUSE) { | 701 | if (chexpstr[i] != EXP_REUSE) { |
702 | if ((state->chincpl >> i) & 1) | 702 | if ((state->chincpl >> i) & 1) |
703 | state->endmant[i] = state->cplstrtmant; | 703 | state->endmant[i] = state->cplstrtmant; |
704 | else { | 704 | else { |
705 | int chbwcod; | 705 | int chbwcod; |
706 | 706 | ||
707 | chbwcod = bitstream_get (state, 6); | 707 | chbwcod = bitstream_get (state, 6); |
708 | if (chbwcod > 60) | 708 | if (chbwcod > 60) |
709 | return 1; | 709 | return 1; |
710 | state->endmant[i] = chbwcod * 3 + 73; | 710 | state->endmant[i] = chbwcod * 3 + 73; |
711 | } | 711 | } |
712 | } | 712 | } |
713 | 713 | ||
714 | do_bit_alloc = 0; | 714 | do_bit_alloc = 0; |
715 | 715 | ||
716 | if (cplexpstr != EXP_REUSE) { | 716 | if (cplexpstr != EXP_REUSE) { |
717 | int cplabsexp, ncplgrps; | 717 | int cplabsexp, ncplgrps; |
718 | 718 | ||
719 | do_bit_alloc = 64; | 719 | do_bit_alloc = 64; |
720 | ncplgrps = ((state->cplendmant - state->cplstrtmant) / | 720 | ncplgrps = ((state->cplendmant - state->cplstrtmant) / |
721 | (3 << (cplexpstr - 1))); | 721 | (3 << (cplexpstr - 1))); |
722 | cplabsexp = bitstream_get (state, 4) << 1; | 722 | cplabsexp = bitstream_get (state, 4) << 1; |
723 | if (parse_exponents (state, cplexpstr, ncplgrps, cplabsexp, | 723 | if (parse_exponents (state, cplexpstr, ncplgrps, cplabsexp, |
724 | state->cpl_expbap.exp + state->cplstrtmant)) | 724 | state->cpl_expbap.exp + state->cplstrtmant)) |
725 | return 1; | 725 | return 1; |
726 | } | 726 | } |
727 | for (i = 0; i < nfchans; i++) | 727 | for (i = 0; i < nfchans; i++) |
728 | if (chexpstr[i] != EXP_REUSE) { | 728 | if (chexpstr[i] != EXP_REUSE) { |
729 | int grp_size, nchgrps; | 729 | int grp_size, nchgrps; |
730 | 730 | ||
731 | do_bit_alloc |= 1 << i; | 731 | do_bit_alloc |= 1 << i; |
732 | grp_size = 3 << (chexpstr[i] - 1); | 732 | grp_size = 3 << (chexpstr[i] - 1); |
733 | nchgrps = (state->endmant[i] + grp_size - 4) / grp_size; | 733 | nchgrps = (state->endmant[i] + grp_size - 4) / grp_size; |
734 | state->fbw_expbap[i].exp[0] = bitstream_get (state, 4); | 734 | state->fbw_expbap[i].exp[0] = bitstream_get (state, 4); |
735 | if (parse_exponents (state, chexpstr[i], nchgrps, | 735 | if (parse_exponents (state, chexpstr[i], nchgrps, |
736 | state->fbw_expbap[i].exp[0], | 736 | state->fbw_expbap[i].exp[0], |
737 | state->fbw_expbap[i].exp + 1)) | 737 | state->fbw_expbap[i].exp + 1)) |
738 | return 1; | 738 | return 1; |
739 | bitstream_get (state, 2); /* gainrng */ | 739 | bitstream_get (state, 2); /* gainrng */ |
740 | } | 740 | } |
741 | if (lfeexpstr != EXP_REUSE) { | 741 | if (lfeexpstr != EXP_REUSE) { |
742 | do_bit_alloc |= 32; | 742 | do_bit_alloc |= 32; |
743 | state->lfe_expbap.exp[0] = bitstream_get (state, 4); | 743 | state->lfe_expbap.exp[0] = bitstream_get (state, 4); |
744 | if (parse_exponents (state, lfeexpstr, 2, state->lfe_expbap.exp[0], | 744 | if (parse_exponents (state, lfeexpstr, 2, state->lfe_expbap.exp[0], |
745 | state->lfe_expbap.exp + 1)) | 745 | state->lfe_expbap.exp + 1)) |
746 | return 1; | 746 | return 1; |
747 | } | 747 | } |
748 | 748 | ||
749 | if (bitstream_get (state, 1)) { /* baie */ | 749 | if (bitstream_get (state, 1)) { /* baie */ |
750 | do_bit_alloc = 127; | 750 | do_bit_alloc = 127; |
751 | state->bai = bitstream_get (state, 11); | 751 | state->bai = bitstream_get (state, 11); |
752 | } | 752 | } |
753 | if (bitstream_get (state, 1)) { /* snroffste */ | 753 | if (bitstream_get (state, 1)) { /* snroffste */ |
754 | do_bit_alloc = 127; | 754 | do_bit_alloc = 127; |
755 | state->csnroffst = bitstream_get (state, 6); | 755 | state->csnroffst = bitstream_get (state, 6); |
756 | if (state->chincpl) /* cplinu */ | 756 | if (state->chincpl) /* cplinu */ |
757 | state->cplba.bai = bitstream_get (state, 7); | 757 | state->cplba.bai = bitstream_get (state, 7); |
758 | for (i = 0; i < nfchans; i++) | 758 | for (i = 0; i < nfchans; i++) |
759 | state->ba[i].bai = bitstream_get (state, 7); | 759 | state->ba[i].bai = bitstream_get (state, 7); |
760 | if (state->lfeon) | 760 | if (state->lfeon) |
761 | state->lfeba.bai = bitstream_get (state, 7); | 761 | state->lfeba.bai = bitstream_get (state, 7); |
762 | } | 762 | } |
763 | if ((state->chincpl) && (bitstream_get (state, 1))) { /* cplleake */ | 763 | if ((state->chincpl) && (bitstream_get (state, 1))) { /* cplleake */ |
764 | do_bit_alloc |= 64; | 764 | do_bit_alloc |= 64; |
765 | state->cplfleak = 9 - bitstream_get (state, 3); | 765 | state->cplfleak = 9 - bitstream_get (state, 3); |
766 | state->cplsleak = 9 - bitstream_get (state, 3); | 766 | state->cplsleak = 9 - bitstream_get (state, 3); |
767 | } | 767 | } |
768 | 768 | ||
769 | if (bitstream_get (state, 1)) { /* deltbaie */ | 769 | if (bitstream_get (state, 1)) { /* deltbaie */ |
770 | do_bit_alloc = 127; | 770 | do_bit_alloc = 127; |
771 | if (state->chincpl) /* cplinu */ | 771 | if (state->chincpl) /* cplinu */ |
772 | state->cplba.deltbae = bitstream_get (state, 2); | 772 | state->cplba.deltbae = bitstream_get (state, 2); |
773 | for (i = 0; i < nfchans; i++) | 773 | for (i = 0; i < nfchans; i++) |
774 | state->ba[i].deltbae = bitstream_get (state, 2); | 774 | state->ba[i].deltbae = bitstream_get (state, 2); |
775 | if (state->chincpl && /* cplinu */ | 775 | if (state->chincpl && /* cplinu */ |
776 | (state->cplba.deltbae == DELTA_BIT_NEW) && | 776 | (state->cplba.deltbae == DELTA_BIT_NEW) && |
777 | parse_deltba (state, state->cplba.deltba)) | 777 | parse_deltba (state, state->cplba.deltba)) |
778 | return 1; | 778 | return 1; |
779 | for (i = 0; i < nfchans; i++) | 779 | for (i = 0; i < nfchans; i++) |
780 | if ((state->ba[i].deltbae == DELTA_BIT_NEW) && | 780 | if ((state->ba[i].deltbae == DELTA_BIT_NEW) && |
781 | parse_deltba (state, state->ba[i].deltba)) | 781 | parse_deltba (state, state->ba[i].deltba)) |
782 | return 1; | 782 | return 1; |
783 | } | 783 | } |
784 | 784 | ||
785 | if (do_bit_alloc) { | 785 | if (do_bit_alloc) { |
786 | if (zero_snr_offsets (nfchans, state)) { | 786 | if (zero_snr_offsets (nfchans, state)) { |
787 | memset (state->cpl_expbap.bap, 0, sizeof (state->cpl_expbap.bap)); | 787 | memset (state->cpl_expbap.bap, 0, sizeof (state->cpl_expbap.bap)); |
788 | for (i = 0; i < nfchans; i++) | 788 | for (i = 0; i < nfchans; i++) |
789 | memset (state->fbw_expbap[i].bap, 0, | 789 | memset (state->fbw_expbap[i].bap, 0, |
790 | sizeof (state->fbw_expbap[i].bap)); | 790 | sizeof (state->fbw_expbap[i].bap)); |
791 | memset (state->lfe_expbap.bap, 0, sizeof (state->lfe_expbap.bap)); | 791 | memset (state->lfe_expbap.bap, 0, sizeof (state->lfe_expbap.bap)); |
792 | } else { | 792 | } else { |
793 | if (state->chincpl && (do_bit_alloc & 64)) /* cplinu */ | 793 | if (state->chincpl && (do_bit_alloc & 64)) /* cplinu */ |
794 | a52_bit_allocate (state, &state->cplba, state->cplstrtbnd, | 794 | a52_bit_allocate (state, &state->cplba, state->cplstrtbnd, |
795 | state->cplstrtmant, state->cplendmant, | 795 | state->cplstrtmant, state->cplendmant, |
796 | state->cplfleak << 8, state->cplsleak << 8, | 796 | state->cplfleak << 8, state->cplsleak << 8, |
797 | &state->cpl_expbap); | 797 | &state->cpl_expbap); |
798 | for (i = 0; i < nfchans; i++) | 798 | for (i = 0; i < nfchans; i++) |
799 | if (do_bit_alloc & (1 << i)) | 799 | if (do_bit_alloc & (1 << i)) |
800 | a52_bit_allocate (state, state->ba + i, 0, 0, | 800 | a52_bit_allocate (state, state->ba + i, 0, 0, |
801 | state->endmant[i], 0, 0, | 801 | state->endmant[i], 0, 0, |
802 | state->fbw_expbap +i); | 802 | state->fbw_expbap +i); |
803 | if (state->lfeon && (do_bit_alloc & 32)) { | 803 | if (state->lfeon && (do_bit_alloc & 32)) { |
804 | state->lfeba.deltbae = DELTA_BIT_NONE; | 804 | state->lfeba.deltbae = DELTA_BIT_NONE; |
805 | a52_bit_allocate (state, &state->lfeba, 0, 0, 7, 0, 0, | 805 | a52_bit_allocate (state, &state->lfeba, 0, 0, 7, 0, 0, |
806 | &state->lfe_expbap); | 806 | &state->lfe_expbap); |
807 | } | 807 | } |
808 | } | 808 | } |
809 | } | 809 | } |
810 | 810 | ||
811 | if (bitstream_get (state, 1)) { /* skiple */ | 811 | if (bitstream_get (state, 1)) { /* skiple */ |
812 | i = bitstream_get (state, 9); /* skipl */ | 812 | i = bitstream_get (state, 9); /* skipl */ |
813 | while (i--) | 813 | while (i--) |
814 | bitstream_get (state, 8); | 814 | bitstream_get (state, 8); |
815 | } | 815 | } |
816 | 816 | ||
817 | samples = state->samples; | 817 | samples = state->samples; |
818 | if (state->output & A52_LFE) | 818 | if (state->output & A52_LFE) |
819 | samples += 256; /* shift for LFE channel */ | 819 | samples += 256; /* shift for LFE channel */ |
820 | 820 | ||
821 | chanbias = a52_downmix_coeff (coeff, state->acmod, state->output, | 821 | chanbias = a52_downmix_coeff (coeff, state->acmod, state->output, |
822 | state->dynrng, state->clev, state->slev); | 822 | state->dynrng, state->clev, state->slev); |
823 | 823 | ||
824 | quant.q1_ptr = quant.q2_ptr = quant.q4_ptr = -1; | 824 | quant.q1_ptr = quant.q2_ptr = quant.q4_ptr = -1; |
825 | done_cpl = 0; | 825 | done_cpl = 0; |
826 | 826 | ||
827 | for (i = 0; i < nfchans; i++) { | 827 | for (i = 0; i < nfchans; i++) { |
828 | int j; | 828 | int j; |
829 | 829 | ||
830 | coeff_get (state, samples + 256 * i, state->fbw_expbap +i, &quant, | 830 | coeff_get (state, samples + 256 * i, state->fbw_expbap +i, &quant, |
831 | coeff[i], dithflag[i], state->endmant[i]); | 831 | coeff[i], dithflag[i], state->endmant[i]); |
832 | 832 | ||
833 | if ((state->chincpl >> i) & 1) { | 833 | if ((state->chincpl >> i) & 1) { |
834 | if (!done_cpl) { | 834 | if (!done_cpl) { |
835 | done_cpl = 1; | 835 | done_cpl = 1; |
836 | coeff_get_coupling (state, nfchans, coeff, | 836 | coeff_get_coupling (state, nfchans, coeff, |
837 | (sample_t (*)[256])samples, &quant, | 837 | (sample_t (*)[256])samples, &quant, |
838 | dithflag); | 838 | dithflag); |
839 | } | 839 | } |
840 | j = state->cplendmant; | 840 | j = state->cplendmant; |
841 | } else | 841 | } else |
842 | j = state->endmant[i]; | 842 | j = state->endmant[i]; |
843 | do | 843 | do |
844 | (samples + 256 * i)[j] = 0; | 844 | (samples + 256 * i)[j] = 0; |
845 | while (++j < 256); | 845 | while (++j < 256); |
846 | } | 846 | } |
847 | 847 | ||
848 | if (state->acmod == 2) { | 848 | if (state->acmod == 2) { |
849 | int j, end, band, rematflg; | 849 | int j, end, band, rematflg; |
850 | 850 | ||
851 | end = ((state->endmant[0] < state->endmant[1]) ? | 851 | end = ((state->endmant[0] < state->endmant[1]) ? |
852 | state->endmant[0] : state->endmant[1]); | 852 | state->endmant[0] : state->endmant[1]); |
853 | 853 | ||
854 | i = 0; | 854 | i = 0; |
855 | j = 13; | 855 | j = 13; |
856 | rematflg = state->rematflg; | 856 | rematflg = state->rematflg; |
857 | do { | 857 | do { |
858 | if (! (rematflg & 1)) { | 858 | if (! (rematflg & 1)) { |
859 | rematflg >>= 1; | 859 | rematflg >>= 1; |
860 | j = rematrix_band[i++]; | 860 | j = rematrix_band[i++]; |
861 | continue; | 861 | continue; |
862 | } | 862 | } |
863 | rematflg >>= 1; | 863 | rematflg >>= 1; |
864 | band = rematrix_band[i++]; | 864 | band = rematrix_band[i++]; |
865 | if (band > end) | 865 | if (band > end) |
866 | band = end; | 866 | band = end; |
867 | do { | 867 | do { |
868 | sample_t tmp0, tmp1; | 868 | sample_t tmp0, tmp1; |
869 | 869 | ||
870 | tmp0 = samples[j]; | 870 | tmp0 = samples[j]; |
871 | tmp1 = (samples+256)[j]; | 871 | tmp1 = (samples+256)[j]; |
872 | samples[j] = tmp0 + tmp1; | 872 | samples[j] = tmp0 + tmp1; |
873 | (samples+256)[j] = tmp0 - tmp1; | 873 | (samples+256)[j] = tmp0 - tmp1; |
874 | } while (++j < band); | 874 | } while (++j < band); |
875 | } while (j < end); | 875 | } while (j < end); |
876 | } | 876 | } |
877 | 877 | ||
878 | if (state->lfeon) { | 878 | if (state->lfeon) { |
879 | if (state->output & A52_LFE) { | 879 | if (state->output & A52_LFE) { |
880 | coeff_get (state, samples - 256, &state->lfe_expbap, &quant, | 880 | coeff_get (state, samples - 256, &state->lfe_expbap, &quant, |
881 | state->dynrng, 0, 7); | 881 | state->dynrng, 0, 7); |
882 | for (i = 7; i < 256; i++) | 882 | for (i = 7; i < 256; i++) |
883 | (samples-256)[i] = 0; | 883 | (samples-256)[i] = 0; |
884 | a52_imdct_512 (samples - 256, samples + 1536 - 256); | 884 | a52_imdct_512 (samples - 256, samples + 1536 - 256); |
885 | } else { | 885 | } else { |
886 | /* just skip the LFE coefficients */ | 886 | /* just skip the LFE coefficients */ |
887 | coeff_get (state, samples + 1280, &state->lfe_expbap, &quant, | 887 | coeff_get (state, samples + 1280, &state->lfe_expbap, &quant, |
888 | 0, 0, 7); | 888 | 0, 0, 7); |
889 | } | 889 | } |
890 | } | 890 | } |
891 | 891 | ||
892 | i = 0; | 892 | i = 0; |
893 | if (nfchans_tbl[state->output & A52_CHANNEL_MASK] < nfchans) | 893 | if (nfchans_tbl[state->output & A52_CHANNEL_MASK] < nfchans) |
894 | for (i = 1; i < nfchans; i++) | 894 | for (i = 1; i < nfchans; i++) |
895 | if (blksw[i] != blksw[0]) | 895 | if (blksw[i] != blksw[0]) |
896 | break; | 896 | break; |
897 | 897 | ||
898 | if (i < nfchans) { | 898 | if (i < nfchans) { |
899 | if (state->downmixed) { | 899 | if (state->downmixed) { |
900 | state->downmixed = 0; | 900 | state->downmixed = 0; |
901 | a52_upmix (samples + 1536, state->acmod, state->output); | 901 | a52_upmix (samples + 1536, state->acmod, state->output); |
902 | } | 902 | } |
903 | 903 | ||
904 | for (i = 0; i < nfchans; i++) { | 904 | for (i = 0; i < nfchans; i++) { |
905 | sample_t bias; | 905 | sample_t bias; |
906 | 906 | ||
907 | bias = 0; | 907 | bias = 0; |
908 | if (!(chanbias & (1 << i))) | 908 | if (!(chanbias & (1 << i))) |
909 | bias = state->bias; | 909 | bias = state->bias; |
910 | 910 | ||
911 | if (coeff[i]) { | 911 | if (coeff[i]) { |
912 | if (blksw[i]) | 912 | if (blksw[i]) |
913 | a52_imdct_256 (samples + 256 * i, samples + 1536 + 256 * i); | 913 | a52_imdct_256 (samples + 256 * i, samples + 1536 + 256 * i); |
914 | else | 914 | else |
915 | a52_imdct_512 (samples + 256 * i, samples + 1536 + 256 * i); | 915 | a52_imdct_512 (samples + 256 * i, samples + 1536 + 256 * i); |
916 | } else { | 916 | } else { |
917 | int j; | 917 | int j; |
918 | 918 | ||
919 | for (j = 0; j < 256; j++) | 919 | for (j = 0; j < 256; j++) |
920 | (samples + 256 * i)[j] = bias; | 920 | (samples + 256 * i)[j] = bias; |
921 | } | 921 | } |
922 | } | 922 | } |
923 | 923 | ||
924 | a52_downmix (samples, state->acmod, state->output, | 924 | a52_downmix (samples, state->acmod, state->output, |
925 | state->clev, state->slev); | 925 | state->clev, state->slev); |
926 | } else { | 926 | } else { |
927 | nfchans = nfchans_tbl[state->output & A52_CHANNEL_MASK]; | 927 | nfchans = nfchans_tbl[state->output & A52_CHANNEL_MASK]; |
928 | 928 | ||
929 | a52_downmix (samples, state->acmod, state->output, | 929 | a52_downmix (samples, state->acmod, state->output, |
930 | state->clev, state->slev); | 930 | state->clev, state->slev); |
931 | 931 | ||
932 | if (!state->downmixed) { | 932 | if (!state->downmixed) { |
933 | state->downmixed = 1; | 933 | state->downmixed = 1; |
934 | a52_downmix (samples + 1536, state->acmod, state->output, | 934 | a52_downmix (samples + 1536, state->acmod, state->output, |
935 | state->clev, state->slev); | 935 | state->clev, state->slev); |
936 | } | 936 | } |
937 | 937 | ||
938 | if (blksw[0]) | 938 | if (blksw[0]) |
939 | for (i = 0; i < nfchans; i++) | 939 | for (i = 0; i < nfchans; i++) |
940 | a52_imdct_256 (samples + 256 * i, samples + 1536 + 256 * i); | 940 | a52_imdct_256 (samples + 256 * i, samples + 1536 + 256 * i); |
941 | else | 941 | else |
942 | for (i = 0; i < nfchans; i++) | 942 | for (i = 0; i < nfchans; i++) |
943 | a52_imdct_512 (samples + 256 * i, samples + 1536 + 256 * i); | 943 | a52_imdct_512 (samples + 256 * i, samples + 1536 + 256 * i); |
944 | } | 944 | } |
945 | 945 | ||
946 | return 0; | 946 | return 0; |