50 #define BITSTREAM_WRITER_LE
53 #define POW_TABLE_SIZE (1<<11)
54 #define POW_TABLE_OFFSET 3
55 #define OPT_SIZE ((1<<15) + 3000)
73 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
74 5, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14,
75 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
76 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
77 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
78 54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
82 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
83 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12,
84 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
85 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
86 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
96 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11,
99 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8,
100 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
101 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
104 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
105 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,
106 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
107 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
108 21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
109 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
110 46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
111 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
112 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
116 static const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 };
117 static const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 };
128 s->mdct_ctx.mdct_calc(&
s->mdct_ctx,
s->mdct_out,
s->in_buff);
156 for (
int i = 1;
i < 513;
i++) {
182 av_log(avctx,
AV_LOG_ERROR,
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
196 if (
s->avctx->trellis) {
199 if (!
s->opt || !
s->path)
208 #define find_best(val, table, LUT, LUT_add, LUT_size) \
210 LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \
211 if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \
216 int band, best_idx, power_idx = 0;
217 float power_candidate;
221 idx_table[0] = best_idx;
225 power_candidate = cand[band] - power_idx;
227 idx_table[band] = best_idx;
232 static inline float distance(
float x,
float y,
int band)
241 int i, j, band, best_idx;
242 float power_candidate, best_val;
251 for (
i = 0;
i < 64;
i++) {
259 int idx_min, idx_max, idx;
260 power_candidate = cand[band];
261 for (q = 1000; !
c && q <
OPT_SIZE; q <<= 2) {
262 idx_min =
FFMAX(0, cand[band] - q);
265 if (
isinf(opt[band - 1][
i]) )
267 for (j = 0; j < 32; j++) {
271 if (idx >= idx_min) {
272 tmp = opt[band - 1][
i] +
distance(idx, power_candidate, band);
273 if (opt[band][idx] >
tmp) {
274 opt[band][idx] =
tmp;
289 if (best_val > opt[band][
i]) {
290 best_val = opt[band][
i];
295 idx_table[band] = path[band][best_idx];
311 int i, j, band,
block, best_idx, power_idx = 0;
312 float power_val,
coeff, coeff_sum;
325 coeff_sum +=
s->mdct_out[
i ] *
s->mdct_out[
i ]
332 if (
s->avctx->trellis) {
349 s->mdct_out[
i] *= power_val;
394 frame->nb_samples *
sizeof(*
s->buf));
421 .
name =
"nellymoser",