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 };
 
  164         av_log(avctx, 
AV_LOG_ERROR, 
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
 
  200 #define find_best(val, table, LUT, LUT_add, LUT_size) \ 
  202         LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \ 
  203     if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \ 
  208     int band, best_idx, power_idx = 0;
 
  209     float power_candidate;
 
  213     idx_table[0] = best_idx;
 
  217         power_candidate = cand[
band] - power_idx;
 
  219         idx_table[
band] = best_idx;
 
  233     int i, j, 
band, best_idx;
 
  234     float power_candidate, best_val;
 
  243     for (i = 0; i < 64; i++) {
 
  245         path[0][ff_nelly_init_table[i]] = i;
 
  251         int idx_min, idx_max, idx;
 
  252         power_candidate = cand[
band];
 
  253         for (q = 1000; !c && q < 
OPT_SIZE; q <<= 2) {
 
  254             idx_min = 
FFMAX(0, cand[band] - q);
 
  255             idx_max = 
FFMIN(OPT_SIZE, cand[band - 1] + q);
 
  256             for (i = 
FFMAX(0, cand[band - 1] - q); i < 
FFMIN(OPT_SIZE, cand[band - 1] + q); i++) {
 
  257                 if ( 
isinf(opt[band - 1][i]) )
 
  259                 for (j = 0; j < 32; j++) {
 
  263                     if (idx >= idx_min) {
 
  264                         tmp = opt[band - 1][i] + 
distance(idx, power_candidate, band);
 
  265                         if (opt[band][idx] > tmp) {
 
  266                             opt[
band][idx] = tmp;
 
  279     band = NELLY_BANDS - 1;
 
  281         if (best_val > opt[band][i]) {
 
  282             best_val = opt[
band][i];
 
  286     for (band = NELLY_BANDS - 1; band >= 0; band--) {
 
  287         idx_table[
band] = path[
band][best_idx];
 
  303     int i, j, 
band, 
block, best_idx, power_idx = 0;
 
  304     float power_val, 
coeff, coeff_sum;
 
  321             log(
FFMAX(1.0, coeff_sum / (ff_nelly_band_sizes_table[band] << 7))) * 1024.0 / 
M_LN2;
 
  349     for (block = 0; block < 2; block++) {
 
  360                 if (fabs(coeff - table[best_idx]) > fabs(coeff - table[best_idx + 1]))
 
  413     .
name           = 
"nellymoser",