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)
74 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
75 5, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14,
76 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
77 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
78 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
79 54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
83 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
84 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12,
85 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
86 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
87 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
97 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11,
100 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8,
101 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
102 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
105 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
106 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,
107 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
108 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
109 21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
110 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
111 46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
112 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
113 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
117 static const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 };
118 static const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 };
129 s->mdct_ctx.mdct_calc(&
s->mdct_ctx,
s->mdct_out,
s->in_buff);
157 for (
int i = 1;
i < 513;
i++) {
178 av_log(avctx,
AV_LOG_ERROR,
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
192 if (
s->avctx->trellis) {
195 if (!
s->opt || !
s->path)
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;
228 static inline float distance(
float x,
float y,
int band)
237 int i, j, band, best_idx;
238 float power_candidate, best_val;
247 for (
i = 0;
i < 64;
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);
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;
285 if (best_val > opt[band][
i]) {
286 best_val = opt[band][
i];
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;
321 coeff_sum +=
s->mdct_out[
i ] *
s->mdct_out[
i ]
328 if (
s->avctx->trellis) {
345 s->mdct_out[
i] *= power_val;
390 frame->nb_samples *
sizeof(*
s->buf));
417 .
p.
name =
"nellymoser",