36 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
37 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
38 20, 21, 22, 23, 24, 25, 26, 27, 28, 31,
39 34, 37, 40, 43, 46, 49, 55, 61, 67, 73,
40 79, 85, 97, 109, 121, 133, 157, 181, 205, 229, 253
43 #if CONFIG_HARDCODED_TABLES 50 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
51 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
52 25, 26, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30,
53 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34,
54 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36,
55 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38,
56 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40,
57 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
58 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
59 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
60 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
61 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
62 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
63 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
64 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
65 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
66 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
67 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
68 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
69 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
70 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49
79 if ((b0 + 256) == b1) {
91 }
else if (bin < 20) {
94 return FFMAX(a - 128, 0);
104 for (bin = start; bin < end; bin++) {
105 psd[bin]=(3072 - (exp[bin] << 7));
114 for (; bin < band_end; bin++) {
115 int max =
FFMAX(v, psd[bin]);
117 int adr =
FFMIN(max - ((v + psd[bin] + 1) >> 1), 255);
120 band_psd[band++] = v;
125 int start,
int end,
int fast_gain,
int is_lfe,
126 int dba_mode,
int dba_nsegs,
uint8_t *dba_offsets,
132 int band_start, band_end, begin, end1;
133 int lowcomp, fastleak, slowleak;
139 if (band_start == 0) {
141 lowcomp =
calc_lowcomp1(lowcomp, band_psd[0], band_psd[1], 384);
142 excite[0] = band_psd[0] - fast_gain - lowcomp;
143 lowcomp =
calc_lowcomp1(lowcomp, band_psd[1], band_psd[2], 384);
144 excite[1] = band_psd[1] - fast_gain - lowcomp;
146 for (band = 2; band < 7; band++) {
147 if (!(is_lfe && band == 6))
148 lowcomp =
calc_lowcomp1(lowcomp, band_psd[band], band_psd[band+1], 384);
149 fastleak = band_psd[band] - fast_gain;
150 slowleak = band_psd[band] - s->
slow_gain;
151 excite[band] = fastleak - lowcomp;
152 if (!(is_lfe && band == 6)) {
153 if (band_psd[band] <= band_psd[band+1]) {
160 end1 =
FFMIN(band_end, 22);
161 for (band = begin; band < end1; band++) {
162 if (!(is_lfe && band == 6))
163 lowcomp =
calc_lowcomp(lowcomp, band_psd[band], band_psd[band+1], band);
164 fastleak =
FFMAX(fastleak - s->
fast_decay, band_psd[band] - fast_gain);
166 excite[band] =
FFMAX(fastleak - lowcomp, slowleak);
176 for (band = begin; band < band_end; band++) {
177 fastleak =
FFMAX(fastleak - s->
fast_decay, band_psd[band] - fast_gain);
179 excite[band] =
FFMAX(fastleak, slowleak);
184 for (band = band_start; band < band_end; band++) {
187 excite[band] += tmp >> 2;
199 for (seg = 0; seg < dba_nsegs; seg++) {
200 band += dba_offsets[seg];
203 if (dba_values[seg] >= 4) {
204 delta = (dba_values[seg] - 3) << 7;
206 delta = (dba_values[seg] - 4) << 7;
208 for (i = 0; i < dba_lengths[seg]; i++) {
209 mask[band++] +=
delta;
223 #if !CONFIG_HARDCODED_TABLES 228 while (bin < band_end)
uint8_t ff_ac3_bin_to_band_tab[253]
av_cold void ff_ac3_common_init(void)
Initialize some tables.
const uint16_t ff_ac3_hearing_threshold_tab[AC3_CRITICAL_BANDS][3]
static const uint16_t mask[17]
int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd, int start, int end, int fast_gain, int is_lfe, int dba_mode, int dba_nsegs, uint8_t *dba_offsets, uint8_t *dba_lengths, uint8_t *dba_values, int16_t *mask)
Calculate the masking curve.
const uint8_t ff_ac3_band_start_tab[AC3_CRITICAL_BANDS+1]
Starting frequency coefficient bin for each critical band.
static int calc_lowcomp(int a, int b0, int b1, int bin)
static int calc_lowcomp1(int a, int b0, int b1, int c)
Libavcodec external API header.
const uint8_t ff_ac3_log_add_tab[260]
#define AC3_CRITICAL_BANDS
common internal and external API header
void ff_ac3_bit_alloc_calc_psd(int8_t *exp, int start, int end, int16_t *psd, int16_t *band_psd)
Calculate the log power-spectral density of the input signal.
Common code between the AC-3 encoder and decoder.