| OLD | NEW |
| 1 /* Copyright (c) 2011 Xiph.Org Foundation | 1 /* Copyright (c) 2011 Xiph.Org Foundation |
| 2 Written by Gregory Maxwell */ | 2 Written by Gregory Maxwell */ |
| 3 /* | 3 /* |
| 4 Redistribution and use in source and binary forms, with or without | 4 Redistribution and use in source and binary forms, with or without |
| 5 modification, are permitted provided that the following conditions | 5 modification, are permitted provided that the following conditions |
| 6 are met: | 6 are met: |
| 7 | 7 |
| 8 - Redistributions of source code must retain the above copyright | 8 - Redistributions of source code must retain the above copyright |
| 9 notice, this list of conditions and the following disclaimer. | 9 notice, this list of conditions and the following disclaimer. |
| 10 | 10 |
| 11 - Redistributions in binary form must reproduce the above copyright | 11 - Redistributions in binary form must reproduce the above copyright |
| 12 notice, this list of conditions and the following disclaimer in the | 12 notice, this list of conditions and the following disclaimer in the |
| 13 documentation and/or other materials provided with the distribution. | 13 documentation and/or other materials provided with the distribution. |
| 14 | 14 |
| 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 16 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 16 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 17 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 17 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 18 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER | 18 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER |
| 19 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 19 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| 20 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 20 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| 21 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 21 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| 22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | 22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| 23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| 24 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 24 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| 25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 26 */ | 26 */ |
| 27 | 27 |
| 28 static inline void deb2_impl(unsigned char *_t,unsigned char **_p,int _k,int _x,
int _y) | 28 static OPUS_INLINE void deb2_impl(unsigned char *_t,unsigned char **_p,int _k,in
t _x,int _y) |
| 29 { | 29 { |
| 30 int i; | 30 int i; |
| 31 if(_x>2){ | 31 if(_x>2){ |
| 32 if(_y<3)for(i=0;i<_y;i++)*(--*_p)=_t[i+1]; | 32 if(_y<3)for(i=0;i<_y;i++)*(--*_p)=_t[i+1]; |
| 33 }else{ | 33 }else{ |
| 34 _t[_x]=_t[_x-_y]; | 34 _t[_x]=_t[_x-_y]; |
| 35 deb2_impl(_t,_p,_k,_x+1,_y); | 35 deb2_impl(_t,_p,_k,_x+1,_y); |
| 36 for(i=_t[_x-_y]+1;i<_k;i++){ | 36 for(i=_t[_x-_y]+1;i<_k;i++){ |
| 37 _t[_x]=i; | 37 _t[_x]=i; |
| 38 deb2_impl(_t,_p,_k,_x+1,_x); | 38 deb2_impl(_t,_p,_k,_x+1,_x); |
| 39 } | 39 } |
| 40 } | 40 } |
| 41 } | 41 } |
| 42 | 42 |
| 43 /*Generates a De Bruijn sequence (k,2) with length k^2*/ | 43 /*Generates a De Bruijn sequence (k,2) with length k^2*/ |
| 44 static inline void debruijn2(int _k, unsigned char *_res) | 44 static OPUS_INLINE void debruijn2(int _k, unsigned char *_res) |
| 45 { | 45 { |
| 46 unsigned char *p; | 46 unsigned char *p; |
| 47 unsigned char *t; | 47 unsigned char *t; |
| 48 t=malloc(sizeof(unsigned char)*_k*2); | 48 t=malloc(sizeof(unsigned char)*_k*2); |
| 49 memset(t,0,sizeof(unsigned char)*_k*2); | 49 memset(t,0,sizeof(unsigned char)*_k*2); |
| 50 p=&_res[_k*_k]; | 50 p=&_res[_k*_k]; |
| 51 deb2_impl(t,&p,_k,1,1); | 51 deb2_impl(t,&p,_k,1,1); |
| 52 free(t); | 52 free(t); |
| 53 } | 53 } |
| 54 | 54 |
| 55 /*MWC RNG of George Marsaglia*/ | 55 /*MWC RNG of George Marsaglia*/ |
| 56 static opus_uint32 Rz, Rw; | 56 static opus_uint32 Rz, Rw; |
| 57 static inline opus_uint32 fast_rand(void) | 57 static OPUS_INLINE opus_uint32 fast_rand(void) |
| 58 { | 58 { |
| 59 Rz=36969*(Rz&65535)+(Rz>>16); | 59 Rz=36969*(Rz&65535)+(Rz>>16); |
| 60 Rw=18000*(Rw&65535)+(Rw>>16); | 60 Rw=18000*(Rw&65535)+(Rw>>16); |
| 61 return (Rz<<16)+Rw; | 61 return (Rz<<16)+Rw; |
| 62 } | 62 } |
| 63 static opus_uint32 iseed; | 63 static opus_uint32 iseed; |
| 64 | 64 |
| 65 #ifdef __GNUC__ | 65 #ifdef __GNUC__ |
| 66 __attribute__((noreturn)) | 66 __attribute__((noreturn)) |
| 67 #endif | 67 #endif |
| 68 static inline void _test_failed(const char *file, int line) | 68 static OPUS_INLINE void _test_failed(const char *file, int line) |
| 69 { | 69 { |
| 70 fprintf(stderr,"\n ***************************************************\n"); | 70 fprintf(stderr,"\n ***************************************************\n"); |
| 71 fprintf(stderr," *** A fatal error was detected. ***\n"); | 71 fprintf(stderr," *** A fatal error was detected. ***\n"); |
| 72 fprintf(stderr," ***************************************************\n"); | 72 fprintf(stderr," ***************************************************\n"); |
| 73 fprintf(stderr,"Please report this failure and include\n"); | 73 fprintf(stderr,"Please report this failure and include\n"); |
| 74 fprintf(stderr,"'make check SEED=%u fails %s at line %d for %s'\n",iseed,file,
line,opus_get_version_string()); | 74 fprintf(stderr,"'make check SEED=%u fails %s at line %d for %s'\n",iseed,file,
line,opus_get_version_string()); |
| 75 fprintf(stderr,"and any relevant details about your system.\n\n"); | 75 fprintf(stderr,"and any relevant details about your system.\n\n"); |
| 76 abort(); | 76 abort(); |
| 77 } | 77 } |
| 78 #define test_failed() _test_failed(__FILE__, __LINE__); | 78 #define test_failed() _test_failed(__FILE__, __LINE__); |
| OLD | NEW |