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
48 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
49 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
50 25, 26, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30,
51 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34,
52 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36,
53 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38,
54 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40,
55 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
56 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
57 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
58 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
59 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
60 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
61 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
62 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
63 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
64 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
65 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
66 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
67 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
68 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49
73 if ((b0 + 256) == b1) {
85 }
else if (bin < 20) {
88 return FFMAX(a - 128, 0);
98 for (bin = start; bin <
end; bin++) {
99 psd[bin]=(3072 - (exp[bin] << 7));
108 for (; bin < band_end; bin++) {
109 int max =
FFMAX(v, psd[bin]);
111 int adr =
FFMIN(max - ((v + psd[bin] + 1) >> 1), 255);
114 band_psd[band++] = v;
119 int start,
int end,
int fast_gain,
int is_lfe,
120 int dba_mode,
int dba_nsegs,
uint8_t *dba_offsets,
126 int band_start, band_end, begin, end1;
127 int lowcomp, fastleak, slowleak;
136 if (band_start == 0) {
138 lowcomp =
calc_lowcomp1(lowcomp, band_psd[0], band_psd[1], 384);
139 excite[0] = band_psd[0] - fast_gain - lowcomp;
140 lowcomp =
calc_lowcomp1(lowcomp, band_psd[1], band_psd[2], 384);
141 excite[1] = band_psd[1] - fast_gain - lowcomp;
143 for (band = 2; band < 7; band++) {
144 if (!(is_lfe && band == 6))
145 lowcomp =
calc_lowcomp1(lowcomp, band_psd[band], band_psd[band+1], 384);
146 fastleak = band_psd[band] - fast_gain;
147 slowleak = band_psd[band] - s->
slow_gain;
148 excite[band] = fastleak - lowcomp;
149 if (!(is_lfe && band == 6)) {
150 if (band_psd[band] <= band_psd[band+1]) {
157 end1 =
FFMIN(band_end, 22);
158 for (band = begin; band < end1; band++) {
159 if (!(is_lfe && band == 6))
160 lowcomp =
calc_lowcomp(lowcomp, band_psd[band], band_psd[band+1], band);
161 fastleak =
FFMAX(fastleak - s->
fast_decay, band_psd[band] - fast_gain);
163 excite[band] =
FFMAX(fastleak - lowcomp, slowleak);
173 for (band = begin; band < band_end; band++) {
174 fastleak =
FFMAX(fastleak - s->
fast_decay, band_psd[band] - fast_gain);
176 excite[band] =
FFMAX(fastleak, slowleak);
181 for (band = band_start; band < band_end; band++) {
184 excite[band] += tmp >> 2;
196 for (seg = 0; seg < dba_nsegs; seg++) {
197 band += dba_offsets[seg];
200 if (dba_values[seg] >= 4) {
201 delta = (dba_values[seg] - 3) * 128;
203 delta = (dba_values[seg] - 4) * 128;
205 for (i = 0; i < dba_lengths[seg]; i++) {
206 mask[band++] +=
delta;
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
const uint8_t ff_ac3_bin_to_band_tab[253]
Map each frequency coefficient bin to the critical band that contains it.
const uint16_t ff_ac3_hearing_threshold_tab[AC3_CRITICAL_BANDS][3]
static av_cold int end(AVCodecContext *avctx)
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.