35 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
36 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
37 20, 21, 22, 23, 24, 25, 26, 27, 28, 31,
38 34, 37, 40, 43, 46, 49, 55, 61, 67, 73,
39 79, 85, 97, 109, 121, 133, 157, 181, 205, 229, 253
47 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
48 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
49 25, 26, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30,
50 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34,
51 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36,
52 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38,
53 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40,
54 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
55 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
56 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
57 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
58 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
59 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
60 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
61 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
62 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
63 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
64 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
65 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
66 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
67 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49
72 if ((b0 + 256) == b1) {
84 }
else if (bin < 20) {
87 return FFMAX(a - 128, 0);
97 for (bin = start; bin <
end; bin++) {
98 psd[bin]=(3072 - (exp[bin] << 7));
107 for (; bin < band_end; bin++) {
108 int max =
FFMAX(v, psd[bin]);
110 int adr =
FFMIN(max - ((v + psd[bin] + 1) >> 1), 255);
113 band_psd[band++] = v;
118 int start,
int end,
int fast_gain,
int is_lfe,
119 int dba_mode,
int dba_nsegs,
uint8_t *dba_offsets,
125 int band_start, band_end, begin, end1;
126 int lowcomp, fastleak, slowleak;
135 if (band_start == 0) {
137 lowcomp =
calc_lowcomp1(lowcomp, band_psd[0], band_psd[1], 384);
138 excite[0] = band_psd[0] - fast_gain - lowcomp;
139 lowcomp =
calc_lowcomp1(lowcomp, band_psd[1], band_psd[2], 384);
140 excite[1] = band_psd[1] - fast_gain - lowcomp;
142 for (band = 2; band < 7; band++) {
143 if (!(is_lfe && band == 6))
144 lowcomp =
calc_lowcomp1(lowcomp, band_psd[band], band_psd[band+1], 384);
145 fastleak = band_psd[
band] - fast_gain;
147 excite[
band] = fastleak - lowcomp;
148 if (!(is_lfe && band == 6)) {
149 if (band_psd[band] <= band_psd[band+1]) {
156 end1 =
FFMIN(band_end, 22);
157 for (band = begin; band < end1; band++) {
158 if (!(is_lfe && band == 6))
159 lowcomp =
calc_lowcomp(lowcomp, band_psd[band], band_psd[band+1], band);
160 fastleak =
FFMAX(fastleak - s->
fast_decay, band_psd[band] - fast_gain);
162 excite[
band] =
FFMAX(fastleak - lowcomp, slowleak);
172 for (band = begin; band < band_end; band++) {
173 fastleak =
FFMAX(fastleak - s->
fast_decay, band_psd[band] - fast_gain);
175 excite[
band] =
FFMAX(fastleak, slowleak);
180 for (band = band_start; band < band_end; band++) {
183 excite[
band] += tmp >> 2;
195 for (seg = 0; seg < dba_nsegs; seg++) {
196 band += dba_offsets[seg];
199 if (dba_values[seg] >= 4) {
200 delta = (dba_values[seg] - 3) * 128;
202 delta = (dba_values[seg] - 4) * 128;
204 for (i = 0; i < dba_lengths[seg]; i++) {
205 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)
bitstream reader API header.
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
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.