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));
 
  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)
 
 1986                     if (res > avpkt->
size) {
 
 1988                                "Trying to skip %d bytes in packet of size %d\n",
 
 2008     } 
else if (*got_frame_ptr) {
 
 2012         if (res > avpkt->
size) {
 
 2014                    "Trying to skip %d bytes in packet of size %d\n",
 
 2057     for (n = 0; n < s->
lsps; n++)
 
Description of frame types. 
 
static void aw_pulse_set1(WMAVoiceContext *s, GetBitContext *gb, int block_idx, AMRFixed *fcb)
Apply first set of pitch-adaptive window pulses. 
 
av_cold void ff_rdft_end(RDFTContext *s)
 
static const uint8_t wmavoice_dq_lsp16r2[0x500]
 
const char const char void * val
 
int do_apf
whether to apply the averaged projection filter (APF) 
 
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
 
static int pRNG(int frame_cntr, int block_num, int block_size)
Generate a random number from frame_cntr and block_idx, which will live in the range [0...
 
static av_cold int decode_vbmtree(GetBitContext *gb, int8_t vbm_tree[25])
Set up the variable bit mode (VBM) tree from container extradata. 
 
void ff_celp_lp_synthesis_filterf(float *out, const float *filter_coeffs, const float *in, int buffer_length, int filter_length)
LP synthesis filter. 
 
float gain_pred_err[6]
cache for gain prediction 
 
This structure describes decoded (raw) audio or video data. 
 
void(* dct_calc)(struct DCTContext *s, FFTSample *data)
 
int aw_next_pulse_off_cache
the position (relative to start of the second block) at which pulses should start to be positioned...
 
int frame_lsp_bitsize
size (in bits) of LSPs, when encoded per-frame (independent coding) 
 
ptrdiff_t const GLvoid * data
 
static void flush(AVCodecContext *avctx)
 
float postfilter_agc
gain control memory, used in adaptive_gain_control() 
 
void ff_acelp_apply_order_2_transfer_function(float *out, const float *in, const float zero_coeffs[2], const float pole_coeffs[2], float gain, float mem[2], int n)
Apply an order 2 rational transfer function in-place. 
 
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit 
 
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
 
static void postfilter(WMAVoiceContext *s, const float *synth, float *samples, int size, const float *lpcs, float *zero_exc_pf, int fcb_type, int pitch)
Averaging projection filter, the postfilter used in WMAVoice. 
 
Memory handling functions. 
 
void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b, float weight_coeff_a, float weight_coeff_b, int length)
float implementation of weighted sum of two vectors. 
 
static void skip_bits_long(GetBitContext *s, int n)
 
static av_cold int init(AVCodecContext *avctx)
 
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
 
Innovation (fixed) codebook pulse sets in combinations of either single pulses or pulse pairs...
 
float synth_filter_out_buf[0x80+MAX_LSPS_ALIGN16]
aligned buffer for postfilter speech synthesis 
 
static void aw_parse_coords(WMAVoiceContext *s, GetBitContext *gb, const int *pitch)
Parse the offset of the first pitch-adaptive window pulses, and the distribution of pulses between th...
 
static const int8_t pulses[4]
Number of non-zero pulses in the MP-MLQ excitation. 
 
int aw_n_pulses[2]
number of AW-pulses in each block; note that this number can be negative (in which case it basically ...
 
static int interpol(MBContext *s, uint32_t *color, int x, int y, int linesize)
 
void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream. 
 
static void stabilize_lsps(double *lsps, int num)
Ensure minimum value for first item, maximum value for last value, proper spacing between each value ...
 
static const float wmavoice_gain_codebook_fcb[128]
 
static const uint8_t wmavoice_dq_lsp16i1[0x640]
 
static const uint8_t wmavoice_dq_lsp16r1[0x500]
 
int spillover_nbits
number of bits of the previous packet's last superframe preceding this packet's first full superframe...
 
void ff_set_fixed_vector(float *out, const AMRFixed *in, float scale, int size)
Add fixed vector to an array from a sparse representation. 
 
int block_pitch_nbits
number of bits used to specify the first block's pitch value 
 
static const uint8_t wmavoice_dq_lsp16i3[0x300]
 
static int synth_frame(AVCodecContext *ctx, GetBitContext *gb, int frame_idx, float *samples, const double *lsps, const double *prev_lsps, float *excitation, float *synth)
Synthesize output samples for a single frame. 
 
static void calc_input_response(WMAVoiceContext *s, float *lpcs, int fcb_type, float *coeffs, int remainder)
Derive denoise filter coefficients (in real domain) from the LPCs. 
 
static void dequant_lsp10i(GetBitContext *gb, double *lsps)
Parse 10 independently-coded LSPs. 
 
int av_log2_16bit(unsigned v)
 
#define MAX_LSPS_ALIGN16
same as MAX_LSPS; needs to be multiple 
 
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs...
 
static int aw_pulse_set2(WMAVoiceContext *s, GetBitContext *gb, int block_idx, AMRFixed *fcb)
Apply second set of pitch-adaptive window pulses. 
 
static const float wmavoice_ipol1_coeffs[17 *9]
 
static const uint8_t wmavoice_dq_lsp16i2[0x3c0]
 
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
 
int spillover_bitsize
number of bits used to specify spillover_nbits in the packet header = ceil(log2(ctx->block_align << 3...
 
float avpriv_scalarproduct_float_c(const float *v1, const float *v2, int len)
Return the scalar product of two vectors. 
 
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature. 
 
int block_delta_pitch_nbits
number of bits used to specify the delta pitch between this and the last block's pitch value...
 
enum AVSampleFormat sample_fmt
audio sample format 
 
Sparse representation for the algebraic codebook (fixed) vector. 
 
static const uint8_t wmavoice_dq_lsp16r3[0x600]
 
static const float wmavoice_gain_codebook_acb[128]
 
uint8_t log_n_blocks
log2(n_blocks) 
 
int aw_first_pulse_off[2]
index of first sample to which to apply AW-pulses, or -0xff if unset 
 
static av_cold int end(AVCodecContext *avctx)
 
int has_residual_lsps
if set, superframes contain one set of LSPs that cover all frames, encoded as independent and residua...
 
float tilted_lpcs_pf[0x80]
aligned buffer for LPC tilting 
 
comfort noise during silence generated from a hardcoded (fixed) codebook with per-frame (low) gain va...
 
uint8_t * extradata
some codecs need / can use extradata like Huffman tables. 
 
static float tilt_factor(const float *lpcs, int n_lpcs)
Get the tilt factor of a formant filter from its transfer function. 
 
static const uint8_t wmavoice_dq_lsp10r[0x1400]
 
static void dequant_lsps(double *lsps, int num, const uint16_t *values, const uint16_t *sizes, int n_stages, const uint8_t *table, const double *mul_q, const double *base_q)
Dequantize LSPs. 
 
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory. 
 
adaptive codebook with per-frame pitch, which we interpolate to get a per-sample pitch. 
 
static int check_bits_for_superframe(GetBitContext *orig_gb, WMAVoiceContext *s)
Test if there's enough bits to read 1 superframe. 
 
static const float wmavoice_ipol2_coeffs[32]
Hamming-window sinc function (num = 32, x = [ 0, 31 ]): (0.54 + 0.46 * cos(2 * M_PI * x / (num - 1)))...
 
static int get_bits_count(const GetBitContext *s)
 
float dcf_mem[2]
DC filter history. 
 
void av_memcpy_backptr(uint8_t *dst, int back, int cnt)
Overlapping memcpy() implementation. 
 
bitstream reader API header. 
 
static av_cold void wmavoice_flush(AVCodecContext *ctx)
 
float synth_history[MAX_LSPS]
see excitation_history 
 
double prev_lsps[MAX_LSPS]
LSPs of the last frame of the previous superframe. 
 
static void copy_bits(PutBitContext *pb, const uint8_t *data, int size, GetBitContext *gb, int nbits)
Copy (unaligned) bits from gb/data/size to pb. 
 
static int get_bits_left(GetBitContext *gb)
 
static double alpha(void *priv, double x, double y)
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
static const double wmavoice_mean_lsf16[2][16]
 
int sframe_cache_size
set to >0 if we have data from an (incomplete) superframe from a previous packet that spilled over in...
 
static const float wmavoice_lsp10_intercoeff_b[32][2][10]
 
int block_pitch_range
range of the block pitch 
 
static const float wmavoice_std_codebook[1000]
 
static const int sizes[][2]
 
int last_acb_type
frame type [0-2] of the previous frame 
 
static const struct endianess table[]
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
 
static const float wmavoice_gain_silence[256]
 
int denoise_filter_cache_size
samples in denoise_filter_cache 
 
int history_nsamples
number of samples in history for signal prediction (through ACB) 
 
static const uint8_t wmavoice_dq_lsp10i[0xf00]
 
static const float wmavoice_lsp10_intercoeff_a[32][2][10]
 
static const float wmavoice_energy_table[128]
LUT for 1.071575641632 * pow(1.0331663, n - 127) 
 
Windows Media Voice (WMAVoice) tables. 
 
const char * name
Name of the codec implementation. 
 
int denoise_tilt_corr
Whether to apply tilt correction to the Wiener filter coefficients (postfilter) 
 
int aw_idx_is_ext
whether the AW index was encoded in 8 bits (instead of 6) 
 
static const uint8_t offset[127][2]
 
uint16_t block_conv_table[4]
boundaries for block pitch unit/scale conversion 
 
DCTContext dst
contexts for phase shift (in Hilbert transform, part of postfilter) 
 
int lsp_def_mode
defines different sets of LSP defaults [0, 1] 
 
no adaptive codebook (only hardcoded fixed) 
 
uint64_t channel_layout
Audio channel layout. 
 
void(* rdft_calc)(struct RDFTContext *s, FFTSample *z)
 
static int put_bits_count(PutBitContext *s)
 
int skip_bits_next
number of bits to skip at the next call to wmavoice_decode_packet() (since they're part of the previo...
 
static void dequant_lsp16r(GetBitContext *gb, double *i_lsps, const double *old, double *a1, double *a2, int q_mode)
Parse 16 independently-coded LSPs, and then derive the tables to generate LSPs for the other frames f...
 
int min_pitch_val
base value for pitch parsing code 
 
WMA Voice decoding context. 
 
static void wiener_denoise(WMAVoiceContext *s, int fcb_type, float *synth_pf, int size, const float *lpcs)
This function applies a Wiener filter on the (noisy) speech signal as a means to denoise it...
 
int denoise_strength
strength of denoising in Wiener filter [0-11] 
 
uint8_t sframe_cache[SFRAME_CACHE_MAXSIZE+AV_INPUT_BUFFER_PADDING_SIZE]
cache for superframe data split over multiple packets 
 
audio channel layout utility functions 
 
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code. 
 
#define log_range(var, assign)
 
#define MAX_LSPS
maximum filter order 
 
static VLC frame_type_vlc
Frame type VLC coding. 
 
int pitch_nbits
number of bits used to specify the pitch value in the frame header 
 
#define MAX_BLOCKS
maximum number of blocks per frame 
 
float denoise_coeffs_pf[0x80]
aligned buffer for denoise coefficients 
 
static void dequant_lsp10r(GetBitContext *gb, double *i_lsps, const double *old, double *a1, double *a2, int q_mode)
Parse 10 independently-coded LSPs, and then derive the tables to generate LSPs for the other frames f...
 
static av_always_inline unsigned UMULH(unsigned a, unsigned b)
 
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code. 
 
static int kalman_smoothen(WMAVoiceContext *s, int pitch, const float *in, float *out, int size)
Kalman smoothing function. 
 
void ff_tilt_compensation(float *mem, float tilt, float *samples, int size)
Apply tilt compensation filter, 1 - tilt * z-1. 
 
static const float wmavoice_gain_universal[64]
 
void ff_acelp_lspd2lpc(const double *lsp, float *lpc, int lp_half_order)
Reconstruct LPC coefficients from the line spectral pair frequencies. 
 
static av_cold int wmavoice_decode_init(AVCodecContext *ctx)
Set up decoder with parameters from demuxer (extradata etc.). 
 
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome. 
 
int sframe_lsp_bitsize
size (in bits) of LSPs, when encoded per superframe (residual coding) 
 
static const uint8_t last_coeff[3]
 
static const struct frame_type_desc frame_descs[17]
 
float denoise_filter_cache[MAX_FRAMESIZE]
 
Libavcodec external API header. 
 
Per-block pitch with signal generation using a Hamming sinc window function. 
 
hardcoded (fixed) codebook with per-block gain values 
 
int sample_rate
samples per second 
 
void AAC_RENAME() ff_sine_window_init(INTFLOAT *window, int n)
Generate a sine window. 
 
static int wmavoice_decode_packet(AVCodecContext *ctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Packet decoding: a packet is anything that the (ASF) demuxer contains, and we expect that the demuxer...
 
main external API structure. 
 
static int parse_packet_header(WMAVoiceContext *s)
Parse the packet header at the start of each packet (input data to this decoder). ...
 
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame. 
 
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> in
 
AVCodec ff_wmavoice_decoder
 
int8_t vbm_tree[25]
converts VLC codes to frame type 
 
static unsigned int get_bits1(GetBitContext *s)
 
static void synth_block(WMAVoiceContext *s, GetBitContext *gb, int block_idx, int size, int block_pitch_sh2, const double *lsps, const double *prev_lsps, const struct frame_type_desc *frame_desc, float *excitation, float *synth)
Parse data in a single block. 
 
static av_cold int wmavoice_decode_end(AVCodecContext *ctx)
 
static void skip_bits(GetBitContext *s, int n)
 
av_cold int ff_dct_init(DCTContext *s, int nbits, enum DCTTransformType inverse)
Set up DCT. 
 
#define AV_CODEC_CAP_SUBFRAMES
Codec can output multiple frames per AVPacket Normally demuxers return one frame at a time...
 
int pitch_diff_sh16
((cur_pitch_val - last_pitch_val) << 16) / MAX_FRAMESIZE 
 
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext. 
 
#define MAX_SFRAMESIZE
maximum number of samples per superframe 
 
int lsp_q_mode
defines quantizer defaults [0, 1] 
 
int frame_cntr
current frame index [0 - 0xFFFE]; is only used for comfort noise in pRNG() 
 
void ff_celp_lp_zero_synthesis_filterf(float *out, const float *filter_coeffs, const float *in, int buffer_length, int filter_length)
LP zero synthesis filter. 
 
static void adaptive_gain_control(float *out, const float *in, const float *speech_synth, int size, float alpha, float *gain_mem)
Adaptive gain control (as used in postfilter). 
 
static const float mean_lsf[10]
 
#define SFRAME_CACHE_MAXSIZE
maximum cache size for frame data that 
 
uint8_t fcb_type
Fixed codebook type (FCB_TYPE_*) 
 
static void dequant_lsp16i(GetBitContext *gb, double *lsps)
Parse 16 independently-coded LSPs. 
 
RDFTContext irdft
contexts for FFT-calculation in the postfilter (for denoise filter) 
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
 
static int synth_superframe(AVCodecContext *ctx, AVFrame *frame, int *got_frame_ptr)
Synthesize output samples for a single superframe. 
 
static void synth_block_hardcoded(WMAVoiceContext *s, GetBitContext *gb, int block_idx, int size, const struct frame_type_desc *frame_desc, float *excitation)
Parse hardcoded signal for a single block. 
 
uint8_t n_blocks
amount of blocks per frame (each block (contains 160/n_blocks samples) 
 
common internal api header. 
 
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros. 
 
static av_cold void wmavoice_init_static_data(AVCodec *codec)
 
float excitation_history[MAX_SIGNAL_HISTORY]
cache of the signal of previous superframes, used as a history for signal generation ...
 
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s. 
 
int last_pitch_val
pitch value of the previous frame 
 
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
 
#define MAX_FRAMESIZE
maximum number of samples per frame 
 
float silence_gain
set for use in blocks if ACB_TYPE_NONE 
 
static const double wmavoice_mean_lsf10[2][10]
 
static const int16_t coeffs[]
 
int channels
number of audio channels 
 
VLC_TYPE(* table)[2]
code, bits 
 
av_cold void ff_dct_end(DCTContext *s)
 
void ff_acelp_interpolatef(float *out, const float *in, const float *filter_coeffs, int precision, int frac_pos, int filter_length, int length)
Floating point version of ff_acelp_interpolate() 
 
int block_delta_pitch_hrange
1/2 range of the delta (full range is from -this to +this-1) 
 
int max_pitch_val
max value + 1 for pitch parsing 
 
int lsps
number of LSPs per frame [10 or 16] 
 
#define MAX_FRAMES
maximum number of frames per superframe 
 
static const float wmavoice_lsp16_intercoeff_b[32][2][16]
 
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
 
PutBitContext pb
bitstream writer for sframe_cache 
 
Pitch-adaptive window (AW) pulse signals, used in particular for low-bitrate streams. 
 
uint8_t acb_type
Adaptive codebook type (ACB_TYPE_*) 
 
static const float wmavoice_denoise_power_table[12][64]
LUT for f(x,y) = pow((y + 6.9) / 64, 0.025 * (x + 1)). 
 
int dc_level
Predicted amount of DC noise, based on which a DC removal filter is used. 
 
#define VLC_NBITS
number of bits to read per VLC iteration 
 
static const float wmavoice_lsp16_intercoeff_a[32][2][16]
 
float cos[511]
8-bit cosine/sine windows over [-pi,pi] range 
 
#define AV_CH_LAYOUT_MONO
 
av_cold int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans)
Set up a real FFT. 
 
int aw_pulse_range
the range over which aw_pulse_set1() can apply the pulse, relative to the value in aw_first_pulse_off...
 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
 
This structure stores compressed data. 
 
int nb_samples
number of audio samples (per channel) described by this frame 
 
float zero_exc_pf[MAX_SIGNAL_HISTORY+MAX_SFRAMESIZE]
zero filter output (i.e. 
 
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
 
static void synth_block_fcb_acb(WMAVoiceContext *s, GetBitContext *gb, int block_idx, int size, int block_pitch_sh2, const struct frame_type_desc *frame_desc, float *excitation)
Parse FCB/ACB signal for a single block. 
 
uint8_t dbl_pulses
how many pulse vectors have pulse pairs (rather than just one single pulse) only if fcb_type == FCB_T...
 
#define MAX_SIGNAL_HISTORY
maximum excitation signal history 
 
uint16_t frame_size
the amount of bits that make up the block data (per frame) 
 
GetBitContext gb
packet bitreader.