51 #define BITSTREAM_WRITER_LE
54 #define POW_TABLE_SIZE (1<<11)
55 #define POW_TABLE_OFFSET 3
56 #define OPT_SIZE ((1<<15) + 3000)
75 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
76 5, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14,
77 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
78 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
79 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
80 54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
84 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
85 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12,
86 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
87 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
88 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
98 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11,
101 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8,
102 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
103 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
106 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
107 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,
108 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
109 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
110 21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
111 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
112 46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
113 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
114 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
118 static const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 };
119 static const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 };
130 s->mdct_fn(
s->mdct_ctx,
s->mdct_out,
s->in_buff,
sizeof(
float));
158 for (
int i = 1;
i < 513;
i++) {
173 float scale = 32768.0;
180 av_log(avctx,
AV_LOG_ERROR,
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
194 if (
s->avctx->trellis) {
197 if (!
s->opt || !
s->path)
206 #define find_best(val, table, LUT, LUT_add, LUT_size) \
208 LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \
209 if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \
214 int band, best_idx, power_idx = 0;
215 float power_candidate;
219 idx_table[0] = best_idx;
223 power_candidate = cand[band] - power_idx;
225 idx_table[band] = best_idx;
230 static inline float distance(
float x,
float y,
int band)
239 int i, j, band, best_idx;
240 float power_candidate, best_val;
249 for (
i = 0;
i < 64;
i++) {
257 int idx_min, idx_max, idx;
258 power_candidate = cand[band];
259 for (q = 1000; !
c && q <
OPT_SIZE; q <<= 2) {
260 idx_min =
FFMAX(0, cand[band] - q);
263 if (
isinf(opt[band - 1][
i]) )
265 for (j = 0; j < 32; j++) {
269 if (idx >= idx_min) {
270 tmp = opt[band - 1][
i] +
distance(idx, power_candidate, band);
271 if (opt[band][idx] >
tmp) {
272 opt[band][idx] =
tmp;
287 if (best_val > opt[band][
i]) {
288 best_val = opt[band][
i];
293 idx_table[band] = path[band][best_idx];
309 int i, j, band,
block, best_idx, power_idx = 0;
310 float power_val,
coeff, coeff_sum;
323 coeff_sum +=
s->mdct_out[
i ] *
s->mdct_out[
i ]
330 if (
s->avctx->trellis) {
347 s->mdct_out[
i] *= power_val;
419 .
p.
name =
"nellymoser",