48 #define MAX_LSPS_ALIGN16     16  
 
   51 #define MAX_FRAMESIZE        160 
 
   52 #define MAX_SIGNAL_HISTORY   416 
 
   53 #define MAX_SFRAMESIZE       (MAX_FRAMESIZE * MAX_FRAMES)
 
   55 #define SFRAME_CACHE_MAXSIZE 256  
  306     int cntr[8] = { 0 }, 
n, res;
 
  308     memset(vbm_tree, 0xff, 
sizeof(vbm_tree[0]) * 25);
 
  309     for (
n = 0; 
n < 17; 
n++) {
 
  313         vbm_tree[res * 3 + cntr[res]++] = 
n;
 
  323         10, 10, 10, 12, 12, 12,
 
  326     static const uint16_t codes[] = {
 
  327           0x0000, 0x0001, 0x0002,        
 
  328           0x000c, 0x000d, 0x000e,        
 
  329           0x003c, 0x003d, 0x003e,        
 
  330           0x00fc, 0x00fd, 0x00fe,        
 
  331           0x03fc, 0x03fd, 0x03fe,        
 
  332           0x0ffc, 0x0ffd, 0x0ffe,        
 
  333           0x3ffc, 0x3ffd, 0x3ffe, 0x3fff 
 
  337                     bits, 1, 1, codes, 2, 2, 132);
 
  345     int n, 
flags, pitch_range, lsp16_flag;
 
  358                "Invalid extradata size %d (should be 46)\n",
 
  372         memcpy(&s->
sin[255], s->
cos, 256 * 
sizeof(s->
cos[0]));
 
  373         for (n = 0; n < 255; n++) {
 
  381                "Invalid denoise filter strength %d (max=11)\n",
 
  389     lsp16_flag           =    flags & 0x1000;
 
  399     for (n = 0; n < s->
lsps; n++)
 
  411     if (pitch_range <= 0) {
 
  421         int min_sr = ((((1 << 8) - 50) * 400) + 0xFF) >> 8,
 
  425                "Unsupported samplerate %d (min=%d, max=%d)\n",
 
  475                                   const float *speech_synth,
 
  479     float speech_energy = 0.0, postfilter_energy = 0.0, gain_scale_factor;
 
  480     float mem = *gain_mem;
 
  482     for (i = 0; i < 
size; i++) {
 
  483         speech_energy     += fabsf(speech_synth[i]);
 
  484         postfilter_energy += fabsf(in[i]);
 
  486     gain_scale_factor = (1.0 - 
alpha) * speech_energy / postfilter_energy;
 
  488     for (i = 0; i < 
size; i++) {
 
  489         mem = alpha * mem + gain_scale_factor;
 
  490         out[i] = in[i] * 
mem;
 
  518     float optimal_gain = 0, dot;
 
  521                 *best_hist_ptr = 
NULL;
 
  526         if (dot > optimal_gain) {
 
  530     } 
while (--ptr >= end);
 
  532     if (optimal_gain <= 0)
 
  538     if (optimal_gain <= dot) {
 
  539         dot = dot / (dot + 0.6 * optimal_gain); 
 
  544     for (n = 0; n < 
size; n++)
 
  545         out[n] = best_hist_ptr[n] + dot * (in[n] - best_hist_ptr[n]);
 
  574                                 int fcb_type, 
float *coeffs, 
int remainder)
 
  577     float irange, angle_mul, gain_mul, range, sq;
 
  582 #define log_range(var, assign) do { \ 
  583         float tmp = log10f(assign);  var = tmp; \ 
  584         max       = FFMAX(max, tmp); min = FFMIN(min, tmp); \ 
  586     log_range(last_coeff,  lpcs[1]         * lpcs[1]);
 
  587     for (n = 1; n < 64; n++)
 
  588         log_range(lpcs[n], lpcs[n * 2]     * lpcs[n * 2] +
 
  589                            lpcs[n * 2 + 1] * lpcs[n * 2 + 1]);
 
  600     irange    = 64.0 / range; 
 
  604     for (n = 0; n <= 64; n++) {
 
  607         idx = 
FFMAX(0, 
lrint((max - lpcs[n]) * irange) - 1);
 
  609         lpcs[
n] = angle_mul * pwr;
 
  612         idx = (pwr * gain_mul - 0.0295) * 70.570526123;
 
  615                         powf(1.0331663, idx - 127);
 
  628     idx = 255 + av_clip(lpcs[64],               -255, 255);
 
  629     coeffs[0]  = coeffs[0]  * s->
cos[idx];
 
  630     idx = 255 + av_clip(lpcs[64] - 2 * lpcs[63], -255, 255);
 
  631     last_coeff = coeffs[64] * s->
cos[idx];
 
  633         idx = 255 + av_clip(-lpcs[64] - 2 * lpcs[n - 1], -255, 255);
 
  634         coeffs[n * 2 + 1] = coeffs[
n] * s->
sin[idx];
 
  635         coeffs[n * 2]     = coeffs[
n] * s->
cos[idx];
 
  639         idx = 255 + av_clip( lpcs[64] - 2 * lpcs[n - 1], -255, 255);
 
  640         coeffs[n * 2 + 1] = coeffs[
n] * s->
sin[idx];
 
  641         coeffs[n * 2]     = coeffs[
n] * s->
cos[idx];
 
  649     memset(&coeffs[remainder], 0, 
sizeof(coeffs[0]) * (128 - remainder));
 
  653         coeffs[remainder - 1] = 0;
 
  660     for (n = 0; n < remainder; n++)
 
  691                            float *synth_pf, 
int size,
 
  694     int remainder, lim, 
n;
 
  700         tilted_lpcs[0]           = 1.0;
 
  701         memcpy(&tilted_lpcs[1], lpcs, 
sizeof(lpcs[0]) * s->
lsps);
 
  702         memset(&tilted_lpcs[s->
lsps + 1], 0,
 
  703                sizeof(tilted_lpcs[0]) * (128 - s->
lsps - 1));
 
  705                              tilted_lpcs, s->
lsps + 2);
 
  711         remainder = 
FFMIN(127 - size, size - 1);
 
  716         memset(&synth_pf[size], 0, 
sizeof(synth_pf[0]) * (128 - size));
 
  719         synth_pf[0] *= coeffs[0];
 
  720         synth_pf[1] *= coeffs[1];
 
  721         for (n = 1; n < 64; n++) {
 
  722             float v1 = synth_pf[n * 2], v2 = synth_pf[n * 2 + 1];
 
  723             synth_pf[n * 2]     = v1 * coeffs[n * 2] - v2 * coeffs[n * 2 + 1];
 
  724             synth_pf[n * 2 + 1] = v2 * coeffs[n * 2] + v1 * coeffs[n * 2 + 1];
 
  732         for (n = 0; n < lim; n++)
 
  742         for (n = 0; n < lim; n++)
 
  744         if (lim < remainder) {
 
  773                        float *samples,    
int size,
 
  774                        const float *lpcs, 
float *zero_exc_pf,
 
  775                        int fcb_type,      
int pitch)
 
  779           *synth_filter_in = zero_exc_pf;
 
  788         synth_filter_in = synth_filter_in_buf;
 
  792                                  synth_filter_in, size, s->
lsps);
 
  793     memcpy(&synth_pf[-s->
lsps], &synth_pf[size - s->
lsps],
 
  794            sizeof(synth_pf[0]) * s->
lsps);
 
  806             (
const float[2]) { -1.99997,      1.0 },
 
  807             (
const float[2]) { -1.9330735188, 0.93589198496 },
 
  827                          const uint16_t *values,
 
  828                          const uint16_t *
sizes,
 
  831                          const double *base_q)
 
  835     memset(lsps, 0, num * 
sizeof(*lsps));
 
  836     for (n = 0; n < n_stages; n++) {
 
  837         const uint8_t *t_off = &table[values[
n] * num];
 
  838         double base = base_q[
n], mul = mul_q[
n];
 
  840         for (m = 0; m < num; m++)
 
  841             lsps[m] += base + mul * t_off[m];
 
  843         table += sizes[
n] * num;
 
  860     static const uint16_t vec_sizes[4] = { 256, 64, 32, 32 };
 
  861     static const double mul_lsf[4] = {
 
  862         5.2187144800e-3,    1.4626986422e-3,
 
  863         9.6179549166e-4,    1.1325736225e-3
 
  865     static const double base_lsf[4] = {
 
  866         M_PI * -2.15522e-1, 
M_PI * -6.1646e-2,
 
  867         M_PI * -3.3486e-2,  
M_PI * -5.7408e-2
 
  885                            double *i_lsps, 
const double *old,
 
  886                            double *
a1, 
double *
a2, 
int q_mode)
 
  888     static const uint16_t vec_sizes[3] = { 128, 64, 64 };
 
  889     static const double mul_lsf[3] = {
 
  890         2.5807601174e-3,    1.2354460219e-3,   1.1763821673e-3
 
  892     static const double base_lsf[3] = {
 
  893         M_PI * -1.07448e-1, 
M_PI * -5.2706e-2, 
M_PI * -5.1634e-2
 
  895     const float (*ipol_tab)[2][10] = q_mode ?
 
  907     for (n = 0; n < 10; n++) {
 
  908         double delta = old[
n] - i_lsps[
n];
 
  909         a1[
n]        = ipol_tab[
interpol][0][
n] * delta + i_lsps[
n];
 
  910         a1[10 + 
n]   = ipol_tab[
interpol][1][
n] * delta + i_lsps[
n];
 
  922     static const uint16_t vec_sizes[5] = { 256, 64, 128, 64, 128 };
 
  923     static const double mul_lsf[5] = {
 
  924         3.3439586280e-3,    6.9908173703e-4,
 
  925         3.3216608306e-3,    1.0334960326e-3,
 
  928     static const double base_lsf[5] = {
 
  929         M_PI * -1.27576e-1, 
M_PI * -2.4292e-2,
 
  930         M_PI * -1.28094e-1, 
M_PI * -3.2128e-2,
 
  954                            double *i_lsps, 
const double *old,
 
  955                            double *
a1, 
double *
a2, 
int q_mode)
 
  957     static const uint16_t vec_sizes[3] = { 128, 128, 128 };
 
  958     static const double mul_lsf[3] = {
 
  959         1.2232979501e-3,   1.4062241527e-3,   1.6114744851e-3
 
  961     static const double base_lsf[3] = {
 
  964     const float (*ipol_tab)[2][16] = q_mode ?
 
  976     for (n = 0; n < 16; n++) {
 
  977         double delta = old[
n] - i_lsps[
n];
 
  978         a1[
n]        = ipol_tab[
interpol][0][
n] * delta + i_lsps[
n];
 
  979         a1[16 + 
n]   = ipol_tab[
interpol][1][
n] * delta + i_lsps[
n];
 
 1006     static const int16_t start_offset[94] = {
 
 1007         -11,  -9,  -7,  -5,  -3,  -1,   1,   3,   5,   7,   9,  11,
 
 1008          13,  15,  18,  17,  19,  20,  21,  22,  23,  24,  25,  26,
 
 1009          27,  28,  29,  30,  31,  32,  33,  35,  37,  39,  41,  43,
 
 1010          45,  47,  49,  51,  53,  55,  57,  59,  61,  63,  65,  67,
 
 1011          69,  71,  73,  75,  77,  79,  81,  83,  85,  87,  89,  91,
 
 1012          93,  95,  97,  99, 101, 103, 105, 107, 109, 111, 113, 115,
 
 1013         117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139,
 
 1014         141, 143, 145, 147, 149, 151, 153, 155, 157, 159
 
 1020     if ((bits = 
get_bits(gb, 6)) >= 54) {
 
 1022         bits += (bits - 54) * 3 + 
get_bits(gb, 2);
 
 1028     for (offset = start_offset[bits]; offset < 0; offset += pitch[0]) ;
 
 1041         if (start_offset[bits] < 0)
 
 1058     uint16_t use_mask_mem[9]; 
 
 1059     uint16_t *use_mask = use_mask_mem + 2;
 
 1068         pulse_start, 
n, idx, range, aidx, start_off = 0;
 
 1077         if (block_idx == 0) {
 
 1086     pulse_start = s->
aw_n_pulses[block_idx] > 0 ? pulse_off - range / 2 : 0;
 
 1091     memset(&use_mask[-2], 0, 2 * 
sizeof(use_mask[0]));
 
 1092     memset( use_mask,   -1, 5 * 
sizeof(use_mask[0]));
 
 1093     memset(&use_mask[5], 0, 2 * 
sizeof(use_mask[0]));
 
 1097             uint16_t *use_mask_ptr = &use_mask[idx >> 4];
 
 1098             int first_sh           = 16 - (idx & 15);
 
 1099             *use_mask_ptr++       &= 0xFFFF
u << first_sh;
 
 1100             excl_range            -= first_sh;
 
 1101             if (excl_range >= 16) {
 
 1102                 *use_mask_ptr++    = 0;
 
 1103                 *use_mask_ptr     &= 0xFFFF >> (excl_range - 16);
 
 1105                 *use_mask_ptr     &= 0xFFFF >> excl_range;
 
 1110     for (n = 0; n <= aidx; pulse_start++) {
 
 1111         for (idx = pulse_start; idx < 0; idx += fcb->
pitch_lag) ;
 
 1113             if (use_mask[0])      idx = 0x0F;
 
 1114             else if (use_mask[1]) idx = 0x1F;
 
 1115             else if (use_mask[2]) idx = 0x2F;
 
 1116             else if (use_mask[3]) idx = 0x3F;
 
 1117             else if (use_mask[4]) idx = 0x4F;
 
 1121         if (use_mask[idx >> 4] & (0x8000 >> (idx & 15))) {
 
 1122             use_mask[idx >> 4] &= ~(0x8000 >> (idx & 15));
 
 1128     fcb->
x[fcb->
n] = start_off;
 
 1152         int n, v_mask, i_mask, sh, n_pulses;
 
 1166         for (n = n_pulses - 1; n >= 0; n--, val >>= sh) {
 
 1167             fcb->
y[fcb->
n] = (val & v_mask) ? -1.0 : 1.0;
 
 1168             fcb->
x[fcb->
n] = (val & i_mask) * n_pulses + n +
 
 1170             while (fcb->
x[fcb->
n] < 0)
 
 1176         int num2 = (val & 0x1FF) >> 1, 
delta, idx;
 
 1178         if (num2 < 1 * 79)      { 
delta = 1; idx = num2 + 1; }
 
 1179         else if (num2 < 2 * 78) { 
delta = 3; idx = num2 + 1 - 1 * 77; }
 
 1180         else if (num2 < 3 * 77) { 
delta = 5; idx = num2 + 1 - 2 * 76; }
 
 1181         else                    { 
delta = 7; idx = num2 + 1 - 3 * 75; }
 
 1182         v = (val & 0x200) ? -1.0 : 1.0;
 
 1187         fcb->
x[fcb->
n + 1]   = idx;
 
 1188         fcb->
y[fcb->
n + 1]   = (val & 1) ? -v : v;
 
 1206 static int pRNG(
int frame_cntr, 
int block_num, 
int block_size)
 
 1218     static const unsigned int div_tbl[9][2] = {
 
 1219         { 8332,  3 * 715827883
U }, 
 
 1220         { 4545,  0 * 390451573
U }, 
 
 1221         { 3124, 11 * 268435456
U }, 
 
 1222         { 2380, 15 * 204522253
U }, 
 
 1223         { 1922, 23 * 165191050
U }, 
 
 1224         { 1612, 23 * 138547333
U }, 
 
 1225         { 1388, 27 * 119304648
U }, 
 
 1226         { 1219, 16 * 104755300
U }, 
 
 1227         { 1086, 39 *  93368855
U }  
 
 1229     unsigned int z, 
y, x = 
MUL16(block_num, 1877) + frame_cntr;
 
 1230     if (x >= 0xFFFF) x -= 0xFFFF;   
 
 1232     y = x - 9 * 
MULH(477218589, x); 
 
 1233     z = (uint16_t) (x * div_tbl[y][0] + 
UMULH(x, div_tbl[y][1]));
 
 1235     return z % (1000 - block_size);
 
 1243                                  int block_idx, 
int size,
 
 1265     for (n = 0; n < 
size; n++)
 
 1274                                 int block_idx, 
int size,
 
 1275                                 int block_pitch_sh2,
 
 1279     static const float gain_coeff[6] = {
 
 1280         0.8169, -0.06545, 0.1726, 0.0185, -0.0359, 0.0458
 
 1283     int n, idx, gain_weight;
 
 1287     memset(pulses, 0, 
sizeof(*pulses) * size);
 
 1304             for (n = 0; n < 
size; n++)
 
 1316         for (n = 0; n < 5; n++) {
 
 1322             fcb.
x[fcb.
n]   = n + 5 * pos1;
 
 1323             fcb.
y[fcb.
n++] = sign;
 
 1324             if (n < frame_desc->dbl_pulses) {
 
 1326                 fcb.
x[fcb.
n]   = n + 5 * pos2;
 
 1327                 fcb.
y[fcb.
n++] = (pos1 < pos2) ? -sign : sign;
 
 1347     for (n = 0; n < gain_weight; n++)
 
 1353         for (n = 0; n < 
size; n += 
len) {
 
 1355             int abs_idx    = block_idx * size + 
n;
 
 1358             int pitch      = (pitch_sh16 + 0x6FFF) >> 16;
 
 1359             int idx_sh16   = ((pitch << 16) - pitch_sh16) * 8 + 0x58000;
 
 1360             idx            = idx_sh16 >> 16;
 
 1363                     next_idx_sh16 = (idx_sh16) &~ 0xFFFF;
 
 1365                     next_idx_sh16 = (idx_sh16 + 0x10000) &~ 0xFFFF;
 
 1376         int block_pitch = block_pitch_sh2 >> 2;
 
 1377         idx             = block_pitch_sh2 & 3;
 
 1384                               sizeof(
float) * size);
 
 1389                             acb_gain, fcb_gain, size);
 
 1409                         int block_idx, 
int size,
 
 1410                         int block_pitch_sh2,
 
 1411                         const double *lsps, 
const double *prev_lsps,
 
 1413                         float *excitation, 
float *synth)
 
 1424                             frame_desc, excitation);
 
 1427     fac = (block_idx + 0.5) / frame_desc->
n_blocks;
 
 1428     for (n = 0; n < s->
lsps; n++) 
 
 1429         i_lsps[n] = cos(prev_lsps[n] + fac * (lsps[n] - prev_lsps[n]));
 
 1453                        const double *lsps, 
const double *prev_lsps,
 
 1454                        float *excitation, 
float *synth)
 
 1457     int n, n_blocks_x2, log_n_blocks_x2, 
av_uninit(cur_pitch_val);
 
 1465                "Invalid frame type VLC code, skipping\n");
 
 1488             int fac = n * 2 + 1;
 
 1490             pitch[
n] = (
MUL16(fac,                 cur_pitch_val) +
 
 1532             last_block_pitch = av_clip(block_pitch,
 
 1538             if (block_pitch < t1) {
 
 1542                 if (block_pitch < 
t2) {
 
 1547                     if (block_pitch < 
t3) {
 
 1554             pitch[
n] = bl_pitch_sh2 >> 2;
 
 1559             bl_pitch_sh2 = pitch[
n] << 2;
 
 1568         synth_block(s, gb, n, block_nsamples, bl_pitch_sh2,
 
 1570                     &excitation[n * block_nsamples],
 
 1571                     &synth[n * block_nsamples]);
 
 1580         for (n = 0; n < s->
lsps; n++) 
 
 1581             i_lsps[n] = cos(0.5 * (prev_lsps[n] + lsps[n]));
 
 1587         for (n = 0; n < s->
lsps; n++) 
 
 1588             i_lsps[n] = cos(lsps[n]);
 
 1590         postfilter(s, &synth[80], &samples[80], 80, lpcs,
 
 1594         memcpy(samples, synth, 160 * 
sizeof(synth[0]));
 
 1634     lsps[0]       = 
FFMAX(lsps[0],       0.0015 * 
M_PI);
 
 1635     for (n = 1; n < num; n++)
 
 1636         lsps[n]   = 
FFMAX(lsps[n],       lsps[n - 1] + 0.0125 * 
M_PI);
 
 1637     lsps[num - 1] = 
FFMIN(lsps[num - 1], 0.9985 * 
M_PI);
 
 1641     for (n = 1; n < num; n++) {
 
 1642         if (lsps[n] < lsps[n - 1]) {
 
 1643             for (m = 1; m < num; m++) {
 
 1644                 double tmp = lsps[
m];
 
 1645                 for (l = m - 1; l >= 0; l--) {
 
 1646                     if (lsps[l] <= tmp) 
break;
 
 1647                     lsps[l + 1] = lsps[l];
 
 1669     int n, need_bits, bd_idx;
 
 1691         int aw_idx_is_ext = 0;
 
 1721             need_bits = 2 * !aw_idx_is_ext;
 
 1755     int n, res, n_samples = 480;
 
 1764            s->
lsps             * 
sizeof(*synth));
 
 1791         if ((n_samples = 
get_bits(gb, 12)) > 480) {
 
 1793                    "Superframe encodes >480 samples (%d), not allowed\n",
 
 1802         for (n = 0; n < s->
lsps; n++)
 
 1803             prev_lsps[n] = s->
prev_lsps[n] - mean_lsf[n];
 
 1810         for (n = 0; n < s->
lsps; n++) {
 
 1811             lsps[0][
n]  = mean_lsf[
n] + (a1[
n]           - a2[n * 2]);
 
 1812             lsps[1][
n]  = mean_lsf[
n] + (a1[s->
lsps + 
n] - a2[n * 2 + 1]);
 
 1813             lsps[2][
n] += mean_lsf[
n];
 
 1815         for (n = 0; n < 3; n++)
 
 1824     samples = (
float *)frame->
data[0];
 
 1827     for (n = 0; n < 3; n++) {
 
 1831             if (s->
lsps == 10) {
 
 1836             for (m = 0; m < s->
lsps; m++)
 
 1837                 lsps[n][m] += mean_lsf[m];
 
 1843                                lsps[n], n == 0 ? s->
prev_lsps : lsps[n - 1],
 
 1845                                &synth[s->
lsps + n * MAX_FRAMESIZE]))) {
 
 1865            s->
lsps             * 
sizeof(*synth));
 
 1896     } 
while (res == 0x3F);
 
 1921     int rmn_bytes, rmn_bits;
 
 1924     if (rmn_bits < nbits)
 
 1928     rmn_bits &= 7; rmn_bytes >>= 3;
 
 1929     if ((rmn_bits = 
FFMIN(rmn_bits, nbits)) > 0)
 
 1932                  FFMIN(nbits - rmn_bits, rmn_bytes << 3));
 
 1947                                   int *got_frame_ptr, 
AVPacket *avpkt)
 
 2001     } 
else if (*got_frame_ptr) {
 
 2043     for (n = 0; n < s->
lsps; n++)