49 #define BITSTREAM_WRITER_LE
52 #define POW_TABLE_SIZE (1<<11)
53 #define POW_TABLE_OFFSET 3
54 #define OPT_SIZE ((1<<15) + 3000)
72 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
73 5, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14,
74 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
75 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
76 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
77 54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
81 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
82 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12,
83 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
84 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
85 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
95 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11,
98 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8,
99 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
100 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
103 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
104 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,
105 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
106 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
107 21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
108 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
109 46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
110 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
111 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
115 static const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 };
116 static const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 };
127 s->mdct_ctx.mdct_calc(&
s->mdct_ctx,
s->mdct_out,
s->in_buff);
140 if (
s->avctx->trellis) {
164 av_log(avctx,
AV_LOG_ERROR,
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
187 for (
i = 1;
i < 513;
i++) {
195 if (
s->avctx->trellis) {
198 if (!
s->opt || !
s->path) {
210 #define find_best(val, table, LUT, LUT_add, LUT_size) \
212 LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \
213 if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \
218 int band, best_idx, power_idx = 0;
219 float power_candidate;
223 idx_table[0] = best_idx;
227 power_candidate = cand[band] - power_idx;
229 idx_table[band] = best_idx;
234 static inline float distance(
float x,
float y,
int band)
243 int i, j, band, best_idx;
244 float power_candidate, best_val;
253 for (
i = 0;
i < 64;
i++) {
261 int idx_min, idx_max, idx;
262 power_candidate = cand[band];
263 for (q = 1000; !
c && q <
OPT_SIZE; q <<= 2) {
264 idx_min =
FFMAX(0, cand[band] - q);
267 if (
isinf(opt[band - 1][
i]) )
269 for (j = 0; j < 32; j++) {
273 if (idx >= idx_min) {
274 tmp = opt[band - 1][
i] +
distance(idx, power_candidate, band);
275 if (opt[band][idx] >
tmp) {
276 opt[band][idx] =
tmp;
291 if (best_val > opt[band][
i]) {
292 best_val = opt[band][
i];
297 idx_table[band] = path[band][best_idx];
313 int i, j, band,
block, best_idx, power_idx = 0;
314 float power_val,
coeff, coeff_sum;
327 coeff_sum +=
s->mdct_out[
i ] *
s->mdct_out[
i ]
334 if (
s->avctx->trellis) {
351 s->mdct_out[
i] *= power_val;
396 frame->nb_samples *
sizeof(*
s->buf));
423 .
name =
"nellymoser",