diff options
-rw-r--r-- | libcelt/cwrs.c | 179 | ||||
-rw-r--r-- | tests/Makefile.am | 5 |
2 files changed, 7 insertions, 177 deletions
diff --git a/libcelt/cwrs.c b/libcelt/cwrs.c index 726a35a..47509a1 100644 --- a/libcelt/cwrs.c +++ b/libcelt/cwrs.c @@ -49,7 +49,6 @@ #include "mathops.h" #include "arch.h" -#if 0 int log2_frac(ec_uint32 val, int frac) { int i; @@ -73,31 +72,6 @@ int log2_frac(ec_uint32 val, int frac) } return L; } -#endif - -int log2_frac64(ec_uint64 val, int frac) -{ - int i; - /* EC_ILOG64() actually returns log2()+1, go figure */ - int L = EC_ILOG64(val)-1; - /*printf ("in: %d %d ", val, L);*/ - if (L>14) - val >>= L-14; - else if (L<14) - val <<= 14-L; - L <<= frac; - /*printf ("%d\n", val);*/ - for (i=0;i<frac;i++) - { - val = (val*val) >> 15; - /*printf ("%d\n", val);*/ - if (val > 16384) - L |= (1<<(frac-i-1)); - else - val <<= 1; - } - return L; -} int fits_in32(int _n, int _m) { @@ -117,28 +91,6 @@ int fits_in32(int _n, int _m) return _m <= maxM[_n]; } } -int fits_in64(int _n, int _m) -{ - static const celt_int16_t maxN[28] = { - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 178, 129, 100, 81, 68, 58, - 51, 46, 42, 38, 36, 33, 31, 30, - 28, 27, 26, 25}; - static const celt_int16_t maxM[28] = { - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 245, 166, 122, 94, 77, 64, - 56, 49, 44, 40, 37, 34, 32, 30, - 29, 27, 26, 25}; - if (_n>=27) - { - if (_m>=27) - return 0; - else - return _n <= maxN[_m]; - } else { - return _m <= maxM[_n]; - } -} /*Computes the next row/column of any recurrence that obeys the relation u[i][j]=u[i-1][j]+u[i][j-1]+u[i-1][j-1]. @@ -155,18 +107,6 @@ static inline void unext32(celt_uint32_t *_ui,int _len,celt_uint32_t _ui0){ _ui[j-1]=_ui0; } -static inline void unext64(celt_uint64_t *_ui,int _len,celt_uint64_t _ui0){ - celt_uint64_t ui1; - int j; - /* doing a do-while would overrun the array if we had less than 2 samples */ - j=1; do { - ui1=_ui[j]+_ui[j-1]+_ui0; - _ui[j-1]=_ui0; - _ui0=ui1; - } while (++j<_len); - _ui[j-1]=_ui0; -} - /*Computes the previous row/column of any recurrence that obeys the relation u[i-1][j]=u[i][j]-u[i][j-1]-u[i-1][j-1]. _ui0 is the base case for the new row/column.*/ @@ -182,18 +122,6 @@ static inline void uprev32(celt_uint32_t *_ui,int _n,celt_uint32_t _ui0){ _ui[j-1]=_ui0; } -static inline void uprev64(celt_uint64_t *_ui,int _n,celt_uint64_t _ui0){ - celt_uint64_t ui1; - int j; - /* doing a do-while would overrun the array if we had less than 2 samples */ - j=1; do { - ui1=_ui[j]-_ui[j-1]-_ui0; - _ui[j-1]=_ui0; - _ui0=ui1; - } while (++j<_n); - _ui[j-1]=_ui0; -} - /*Returns the number of ways of choosing _m elements from a set of size _n with replacement when a sign bit is needed for each unique element. On input, _u should be initialized to column (_m-1) of U(n,m). @@ -215,23 +143,6 @@ celt_uint32_t ncwrs_unext32(int _n,celt_uint32_t *_ui){ return ret; } -celt_uint64_t ncwrs_unext64(int _n,celt_uint64_t *_ui){ - celt_uint64_t ret; - celt_uint64_t ui0; - celt_uint64_t ui1; - int j; - ret=ui0=2; - celt_assert(_n>=2); - j=1; do { - ui1=_ui[j]+_ui[j-1]+ui0; - _ui[j-1]=ui0; - ui0=ui1; - ret+=ui0; - } while (++j<_n); - _ui[j-1]=ui0; - return ret; -} - /*Returns the number of ways of choosing _m elements from a set of size _n with replacement when a sign bit is needed for each unique element. On exit, _u will be initialized to column _m of U(n,m).*/ @@ -244,15 +155,6 @@ celt_uint32_t ncwrs_u32(int _n,int _m,celt_uint32_t *_u){ return ncwrs_unext32(_n,_u); } -celt_uint64_t ncwrs_u64(int _n,int _m,celt_uint64_t *_u){ - int k; - CELT_MEMSET(_u,0,_n); - if(_m<=0)return 1; - if(_n<=0)return 0; - for(k=1;k<_m;k++)unext64(_u,_n,2); - return ncwrs_unext64(_n,_u); -} - /*Returns the _i'th combination of _m elements chosen from a set of size _n with associated sign bits. _x: Returns the combination with elements sorted in ascending order. @@ -283,30 +185,6 @@ void cwrsi32(int _n,int _m,celt_uint32_t _i,int *_x,int *_s,celt_uint32_t *_u){ } } -void cwrsi64(int _n,int _m,celt_uint64_t _i,int *_x,int *_s,celt_uint64_t *_u){ - int j; - int k; - for(k=j=0;k<_m;k++){ - celt_uint64_t p; - celt_uint64_t t; - p=_u[_n-j-1]; - if(k>0){ - t=p>>1; - if(t<=_i||_s[k-1])_i+=t; - } - while(p<=_i){ - _i-=p; - j++; - p=_u[_n-j-1]; - } - t=p>>1; - _s[k]=_i>=t; - _x[k]=j; - if(_s[k])_i-=t; - uprev64(_u,_n-j,2); - } -} - /*Returns the index of the given combination of _m elements chosen from a set of size _n with associated sign bits. _x: The combination with elements sorted in ascending order. @@ -334,27 +212,6 @@ celt_uint32_t icwrs32(int _n,int _m,const int *_x,const int *_s, return i; } -celt_uint64_t icwrs64(int _n,int _m,const int *_x,const int *_s, - celt_uint64_t *_u){ - celt_uint64_t i; - int j; - int k; - i=0; - for(k=j=0;k<_m;k++){ - celt_uint64_t p; - p=_u[_n-j-1]; - if(k>0)p>>=1; - while(j<_x[k]){ - i+=p; - j++; - p=_u[_n-j-1]; - } - if((k==0||_x[k]!=_x[k-1])&&_s[k])i+=p>>1; - uprev64(_u,_n-j,2); - } - return i; -} - /*Converts a combination _x of _m unit pulses with associated sign bits _s into a pulse vector _y of length _n. _y: Returns the vector of pulses. @@ -405,31 +262,18 @@ static inline void encode_comb32(int _n,int _m,const int *_x,const int *_s, RESTORE_STACK; } -static inline void encode_comb64(int _n,int _m,const int *_x,const int *_s, - ec_enc *_enc){ - VARDECL(celt_uint64_t,u); - celt_uint64_t nc; - celt_uint64_t i; - SAVE_STACK; - ALLOC(u,_n,celt_uint64_t); - nc=ncwrs_u64(_n,_m,u); - i=icwrs64(_n,_m,_x,_s,u); - ec_enc_uint64(_enc,i,nc); - RESTORE_STACK; -} - int get_required_bits(int N, int K, int frac) { int nbits = 0; - if(fits_in64(N,K)) + if(fits_in32(N,K)) { - VARDECL(celt_uint64_t,u); + VARDECL(celt_uint32_t,u); SAVE_STACK; - ALLOC(u,N,celt_uint64_t); - nbits = log2_frac64(ncwrs_u64(N,K,u), frac); + ALLOC(u,N,celt_uint32_t); + nbits = log2_frac(ncwrs_u32(N,K,u), frac); RESTORE_STACK; } else { - nbits = log2_frac64(N, frac); + nbits = log2_frac(N, frac); nbits += get_required_bits(N/2+1, (K+1)/2, frac); nbits += get_required_bits(N/2+1, K/2, frac); } @@ -454,8 +298,6 @@ void encode_pulses(int *_y, int N, int K, ec_enc *enc) } else if(fits_in32(N,K)) { encode_comb32(N, K, comb, signs, enc); - } else if(fits_in64(N,K)) { - encode_comb64(N, K, comb, signs, enc); } else { int i; int count=0; @@ -478,14 +320,6 @@ static inline void decode_comb32(int _n,int _m,int *_x,int *_s,ec_dec *_dec){ RESTORE_STACK; } -static inline void decode_comb64(int _n,int _m,int *_x,int *_s,ec_dec *_dec){ - VARDECL(celt_uint64_t,u); - SAVE_STACK; - ALLOC(u,_n,celt_uint64_t); - cwrsi64(_n,_m,ec_dec_uint64(_dec,ncwrs_u64(_n,_m,u)),_x,_s,u); - RESTORE_STACK; -} - void decode_pulses(int *_y, int N, int K, ec_dec *dec) { VARDECL(int, comb); @@ -509,9 +343,6 @@ void decode_pulses(int *_y, int N, int K, ec_dec *dec) { decode_comb32(N, K, comb, signs, dec); comb2pulse(N, K, _y, comb, signs); - } else if(fits_in64(N,K)) { - decode_comb64(N, K, comb, signs, dec); - comb2pulse(N, K, _y, comb, signs); } else { int split; int count = ec_dec_uint(dec,K+1); diff --git a/tests/Makefile.am b/tests/Makefile.am index 2dc5c56..36ced45 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,14 +1,13 @@ INCLUDES = -I$(top_srcdir)/libcelt METASOURCES = AUTO -TESTS = type-test ectest cwrs32-test cwrs64-test real-fft-test dft-test laplace-test mdct-test mathops-test +TESTS = type-test ectest cwrs32-test real-fft-test dft-test laplace-test mdct-test mathops-test -noinst_PROGRAMS = type-test ectest cwrs32-test cwrs64-test real-fft-test dft-test laplace-test mdct-test mathops-test +noinst_PROGRAMS = type-test ectest cwrs32-test real-fft-test dft-test laplace-test mdct-test mathops-test type_test_SOURCES = type-test.c ectest_SOURCES = ectest.c cwrs32_test_SOURCES = cwrs32-test.c -cwrs64_test_SOURCES = cwrs64-test.c real_fft_test_SOURCES = real-fft-test.c dft_test_SOURCES = dft-test.c laplace_test_SOURCES = laplace-test.c |