34 #define DSS_SP_FRAME_SIZE        42 
   35 #define DSS_SP_SAMPLE_COUNT     (66 * SUBFRAMES) 
   36 #define DSS_SP_FORMULA(a, b, c) ((int)((((a) * (1 << 15)) + (b) * (unsigned)(c)) + 0x4000) >> 15) 
   90            12,        13,        14,         15,         16,         17,
 
   91            18,        19,        20,         21,         22,         23,
 
   92            24,        25,        26,         27,         28,         29,
 
   93            30,        31,        32,         33,         34,         35,
 
   94            36,        37,        38,         39,         40,         41,
 
   95            42,        43,        44,         45,         46,         47,
 
   96            48,        49,        50,         51,         52,         53,
 
   97            54,        55,        56,         57,         58,         59,
 
   98            60,        61,        62,         63,         64,         65,
 
   99            66,        67,        68,         69,         70,         71 },
 
  101            15,        21,        28,         36,         45,         55,
 
  102            66,        78,        91,        105,        120,        136,
 
  103           153,       171,       190,        210,        231,        253,
 
  104           276,       300,       325,        351,        378,        406,
 
  105           435,       465,       496,        528,        561,        595,
 
  106           630,       666,       703,        741,        780,        820,
 
  107           861,       903,       946,        990,       1035,       1081,
 
  108          1128,      1176,      1225,       1275,       1326,       1378,
 
  109          1431,      1485,      1540,       1596,       1653,       1711,
 
  110          1770,      1830,      1891,       1953,       2016,       2080,
 
  111          2145,      2211,      2278,       2346,       2415,       2485 },
 
  113            20,        35,        56,         84,        120,        165,
 
  114           220,       286,       364,        455,        560,        680,
 
  115           816,       969,      1140,       1330,       1540,       1771,
 
  116          2024,      2300,      2600,       2925,       3276,       3654,
 
  117          4060,      4495,      4960,       5456,       5984,       6545,
 
  118          7140,      7770,      8436,       9139,       9880,      10660,
 
  119         11480,     12341,     13244,      14190,      15180,      16215,
 
  120         17296,     18424,     19600,      20825,      22100,      23426,
 
  121         24804,     26235,     27720,      29260,      30856,      32509,
 
  122         34220,     35990,     37820,      39711,      41664,      43680,
 
  123         45760,     47905,     50116,      52394,      54740,      57155 },
 
  125            15,        35,        70,        126,        210,        330,
 
  126           495,       715,      1001,       1365,       1820,       2380,
 
  127          3060,      3876,      4845,       5985,       7315,       8855,
 
  128         10626,     12650,     14950,      17550,      20475,      23751,
 
  129         27405,     31465,     35960,      40920,      46376,      52360,
 
  130         58905,     66045,     73815,      82251,      91390,     101270,
 
  131        111930,    123410,    135751,     148995,     163185,     178365,
 
  132        194580,    211876,    230300,     249900,     270725,     292825,
 
  133        316251,    341055,    367290,     395010,     424270,     455126,
 
  134        487635,    521855,    557845,     595665,     635376,     677040,
 
  135        720720,    766480,    814385,     864501,     916895,     971635 },
 
  137             6,        21,        56,        126,        252,        462,
 
  138           792,      1287,      2002,       3003,       4368,       6188,
 
  139          8568,     11628,     15504,      20349,      26334,      33649,
 
  140         42504,     53130,     65780,      80730,      98280,     118755,
 
  141        142506,    169911,    201376,     237336,     278256,     324632,
 
  142        376992,    435897,    501942,     575757,     658008,     749398,
 
  143        850668,    962598,   1086008,    1221759,    1370754,    1533939,
 
  144       1712304,   1906884,   2118760,    2349060,    2598960,    2869685,
 
  145       3162510,   3478761,   3819816,    4187106,    4582116,    5006386,
 
  146       5461512,   5949147,   6471002,    7028847,    7624512,    8259888,
 
  147       8936928,   9657648,  10424128,   11238513,   12103014,   13019909 },
 
  149             1,         7,        28,         84,        210,        462,
 
  150           924,      1716,      3003,       5005,       8008,      12376,
 
  151         18564,     27132,     38760,      54264,      74613,     100947,
 
  152        134596,    177100,    230230,     296010,     376740,     475020,
 
  153        593775,    736281,    906192,    1107568,    1344904,    1623160,
 
  154       1947792,   2324784,   2760681,    3262623,    3838380,    4496388,
 
  155       5245786,   6096454,   7059052,    8145060,    9366819,   10737573,
 
  156      12271512,  13983816,  15890700,   18009460,   20358520,   22957480,
 
  157      25827165,  28989675,  32468436,   36288252,   40475358,   45057474,
 
  158      50063860,  55525372,  61474519,   67945521,   74974368,   82598880,
 
  159      90858768,  99795696, 109453344,  119877472,  131115985,  143218999 },
 
  161             0,         1,         8,         36,        120,        330,
 
  162           792,      1716,      3432,       6435,      11440,      19448,
 
  163         31824,     50388,     77520,     116280,     170544,     245157,
 
  164        346104,    480700,    657800,     888030,    1184040,    1560780,
 
  165       2035800,   2629575,   3365856,    4272048,    5379616,    6724520,
 
  166       8347680,  10295472,  12620256,   15380937,   18643560,   22481940,
 
  167      26978328,  32224114,  38320568,   45379620,   53524680,   62891499,
 
  168      73629072,  85900584,  99884400,  115775100,  133784560,  154143080,
 
  169     177100560, 202927725, 231917400,  264385836,  300674088,  341149446,
 
  170     386206920, 436270780, 491796152,  553270671,  621216192,  696190560,
 
  171     778789440, 869648208, 969443904, 1078897248, 1198774720, 1329890705 },
 
  175     { -32653, -32587, -32515, -32438, -32341, -32216, -32062, -31881,
 
  176       -31665, -31398, -31080, -30724, -30299, -29813, -29248, -28572,
 
  177       -27674, -26439, -24666, -22466, -19433, -16133, -12218,  -7783,
 
  178        -2834,   1819,   6544,  11260,  16050,  20220,  24774,  28120 },
 
  180     { -27503, -24509, -20644, -17496, -14187, -11277,  -8420,  -5595,
 
  181        -3013,   -624,   1711,   3880,   5844,   7774,   9739,  11592,
 
  182        13364,  14903,  16426,  17900,  19250,  20586,  21803,  23006,
 
  183        24142,  25249,  26275,  27300,  28359,  29249,  30118,  31183 },
 
  185     { -27827, -24208, -20943, -17781, -14843, -11848,  -9066,  -6297,
 
  186        -3660,   -910,   1918,   5025,   8223,  11649,  15086,  18423,
 
  187            0,      0,      0,      0,      0,      0,      0,      0,
 
  188            0,      0,      0,      0,      0,      0,      0,      0 },
 
  190     { -17128, -11975,  -8270,  -5123,  -2296,    183,   2503,   4707,
 
  191         6798,   8945,  11045,  13239,  15528,  18248,  21115,  24785,
 
  192            0,      0,      0,      0,      0,      0,      0,      0,
 
  193            0,      0,      0,      0,      0,      0,      0,      0 },
 
  195     { -21557, -17280, -14286, -11644,  -9268,  -7087,  -4939,  -2831,
 
  196         -691,   1407,   3536,   5721,   8125,  10677,  13721,  17731,
 
  197            0,      0,      0,      0,      0,      0,      0,      0,
 
  198            0,      0,      0,      0,      0,      0,      0,      0 },
 
  200     { -15030, -10377,  -7034,  -4327,  -1900,    364,   2458,   4450,
 
  201         6422,   8374,  10374,  12486,  14714,  16997,  19626,  22954,
 
  202            0,      0,      0,      0,      0,      0,      0,      0,
 
  203            0,      0,      0,      0,      0,      0,      0,      0 },
 
  205     { -16155, -12362,  -9698,  -7460,  -5258,  -3359,  -1547,    219,
 
  206         1916,   3599,   5299,   6994,   8963,  11226,  13716,  16982,
 
  207            0,      0,      0,      0,      0,      0,      0,      0,
 
  208            0,      0,      0,      0,      0,      0,      0,      0 },
 
  210     { -14742,  -9848,  -6921,  -4648,  -2769,  -1065,    499,   2083,
 
  211         3633,   5219,   6857,   8580,  10410,  12672,  15561,  20101,
 
  212            0,      0,      0,      0,      0,      0,      0,      0,
 
  213            0,      0,      0,      0,      0,      0,      0,      0 },
 
  215     { -11099,  -7014,  -3855,  -1025,   1680,   4544,   7807,  11932,
 
  216            0,      0,      0,      0,      0,      0,      0,      0,
 
  217            0,      0,      0,      0,      0,      0,      0,      0,
 
  218            0,      0,      0,      0,      0,      0,      0,      0 },
 
  220     {  -9060,  -4570,  -1381,   1419,   4034,   6728,   9865,  14149,
 
  221            0,      0,      0,      0,      0,      0,      0,      0,
 
  222            0,      0,      0,      0,      0,      0,      0,      0,
 
  223            0,      0,      0,      0,      0,      0,      0,      0 },
 
  225     { -12450,  -7985,  -4596,  -1734,    961,   3629,   6865,  11142,
 
  226            0,      0,      0,      0,      0,      0,      0,      0,
 
  227            0,      0,      0,      0,      0,      0,      0,      0,
 
  228            0,      0,      0,      0,      0,      0,      0,      0 },
 
  230     { -11831,  -7404,  -4010,  -1096,   1606,   4291,   7386,  11482,
 
  231            0,      0,      0,      0,      0,      0,      0,      0,
 
  232            0,      0,      0,      0,      0,      0,      0,      0,
 
  233            0,      0,      0,      0,      0,      0,      0,      0 },
 
  235     { -13404,  -9250,  -5995,  -3312,   -890,   1594,   4464,   8198,
 
  236            0,      0,      0,      0,      0,      0,      0,      0,
 
  237            0,      0,      0,      0,      0,      0,      0,      0,
 
  238            0,      0,      0,      0,      0,      0,      0,      0 },
 
  240     { -11239,  -7220,  -4040,  -1406,    971,   3321,   6006,   9697,
 
  241            0,      0,      0,      0,      0,      0,      0,      0,
 
  242            0,      0,      0,      0,      0,      0,      0,      0,
 
  243            0,      0,      0,      0,      0,      0,      0,      0 },
 
  247        0,    4,    8,   13,   17,   22,   26,   31,
 
  248       35,   40,   44,   48,   53,   58,   63,   69,
 
  249       76,   83,   91,   99,  109,  119,  130,  142,
 
  250      155,  170,  185,  203,  222,  242,  265,  290,
 
  251      317,  346,  378,  414,  452,  494,  540,  591,
 
  252      646,  706,  771,  843,  922, 1007, 1101, 1204,
 
  253     1316, 1438, 1572, 1719, 1879, 2053, 2244, 2453,
 
  254     2682, 2931, 3204, 3502, 3828, 4184, 4574, 5000,
 
  258     -31182, -22273, -13364, -4455, 4455, 13364, 22273, 31182
 
  262     32767, 16384, 8192, 4096, 2048, 1024, 512, 256,
 
  263     128, 64, 32, 16, 8, 4, 2,
 
  267     32767, 26214, 20972, 16777, 13422, 10737, 8590, 6872,
 
  268     5498, 4398, 3518, 2815, 2252, 1801, 1441,
 
  272      102,  231,  360,  488,  617,  746,  875, 1004,
 
  273     1133, 1261, 1390, 1519, 1648, 1777, 1905, 2034,
 
  274     2163, 2292, 2421, 2550, 2678, 2807, 2936, 3065,
 
  275     3194, 3323, 3451, 3580, 3709, 3838, 3967, 4096,
 
  279       262,   293,   323,   348,   356,   336,   269,   139,
 
  280       -67,  -358,  -733, -1178, -1668, -2162, -2607, -2940,
 
  281     -3090, -2986, -2562, -1760,  -541,  1110,  3187,  5651,
 
  282      8435, 11446, 14568, 17670, 20611, 23251, 25460, 27125,
 
  284     27125, 25460, 23251, 20611, 17670, 14568, 11446,  8435,
 
  285      5651,  3187,  1110,  -541, -1760, -2562, -2986, -3090,
 
  286     -2940, -2607, -2162, -1668, -1178,  -733,  -358,   -67,
 
  287       139,   269,   336,   356,   348,   323,   293,   262,
 
  310     uint32_t combined_pitch;
 
  321     for (
i = 0; 
i < 2; 
i++)
 
  328     for (subframe_idx = 0; subframe_idx < 4; subframe_idx++) {
 
  335         for (
i = 0; 
i < 7; 
i++)
 
  339     for (subframe_idx = 0; subframe_idx < 4; subframe_idx++) {
 
  340         unsigned int C72_binomials[
PULSE_MAX] = {
 
  341             72, 2556, 59640, 1028790, 13991544, 156238908, 1473109704,
 
  344         unsigned int combined_pulse_pos =
 
  348         if (combined_pulse_pos < C72_binomials[
PULSE_MAX - 1]) {
 
  350                 int pulse, pulse_idx;
 
  360                 for (
i = 0; 
i < 7; 
i++) {
 
  366                     combined_pulse_pos -=
 
  378             for (
i = 71; 
i >= 0; 
i--) {
 
  379                 if (C72_binomials[
index] <= combined_pulse_pos) {
 
  380                     combined_pulse_pos -= C72_binomials[
index];
 
  392                         C72_binomials[
a + 1] -= C72_binomials[
a];
 
  400     fparam->
pitch_lag[0] = (combined_pitch % 151) + 36;
 
  402     combined_pitch /= 151;
 
  406         combined_pitch      /= 48;
 
  408     if (combined_pitch > 47) {
 
  416         if (pitch_lag > 162) {
 
  419             tmp = pitch_lag - 23;
 
  432     for (
i = 0; 
i < 14; 
i++)
 
  441     for (
a = 0; 
a < 14; 
a++) {
 
  443         coeffs[a_plus] = lpc_filter[
a] >> 2;
 
  444         if (a_plus / 2 >= 1) {
 
  445             for (
i = 1; 
i <= a_plus / 2; 
i++) {
 
  446                 int coeff_1, coeff_2, 
tmp;
 
  449                 coeff_2 = coeffs[a_plus - 
i];
 
  466     for (
i = 0; 
i < 7; 
i++)
 
  473                            int pitch_lag, 
int gain)
 
  480         for (
i = 0; 
i < 72; 
i++)
 
  481             vector[
i] = prev_exc[pitch_lag - 
i % pitch_lag];
 
  483         for (
i = 0; 
i < 72; 
i++)
 
  484             vector[
i] = prev_exc[pitch_lag - 
i];
 
  486     for (
i = 0; 
i < 72; 
i++) {
 
  487         int tmp = gain * vector[
i] >> 11;
 
  501             vec[
i] = vec[
i] * (1 << 
bits);
 
  508     for (
i = 114; 
i > 0; 
i--)
 
  509         vector[
i + 72] = vector[
i];
 
  511     for (
i = 0; 
i < 72; 
i++)
 
  512         vector[72 - 
i] = hist[
i];
 
  520     for (
a = 0; 
a < 72; 
a++) {
 
  523         tmp = dst[
a] * filter_buf[0];
 
  525         for (
i = 14; 
i > 0; 
i--)
 
  526             tmp -= error_buf[
i] * (
unsigned)filter_buf[
i];
 
  528         for (
i = 14; 
i > 0; 
i--)
 
  529             error_buf[
i] = error_buf[
i - 1];
 
  544     for (
a = 0; 
a < 72; 
a++) {
 
  547         audio_buf[0] = dst[
a];
 
  549         for (
i = 14; 
i >= 0; 
i--)
 
  550             tmp += audio_buf[
i] * filter_buf[
i];
 
  552         for (
i = 14; 
i > 0; 
i--)
 
  553             audio_buf[
i] = audio_buf[
i - 1];
 
  568     for (
i = 1; 
i < 15; 
i++)
 
  582     for (max_val = 0; 
val <= 0x4000; ++max_val)
 
  600     int bias, vsum_2 = 0, vsum_1 = 0, v36, normalize_bits;
 
  606         if (vsum_1 > 0xFFFFF)
 
  625     lpc_filter = lpc_filter >> 1;
 
  630         for (
i = 
size - 1; 
i > 0; 
i--) {
 
  648         tmp = (vsum_1 << 11) / vsum_2;
 
  670     int i, 
offset = 6, counter = 0, 
a = 0;
 
  672     for (
i = 0; 
i < 6; 
i++)
 
  706                                    int16_t *abuf_dst, 
const uint8_t *abuf_src)
 
  725         for (
i = 0; 
i < 72; 
i++)
 
  743                                int *got_frame_ptr, 
AVPacket *avpkt)
 
  746     const uint8_t *buf = avpkt->
data;
 
  747     int buf_size       = avpkt->
size;
 
  755                    "Expected %d bytes, got %d - skipping packet.\n",
 
  776     CODEC_LONG_NAME(
"Digital Speech Standard - Standard Play mode (DSS SP)"),