Mercurial > libavcodec.hg
annotate ac3.c @ 10311:943b63f364ca libavcodec
Make sure all the bits are written to output in fax data decoder.
This fixes decoding TIFF images with fax compression and width being not
multiple of eight (and issue 1429).
author | kostya |
---|---|
date | Tue, 29 Sep 2009 05:55:14 +0000 |
parents | 01e6afd0aba6 |
children | 40e411a184b2 |
rev | line source |
---|---|
0 | 1 /* |
7470
1a93d3bbe3ee
cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents:
7017
diff
changeset
|
2 * Common code between the AC-3 encoder and decoder |
8629
04423b2f6e0b
cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents:
8280
diff
changeset
|
3 * Copyright (c) 2000 Fabrice Bellard |
0 | 4 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3668
diff
changeset
|
5 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3668
diff
changeset
|
6 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3668
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
429 | 8 * modify it under the terms of the GNU Lesser General Public |
9 * License as published by the Free Software Foundation; either | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3668
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
0 | 11 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3668
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
0 | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
429 | 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 * Lesser General Public License for more details. | |
0 | 16 * |
429 | 17 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3668
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2979
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 20 */ |
1106 | 21 |
22 /** | |
8718
e9d9d946f213
Use full internal pathname in doxygen @file directives.
diego
parents:
8629
diff
changeset
|
23 * @file libavcodec/ac3.c |
7470
1a93d3bbe3ee
cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents:
7017
diff
changeset
|
24 * Common code between the AC-3 encoder and decoder. |
1106 | 25 */ |
782 | 26 |
4642 | 27 #include "avcodec.h" |
28 #include "ac3.h" | |
9428 | 29 #include "get_bits.h" |
0 | 30 |
10278
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
31 #if CONFIG_HARDCODED_TABLES |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
32 |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
33 /** |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
34 * Starting frequency coefficient bin for each critical band. |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
35 */ |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
36 static const uint8_t band_start_tab[51] = { |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
37 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
38 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
39 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
40 34, 37, 40, 43, 46, 49, 55, 61, 67, 73, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
41 79, 85, 97, 109, 121, 133, 157, 181, 205, 229, 253 |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
42 }; |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
43 |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
44 /** |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
45 * Maps each frequency coefficient bin to the critical band that contains it. |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
46 */ |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
47 static const uint8_t bin_to_band_tab[253] = { |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
48 0, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
49 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
50 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
51 25, 26, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
52 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
53 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
54 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
55 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
56 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
57 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
58 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
59 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
60 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
61 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
62 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
63 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
64 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
65 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
66 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
67 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
68 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
69 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49 |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
70 }; |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
71 |
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
72 #else /* CONFIG_HARDCODED_TABLES */ |
6003 | 73 static uint8_t band_start_tab[51]; |
74 static uint8_t bin_to_band_tab[253]; | |
10278
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
75 #endif |
4879 | 76 |
4641 | 77 static inline int calc_lowcomp1(int a, int b0, int b1, int c) |
0 | 78 { |
79 if ((b0 + 256) == b1) { | |
4641 | 80 a = c; |
2967 | 81 } else if (b0 > b1) { |
4641 | 82 a = FFMAX(a - 64, 0); |
0 | 83 } |
84 return a; | |
85 } | |
86 | |
87 static inline int calc_lowcomp(int a, int b0, int b1, int bin) | |
88 { | |
89 if (bin < 7) { | |
4641 | 90 return calc_lowcomp1(a, b0, b1, 384); |
0 | 91 } else if (bin < 20) { |
4641 | 92 return calc_lowcomp1(a, b0, b1, 320); |
0 | 93 } else { |
4641 | 94 return FFMAX(a - 128, 0); |
0 | 95 } |
96 } | |
97 | |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
98 void ff_ac3_bit_alloc_calc_psd(int8_t *exp, int start, int end, int16_t *psd, |
6003 | 99 int16_t *band_psd) |
0 | 100 { |
10282
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
101 int bin, band; |
0 | 102 |
103 /* exponent mapping to PSD */ | |
10284 | 104 for (bin = start; bin < end; bin++) { |
0 | 105 psd[bin]=(3072 - (exp[bin] << 7)); |
106 } | |
107 | |
108 /* PSD integration */ | |
10282
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
109 bin = start; |
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
110 band = bin_to_band_tab[start]; |
0 | 111 do { |
10282
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
112 int v = psd[bin++]; |
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
113 int band_end = FFMIN(band_start_tab[band+1], end); |
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
114 for (; bin < band_end; bin++) { |
0 | 115 /* logadd */ |
10282
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
116 int adr = FFMIN(FFABS(v - psd[bin]) >> 1, 255); |
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
117 v = FFMAX(v, psd[bin]) + ff_ac3_log_add_tab[adr]; |
0 | 118 } |
10283 | 119 band_psd[band++] = v; |
10282
934cd92921df
cosmetics: Rename some variables to be more descriptive of their use. Do some
jbr
parents:
10281
diff
changeset
|
120 } while (end > band_start_tab[band]); |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
121 } |
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
122 |
8279
6c2dcc1410bb
ac3: detect dba errors and prevent writing past end of array
jbr
parents:
7470
diff
changeset
|
123 int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd, |
8280 | 124 int start, int end, int fast_gain, int is_lfe, |
125 int dba_mode, int dba_nsegs, uint8_t *dba_offsets, | |
126 uint8_t *dba_lengths, uint8_t *dba_values, | |
127 int16_t *mask) | |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
128 { |
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
129 int16_t excite[50]; /* excitation */ |
10286 | 130 int band; |
131 int band_start, band_end, begin, end1; | |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
132 int lowcomp, fastleak, slowleak; |
0 | 133 |
134 /* excitation function */ | |
10286 | 135 band_start = bin_to_band_tab[start]; |
136 band_end = bin_to_band_tab[end-1] + 1; | |
2967 | 137 |
10286 | 138 if (band_start == 0) { |
782 | 139 lowcomp = 0; |
6003 | 140 lowcomp = calc_lowcomp1(lowcomp, band_psd[0], band_psd[1], 384); |
141 excite[0] = band_psd[0] - fast_gain - lowcomp; | |
142 lowcomp = calc_lowcomp1(lowcomp, band_psd[1], band_psd[2], 384); | |
143 excite[1] = band_psd[1] - fast_gain - lowcomp; | |
4640 | 144 begin = 7; |
10286 | 145 for (band = 2; band < 7; band++) { |
146 if (!(is_lfe && band == 6)) | |
147 lowcomp = calc_lowcomp1(lowcomp, band_psd[band], band_psd[band+1], 384); | |
148 fastleak = band_psd[band] - fast_gain; | |
149 slowleak = band_psd[band] - s->slow_gain; | |
150 excite[band] = fastleak - lowcomp; | |
151 if (!(is_lfe && band == 6)) { | |
152 if (band_psd[band] <= band_psd[band+1]) { | |
153 begin = band + 1; | |
4640 | 154 break; |
782 | 155 } |
156 } | |
157 } | |
2967 | 158 |
10286 | 159 end1 = FFMIN(band_end, 22); |
160 for (band = begin; band < end1; band++) { | |
161 if (!(is_lfe && band == 6)) | |
162 lowcomp = calc_lowcomp(lowcomp, band_psd[band], band_psd[band+1], band); | |
163 fastleak = FFMAX(fastleak - s->fast_decay, band_psd[band] - fast_gain); | |
164 slowleak = FFMAX(slowleak - s->slow_decay, band_psd[band] - s->slow_gain); | |
165 excite[band] = FFMAX(fastleak - lowcomp, slowleak); | |
782 | 166 } |
167 begin = 22; | |
168 } else { | |
169 /* coupling channel */ | |
10286 | 170 begin = band_start; |
6003 | 171 fastleak = (s->cpl_fast_leak << 8) + 768; |
172 slowleak = (s->cpl_slow_leak << 8) + 768; | |
0 | 173 } |
174 | |
10286 | 175 for (band = begin; band < band_end; band++) { |
176 fastleak = FFMAX(fastleak - s->fast_decay, band_psd[band] - fast_gain); | |
177 slowleak = FFMAX(slowleak - s->slow_decay, band_psd[band] - s->slow_gain); | |
178 excite[band] = FFMAX(fastleak, slowleak); | |
0 | 179 } |
180 | |
181 /* compute masking curve */ | |
182 | |
10286 | 183 for (band = band_start; band < band_end; band++) { |
184 int tmp = s->db_per_bit - band_psd[band]; | |
0 | 185 if (tmp > 0) { |
10286 | 186 excite[band] += tmp >> 2; |
0 | 187 } |
10286 | 188 mask[band] = FFMAX(ff_ac3_hearing_threshold_tab[band >> s->sr_shift][s->sr_code], excite[band]); |
0 | 189 } |
190 | |
782 | 191 /* delta bit allocation */ |
192 | |
6003 | 193 if (dba_mode == DBA_REUSE || dba_mode == DBA_NEW) { |
10286 | 194 int i, seg, delta; |
8279
6c2dcc1410bb
ac3: detect dba errors and prevent writing past end of array
jbr
parents:
7470
diff
changeset
|
195 if (dba_nsegs >= 8) |
6c2dcc1410bb
ac3: detect dba errors and prevent writing past end of array
jbr
parents:
7470
diff
changeset
|
196 return -1; |
4640 | 197 band = 0; |
8279
6c2dcc1410bb
ac3: detect dba errors and prevent writing past end of array
jbr
parents:
7470
diff
changeset
|
198 for (seg = 0; seg < dba_nsegs; seg++) { |
6c2dcc1410bb
ac3: detect dba errors and prevent writing past end of array
jbr
parents:
7470
diff
changeset
|
199 band += dba_offsets[seg]; |
6c2dcc1410bb
ac3: detect dba errors and prevent writing past end of array
jbr
parents:
7470
diff
changeset
|
200 if (band >= 50 || dba_lengths[seg] > 50-band) |
6c2dcc1410bb
ac3: detect dba errors and prevent writing past end of array
jbr
parents:
7470
diff
changeset
|
201 return -1; |
6003 | 202 if (dba_values[seg] >= 4) { |
203 delta = (dba_values[seg] - 3) << 7; | |
782 | 204 } else { |
6003 | 205 delta = (dba_values[seg] - 4) << 7; |
782 | 206 } |
10286 | 207 for (i = 0; i < dba_lengths[seg]; i++) { |
208 mask[band++] += delta; | |
782 | 209 } |
210 } | |
211 } | |
8279
6c2dcc1410bb
ac3: detect dba errors and prevent writing past end of array
jbr
parents:
7470
diff
changeset
|
212 return 0; |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
213 } |
782 | 214 |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
215 void ff_ac3_bit_alloc_calc_bap(int16_t *mask, int16_t *psd, int start, int end, |
7017 | 216 int snr_offset, int floor, |
217 const uint8_t *bap_tab, uint8_t *bap) | |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
218 { |
10291
40736a5ed681
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10290
diff
changeset
|
219 int bin, band; |
2967 | 220 |
6003 | 221 /* special case, if snr offset is -960, set all bap's to zero */ |
10284 | 222 if (snr_offset == -960) { |
4689
c7828f1ae244
fix handling of special case for lowest snroffset. regressions are unaffected.
jbr
parents:
4684
diff
changeset
|
223 memset(bap, 0, 256); |
c7828f1ae244
fix handling of special case for lowest snroffset. regressions are unaffected.
jbr
parents:
4684
diff
changeset
|
224 return; |
c7828f1ae244
fix handling of special case for lowest snroffset. regressions are unaffected.
jbr
parents:
4684
diff
changeset
|
225 } |
c7828f1ae244
fix handling of special case for lowest snroffset. regressions are unaffected.
jbr
parents:
4684
diff
changeset
|
226 |
10291
40736a5ed681
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10290
diff
changeset
|
227 bin = start; |
40736a5ed681
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10290
diff
changeset
|
228 band = bin_to_band_tab[start]; |
0 | 229 do { |
10291
40736a5ed681
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10290
diff
changeset
|
230 int m = (FFMAX(mask[band] - snr_offset - floor, 0) & 0x1FE0) + floor; |
10292 | 231 int band_end = FFMIN(bin + ff_ac3_critical_band_size_tab[band], end); |
10291
40736a5ed681
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10290
diff
changeset
|
232 for (; bin < band_end; bin++) { |
40736a5ed681
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10290
diff
changeset
|
233 int address = av_clip((psd[bin] - m) >> 5, 0, 63); |
40736a5ed681
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10290
diff
changeset
|
234 bap[bin] = bap_tab[address]; |
0 | 235 } |
10291
40736a5ed681
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10290
diff
changeset
|
236 } while (end > band_start_tab[band++]); |
0 | 237 } |
238 | |
7470
1a93d3bbe3ee
cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents:
7017
diff
changeset
|
239 /* AC-3 bit allocation. The algorithm is the one described in the AC-3 |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
240 spec. */ |
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
241 void ac3_parametric_bit_allocation(AC3BitAllocParameters *s, uint8_t *bap, |
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
242 int8_t *exp, int start, int end, |
6003 | 243 int snr_offset, int fast_gain, int is_lfe, |
244 int dba_mode, int dba_nsegs, | |
245 uint8_t *dba_offsets, uint8_t *dba_lengths, | |
246 uint8_t *dba_values) | |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
247 { |
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
248 int16_t psd[256]; /* scaled exponents */ |
6003 | 249 int16_t band_psd[50]; /* interpolated exponents */ |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
250 int16_t mask[50]; /* masking value */ |
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
251 |
6003 | 252 ff_ac3_bit_alloc_calc_psd(exp, start, end, psd, band_psd); |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
253 |
6003 | 254 ff_ac3_bit_alloc_calc_mask(s, band_psd, start, end, fast_gain, is_lfe, |
10284 | 255 dba_mode, dba_nsegs, dba_offsets, dba_lengths, |
256 dba_values, mask); | |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
257 |
7017 | 258 ff_ac3_bit_alloc_calc_bap(mask, psd, start, end, snr_offset, s->floor, |
259 ff_ac3_bap_tab, bap); | |
4684
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
260 } |
6ec0afffc572
split ac3_parametric_bit_allocation into 3 separate functions
jbr
parents:
4679
diff
changeset
|
261 |
4645
056127e5df89
remove redundancy in AC-3 parser by using common tables from ac3tab.h
jbr
parents:
4642
diff
changeset
|
262 /** |
056127e5df89
remove redundancy in AC-3 parser by using common tables from ac3tab.h
jbr
parents:
4642
diff
changeset
|
263 * Initializes some tables. |
056127e5df89
remove redundancy in AC-3 parser by using common tables from ac3tab.h
jbr
parents:
4642
diff
changeset
|
264 * note: This function must remain thread safe because it is called by the |
056127e5df89
remove redundancy in AC-3 parser by using common tables from ac3tab.h
jbr
parents:
4642
diff
changeset
|
265 * AVParser init code. |
056127e5df89
remove redundancy in AC-3 parser by using common tables from ac3tab.h
jbr
parents:
4642
diff
changeset
|
266 */ |
6517
48759bfbd073
Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents:
6003
diff
changeset
|
267 av_cold void ac3_common_init(void) |
782 | 268 { |
10278
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
269 #if !CONFIG_HARDCODED_TABLES |
782 | 270 /* compute bndtab and masktab from bandsz */ |
10288
518b07f1d61a
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10287
diff
changeset
|
271 int bin = 0, band; |
518b07f1d61a
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10287
diff
changeset
|
272 for (band = 0; band < 50; band++) { |
518b07f1d61a
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10287
diff
changeset
|
273 int band_end = bin + ff_ac3_critical_band_size_tab[band]; |
518b07f1d61a
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10287
diff
changeset
|
274 band_start_tab[band] = bin; |
518b07f1d61a
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10287
diff
changeset
|
275 while (bin < band_end) |
518b07f1d61a
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10287
diff
changeset
|
276 bin_to_band_tab[bin++] = band; |
782 | 277 } |
10288
518b07f1d61a
Cosmetics: Rename some variables to be more descriptive of their use.
jbr
parents:
10287
diff
changeset
|
278 band_start_tab[50] = bin; |
10278
1a4af35efbda
Hardcode AC-3 critical band tables when CONFIG_HARDCODED_TABLES is set.
jbr
parents:
9428
diff
changeset
|
279 #endif /* !CONFIG_HARDCODED_TABLES */ |
782 | 280 } |