diff options
Diffstat (limited to 'lib/rbcodec/codecs/libopus/celt/mathops.h')
-rw-r--r-- | lib/rbcodec/codecs/libopus/celt/mathops.h | 66 |
1 files changed, 43 insertions, 23 deletions
diff --git a/lib/rbcodec/codecs/libopus/celt/mathops.h b/lib/rbcodec/codecs/libopus/celt/mathops.h index 4e97795606..44fa97c697 100644 --- a/lib/rbcodec/codecs/libopus/celt/mathops.h +++ b/lib/rbcodec/codecs/libopus/celt/mathops.h | |||
@@ -43,6 +43,41 @@ | |||
43 | 43 | ||
44 | unsigned isqrt32(opus_uint32 _val); | 44 | unsigned isqrt32(opus_uint32 _val); |
45 | 45 | ||
46 | #ifndef OVERRIDE_CELT_MAXABS16 | ||
47 | static inline opus_val32 celt_maxabs16(const opus_val16 *x, int len) | ||
48 | { | ||
49 | int i; | ||
50 | opus_val16 maxval = 0; | ||
51 | opus_val16 minval = 0; | ||
52 | for (i=0;i<len;i++) | ||
53 | { | ||
54 | maxval = MAX16(maxval, x[i]); | ||
55 | minval = MIN16(minval, x[i]); | ||
56 | } | ||
57 | return MAX32(EXTEND32(maxval),-EXTEND32(minval)); | ||
58 | } | ||
59 | #endif | ||
60 | |||
61 | #ifndef OVERRIDE_CELT_MAXABS32 | ||
62 | #ifdef FIXED_POINT | ||
63 | static inline opus_val32 celt_maxabs32(const opus_val32 *x, int len) | ||
64 | { | ||
65 | int i; | ||
66 | opus_val32 maxval = 0; | ||
67 | opus_val32 minval = 0; | ||
68 | for (i=0;i<len;i++) | ||
69 | { | ||
70 | maxval = MAX32(maxval, x[i]); | ||
71 | minval = MIN32(minval, x[i]); | ||
72 | } | ||
73 | return MAX32(maxval, -minval); | ||
74 | } | ||
75 | #else | ||
76 | #define celt_maxabs32(x,len) celt_maxabs16(x,len) | ||
77 | #endif | ||
78 | #endif | ||
79 | |||
80 | |||
46 | #ifndef FIXED_POINT | 81 | #ifndef FIXED_POINT |
47 | 82 | ||
48 | #define PI 3.141592653f | 83 | #define PI 3.141592653f |
@@ -117,27 +152,6 @@ static inline opus_int16 celt_ilog2(opus_int32 x) | |||
117 | } | 152 | } |
118 | #endif | 153 | #endif |
119 | 154 | ||
120 | #ifndef OVERRIDE_CELT_MAXABS16 | ||
121 | static inline opus_val16 celt_maxabs16(opus_val16 *x, int len) | ||
122 | { | ||
123 | int i; | ||
124 | opus_val16 maxval = 0; | ||
125 | for (i=0;i<len;i++) | ||
126 | maxval = MAX16(maxval, ABS16(x[i])); | ||
127 | return maxval; | ||
128 | } | ||
129 | #endif | ||
130 | |||
131 | #ifndef OVERRIDE_CELT_MAXABS32 | ||
132 | static inline opus_val32 celt_maxabs32(opus_val32 *x, int len) | ||
133 | { | ||
134 | int i; | ||
135 | opus_val32 maxval = 0; | ||
136 | for (i=0;i<len;i++) | ||
137 | maxval = MAX32(maxval, ABS32(x[i])); | ||
138 | return maxval; | ||
139 | } | ||
140 | #endif | ||
141 | 155 | ||
142 | /** Integer log in base2. Defined for zero, but not for negative numbers */ | 156 | /** Integer log in base2. Defined for zero, but not for negative numbers */ |
143 | static inline opus_int16 celt_zlog2(opus_val32 x) | 157 | static inline opus_int16 celt_zlog2(opus_val32 x) |
@@ -176,6 +190,13 @@ static inline opus_val16 celt_log2(opus_val32 x) | |||
176 | #define D1 22804 | 190 | #define D1 22804 |
177 | #define D2 14819 | 191 | #define D2 14819 |
178 | #define D3 10204 | 192 | #define D3 10204 |
193 | |||
194 | static inline opus_val32 celt_exp2_frac(opus_val16 x) | ||
195 | { | ||
196 | opus_val16 frac; | ||
197 | frac = SHL16(x, 4); | ||
198 | return ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac)))))); | ||
199 | } | ||
179 | /** Base-2 exponential approximation (2^x). (Q10 input, Q16 output) */ | 200 | /** Base-2 exponential approximation (2^x). (Q10 input, Q16 output) */ |
180 | static inline opus_val32 celt_exp2(opus_val16 x) | 201 | static inline opus_val32 celt_exp2(opus_val16 x) |
181 | { | 202 | { |
@@ -186,8 +207,7 @@ static inline opus_val32 celt_exp2(opus_val16 x) | |||
186 | return 0x7f000000; | 207 | return 0x7f000000; |
187 | else if (integer < -15) | 208 | else if (integer < -15) |
188 | return 0; | 209 | return 0; |
189 | frac = SHL16(x-SHL16(integer,10),4); | 210 | frac = celt_exp2_frac(x-SHL16(integer,10)); |
190 | frac = ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac)))))); | ||
191 | return VSHR32(EXTEND32(frac), -integer-2); | 211 | return VSHR32(EXTEND32(frac), -integer-2); |
192 | } | 212 | } |
193 | 213 | ||