49 #define BITSTREAM_WRITER_LE
52 #define POW_TABLE_SIZE (1<<11)
53 #define POW_TABLE_OFFSET 3
54 #define OPT_SIZE ((1<<15) + 3000)
72 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
73 5, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14,
74 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
75 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
76 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
77 54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
81 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
82 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12,
83 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
84 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
85 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
95 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11,
98 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8,
99 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
100 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
103 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
104 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,
105 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
106 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
107 21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
108 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
109 46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
110 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
111 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
115 static const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 };
116 static const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 };
164 av_log(avctx,
AV_LOG_ERROR,
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
200 #define find_best(val, table, LUT, LUT_add, LUT_size) \
202 LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \
203 if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \
208 int band, best_idx, power_idx = 0;
209 float power_candidate;
213 idx_table[0] = best_idx;
217 power_candidate = cand[
band] - power_idx;
219 idx_table[
band] = best_idx;
233 int i, j,
band, best_idx;
234 float power_candidate, best_val;
243 for (i = 0; i < 64; i++) {
245 path[0][ff_nelly_init_table[i]] = i;
251 int idx_min, idx_max, idx;
252 power_candidate = cand[
band];
253 for (q = 1000; !c && q <
OPT_SIZE; q <<= 2) {
254 idx_min =
FFMAX(0, cand[band] - q);
255 idx_max =
FFMIN(OPT_SIZE, cand[band - 1] + q);
256 for (i =
FFMAX(0, cand[band - 1] - q); i <
FFMIN(OPT_SIZE, cand[band - 1] + q); i++) {
257 if (
isinf(opt[band - 1][i]) )
259 for (j = 0; j < 32; j++) {
263 if (idx >= idx_min) {
264 tmp = opt[band - 1][i] +
distance(idx, power_candidate, band);
265 if (opt[band][idx] > tmp) {
266 opt[
band][idx] = tmp;
279 band = NELLY_BANDS - 1;
281 if (best_val > opt[band][i]) {
282 best_val = opt[
band][i];
286 for (band = NELLY_BANDS - 1; band >= 0; band--) {
287 idx_table[
band] = path[
band][best_idx];
303 int i, j,
band,
block, best_idx, power_idx = 0;
304 float power_val,
coeff, coeff_sum;
321 log(
FFMAX(1.0, coeff_sum / (ff_nelly_band_sizes_table[band] << 7))) * 1024.0 /
M_LN2;
349 for (block = 0; block < 2; block++) {
360 if (fabs(coeff - table[best_idx]) > fabs(coeff - table[best_idx + 1]))
413 .
name =
"nellymoser",