COMMON: Update code from eos
This commit is contained in:
parent
e6171fbb74
commit
87b4ef5547
4 changed files with 27 additions and 48 deletions
|
@ -163,13 +163,13 @@ PASS(pass)
|
|||
#define BUTTERFLIES BUTTERFLIES_BIG
|
||||
PASS(pass_big)
|
||||
|
||||
#define DECL_FFT(n,n2,n4)\
|
||||
#define DECL_FFT(t,n,n2,n4)\
|
||||
static void fft##n(Complex *z)\
|
||||
{\
|
||||
fft##n2(z);\
|
||||
fft##n4(z+n4*2);\
|
||||
fft##n4(z+n4*3);\
|
||||
pass(z,cosTable##n,n4/2);\
|
||||
pass(z,getCosineTable(t),n4/2);\
|
||||
}
|
||||
|
||||
static void fft4(Complex *z)
|
||||
|
@ -214,25 +214,27 @@ static void fft16(Complex *z)
|
|||
fft4(z+8);
|
||||
fft4(z+12);
|
||||
|
||||
const float * const cosTable = getCosineTable(4);
|
||||
|
||||
TRANSFORM_ZERO(z[0],z[4],z[8],z[12]);
|
||||
TRANSFORM(z[2],z[6],z[10],z[14],sqrthalf,sqrthalf);
|
||||
TRANSFORM(z[1],z[5],z[9],z[13],cosTable16[1],cosTable16[3]);
|
||||
TRANSFORM(z[3],z[7],z[11],z[15],cosTable16[3],cosTable16[1]);
|
||||
TRANSFORM(z[1],z[5],z[9],z[13],cosTable[1],cosTable[3]);
|
||||
TRANSFORM(z[3],z[7],z[11],z[15],cosTable[3],cosTable[1]);
|
||||
}
|
||||
|
||||
DECL_FFT(32,16,8)
|
||||
DECL_FFT(64,32,16)
|
||||
DECL_FFT(128,64,32)
|
||||
DECL_FFT(256,128,64)
|
||||
DECL_FFT(512,256,128)
|
||||
DECL_FFT(5, 32,16,8)
|
||||
DECL_FFT(6, 64,32,16)
|
||||
DECL_FFT(7, 128,64,32)
|
||||
DECL_FFT(8, 256,128,64)
|
||||
DECL_FFT(9, 512,256,128)
|
||||
#define pass pass_big
|
||||
DECL_FFT(1024,512,256)
|
||||
DECL_FFT(2048,1024,512)
|
||||
DECL_FFT(4096,2048,1024)
|
||||
DECL_FFT(8192,4096,2048)
|
||||
DECL_FFT(16384,8192,4096)
|
||||
DECL_FFT(32768,16384,8192)
|
||||
DECL_FFT(65536,32768,16384)
|
||||
DECL_FFT(10, 1024,512,256)
|
||||
DECL_FFT(11, 2048,1024,512)
|
||||
DECL_FFT(12, 4096,2048,1024)
|
||||
DECL_FFT(13, 8192,4096,2048)
|
||||
DECL_FFT(14, 16384,8192,4096)
|
||||
DECL_FFT(15, 32768,16384,8192)
|
||||
DECL_FFT(16, 65536,32768,16384)
|
||||
|
||||
static void (* const fft_dispatch[])(Complex*) = {
|
||||
fft4, fft8, fft16, fft32, fft64, fft128, fft256, fft512, fft1024,
|
||||
|
|
|
@ -34,12 +34,17 @@ Huffman::Symbol::Symbol(uint32 c, uint32 s) : code(c), symbol(s) {
|
|||
|
||||
|
||||
Huffman::Huffman(uint8 maxLength, uint32 codeCount, const uint32 *codes, const uint8 *lengths, const uint32 *symbols) {
|
||||
assert(maxLength > 0);
|
||||
assert(codeCount > 0);
|
||||
|
||||
assert(codes);
|
||||
assert(lengths);
|
||||
|
||||
if (maxLength == 0)
|
||||
for (uint32 i = 0; i < codeCount; i++)
|
||||
maxLength = MAX(maxLength, lengths[i]);
|
||||
|
||||
assert(maxLength <= 32);
|
||||
|
||||
_codes.resize(maxLength);
|
||||
_symbols.resize(codeCount);
|
||||
|
||||
|
@ -63,7 +68,7 @@ void Huffman::setSymbols(const uint32 *symbols) {
|
|||
_symbols[i]->symbol = symbols ? *symbols++ : i;
|
||||
}
|
||||
|
||||
uint32 Huffman::getSymbol(BitStream &bits) {
|
||||
uint32 Huffman::getSymbol(BitStream &bits) const {
|
||||
uint32 code = 0;
|
||||
|
||||
for (uint32 i = 0; i < _codes.size(); i++) {
|
||||
|
|
|
@ -43,7 +43,7 @@ class Huffman {
|
|||
public:
|
||||
/** Construct a Huffman decoder.
|
||||
*
|
||||
* @param maxLength Maximal code length.
|
||||
* @param maxLength Maximal code length. If 0, it's searched for.
|
||||
* @param codeCount Number of codes.
|
||||
* @param codes The actual codes.
|
||||
* @param lengths Lengths of the individual codes.
|
||||
|
@ -56,7 +56,7 @@ public:
|
|||
void setSymbols(const uint32 *symbols = 0);
|
||||
|
||||
/** Return the next symbol in the bitstream. */
|
||||
uint32 getSymbol(BitStream &bits);
|
||||
uint32 getSymbol(BitStream &bits) const;
|
||||
|
||||
private:
|
||||
struct Symbol {
|
||||
|
|
|
@ -43,34 +43,6 @@
|
|||
#define FLT_MAX 1E+37
|
||||
#endif
|
||||
|
||||
extern const float sinTable16[8];
|
||||
extern const float sinTable32[16];
|
||||
extern const float sinTable64[32];
|
||||
extern const float sinTable128[64];
|
||||
extern const float sinTable256[128];
|
||||
extern const float sinTable512[256];
|
||||
extern const float sinTable1024[512];
|
||||
extern const float sinTable2048[1024];
|
||||
extern const float sinTable4096[2048];
|
||||
extern const float sinTable8192[4096];
|
||||
extern const float sinTable16384[8192];
|
||||
extern const float sinTable32768[16384];
|
||||
extern const float sinTable65536[32768];
|
||||
|
||||
extern const float cosTable16[8];
|
||||
extern const float cosTable32[16];
|
||||
extern const float cosTable64[32];
|
||||
extern const float cosTable128[64];
|
||||
extern const float cosTable256[128];
|
||||
extern const float cosTable512[256];
|
||||
extern const float cosTable1024[512];
|
||||
extern const float cosTable2048[1024];
|
||||
extern const float cosTable4096[2048];
|
||||
extern const float cosTable8192[4096];
|
||||
extern const float cosTable16384[8192];
|
||||
extern const float cosTable32768[16384];
|
||||
extern const float cosTable65536[32768];
|
||||
|
||||
namespace Common {
|
||||
|
||||
/** A complex number. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue