|
|
|
@ -27,82 +27,6 @@ |
|
|
|
|
#include "avcodec.h" |
|
|
|
|
#include "celp_math.h" |
|
|
|
|
|
|
|
|
|
#ifdef G729_BITEXACT |
|
|
|
|
/**
|
|
|
|
|
* Cosine table: base_cos[i] = (1<<15) * cos(i*PI/64) |
|
|
|
|
*/ |
|
|
|
|
static const int16_t base_cos[64] = |
|
|
|
|
{ |
|
|
|
|
32767, 32729, 32610, 32413, 32138, 31786, 31357, 30853, |
|
|
|
|
30274, 29622, 28899, 28106, 27246, 26320, 25330, 24279, |
|
|
|
|
23170, 22006, 20788, 19520, 18205, 16846, 15447, 14010, |
|
|
|
|
12540, 11039, 9512, 7962, 6393, 4808, 3212, 1608, |
|
|
|
|
0, -1608, -3212, -4808, -6393, -7962, -9512, -11039, |
|
|
|
|
-12540, -14010, -15447, -16846, -18205, -19520, -20788, -22006, |
|
|
|
|
-23170, -24279, -25330, -26320, -27246, -28106, -28899, -29622, |
|
|
|
|
-30274, -30853, -31357, -31786, -32138, -32413, -32610, -32729 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Slope used to compute cos(x) |
|
|
|
|
* |
|
|
|
|
* cos(ind*64+offset) = base_cos[ind]+offset*slope_cos[ind] |
|
|
|
|
* values multiplied by 1<<19 |
|
|
|
|
*/ |
|
|
|
|
static const int16_t slope_cos[64] = |
|
|
|
|
{ |
|
|
|
|
-632, -1893, -3150, -4399, -5638, -6863, -8072, -9261, |
|
|
|
|
-10428, -11570, -12684, -13767, -14817, -15832, -16808, -17744, |
|
|
|
|
-18637, -19486, -20287, -21039, -21741, -22390, -22986, -23526, |
|
|
|
|
-24009, -24435, -24801, -25108, -25354, -25540, -25664, -25726, |
|
|
|
|
-25726, -25664, -25540, -25354, -25108, -24801, -24435, -24009, |
|
|
|
|
-23526, -22986, -22390, -21741, -21039, -20287, -19486, -18637, |
|
|
|
|
-17744, -16808, -15832, -14817, -13767, -12684, -11570, -10428, |
|
|
|
|
-9261, -8072, -6863, -5638, -4399, -3150, -1893, -632 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Table used to compute exp2(x) |
|
|
|
|
* |
|
|
|
|
* tab_exp2[i] = (1<<14) * exp2(i/32) = 2^(i/32) i=0..32 |
|
|
|
|
*/ |
|
|
|
|
static const uint16_t tab_exp2[33] = |
|
|
|
|
{ |
|
|
|
|
16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911, |
|
|
|
|
20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726, |
|
|
|
|
25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706, |
|
|
|
|
31379, 32066, 32767 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
int16_t ff_cos(uint16_t arg) |
|
|
|
|
{ |
|
|
|
|
uint8_t offset= arg; |
|
|
|
|
uint8_t ind = arg >> 8; |
|
|
|
|
|
|
|
|
|
assert(arg < 0x4000); |
|
|
|
|
|
|
|
|
|
return FFMAX(base_cos[ind] + ((slope_cos[ind] * offset) >> 12), -0x8000); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int ff_exp2(uint16_t power) |
|
|
|
|
{ |
|
|
|
|
uint16_t frac_x0; |
|
|
|
|
uint16_t frac_dx; |
|
|
|
|
int result; |
|
|
|
|
|
|
|
|
|
assert(power <= 0x7fff); |
|
|
|
|
|
|
|
|
|
frac_x0 = power >> 10; |
|
|
|
|
frac_dx = (power & 0x03ff) << 5; |
|
|
|
|
|
|
|
|
|
result = tab_exp2[frac_x0] << 15; |
|
|
|
|
result += frac_dx * (tab_exp2[frac_x0+1] - tab_exp2[frac_x0]); |
|
|
|
|
|
|
|
|
|
return result >> 10; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#else // G729_BITEXACT
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Cosine table: base_cos[i] = (1<<15) * cos(i*PI/64) |
|
|
|
|
*/ |
|
|
|
@ -154,8 +78,6 @@ int ff_exp2(uint16_t power) |
|
|
|
|
return result + ((result*(power&31)*89)>>22); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif // else G729_BITEXACT
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Table used to compute log2(x) |
|
|
|
|
* |
|
|
|
@ -163,17 +85,10 @@ int ff_exp2(uint16_t power) |
|
|
|
|
*/ |
|
|
|
|
static const uint16_t tab_log2[33] = |
|
|
|
|
{ |
|
|
|
|
#ifdef G729_BITEXACT |
|
|
|
|
0, 1455, 2866, 4236, 5568, 6863, 8124, 9352, |
|
|
|
|
10549, 11716, 12855, 13967, 15054, 16117, 17156, 18172, |
|
|
|
|
19167, 20142, 21097, 22033, 22951, 23852, 24735, 25603, |
|
|
|
|
26455, 27291, 28113, 28922, 29716, 30497, 31266, 32023, 32767, |
|
|
|
|
#else |
|
|
|
|
4, 1459, 2870, 4240, 5572, 6867, 8127, 9355, |
|
|
|
|
10552, 11719, 12858, 13971, 15057, 16120, 17158, 18175, |
|
|
|
|
19170, 20145, 21100, 22036, 22954, 23854, 24738, 25605, |
|
|
|
|
26457, 27294, 28116, 28924, 29719, 30500, 31269, 32025, 32769, |
|
|
|
|
#endif |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
int ff_log2(uint32_t value) |
|
|
|
|