45 #define BITSTREAM_WRITER_LE
48 #define POW_TABLE_SIZE (1<<11)
49 #define POW_TABLE_OFFSET 3
50 #define OPT_SIZE ((1<<15) + 3000)
69 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
70 5, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14,
71 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
72 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
73 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
74 54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
78 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
79 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12,
80 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
81 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
82 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
92 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11,
95 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8,
96 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
97 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
100 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
101 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,
102 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
103 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
104 21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
105 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
106 46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
107 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
108 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
112 static const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 };
113 static const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 };
144 av_log(avctx,
AV_LOG_ERROR,
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
180 #define find_best(val, table, LUT, LUT_add, LUT_size) \
182 LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \
183 if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \
188 int band, best_idx, power_idx = 0;
189 float power_candidate;
193 idx_table[0] = best_idx;
197 power_candidate = cand[band] - power_idx;
199 idx_table[band] = best_idx;
204 static inline float distance(
float x,
float y,
int band)
213 int i, j, band, best_idx;
214 float power_candidate, best_val;
223 for (i = 0; i < 64; i++) {
225 path[0][ff_nelly_init_table[i]] = i;
231 int idx_min, idx_max, idx;
232 power_candidate = cand[band];
233 for (q = 1000; !c && q <
OPT_SIZE; q <<= 2) {
234 idx_min =
FFMAX(0, cand[band] - q);
235 idx_max =
FFMIN(OPT_SIZE, cand[band - 1] + q);
236 for (i =
FFMAX(0, cand[band - 1] - q); i <
FFMIN(OPT_SIZE, cand[band - 1] + q); i++) {
237 if ( isinf(opt[band - 1][i]) )
239 for (j = 0; j < 32; j++) {
243 if (idx >= idx_min) {
244 tmp = opt[band - 1][i] +
distance(idx, power_candidate, band);
245 if (opt[band][idx] > tmp) {
246 opt[band][idx] = tmp;
259 band = NELLY_BANDS - 1;
261 if (best_val > opt[band][i]) {
262 best_val = opt[band][i];
266 for (band = NELLY_BANDS - 1; band >= 0; band--) {
267 idx_table[band] = path[band][best_idx];
283 int i, j, band,
block, best_idx, power_idx = 0;
284 float power_val, coeff, coeff_sum;
301 log(
FFMAX(1.0, coeff_sum / (ff_nelly_band_sizes_table[band] << 7))) * 1024.0 /
M_LN2;
329 for (block = 0; block < 2; block++) {
340 if (fabs(coeff - table[best_idx]) > fabs(coeff - table[best_idx + 1]))
386 .
name =
"nellymoser",