47 #define BITSTREAM_WRITER_LE
50 #define POW_TABLE_SIZE (1<<11)
51 #define POW_TABLE_OFFSET 3
52 #define OPT_SIZE ((1<<15) + 3000)
70 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
71 5, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14,
72 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
73 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
74 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
75 54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
79 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
80 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12,
81 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
82 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
83 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
93 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11,
96 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8,
97 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
98 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
101 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
102 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,
103 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
104 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
105 21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
106 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
107 46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
108 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
109 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
113 static const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 };
114 static const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 };
143 #if FF_API_OLD_ENCODE_AUDIO
164 av_log(avctx,
AV_LOG_ERROR,
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
190 #if FF_API_OLD_ENCODE_AUDIO
204 #define find_best(val, table, LUT, LUT_add, LUT_size) \
206 LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \
207 if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \
212 int band, best_idx, power_idx = 0;
213 float power_candidate;
217 idx_table[0] = best_idx;
221 power_candidate = cand[
band] - power_idx;
223 idx_table[
band] = best_idx;
237 int i, j,
band, best_idx;
238 float power_candidate, best_val;
247 for (i = 0; i < 64; i++) {
249 path[0][ff_nelly_init_table[i]] = i;
255 int idx_min, idx_max, idx;
256 power_candidate = cand[
band];
257 for (q = 1000; !c && q <
OPT_SIZE; q <<= 2) {
258 idx_min =
FFMAX(0, cand[band] - q);
259 idx_max =
FFMIN(OPT_SIZE, cand[band - 1] + q);
260 for (i =
FFMAX(0, cand[band - 1] - q); i <
FFMIN(OPT_SIZE, cand[band - 1] + q); i++) {
261 if (
isinf(opt[band - 1][i]) )
263 for (j = 0; j < 32; j++) {
267 if (idx >= idx_min) {
268 tmp = opt[band - 1][i] +
distance(idx, power_candidate, band);
269 if (opt[band][idx] > tmp) {
270 opt[
band][idx] = tmp;
283 band = NELLY_BANDS - 1;
285 if (best_val > opt[band][i]) {
286 best_val = opt[
band][i];
290 for (band = NELLY_BANDS - 1; band >= 0; band--) {
291 idx_table[
band] = path[
band][best_idx];
307 int i, j,
band,
block, best_idx, power_idx = 0;
308 float power_val,
coeff, coeff_sum;
325 log(
FFMAX(1.0, coeff_sum / (ff_nelly_band_sizes_table[band] << 7))) * 1024.0 /
M_LN2;
353 for (block = 0; block < 2; block++) {
364 if (fabs(coeff - table[best_idx]) > fabs(coeff - table[best_idx + 1]))
417 .
name =
"nellymoser",