summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2013-12-11 22:59:14 +0100
committerNils Wallménius <nils@rockbox.org>2013-12-16 21:13:23 +0100
commite3c2ed7a71f65dc721c7210f120259ecd4ff65cb (patch)
treede593c1e927dcc036f1b6656f1f881995491b3b9
parentd0918b98fa0cfba21208a4fb5ed153687b8f02c3 (diff)
downloadrockbox-e3c2ed7a71f65dc721c7210f120259ecd4ff65cb.tar.gz
rockbox-e3c2ed7a71f65dc721c7210f120259ecd4ff65cb.zip
Sync libopus to upstream release 1.1
Change-Id: I9fea7460fc33f60faff961b3389dd97b5191463c
-rw-r--r--lib/rbcodec/codecs/libopus/SOURCES1
-rw-r--r--lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h6
-rw-r--r--lib/rbcodec/codecs/libopus/celt/arch.h10
-rw-r--r--lib/rbcodec/codecs/libopus/celt/arm/fixed_armv4.h4
-rw-r--r--lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h10
-rw-r--r--lib/rbcodec/codecs/libopus/celt/bands.c28
-rw-r--r--lib/rbcodec/codecs/libopus/celt/celt.h31
-rw-r--r--lib/rbcodec/codecs/libopus/celt/celt_decoder.c19
-rw-r--r--lib/rbcodec/codecs/libopus/celt/celt_lpc.c5
-rw-r--r--lib/rbcodec/codecs/libopus/celt/celt_lpc.h3
-rw-r--r--lib/rbcodec/codecs/libopus/celt/cpu_support.h7
-rw-r--r--lib/rbcodec/codecs/libopus/celt/cwrs.c12
-rw-r--r--lib/rbcodec/codecs/libopus/celt/ecintrin.h2
-rw-r--r--lib/rbcodec/codecs/libopus/celt/entcode.h9
-rw-r--r--lib/rbcodec/codecs/libopus/celt/fixed_generic.h3
-rw-r--r--lib/rbcodec/codecs/libopus/celt/float_cast.h4
-rw-r--r--lib/rbcodec/codecs/libopus/celt/mathops.c2
-rw-r--r--lib/rbcodec/codecs/libopus/celt/mathops.h23
-rw-r--r--lib/rbcodec/codecs/libopus/celt/os_support.h9
-rw-r--r--lib/rbcodec/codecs/libopus/celt/pitch.c15
-rw-r--r--lib/rbcodec/codecs/libopus/celt/pitch.h38
-rw-r--r--lib/rbcodec/codecs/libopus/celt/quant_bands.c6
-rw-r--r--lib/rbcodec/codecs/libopus/celt/rate.c2
-rw-r--r--lib/rbcodec/codecs/libopus/celt/rate.h6
-rw-r--r--lib/rbcodec/codecs/libopus/celt/stack_alloc.h9
-rw-r--r--lib/rbcodec/codecs/libopus/config.h6
-rw-r--r--lib/rbcodec/codecs/libopus/opus.c333
-rw-r--r--lib/rbcodec/codecs/libopus/opus.h58
-rw-r--r--lib/rbcodec/codecs/libopus/opus_custom.h7
-rw-r--r--lib/rbcodec/codecs/libopus/opus_decoder.c261
-rw-r--r--lib/rbcodec/codecs/libopus/opus_defines.h23
-rw-r--r--lib/rbcodec/codecs/libopus/opus_private.h35
-rw-r--r--lib/rbcodec/codecs/libopus/silk/API.h3
-rw-r--r--lib/rbcodec/codecs/libopus/silk/CNG.c4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/Inlines.h14
-rw-r--r--lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/LPC_inv_pred_gain.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/MacroCount.h162
-rw-r--r--lib/rbcodec/codecs/libopus/silk/MacroDebug.h112
-rw-r--r--lib/rbcodec/codecs/libopus/silk/NLSF2A.c4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/NLSF_VQ_weights_laroia.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/NLSF_decode.c4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/NLSF_stabilize.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/NLSF_unpack.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/PLC.c10
-rw-r--r--lib/rbcodec/codecs/libopus/silk/PLC.h2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/SigProc_FIX.h35
-rw-r--r--lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv4.h2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv5e.h4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/arm/macros_armv4.h8
-rw-r--r--lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h24
-rw-r--r--lib/rbcodec/codecs/libopus/silk/bwexpander.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/bwexpander_32.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/code_signs.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/control.h5
-rw-r--r--lib/rbcodec/codecs/libopus/silk/dec_API.c4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/decode_core.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/decode_frame.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/decode_indices.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/decode_parameters.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/decode_pitch.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/decode_pulses.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/decoder_set_fs.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/define.h2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/errors.h2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/gain_quant.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/init_decoder.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/log2lin.c6
-rw-r--r--lib/rbcodec/codecs/libopus/silk/macros.h17
-rw-r--r--lib/rbcodec/codecs/libopus/silk/main.h6
-rw-r--r--lib/rbcodec/codecs/libopus/silk/pitch_est_defines.h2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/pitch_est_tables.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler_private.h2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler_private_AR2.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler_private_IIR_FIR.c4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler_private_down_FIR.c4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler_private_up2_HQ.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler_rom.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler_rom.h2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/resampler_structs.h2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/shell_coder.c8
-rw-r--r--lib/rbcodec/codecs/libopus/silk/sort.c4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/stereo_MS_to_LR.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/stereo_decode_pred.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/structs.h5
-rw-r--r--lib/rbcodec/codecs/libopus/silk/sum_sqr_shift.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/table_LSF_cos.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/tables.h4
-rw-r--r--lib/rbcodec/codecs/libopus/silk/tables_LTP.c32
-rw-r--r--lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_NB_MB.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_WB.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/tables_gain.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/tables_other.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/tables_pitch_lag.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/tables_pulses_per_block.c2
-rw-r--r--lib/rbcodec/codecs/libopus/silk/typedef.h5
97 files changed, 977 insertions, 578 deletions
diff --git a/lib/rbcodec/codecs/libopus/SOURCES b/lib/rbcodec/codecs/libopus/SOURCES
index 81d49f3ff1..417cf01d88 100644
--- a/lib/rbcodec/codecs/libopus/SOURCES
+++ b/lib/rbcodec/codecs/libopus/SOURCES
@@ -63,6 +63,7 @@ silk/tables_pitch_lag.c
63silk/tables_pulses_per_block.c 63silk/tables_pulses_per_block.c
64 64
65/* OPUS sources */ 65/* OPUS sources */
66opus.c
66opus_decoder.c 67opus_decoder.c
67opus_header.c 68opus_header.c
68 69
diff --git a/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h b/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h
index 866a6520ca..cc52f37c36 100644
--- a/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h
+++ b/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h
@@ -94,15 +94,15 @@
94 do {(res).r = ADD32((res).r,(a).r); (res).i = SUB32((res).i,(a).i); \ 94 do {(res).r = ADD32((res).r,(a).r); (res).i = SUB32((res).i,(a).i); \
95 }while(0) 95 }while(0)
96 96
97#if defined(ARMv4_ASM) 97#if defined(OPUS_ARM_INLINE_ASM)
98#include "arm/kiss_fft_armv4.h" 98#include "arm/kiss_fft_armv4.h"
99#endif 99#endif
100 100
101#if defined(ARMv5E_ASM) 101#if defined(OPUS_ARM_INLINE_EDSP)
102#include "arm/kiss_fft_armv5e.h" 102#include "arm/kiss_fft_armv5e.h"
103#endif 103#endif
104 104
105#if defined(CF_ASM) 105#if defined(OPUS_CF_INLINE_ASM)
106#include "cf/kiss_fft_cf.h" 106#include "cf/kiss_fft_cf.h"
107#endif 107#endif
108 108
diff --git a/lib/rbcodec/codecs/libopus/celt/arch.h b/lib/rbcodec/codecs/libopus/celt/arch.h
index c0f9413d00..b2d26c4ee4 100644
--- a/lib/rbcodec/codecs/libopus/celt/arch.h
+++ b/lib/rbcodec/codecs/libopus/celt/arch.h
@@ -35,6 +35,7 @@
35#define ARCH_H 35#define ARCH_H
36 36
37#include "opus_types.h" 37#include "opus_types.h"
38#include "opus_defines.h"
38 39
39# if !defined(__GNUC_PREREQ) 40# if !defined(__GNUC_PREREQ)
40# if defined(__GNUC__)&&defined(__GNUC_MINOR__) 41# if defined(__GNUC__)&&defined(__GNUC_MINOR__)
@@ -54,7 +55,7 @@
54#ifdef __GNUC__ 55#ifdef __GNUC__
55__attribute__((noreturn)) 56__attribute__((noreturn))
56#endif 57#endif
57static inline void _celt_fatal(const char *str, const char *file, int line) 58static OPUS_INLINE void _celt_fatal(const char *str, const char *file, int line)
58{ 59{
59 fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str); 60 fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str);
60 abort(); 61 abort();
@@ -113,9 +114,9 @@ typedef opus_val32 celt_ener;
113 114
114#include "fixed_generic.h" 115#include "fixed_generic.h"
115 116
116#ifdef ARMv5E_ASM 117#ifdef OPUS_ARM_INLINE_EDSP
117#include "arm/fixed_armv5e.h" 118#include "arm/fixed_armv5e.h"
118#elif defined (ARMv4_ASM) 119#elif defined (OPUS_ARM_INLINE_ASM)
119#include "arm/fixed_armv4.h" 120#include "arm/fixed_armv4.h"
120#elif defined (BFIN_ASM) 121#elif defined (BFIN_ASM)
121#include "fixed_bfin.h" 122#include "fixed_bfin.h"
@@ -123,7 +124,7 @@ typedef opus_val32 celt_ener;
123#include "fixed_c5x.h" 124#include "fixed_c5x.h"
124#elif defined (TI_C6X_ASM) 125#elif defined (TI_C6X_ASM)
125#include "fixed_c6x.h" 126#include "fixed_c6x.h"
126#elif defined (CF_ASM) 127#elif defined (OPUS_CF_INLINE_ASM)
127#include "cf/fixed_cf.h" 128#include "cf/fixed_cf.h"
128#endif 129#endif
129 130
@@ -187,6 +188,7 @@ typedef float celt_ener;
187#define MAC16_32_Q15(c,a,b) ((c)+(a)*(b)) 188#define MAC16_32_Q15(c,a,b) ((c)+(a)*(b))
188 189
189#define MULT16_16_Q11_32(a,b) ((a)*(b)) 190#define MULT16_16_Q11_32(a,b) ((a)*(b))
191#define MULT16_16_Q11(a,b) ((a)*(b))
190#define MULT16_16_Q13(a,b) ((a)*(b)) 192#define MULT16_16_Q13(a,b) ((a)*(b))
191#define MULT16_16_Q14(a,b) ((a)*(b)) 193#define MULT16_16_Q14(a,b) ((a)*(b))
192#define MULT16_16_Q15(a,b) ((a)*(b)) 194#define MULT16_16_Q15(a,b) ((a)*(b))
diff --git a/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv4.h b/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv4.h
index bcacc343e8..b690bc8cea 100644
--- a/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv4.h
+++ b/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv4.h
@@ -29,7 +29,7 @@
29 29
30/** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */ 30/** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */
31#undef MULT16_32_Q16 31#undef MULT16_32_Q16
32static inline opus_val32 MULT16_32_Q16_armv4(opus_val16 a, opus_val32 b) 32static OPUS_INLINE opus_val32 MULT16_32_Q16_armv4(opus_val16 a, opus_val32 b)
33{ 33{
34 unsigned rd_lo; 34 unsigned rd_lo;
35 int rd_hi; 35 int rd_hi;
@@ -46,7 +46,7 @@ static inline opus_val32 MULT16_32_Q16_armv4(opus_val16 a, opus_val32 b)
46 46
47/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */ 47/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */
48#undef MULT16_32_Q15 48#undef MULT16_32_Q15
49static inline opus_val32 MULT16_32_Q15_armv4(opus_val16 a, opus_val32 b) 49static OPUS_INLINE opus_val32 MULT16_32_Q15_armv4(opus_val16 a, opus_val32 b)
50{ 50{
51 unsigned rd_lo; 51 unsigned rd_lo;
52 int rd_hi; 52 int rd_hi;
diff --git a/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h b/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h
index 80632c4a94..1194a7d3ec 100644
--- a/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h
+++ b/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h
@@ -34,7 +34,7 @@
34 34
35/** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */ 35/** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */
36#undef MULT16_32_Q16 36#undef MULT16_32_Q16
37static inline opus_val32 MULT16_32_Q16_armv5e(opus_val16 a, opus_val32 b) 37static OPUS_INLINE opus_val32 MULT16_32_Q16_armv5e(opus_val16 a, opus_val32 b)
38{ 38{
39 int res; 39 int res;
40 __asm__( 40 __asm__(
@@ -50,7 +50,7 @@ static inline opus_val32 MULT16_32_Q16_armv5e(opus_val16 a, opus_val32 b)
50 50
51/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */ 51/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */
52#undef MULT16_32_Q15 52#undef MULT16_32_Q15
53static inline opus_val32 MULT16_32_Q15_armv5e(opus_val16 a, opus_val32 b) 53static OPUS_INLINE opus_val32 MULT16_32_Q15_armv5e(opus_val16 a, opus_val32 b)
54{ 54{
55 int res; 55 int res;
56 __asm__( 56 __asm__(
@@ -68,7 +68,7 @@ static inline opus_val32 MULT16_32_Q15_armv5e(opus_val16 a, opus_val32 b)
68 b must fit in 31 bits. 68 b must fit in 31 bits.
69 Result fits in 32 bits. */ 69 Result fits in 32 bits. */
70#undef MAC16_32_Q15 70#undef MAC16_32_Q15
71static inline opus_val32 MAC16_32_Q15_armv5e(opus_val32 c, opus_val16 a, 71static OPUS_INLINE opus_val32 MAC16_32_Q15_armv5e(opus_val32 c, opus_val16 a,
72 opus_val32 b) 72 opus_val32 b)
73{ 73{
74 int res; 74 int res;
@@ -84,7 +84,7 @@ static inline opus_val32 MAC16_32_Q15_armv5e(opus_val32 c, opus_val16 a,
84 84
85/** 16x16 multiply-add where the result fits in 32 bits */ 85/** 16x16 multiply-add where the result fits in 32 bits */
86#undef MAC16_16 86#undef MAC16_16
87static inline opus_val32 MAC16_16_armv5e(opus_val32 c, opus_val16 a, 87static OPUS_INLINE opus_val32 MAC16_16_armv5e(opus_val32 c, opus_val16 a,
88 opus_val16 b) 88 opus_val16 b)
89{ 89{
90 int res; 90 int res;
@@ -100,7 +100,7 @@ static inline opus_val32 MAC16_16_armv5e(opus_val32 c, opus_val16 a,
100 100
101/** 16x16 multiplication where the result fits in 32 bits */ 101/** 16x16 multiplication where the result fits in 32 bits */
102#undef MULT16_16 102#undef MULT16_16
103static inline opus_val32 MULT16_16_armv5e(opus_val16 a, opus_val16 b) 103static OPUS_INLINE opus_val32 MULT16_16_armv5e(opus_val16 a, opus_val16 b)
104{ 104{
105 int res; 105 int res;
106 __asm__( 106 __asm__(
diff --git a/lib/rbcodec/codecs/libopus/celt/bands.c b/lib/rbcodec/codecs/libopus/celt/bands.c
index 5c715aff53..1ad786d795 100644
--- a/lib/rbcodec/codecs/libopus/celt/bands.c
+++ b/lib/rbcodec/codecs/libopus/celt/bands.c
@@ -216,7 +216,9 @@ void denormalise_bands(const CELTMode *m, const celt_norm * OPUS_RESTRICT X,
216 j=M*eBands[i]; 216 j=M*eBands[i];
217 band_end = M*eBands[i+1]; 217 band_end = M*eBands[i+1];
218 lg = ADD16(bandLogE[i+c*m->nbEBands], SHL16((opus_val16)eMeans[i],6)); 218 lg = ADD16(bandLogE[i+c*m->nbEBands], SHL16((opus_val16)eMeans[i],6));
219#ifdef FIXED_POINT 219#ifndef FIXED_POINT
220 g = celt_exp2(lg);
221#else
220 /* Handle the integer part of the log energy */ 222 /* Handle the integer part of the log energy */
221 shift = 16-(lg>>DB_SHIFT); 223 shift = 16-(lg>>DB_SHIFT);
222 if (shift>31) 224 if (shift>31)
@@ -227,9 +229,23 @@ void denormalise_bands(const CELTMode *m, const celt_norm * OPUS_RESTRICT X,
227 /* Handle the fractional part. */ 229 /* Handle the fractional part. */
228 g = celt_exp2_frac(lg&((1<<DB_SHIFT)-1)); 230 g = celt_exp2_frac(lg&((1<<DB_SHIFT)-1));
229 } 231 }
230#else 232 /* Handle extreme gains with negative shift. */
231 g = celt_exp2(lg); 233 if (shift<0)
234 {
235 /* For shift < -2 we'd be likely to overflow, so we're capping
236 the gain here. This shouldn't happen unless the bitstream is
237 already corrupted. */
238 if (shift < -2)
239 {
240 g = 32767;
241 shift = -2;
242 }
243 do {
244 *f++ = SHL32(MULT16_16(*x++, g), -shift);
245 } while (++j<band_end);
246 } else
232#endif 247#endif
248 /* Be careful of the fixed-point "else" just above when changing this code */
233 do { 249 do {
234 *f++ = SHR32(MULT16_16(*x++, g), shift); 250 *f++ = SHR32(MULT16_16(*x++, g), shift);
235 } while (++j<band_end); 251 } while (++j<band_end);
@@ -495,7 +511,7 @@ int spreading_decision(const CELTMode *m, celt_norm *X, int *average,
495 *tapset_decision=0; 511 *tapset_decision=0;
496 } 512 }
497 /*printf("%d %d %d\n", hf_sum, *hf_average, *tapset_decision);*/ 513 /*printf("%d %d %d\n", hf_sum, *hf_average, *tapset_decision);*/
498 celt_assert(nbBands>0); /*M*(eBands[end]-eBands[end-1]) <= 8 assures this*/ 514 celt_assert(nbBands>0); /* end has to be non-zero */
499 sum /= nbBands; 515 sum /= nbBands;
500 /* Recursive averaging */ 516 /* Recursive averaging */
501 sum = (sum+*average)>>1; 517 sum = (sum+*average)>>1;
@@ -873,7 +889,6 @@ static unsigned quant_partition(struct band_ctx *ctx, celt_norm *X,
873 int q; 889 int q;
874 int curr_bits; 890 int curr_bits;
875 int imid=0, iside=0; 891 int imid=0, iside=0;
876 int N_B=N;
877 int B0=B; 892 int B0=B;
878 opus_val16 mid=0, side=0; 893 opus_val16 mid=0, side=0;
879 unsigned cm=0; 894 unsigned cm=0;
@@ -895,8 +910,6 @@ static unsigned quant_partition(struct band_ctx *ctx, celt_norm *X,
895 spread = ctx->spread; 910 spread = ctx->spread;
896 ec = ctx->ec; 911 ec = ctx->ec;
897 912
898 N_B /= B;
899
900 /* If we need 1.5 more bit than we can produce, split the band in two. */ 913 /* If we need 1.5 more bit than we can produce, split the band in two. */
901 cache = m->cache.bits + m->cache.index[(LM+1)*m->nbEBands+i]; 914 cache = m->cache.bits + m->cache.index[(LM+1)*m->nbEBands+i];
902 if (LM != -1 && b > cache[cache[0]]+12 && N>2) 915 if (LM != -1 && b > cache[cache[0]]+12 && N>2)
@@ -1076,7 +1089,6 @@ static unsigned quant_band(struct band_ctx *ctx, celt_norm *X,
1076 longBlocks = B0==1; 1089 longBlocks = B0==1;
1077 1090
1078 N_B /= B; 1091 N_B /= B;
1079 N_B0 = N_B;
1080 1092
1081 /* Special case for one sample */ 1093 /* Special case for one sample */
1082 if (N==1) 1094 if (N==1)
diff --git a/lib/rbcodec/codecs/libopus/celt/celt.h b/lib/rbcodec/codecs/libopus/celt/celt.h
index 0911c72f72..5deea1f0aa 100644
--- a/lib/rbcodec/codecs/libopus/celt/celt.h
+++ b/lib/rbcodec/codecs/libopus/celt/celt.h
@@ -52,11 +52,11 @@ extern "C" {
52 52
53typedef struct { 53typedef struct {
54 int valid; 54 int valid;
55 opus_val16 tonality; 55 float tonality;
56 opus_val16 tonality_slope; 56 float tonality_slope;
57 opus_val16 noisiness; 57 float noisiness;
58 opus_val16 activity; 58 float activity;
59 opus_val16 music_prob; 59 float music_prob;
60 int bandwidth; 60 int bandwidth;
61}AnalysisInfo; 61}AnalysisInfo;
62 62
@@ -66,6 +66,10 @@ typedef struct {
66 66
67/* Encoder/decoder Requests */ 67/* Encoder/decoder Requests */
68 68
69/* Expose this option again when variable framesize actually works */
70#define OPUS_FRAMESIZE_VARIABLE 5010 /**< Optimize the frame size dynamically */
71
72
69#define CELT_SET_PREDICTION_REQUEST 10002 73#define CELT_SET_PREDICTION_REQUEST 10002
70/** Controls the use of interframe prediction. 74/** Controls the use of interframe prediction.
71 0=Independent frames 75 0=Independent frames
@@ -109,10 +113,7 @@ typedef struct {
109#define OPUS_SET_LFE_REQUEST 10024 113#define OPUS_SET_LFE_REQUEST 10024
110#define OPUS_SET_LFE(x) OPUS_SET_LFE_REQUEST, __opus_check_int(x) 114#define OPUS_SET_LFE(x) OPUS_SET_LFE_REQUEST, __opus_check_int(x)
111 115
112#define OPUS_SET_ENERGY_SAVE_REQUEST 10026 116#define OPUS_SET_ENERGY_MASK_REQUEST 10026
113#define OPUS_SET_ENERGY_SAVE(x) OPUS_SET_ENERGY_SAVE_REQUEST, __opus_check_val16_ptr(x)
114
115#define OPUS_SET_ENERGY_MASK_REQUEST 10028
116#define OPUS_SET_ENERGY_MASK(x) OPUS_SET_ENERGY_MASK_REQUEST, __opus_check_val16_ptr(x) 117#define OPUS_SET_ENERGY_MASK(x) OPUS_SET_ENERGY_MASK_REQUEST, __opus_check_val16_ptr(x)
117 118
118/* Encoder stuff */ 119/* Encoder stuff */
@@ -121,7 +122,8 @@ int celt_encoder_get_size(int channels);
121 122
122int celt_encode_with_ec(OpusCustomEncoder * OPUS_RESTRICT st, const opus_val16 * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes, ec_enc *enc); 123int celt_encode_with_ec(OpusCustomEncoder * OPUS_RESTRICT st, const opus_val16 * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes, ec_enc *enc);
123 124
124int celt_encoder_init(CELTEncoder *st, opus_int32 sampling_rate, int channels); 125int celt_encoder_init(CELTEncoder *st, opus_int32 sampling_rate, int channels,
126 int arch);
125 127
126 128
127 129
@@ -141,7 +143,7 @@ int celt_decode_with_ec(OpusCustomDecoder * OPUS_RESTRICT st, const unsigned cha
141#ifdef CUSTOM_MODES 143#ifdef CUSTOM_MODES
142#define OPUS_CUSTOM_NOSTATIC 144#define OPUS_CUSTOM_NOSTATIC
143#else 145#else
144#define OPUS_CUSTOM_NOSTATIC static inline 146#define OPUS_CUSTOM_NOSTATIC static OPUS_INLINE
145#endif 147#endif
146 148
147static const unsigned char trim_icdf[11] = {126, 124, 119, 109, 87, 41, 19, 9, 4, 2, 0}; 149static const unsigned char trim_icdf[11] = {126, 124, 119, 109, 87, 41, 19, 9, 4, 2, 0};
@@ -166,7 +168,7 @@ static const unsigned char fromOpusTable[16] = {
166 0x00, 0x08, 0x10, 0x18 168 0x00, 0x08, 0x10, 0x18
167}; 169};
168 170
169static inline int toOpus(unsigned char c) 171static OPUS_INLINE int toOpus(unsigned char c)
170{ 172{
171 int ret=0; 173 int ret=0;
172 if (c<0xA0) 174 if (c<0xA0)
@@ -177,7 +179,7 @@ static inline int toOpus(unsigned char c)
177 return ret|(c&0x7); 179 return ret|(c&0x7);
178} 180}
179 181
180static inline int fromOpus(unsigned char c) 182static OPUS_INLINE int fromOpus(unsigned char c)
181{ 183{
182 if (c<0x80) 184 if (c<0x80)
183 return -1; 185 return -1;
@@ -193,6 +195,9 @@ extern const signed char tf_select_table[4][8];
193 195
194int resampling_factor(opus_int32 rate); 196int resampling_factor(opus_int32 rate);
195 197
198void celt_preemphasis(const opus_val16 * OPUS_RESTRICT pcmp, celt_sig * OPUS_RESTRICT inp,
199 int N, int CC, int upsample, const opus_val16 *coef, celt_sig *mem, int clip);
200
196void comb_filter(opus_val32 *y, opus_val32 *x, int T0, int T1, int N, 201void comb_filter(opus_val32 *y, opus_val32 *x, int T0, int T1, int N,
197 opus_val16 g0, opus_val16 g1, int tapset0, int tapset1, 202 opus_val16 g0, opus_val16 g1, int tapset0, int tapset1,
198 const opus_val16 *window, int overlap); 203 const opus_val16 *window, int overlap);
diff --git a/lib/rbcodec/codecs/libopus/celt/celt_decoder.c b/lib/rbcodec/codecs/libopus/celt/celt_decoder.c
index 3d8211b9b0..77fa2d01f7 100644
--- a/lib/rbcodec/codecs/libopus/celt/celt_decoder.c
+++ b/lib/rbcodec/codecs/libopus/celt/celt_decoder.c
@@ -175,7 +175,7 @@ void opus_custom_decoder_destroy(CELTDecoder *st)
175} 175}
176#endif /* CUSTOM_MODES */ 176#endif /* CUSTOM_MODES */
177 177
178static inline opus_val16 SIG2WORD16(celt_sig x) 178static OPUS_INLINE opus_val16 SIG2WORD16(celt_sig x)
179{ 179{
180#ifdef FIXED_POINT 180#ifdef FIXED_POINT
181 x = PSHR32(x, SIG_SHIFT); 181 x = PSHR32(x, SIG_SHIFT);
@@ -213,7 +213,7 @@ void deemphasis(celt_sig *in[], opus_val16 *pcm, int N, int C, int downsample, c
213 opus_val16 coef3 = coef[3]; 213 opus_val16 coef3 = coef[3];
214 for (j=0;j<N;j++) 214 for (j=0;j<N;j++)
215 { 215 {
216 celt_sig tmp = x[j] + m; 216 celt_sig tmp = x[j] + m + VERY_SMALL;
217 m = MULT16_32_Q15(coef0, tmp) 217 m = MULT16_32_Q15(coef0, tmp)
218 - MULT16_32_Q15(coef1, x[j]); 218 - MULT16_32_Q15(coef1, x[j]);
219 tmp = SHL32(MULT16_32_Q15(coef3, tmp), 2); 219 tmp = SHL32(MULT16_32_Q15(coef3, tmp), 2);
@@ -227,7 +227,7 @@ void deemphasis(celt_sig *in[], opus_val16 *pcm, int N, int C, int downsample, c
227 /* Shortcut for the standard (non-custom modes) case */ 227 /* Shortcut for the standard (non-custom modes) case */
228 for (j=0;j<N;j++) 228 for (j=0;j<N;j++)
229 { 229 {
230 celt_sig tmp = x[j] + m; 230 celt_sig tmp = x[j] + m + VERY_SMALL;
231 m = MULT16_32_Q15(coef0, tmp); 231 m = MULT16_32_Q15(coef0, tmp);
232 scratch[j] = tmp; 232 scratch[j] = tmp;
233 } 233 }
@@ -447,10 +447,11 @@ static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, opus_val16 * OPUS_R
447 { 447 {
448 VARDECL( opus_val16, lp_pitch_buf ); 448 VARDECL( opus_val16, lp_pitch_buf );
449 ALLOC( lp_pitch_buf, DECODE_BUFFER_SIZE>>1, opus_val16 ); 449 ALLOC( lp_pitch_buf, DECODE_BUFFER_SIZE>>1, opus_val16 );
450 pitch_downsample(decode_mem, lp_pitch_buf, DECODE_BUFFER_SIZE, C); 450 pitch_downsample(decode_mem, lp_pitch_buf,
451 DECODE_BUFFER_SIZE, C, st->arch);
451 pitch_search(lp_pitch_buf+(PLC_PITCH_LAG_MAX>>1), lp_pitch_buf, 452 pitch_search(lp_pitch_buf+(PLC_PITCH_LAG_MAX>>1), lp_pitch_buf,
452 DECODE_BUFFER_SIZE-PLC_PITCH_LAG_MAX, 453 DECODE_BUFFER_SIZE-PLC_PITCH_LAG_MAX,
453 PLC_PITCH_LAG_MAX-PLC_PITCH_LAG_MIN, &pitch_index); 454 PLC_PITCH_LAG_MAX-PLC_PITCH_LAG_MIN, &pitch_index, st->arch);
454 pitch_index = PLC_PITCH_LAG_MAX-pitch_index; 455 pitch_index = PLC_PITCH_LAG_MAX-pitch_index;
455 st->last_pitch_index = pitch_index; 456 st->last_pitch_index = pitch_index;
456 } else { 457 } else {
@@ -481,7 +482,8 @@ static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, opus_val16 * OPUS_R
481 opus_val32 ac[LPC_ORDER+1]; 482 opus_val32 ac[LPC_ORDER+1];
482 /* Compute LPC coefficients for the last MAX_PERIOD samples before 483 /* Compute LPC coefficients for the last MAX_PERIOD samples before
483 the first loss so we can work in the excitation-filter domain. */ 484 the first loss so we can work in the excitation-filter domain. */
484 _celt_autocorr(exc, ac, window, overlap, LPC_ORDER, MAX_PERIOD); 485 _celt_autocorr(exc, ac, window, overlap,
486 LPC_ORDER, MAX_PERIOD, st->arch);
485 /* Add a noise floor of -40 dB. */ 487 /* Add a noise floor of -40 dB. */
486#ifdef FIXED_POINT 488#ifdef FIXED_POINT
487 ac[0] += SHR32(ac[0],13); 489 ac[0] += SHR32(ac[0],13);
@@ -668,7 +670,6 @@ int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *dat
668 VARDECL(int, fine_priority); 670 VARDECL(int, fine_priority);
669 VARDECL(int, tf_res); 671 VARDECL(int, tf_res);
670 VARDECL(unsigned char, collapse_masks); 672 VARDECL(unsigned char, collapse_masks);
671 celt_sig *out_mem[2] = {NULL, NULL};
672 celt_sig *decode_mem[2]; 673 celt_sig *decode_mem[2];
673 celt_sig *out_syn[2]; 674 celt_sig *out_syn[2];
674 opus_val16 *lpc; 675 opus_val16 *lpc;
@@ -709,7 +710,6 @@ int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *dat
709 710
710 c=0; do { 711 c=0; do {
711 decode_mem[c] = st->_decode_mem + c*(DECODE_BUFFER_SIZE+overlap); 712 decode_mem[c] = st->_decode_mem + c*(DECODE_BUFFER_SIZE+overlap);
712 out_mem[c] = decode_mem[c]+DECODE_BUFFER_SIZE-MAX_PERIOD;
713 } while (++c<CC); 713 } while (++c<CC);
714 lpc = (opus_val16*)(st->_decode_mem+(DECODE_BUFFER_SIZE+overlap)*CC); 714 lpc = (opus_val16*)(st->_decode_mem+(DECODE_BUFFER_SIZE+overlap)*CC);
715 oldBandE = lpc+CC*LPC_ORDER; 715 oldBandE = lpc+CC*LPC_ORDER;
@@ -934,7 +934,6 @@ int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *dat
934 /* Synthesis */ 934 /* Synthesis */
935 denormalise_bands(mode, X, freq, oldBandE, st->start, effEnd, C, M); 935 denormalise_bands(mode, X, freq, oldBandE, st->start, effEnd, C, M);
936 } 936 }
937
938 c=0; do { 937 c=0; do {
939 OPUS_MOVE(decode_mem[c], decode_mem[c]+N, DECODE_BUFFER_SIZE-N+overlap/2); 938 OPUS_MOVE(decode_mem[c], decode_mem[c]+N, DECODE_BUFFER_SIZE-N+overlap/2);
940 } while (++c<CC); 939 } while (++c<CC);
@@ -948,7 +947,7 @@ int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *dat
948 } while (++c<C); 947 } while (++c<C);
949 948
950 c=0; do { 949 c=0; do {
951 out_syn[c] = out_mem[c]+MAX_PERIOD-N; 950 out_syn[c] = decode_mem[c]+DECODE_BUFFER_SIZE-N;
952 } while (++c<CC); 951 } while (++c<CC);
953 952
954 if (CC==2&&C==1) 953 if (CC==2&&C==1)
diff --git a/lib/rbcodec/codecs/libopus/celt/celt_lpc.c b/lib/rbcodec/codecs/libopus/celt/celt_lpc.c
index 7ffe90a357..fa29d626ea 100644
--- a/lib/rbcodec/codecs/libopus/celt/celt_lpc.c
+++ b/lib/rbcodec/codecs/libopus/celt/celt_lpc.c
@@ -226,7 +226,8 @@ int _celt_autocorr(
226 const opus_val16 *window, 226 const opus_val16 *window,
227 int overlap, 227 int overlap,
228 int lag, 228 int lag,
229 int n 229 int n,
230 int arch
230 ) 231 )
231{ 232{
232 opus_val32 d; 233 opus_val32 d;
@@ -275,7 +276,7 @@ int _celt_autocorr(
275 shift = 0; 276 shift = 0;
276 } 277 }
277#endif 278#endif
278 celt_pitch_xcorr(xptr, xptr, ac, fastN, lag+1); 279 celt_pitch_xcorr(xptr, xptr, ac, fastN, lag+1, arch);
279 for (k=0;k<=lag;k++) 280 for (k=0;k<=lag;k++)
280 { 281 {
281 for (i = k+fastN, d = 0; i < n; i++) 282 for (i = k+fastN, d = 0; i < n; i++)
diff --git a/lib/rbcodec/codecs/libopus/celt/celt_lpc.h b/lib/rbcodec/codecs/libopus/celt/celt_lpc.h
index 19279a0ed6..dc2a0a3d26 100644
--- a/lib/rbcodec/codecs/libopus/celt/celt_lpc.h
+++ b/lib/rbcodec/codecs/libopus/celt/celt_lpc.h
@@ -48,6 +48,7 @@ void celt_iir(const opus_val32 *x,
48 int ord, 48 int ord,
49 opus_val16 *mem); 49 opus_val16 *mem);
50 50
51int _celt_autocorr(const opus_val16 *x, opus_val32 *ac, const opus_val16 *window, int overlap, int lag, int n); 51int _celt_autocorr(const opus_val16 *x, opus_val32 *ac,
52 const opus_val16 *window, int overlap, int lag, int n, int arch);
52 53
53#endif /* PLC_H */ 54#endif /* PLC_H */
diff --git a/lib/rbcodec/codecs/libopus/celt/cpu_support.h b/lib/rbcodec/codecs/libopus/celt/cpu_support.h
index 41481feb9c..d68dbe62c5 100644
--- a/lib/rbcodec/codecs/libopus/celt/cpu_support.h
+++ b/lib/rbcodec/codecs/libopus/celt/cpu_support.h
@@ -28,7 +28,10 @@
28#ifndef CPU_SUPPORT_H 28#ifndef CPU_SUPPORT_H
29#define CPU_SUPPORT_H 29#define CPU_SUPPORT_H
30 30
31#if defined(OPUS_HAVE_RTCD) && defined(ARMv4_ASM) 31#include "opus_types.h"
32#include "opus_defines.h"
33
34#if defined(OPUS_HAVE_RTCD) && defined(OPUS_ARM_ASM)
32#include "arm/armcpu.h" 35#include "arm/armcpu.h"
33 36
34/* We currently support 4 ARM variants: 37/* We currently support 4 ARM variants:
@@ -42,7 +45,7 @@
42#else 45#else
43#define OPUS_ARCHMASK 0 46#define OPUS_ARCHMASK 0
44 47
45static inline int opus_select_arch(void) 48static OPUS_INLINE int opus_select_arch(void)
46{ 49{
47 return 0; 50 return 0;
48} 51}
diff --git a/lib/rbcodec/codecs/libopus/celt/cwrs.c b/lib/rbcodec/codecs/libopus/celt/cwrs.c
index eb8fa1c807..03b86985d2 100644
--- a/lib/rbcodec/codecs/libopus/celt/cwrs.c
+++ b/lib/rbcodec/codecs/libopus/celt/cwrs.c
@@ -410,7 +410,7 @@ static const opus_uint32 CELT_PVQ_U_DATA[1272] ICONST_ATTR ={
410}; 410};
411 411
412#if defined(CUSTOM_MODES) 412#if defined(CUSTOM_MODES)
413const opus_uint32 *const CELT_PVQ_U_ROW[15]={ 413static const opus_uint32 *const CELT_PVQ_U_ROW[15]={
414 CELT_PVQ_U_DATA+ 0,CELT_PVQ_U_DATA+ 208,CELT_PVQ_U_DATA+ 415, 414 CELT_PVQ_U_DATA+ 0,CELT_PVQ_U_DATA+ 208,CELT_PVQ_U_DATA+ 415,
415 CELT_PVQ_U_DATA+ 621,CELT_PVQ_U_DATA+ 826,CELT_PVQ_U_DATA+1030, 415 CELT_PVQ_U_DATA+ 621,CELT_PVQ_U_DATA+ 826,CELT_PVQ_U_DATA+1030,
416 CELT_PVQ_U_DATA+1233,CELT_PVQ_U_DATA+1336,CELT_PVQ_U_DATA+1389, 416 CELT_PVQ_U_DATA+1233,CELT_PVQ_U_DATA+1336,CELT_PVQ_U_DATA+1389,
@@ -418,7 +418,7 @@ const opus_uint32 *const CELT_PVQ_U_ROW[15]={
418 CELT_PVQ_U_DATA+1464,CELT_PVQ_U_DATA+1470,CELT_PVQ_U_DATA+1473 418 CELT_PVQ_U_DATA+1464,CELT_PVQ_U_DATA+1470,CELT_PVQ_U_DATA+1473
419}; 419};
420#else 420#else
421const opus_uint32 *const CELT_PVQ_U_ROW[15]={ 421static const opus_uint32 *const CELT_PVQ_U_ROW[15]={
422 CELT_PVQ_U_DATA+ 0,CELT_PVQ_U_DATA+ 176,CELT_PVQ_U_DATA+ 351, 422 CELT_PVQ_U_DATA+ 0,CELT_PVQ_U_DATA+ 176,CELT_PVQ_U_DATA+ 351,
423 CELT_PVQ_U_DATA+ 525,CELT_PVQ_U_DATA+ 698,CELT_PVQ_U_DATA+ 870, 423 CELT_PVQ_U_DATA+ 525,CELT_PVQ_U_DATA+ 698,CELT_PVQ_U_DATA+ 870,
424 CELT_PVQ_U_DATA+1041,CELT_PVQ_U_DATA+1131,CELT_PVQ_U_DATA+1178, 424 CELT_PVQ_U_DATA+1041,CELT_PVQ_U_DATA+1131,CELT_PVQ_U_DATA+1178,
@@ -534,7 +534,7 @@ void decode_pulses(int *_y,int _n,int _k,ec_dec *_dec){
534/*Computes the next row/column of any recurrence that obeys the relation 534/*Computes the next row/column of any recurrence that obeys the relation
535 u[i][j]=u[i-1][j]+u[i][j-1]+u[i-1][j-1]. 535 u[i][j]=u[i-1][j]+u[i][j-1]+u[i-1][j-1].
536 _ui0 is the base case for the new row/column.*/ 536 _ui0 is the base case for the new row/column.*/
537static inline void unext(opus_uint32 *_ui,unsigned _len,opus_uint32 _ui0){ 537static OPUS_INLINE void unext(opus_uint32 *_ui,unsigned _len,opus_uint32 _ui0){
538 opus_uint32 ui1; 538 opus_uint32 ui1;
539 unsigned j; 539 unsigned j;
540 /*This do-while will overrun the array if we don't have storage for at least 540 /*This do-while will overrun the array if we don't have storage for at least
@@ -550,7 +550,7 @@ static inline void unext(opus_uint32 *_ui,unsigned _len,opus_uint32 _ui0){
550/*Computes the previous row/column of any recurrence that obeys the relation 550/*Computes the previous row/column of any recurrence that obeys the relation
551 u[i-1][j]=u[i][j]-u[i][j-1]-u[i-1][j-1]. 551 u[i-1][j]=u[i][j]-u[i][j-1]-u[i-1][j-1].
552 _ui0 is the base case for the new row/column.*/ 552 _ui0 is the base case for the new row/column.*/
553static inline void uprev(opus_uint32 *_ui,unsigned _n,opus_uint32 _ui0){ 553static OPUS_INLINE void uprev(opus_uint32 *_ui,unsigned _n,opus_uint32 _ui0){
554 opus_uint32 ui1; 554 opus_uint32 ui1;
555 unsigned j; 555 unsigned j;
556 /*This do-while will overrun the array if we don't have storage for at least 556 /*This do-while will overrun the array if we don't have storage for at least
@@ -617,7 +617,7 @@ static void cwrsi(int _n,int _k,opus_uint32 _i,int *_y,opus_uint32 *_u){
617 of size 1 with associated sign bits. 617 of size 1 with associated sign bits.
618 _y: The vector of pulses, whose sum of absolute values is K. 618 _y: The vector of pulses, whose sum of absolute values is K.
619 _k: Returns K.*/ 619 _k: Returns K.*/
620static inline opus_uint32 icwrs1(const int *_y,int *_k){ 620static OPUS_INLINE opus_uint32 icwrs1(const int *_y,int *_k){
621 *_k=abs(_y[0]); 621 *_k=abs(_y[0]);
622 return _y[0]<0; 622 return _y[0]<0;
623} 623}
@@ -626,7 +626,7 @@ static inline opus_uint32 icwrs1(const int *_y,int *_k){
626 of size _n with associated sign bits. 626 of size _n with associated sign bits.
627 _y: The vector of pulses, whose sum of absolute values must be _k. 627 _y: The vector of pulses, whose sum of absolute values must be _k.
628 _nc: Returns V(_n,_k).*/ 628 _nc: Returns V(_n,_k).*/
629static inline opus_uint32 icwrs(int _n,int _k,opus_uint32 *_nc,const int *_y, 629static OPUS_INLINE opus_uint32 icwrs(int _n,int _k,opus_uint32 *_nc,const int *_y,
630 opus_uint32 *_u){ 630 opus_uint32 *_u){
631 opus_uint32 i; 631 opus_uint32 i;
632 int j; 632 int j;
diff --git a/lib/rbcodec/codecs/libopus/celt/ecintrin.h b/lib/rbcodec/codecs/libopus/celt/ecintrin.h
index be57dd40de..2263cff6bd 100644
--- a/lib/rbcodec/codecs/libopus/celt/ecintrin.h
+++ b/lib/rbcodec/codecs/libopus/celt/ecintrin.h
@@ -33,7 +33,7 @@
33#if !defined(_ecintrin_H) 33#if !defined(_ecintrin_H)
34# define _ecintrin_H (1) 34# define _ecintrin_H (1)
35 35
36/*Some specific platforms may have optimized intrinsic or inline assembly 36/*Some specific platforms may have optimized intrinsic or OPUS_INLINE assembly
37 versions of these functions which can substantially improve performance. 37 versions of these functions which can substantially improve performance.
38 We define macros for them to allow easy incorporation of these non-ANSI 38 We define macros for them to allow easy incorporation of these non-ANSI
39 features.*/ 39 features.*/
diff --git a/lib/rbcodec/codecs/libopus/celt/entcode.h b/lib/rbcodec/codecs/libopus/celt/entcode.h
index aebecc0647..dd13e49e50 100644
--- a/lib/rbcodec/codecs/libopus/celt/entcode.h
+++ b/lib/rbcodec/codecs/libopus/celt/entcode.h
@@ -26,6 +26,7 @@
26*/ 26*/
27 27
28#include "opus_types.h" 28#include "opus_types.h"
29#include "opus_defines.h"
29 30
30#if !defined(_entcode_H) 31#if !defined(_entcode_H)
31# define _entcode_H (1) 32# define _entcode_H (1)
@@ -83,15 +84,15 @@ struct ec_ctx{
83 int error; 84 int error;
84}; 85};
85 86
86static inline opus_uint32 ec_range_bytes(ec_ctx *_this){ 87static OPUS_INLINE opus_uint32 ec_range_bytes(ec_ctx *_this){
87 return _this->offs; 88 return _this->offs;
88} 89}
89 90
90static inline unsigned char *ec_get_buffer(ec_ctx *_this){ 91static OPUS_INLINE unsigned char *ec_get_buffer(ec_ctx *_this){
91 return _this->buf; 92 return _this->buf;
92} 93}
93 94
94static inline int ec_get_error(ec_ctx *_this){ 95static OPUS_INLINE int ec_get_error(ec_ctx *_this){
95 return _this->error; 96 return _this->error;
96} 97}
97 98
@@ -101,7 +102,7 @@ static inline int ec_get_error(ec_ctx *_this){
101 Return: The number of bits. 102 Return: The number of bits.
102 This will always be slightly larger than the exact value (e.g., all 103 This will always be slightly larger than the exact value (e.g., all
103 rounding error is in the positive direction).*/ 104 rounding error is in the positive direction).*/
104static inline int ec_tell(ec_ctx *_this){ 105static OPUS_INLINE int ec_tell(ec_ctx *_this){
105 return _this->nbits_total-EC_ILOG(_this->rng); 106 return _this->nbits_total-EC_ILOG(_this->rng);
106} 107}
107 108
diff --git a/lib/rbcodec/codecs/libopus/celt/fixed_generic.h b/lib/rbcodec/codecs/libopus/celt/fixed_generic.h
index 0e77976e83..ecf018a244 100644
--- a/lib/rbcodec/codecs/libopus/celt/fixed_generic.h
+++ b/lib/rbcodec/codecs/libopus/celt/fixed_generic.h
@@ -40,7 +40,7 @@
40#define MULT16_32_Q16(a,b) ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16)) 40#define MULT16_32_Q16(a,b) ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16))
41 41
42/** 16x32 multiplication, followed by a 16-bit shift right (round-to-nearest). Results fits in 32 bits */ 42/** 16x32 multiplication, followed by a 16-bit shift right (round-to-nearest). Results fits in 32 bits */
43#define MULT16_32_P16(a,b) ADD32(MULT16_16((a),SHR((b),16)), PSHR(MULT16_16((a),((b)&0x0000ffff)),16)) 43#define MULT16_32_P16(a,b) ADD32(MULT16_16((a),SHR((b),16)), PSHR(MULT16_16SU((a),((b)&0x0000ffff)),16))
44 44
45/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */ 45/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */
46#define MULT16_32_Q15(a,b) ADD32(SHL(MULT16_16((a),SHR((b),16)),1), SHR(MULT16_16SU((a),((b)&0x0000ffff)),15)) 46#define MULT16_32_Q15(a,b) ADD32(SHL(MULT16_16((a),SHR((b),16)),1), SHR(MULT16_16SU((a),((b)&0x0000ffff)),15))
@@ -116,6 +116,7 @@
116#define MAC16_32_Q15(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))) 116#define MAC16_32_Q15(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15)))
117 117
118#define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11)) 118#define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11))
119#define MULT16_16_Q11(a,b) (SHR(MULT16_16((a),(b)),11))
119#define MULT16_16_Q13(a,b) (SHR(MULT16_16((a),(b)),13)) 120#define MULT16_16_Q13(a,b) (SHR(MULT16_16((a),(b)),13))
120#define MULT16_16_Q14(a,b) (SHR(MULT16_16((a),(b)),14)) 121#define MULT16_16_Q14(a,b) (SHR(MULT16_16((a),(b)),14))
121#define MULT16_16_Q15(a,b) (SHR(MULT16_16((a),(b)),15)) 122#define MULT16_16_Q15(a,b) (SHR(MULT16_16((a),(b)),15))
diff --git a/lib/rbcodec/codecs/libopus/celt/float_cast.h b/lib/rbcodec/codecs/libopus/celt/float_cast.h
index 5ded291599..ede6574860 100644
--- a/lib/rbcodec/codecs/libopus/celt/float_cast.h
+++ b/lib/rbcodec/codecs/libopus/celt/float_cast.h
@@ -101,7 +101,7 @@
101 #include <math.h> 101 #include <math.h>
102 102
103 /* Win32 doesn't seem to have these functions. 103 /* Win32 doesn't seem to have these functions.
104 ** Therefore implement inline versions of these functions here. 104 ** Therefore implement OPUS_INLINE versions of these functions here.
105 */ 105 */
106 106
107 __inline long int 107 __inline long int
@@ -128,7 +128,7 @@
128#endif 128#endif
129 129
130#ifndef DISABLE_FLOAT_API 130#ifndef DISABLE_FLOAT_API
131static inline opus_int16 FLOAT2INT16(float x) 131static OPUS_INLINE opus_int16 FLOAT2INT16(float x)
132{ 132{
133 x = x*CELT_SIG_SCALE; 133 x = x*CELT_SIG_SCALE;
134 x = MAX32(x, -32768); 134 x = MAX32(x, -32768);
diff --git a/lib/rbcodec/codecs/libopus/celt/mathops.c b/lib/rbcodec/codecs/libopus/celt/mathops.c
index 21fd942960..3f8c5dcc0e 100644
--- a/lib/rbcodec/codecs/libopus/celt/mathops.c
+++ b/lib/rbcodec/codecs/libopus/celt/mathops.c
@@ -139,7 +139,7 @@ opus_val32 celt_sqrt(opus_val32 x)
139#define L3 8277 139#define L3 8277
140#define L4 -626 140#define L4 -626
141 141
142static inline opus_val16 _celt_cos_pi_2(opus_val16 x) 142static OPUS_INLINE opus_val16 _celt_cos_pi_2(opus_val16 x)
143{ 143{
144 opus_val16 x2; 144 opus_val16 x2;
145 145
diff --git a/lib/rbcodec/codecs/libopus/celt/mathops.h b/lib/rbcodec/codecs/libopus/celt/mathops.h
index 44fa97c697..a0525a9610 100644
--- a/lib/rbcodec/codecs/libopus/celt/mathops.h
+++ b/lib/rbcodec/codecs/libopus/celt/mathops.h
@@ -44,7 +44,7 @@
44unsigned isqrt32(opus_uint32 _val); 44unsigned isqrt32(opus_uint32 _val);
45 45
46#ifndef OVERRIDE_CELT_MAXABS16 46#ifndef OVERRIDE_CELT_MAXABS16
47static inline opus_val32 celt_maxabs16(const opus_val16 *x, int len) 47static OPUS_INLINE opus_val32 celt_maxabs16(const opus_val16 *x, int len)
48{ 48{
49 int i; 49 int i;
50 opus_val16 maxval = 0; 50 opus_val16 maxval = 0;
@@ -60,7 +60,7 @@ static inline opus_val32 celt_maxabs16(const opus_val16 *x, int len)
60 60
61#ifndef OVERRIDE_CELT_MAXABS32 61#ifndef OVERRIDE_CELT_MAXABS32
62#ifdef FIXED_POINT 62#ifdef FIXED_POINT
63static inline opus_val32 celt_maxabs32(const opus_val32 *x, int len) 63static OPUS_INLINE opus_val32 celt_maxabs32(const opus_val32 *x, int len)
64{ 64{
65 int i; 65 int i;
66 opus_val32 maxval = 0; 66 opus_val32 maxval = 0;
@@ -95,7 +95,7 @@ static inline opus_val32 celt_maxabs32(const opus_val32 *x, int len)
95 denorm, +/- inf and NaN are *not* handled */ 95 denorm, +/- inf and NaN are *not* handled */
96 96
97/** Base-2 log approximation (log2(x)). */ 97/** Base-2 log approximation (log2(x)). */
98static inline float celt_log2(float x) 98static OPUS_INLINE float celt_log2(float x)
99{ 99{
100 int integer; 100 int integer;
101 float frac; 101 float frac;
@@ -113,7 +113,7 @@ static inline float celt_log2(float x)
113} 113}
114 114
115/** Base-2 exponential approximation (2^x). */ 115/** Base-2 exponential approximation (2^x). */
116static inline float celt_exp2(float x) 116static OPUS_INLINE float celt_exp2(float x)
117{ 117{
118 int integer; 118 int integer;
119 float frac; 119 float frac;
@@ -145,7 +145,7 @@ static inline float celt_exp2(float x)
145 145
146#ifndef OVERRIDE_CELT_ILOG2 146#ifndef OVERRIDE_CELT_ILOG2
147/** Integer log in base2. Undefined for zero and negative numbers */ 147/** Integer log in base2. Undefined for zero and negative numbers */
148static inline opus_int16 celt_ilog2(opus_int32 x) 148static OPUS_INLINE opus_int16 celt_ilog2(opus_int32 x)
149{ 149{
150 celt_assert2(x>0, "celt_ilog2() only defined for strictly positive numbers"); 150 celt_assert2(x>0, "celt_ilog2() only defined for strictly positive numbers");
151 return EC_ILOG(x)-1; 151 return EC_ILOG(x)-1;
@@ -154,7 +154,7 @@ static inline opus_int16 celt_ilog2(opus_int32 x)
154 154
155 155
156/** 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 */
157static inline opus_int16 celt_zlog2(opus_val32 x) 157static OPUS_INLINE opus_int16 celt_zlog2(opus_val32 x)
158{ 158{
159 return x <= 0 ? 0 : celt_ilog2(x); 159 return x <= 0 ? 0 : celt_ilog2(x);
160} 160}
@@ -165,7 +165,8 @@ opus_val32 celt_sqrt(opus_val32 x);
165 165
166opus_val16 celt_cos_norm(opus_val32 x); 166opus_val16 celt_cos_norm(opus_val32 x);
167 167
168static inline opus_val16 celt_log2(opus_val32 x) 168/** Base-2 logarithm approximation (log2(x)). (Q14 input, Q10 output) */
169static OPUS_INLINE opus_val16 celt_log2(opus_val32 x)
169{ 170{
170 int i; 171 int i;
171 opus_val16 n, frac; 172 opus_val16 n, frac;
@@ -191,14 +192,14 @@ static inline opus_val16 celt_log2(opus_val32 x)
191#define D2 14819 192#define D2 14819
192#define D3 10204 193#define D3 10204
193 194
194static inline opus_val32 celt_exp2_frac(opus_val16 x) 195static OPUS_INLINE opus_val32 celt_exp2_frac(opus_val16 x)
195{ 196{
196 opus_val16 frac; 197 opus_val16 frac;
197 frac = SHL16(x, 4); 198 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 return ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac))))));
199} 200}
200/** Base-2 exponential approximation (2^x). (Q10 input, Q16 output) */ 201/** Base-2 exponential approximation (2^x). (Q10 input, Q16 output) */
201static inline opus_val32 celt_exp2(opus_val16 x) 202static OPUS_INLINE opus_val32 celt_exp2(opus_val16 x)
202{ 203{
203 int integer; 204 int integer;
204 opus_val16 frac; 205 opus_val16 frac;
@@ -224,7 +225,7 @@ opus_val32 frac_div32(opus_val32 a, opus_val32 b);
224 225
225/* Atan approximation using a 4th order polynomial. Input is in Q15 format 226/* Atan approximation using a 4th order polynomial. Input is in Q15 format
226 and normalized by pi/4. Output is in Q15 format */ 227 and normalized by pi/4. Output is in Q15 format */
227static inline opus_val16 celt_atan01(opus_val16 x) 228static OPUS_INLINE opus_val16 celt_atan01(opus_val16 x)
228{ 229{
229 return MULT16_16_P15(x, ADD32(M1, MULT16_16_P15(x, ADD32(M2, MULT16_16_P15(x, ADD32(M3, MULT16_16_P15(M4, x))))))); 230 return MULT16_16_P15(x, ADD32(M1, MULT16_16_P15(x, ADD32(M2, MULT16_16_P15(x, ADD32(M3, MULT16_16_P15(M4, x)))))));
230} 231}
@@ -235,7 +236,7 @@ static inline opus_val16 celt_atan01(opus_val16 x)
235#undef M4 236#undef M4
236 237
237/* atan2() approximation valid for positive input values */ 238/* atan2() approximation valid for positive input values */
238static inline opus_val16 celt_atan2p(opus_val16 y, opus_val16 x) 239static OPUS_INLINE opus_val16 celt_atan2p(opus_val16 y, opus_val16 x)
239{ 240{
240 if (y < x) 241 if (y < x)
241 { 242 {
diff --git a/lib/rbcodec/codecs/libopus/celt/os_support.h b/lib/rbcodec/codecs/libopus/celt/os_support.h
index 2484f0b2f7..5e47e3cff9 100644
--- a/lib/rbcodec/codecs/libopus/celt/os_support.h
+++ b/lib/rbcodec/codecs/libopus/celt/os_support.h
@@ -35,13 +35,16 @@
35# include "custom_support.h" 35# include "custom_support.h"
36#endif 36#endif
37 37
38#include "opus_types.h"
39#include "opus_defines.h"
40
38#include <string.h> 41#include <string.h>
39#include <stdio.h> 42#include <stdio.h>
40#include <stdlib.h> 43#include <stdlib.h>
41 44
42/** Opus wrapper for malloc(). To do your own dynamic allocation, all you need to do is replace this function and opus_free */ 45/** Opus wrapper for malloc(). To do your own dynamic allocation, all you need to do is replace this function and opus_free */
43#ifndef OVERRIDE_OPUS_ALLOC 46#ifndef OVERRIDE_OPUS_ALLOC
44static inline void *opus_alloc (size_t size) 47static OPUS_INLINE void *opus_alloc (size_t size)
45{ 48{
46 return malloc(size); 49 return malloc(size);
47} 50}
@@ -49,7 +52,7 @@ static inline void *opus_alloc (size_t size)
49 52
50/** Same as celt_alloc(), except that the area is only needed inside a CELT call (might cause problem with wideband though) */ 53/** Same as celt_alloc(), except that the area is only needed inside a CELT call (might cause problem with wideband though) */
51#ifndef OVERRIDE_OPUS_ALLOC_SCRATCH 54#ifndef OVERRIDE_OPUS_ALLOC_SCRATCH
52static inline void *opus_alloc_scratch (size_t size) 55static OPUS_INLINE void *opus_alloc_scratch (size_t size)
53{ 56{
54 /* Scratch space doesn't need to be cleared */ 57 /* Scratch space doesn't need to be cleared */
55 return opus_alloc(size); 58 return opus_alloc(size);
@@ -58,7 +61,7 @@ static inline void *opus_alloc_scratch (size_t size)
58 61
59/** Opus wrapper for free(). To do your own dynamic allocation, all you need to do is replace this function and opus_alloc */ 62/** Opus wrapper for free(). To do your own dynamic allocation, all you need to do is replace this function and opus_alloc */
60#ifndef OVERRIDE_OPUS_FREE 63#ifndef OVERRIDE_OPUS_FREE
61static inline void opus_free (void *ptr) 64static OPUS_INLINE void opus_free (void *ptr)
62{ 65{
63 free(ptr); 66 free(ptr);
64} 67}
diff --git a/lib/rbcodec/codecs/libopus/celt/pitch.c b/lib/rbcodec/codecs/libopus/celt/pitch.c
index 0d8be13025..c28857297a 100644
--- a/lib/rbcodec/codecs/libopus/celt/pitch.c
+++ b/lib/rbcodec/codecs/libopus/celt/pitch.c
@@ -145,7 +145,7 @@ static void celt_fir5(const opus_val16 *x,
145 145
146 146
147void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp, 147void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp,
148 int len, int C) 148 int len, int C, int arch)
149{ 149{
150 int i; 150 int i;
151 opus_val32 ac[5]; 151 opus_val32 ac[5];
@@ -180,7 +180,7 @@ void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x
180 } 180 }
181 181
182 _celt_autocorr(x_lp, ac, NULL, 0, 182 _celt_autocorr(x_lp, ac, NULL, 0,
183 4, len>>1); 183 4, len>>1, arch);
184 184
185 /* Noise floor -40 dB */ 185 /* Noise floor -40 dB */
186#ifdef FIXED_POINT 186#ifdef FIXED_POINT
@@ -250,9 +250,14 @@ opus_val32
250#else 250#else
251void 251void
252#endif 252#endif
253celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y, opus_val32 *xcorr, int len, int max_pitch) 253celt_pitch_xcorr_c(const opus_val16 *_x, const opus_val16 *_y, opus_val32 *xcorr, int len, int max_pitch)
254{ 254{
255 int i,j; 255 int i,j;
256 /*The EDSP version requires that max_pitch is at least 1, and that _x is
257 32-bit aligned.
258 Since it's hard to put asserts in assembly, put them here.*/
259 celt_assert(max_pitch>0);
260 celt_assert((((unsigned char *)_x-(unsigned char *)NULL)&3)==0);
256#ifdef FIXED_POINT 261#ifdef FIXED_POINT
257 opus_val32 maxcorr=1; 262 opus_val32 maxcorr=1;
258#endif 263#endif
@@ -289,7 +294,7 @@ celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y, opus_val32 *xcorr,
289 294
290#endif 295#endif
291void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y, 296void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y,
292 int len, int max_pitch, int *pitch) 297 int len, int max_pitch, int *pitch, int arch)
293{ 298{
294 int i, j; 299 int i, j;
295 int lag; 300 int lag;
@@ -342,7 +347,7 @@ void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTR
342#ifdef FIXED_POINT 347#ifdef FIXED_POINT
343 maxcorr = 348 maxcorr =
344#endif 349#endif
345 celt_pitch_xcorr(x_lp4, y_lp4, xcorr, len>>2, max_pitch>>2); 350 celt_pitch_xcorr(x_lp4, y_lp4, xcorr, len>>2, max_pitch>>2, arch);
346 351
347 find_best_pitch(xcorr, y_lp4, len>>2, max_pitch>>2, best_pitch 352 find_best_pitch(xcorr, y_lp4, len>>2, max_pitch>>2, best_pitch
348#ifdef FIXED_POINT 353#ifdef FIXED_POINT
diff --git a/lib/rbcodec/codecs/libopus/celt/pitch.h b/lib/rbcodec/codecs/libopus/celt/pitch.h
index caffd24bc4..df317ecc1d 100644
--- a/lib/rbcodec/codecs/libopus/celt/pitch.h
+++ b/lib/rbcodec/codecs/libopus/celt/pitch.h
@@ -35,16 +35,21 @@
35#define PITCH_H 35#define PITCH_H
36 36
37#include "modes.h" 37#include "modes.h"
38#include "cpu_support.h"
38 39
39#if defined(__SSE__) && !defined(FIXED_POINT) 40#if defined(__SSE__) && !defined(FIXED_POINT)
40#include "x86/pitch_sse.h" 41#include "x86/pitch_sse.h"
41#endif 42#endif
42 43
44#if defined(OPUS_ARM_ASM) && defined(FIXED_POINT)
45# include "arm/pitch_arm.h"
46#endif
47
43void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp, 48void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp,
44 int len, int C); 49 int len, int C, int arch);
45 50
46void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y, 51void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y,
47 int len, int max_pitch, int *pitch); 52 int len, int max_pitch, int *pitch, int arch);
48 53
49opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod, 54opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod,
50 int N, int *T0, int prev_period, opus_val16 prev_gain); 55 int N, int *T0, int prev_period, opus_val16 prev_gain);
@@ -52,10 +57,11 @@ opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod,
52/* OPT: This is the kernel you really want to optimize. It gets used a lot 57/* OPT: This is the kernel you really want to optimize. It gets used a lot
53 by the prefilter and by the PLC. */ 58 by the prefilter and by the PLC. */
54#ifndef OVERRIDE_XCORR_KERNEL 59#ifndef OVERRIDE_XCORR_KERNEL
55static inline void xcorr_kernel(const opus_val16 * x, const opus_val16 * y, opus_val32 sum[4], int len) 60static OPUS_INLINE void xcorr_kernel(const opus_val16 * x, const opus_val16 * y, opus_val32 sum[4], int len)
56{ 61{
57 int j; 62 int j;
58 opus_val16 y_0, y_1, y_2, y_3; 63 opus_val16 y_0, y_1, y_2, y_3;
64 celt_assert(len>=3);
59 y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */ 65 y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */
60 y_0=*y++; 66 y_0=*y++;
61 y_1=*y++; 67 y_1=*y++;
@@ -119,7 +125,7 @@ static inline void xcorr_kernel(const opus_val16 * x, const opus_val16 * y, opus
119#endif /* OVERRIDE_XCORR_KERNEL */ 125#endif /* OVERRIDE_XCORR_KERNEL */
120 126
121#ifndef OVERRIDE_DUAL_INNER_PROD 127#ifndef OVERRIDE_DUAL_INNER_PROD
122static inline void dual_inner_prod(const opus_val16 *x, const opus_val16 *y01, const opus_val16 *y02, 128static OPUS_INLINE void dual_inner_prod(const opus_val16 *x, const opus_val16 *y01, const opus_val16 *y02,
123 int N, opus_val32 *xy1, opus_val32 *xy2) 129 int N, opus_val32 *xy1, opus_val32 *xy2)
124{ 130{
125 int i; 131 int i;
@@ -140,6 +146,28 @@ opus_val32
140#else 146#else
141void 147void
142#endif 148#endif
143celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y, opus_val32 *xcorr, int len, int max_pitch); 149celt_pitch_xcorr_c(const opus_val16 *_x, const opus_val16 *_y,
150 opus_val32 *xcorr, int len, int max_pitch);
151
152#if !defined(OVERRIDE_PITCH_XCORR)
153/*Is run-time CPU detection enabled on this platform?*/
154# if defined(OPUS_HAVE_RTCD)
155extern
156# if defined(FIXED_POINT)
157opus_val32
158# else
159void
160# endif
161(*const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *,
162 const opus_val16 *, opus_val32 *, int, int);
163
164# define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
165 ((*CELT_PITCH_XCORR_IMPL[(arch)&OPUS_ARCHMASK])(_x, _y, \
166 xcorr, len, max_pitch))
167# else
168# define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
169 ((void)(arch),celt_pitch_xcorr_c(_x, _y, xcorr, len, max_pitch))
170# endif
171#endif
144 172
145#endif 173#endif
diff --git a/lib/rbcodec/codecs/libopus/celt/quant_bands.c b/lib/rbcodec/codecs/libopus/celt/quant_bands.c
index 79685e17cb..ac6952c266 100644
--- a/lib/rbcodec/codecs/libopus/celt/quant_bands.c
+++ b/lib/rbcodec/codecs/libopus/celt/quant_bands.c
@@ -312,6 +312,7 @@ void quant_coarse_energy(const CELTMode *m, int start, int end, int effEnd,
312 opus_int32 tell_intra; 312 opus_int32 tell_intra;
313 opus_uint32 nstart_bytes; 313 opus_uint32 nstart_bytes;
314 opus_uint32 nintra_bytes; 314 opus_uint32 nintra_bytes;
315 opus_uint32 save_bytes;
315 int badness2; 316 int badness2;
316 VARDECL(unsigned char, intra_bits); 317 VARDECL(unsigned char, intra_bits);
317 318
@@ -322,7 +323,10 @@ void quant_coarse_energy(const CELTMode *m, int start, int end, int effEnd,
322 nstart_bytes = ec_range_bytes(&enc_start_state); 323 nstart_bytes = ec_range_bytes(&enc_start_state);
323 nintra_bytes = ec_range_bytes(&enc_intra_state); 324 nintra_bytes = ec_range_bytes(&enc_intra_state);
324 intra_buf = ec_get_buffer(&enc_intra_state) + nstart_bytes; 325 intra_buf = ec_get_buffer(&enc_intra_state) + nstart_bytes;
325 ALLOC(intra_bits, nintra_bytes-nstart_bytes, unsigned char); 326 save_bytes = nintra_bytes-nstart_bytes;
327 if (save_bytes == 0)
328 save_bytes = ALLOC_NONE;
329 ALLOC(intra_bits, save_bytes, unsigned char);
326 /* Copy bits from intra bit-stream */ 330 /* Copy bits from intra bit-stream */
327 OPUS_COPY(intra_bits, intra_buf, nintra_bytes - nstart_bytes); 331 OPUS_COPY(intra_bits, intra_buf, nintra_bytes - nstart_bytes);
328 332
diff --git a/lib/rbcodec/codecs/libopus/celt/rate.c b/lib/rbcodec/codecs/libopus/celt/rate.c
index e474cf5004..e13d839d63 100644
--- a/lib/rbcodec/codecs/libopus/celt/rate.c
+++ b/lib/rbcodec/codecs/libopus/celt/rate.c
@@ -245,7 +245,7 @@ void compute_pulse_cache(CELTMode *m, int LM)
245 245
246#define ALLOC_STEPS 6 246#define ALLOC_STEPS 6
247 247
248static inline int interp_bits2pulses(const CELTMode *m, int start, int end, int skip_start, 248static OPUS_INLINE int interp_bits2pulses(const CELTMode *m, int start, int end, int skip_start,
249 const int *bits1, const int *bits2, const int *thresh, const int *cap, opus_int32 total, opus_int32 *_balance, 249 const int *bits1, const int *bits2, const int *thresh, const int *cap, opus_int32 total, opus_int32 *_balance,
250 int skip_rsv, int *intensity, int intensity_rsv, int *dual_stereo, int dual_stereo_rsv, int *bits, 250 int skip_rsv, int *intensity, int intensity_rsv, int *dual_stereo, int dual_stereo_rsv, int *bits,
251 int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth) 251 int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth)
diff --git a/lib/rbcodec/codecs/libopus/celt/rate.h b/lib/rbcodec/codecs/libopus/celt/rate.h
index 263fde9820..f1e0661129 100644
--- a/lib/rbcodec/codecs/libopus/celt/rate.h
+++ b/lib/rbcodec/codecs/libopus/celt/rate.h
@@ -45,12 +45,12 @@
45 45
46void compute_pulse_cache(CELTMode *m, int LM); 46void compute_pulse_cache(CELTMode *m, int LM);
47 47
48static inline int get_pulses(int i) 48static OPUS_INLINE int get_pulses(int i)
49{ 49{
50 return i<8 ? i : (8 + (i&7)) << ((i>>3)-1); 50 return i<8 ? i : (8 + (i&7)) << ((i>>3)-1);
51} 51}
52 52
53static inline int bits2pulses(const CELTMode *m, int band, int LM, int bits) 53static OPUS_INLINE int bits2pulses(const CELTMode *m, int band, int LM, int bits)
54{ 54{
55 int i; 55 int i;
56 int lo, hi; 56 int lo, hi;
@@ -77,7 +77,7 @@ static inline int bits2pulses(const CELTMode *m, int band, int LM, int bits)
77 return hi; 77 return hi;
78} 78}
79 79
80static inline int pulses2bits(const CELTMode *m, int band, int LM, int pulses) 80static OPUS_INLINE int pulses2bits(const CELTMode *m, int band, int LM, int pulses)
81{ 81{
82 const unsigned char *cache; 82 const unsigned char *cache;
83 83
diff --git a/lib/rbcodec/codecs/libopus/celt/stack_alloc.h b/lib/rbcodec/codecs/libopus/celt/stack_alloc.h
index 1c093a8cdc..316a6ce12c 100644
--- a/lib/rbcodec/codecs/libopus/celt/stack_alloc.h
+++ b/lib/rbcodec/codecs/libopus/celt/stack_alloc.h
@@ -32,6 +32,9 @@
32#ifndef STACK_ALLOC_H 32#ifndef STACK_ALLOC_H
33#define STACK_ALLOC_H 33#define STACK_ALLOC_H
34 34
35#include "opus_types.h"
36#include "opus_defines.h"
37
35#if (!defined (VAR_ARRAYS) && !defined (USE_ALLOCA) && !defined (NONTHREADSAFE_PSEUDOSTACK)) 38#if (!defined (VAR_ARRAYS) && !defined (USE_ALLOCA) && !defined (NONTHREADSAFE_PSEUDOSTACK))
36#error "Opus requires one of VAR_ARRAYS, USE_ALLOCA, or NONTHREADSAFE_PSEUDOSTACK be defined to select the temporary allocation mode." 39#error "Opus requires one of VAR_ARRAYS, USE_ALLOCA, or NONTHREADSAFE_PSEUDOSTACK be defined to select the temporary allocation mode."
37#endif 40#endif
@@ -92,6 +95,8 @@
92#define SAVE_STACK 95#define SAVE_STACK
93#define RESTORE_STACK 96#define RESTORE_STACK
94#define ALLOC_STACK 97#define ALLOC_STACK
98/* C99 does not allow VLAs of size zero */
99#define ALLOC_NONE 1
95 100
96#elif defined(USE_ALLOCA) 101#elif defined(USE_ALLOCA)
97 102
@@ -106,6 +111,7 @@
106#define SAVE_STACK 111#define SAVE_STACK
107#define RESTORE_STACK 112#define RESTORE_STACK
108#define ALLOC_STACK 113#define ALLOC_STACK
114#define ALLOC_NONE 0
109 115
110#else 116#else
111 117
@@ -143,6 +149,7 @@ extern char *global_stack_top;
143#define VARDECL(type, var) type *var 149#define VARDECL(type, var) type *var
144#define ALLOC(var, size, type) var = PUSH(global_stack, size, type) 150#define ALLOC(var, size, type) var = PUSH(global_stack, size, type)
145#define SAVE_STACK char *_saved_stack = global_stack; 151#define SAVE_STACK char *_saved_stack = global_stack;
152#define ALLOC_NONE 0
146 153
147#endif /* VAR_ARRAYS */ 154#endif /* VAR_ARRAYS */
148 155
@@ -159,7 +166,7 @@ extern char *global_stack_top;
159 166
160#else 167#else
161 168
162static inline int _opus_false(void) {return 0;} 169static OPUS_INLINE int _opus_false(void) {return 0;}
163#define OPUS_CHECK_ARRAY(ptr, len) _opus_false() 170#define OPUS_CHECK_ARRAY(ptr, len) _opus_false()
164#define OPUS_CHECK_VALUE(value) _opus_false() 171#define OPUS_CHECK_VALUE(value) _opus_false()
165#define OPUS_PRINT_INT(value) do{}while(0) 172#define OPUS_PRINT_INT(value) do{}while(0)
diff --git a/lib/rbcodec/codecs/libopus/config.h b/lib/rbcodec/codecs/libopus/config.h
index e2d9b1e9aa..1ce75ff590 100644
--- a/lib/rbcodec/codecs/libopus/config.h
+++ b/lib/rbcodec/codecs/libopus/config.h
@@ -41,14 +41,14 @@
41 41
42#if defined(CPU_ARM) 42#if defined(CPU_ARM)
43#if ARM_ARCH == 4 43#if ARM_ARCH == 4
44#define ARMv4_ASM 44#define OPUS_ARM_INLINE_ASM
45#elif ARM_ARCH > 4 45#elif ARM_ARCH > 4
46#define ARMv5E_ASM 46#define OPUS_ARM_INLINE_EDSP
47#endif 47#endif
48#endif 48#endif
49 49
50#if defined(CPU_COLDFIRE) 50#if defined(CPU_COLDFIRE)
51#define CF_ASM 51#define OPUS_CF_INLINE_ASM
52#endif 52#endif
53 53
54#endif /* CONFIG_H */ 54#endif /* CONFIG_H */
diff --git a/lib/rbcodec/codecs/libopus/opus.c b/lib/rbcodec/codecs/libopus/opus.c
new file mode 100644
index 0000000000..989c6537cb
--- /dev/null
+++ b/lib/rbcodec/codecs/libopus/opus.c
@@ -0,0 +1,333 @@
1/* Copyright (c) 2011 Xiph.Org Foundation, Skype Limited
2 Written by Jean-Marc Valin and Koen Vos */
3/*
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions
6 are met:
7
8 - Redistributions of source code must retain the above copyright
9 notice, this list of conditions and the following disclaimer.
10
11 - Redistributions in binary form must reproduce the above copyright
12 notice, this list of conditions and the following disclaimer in the
13 documentation and/or other materials provided with the distribution.
14
15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
19 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
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.
26*/
27
28#ifdef HAVE_CONFIG_H
29#include "config.h"
30#endif
31
32#include "opus.h"
33#include "opus_private.h"
34
35#ifndef DISABLE_FLOAT_API
36OPUS_EXPORT void opus_pcm_soft_clip(float *_x, int N, int C, float *declip_mem)
37{
38 int c;
39 int i;
40 float *x;
41
42 if (C<1 || N<1 || !_x || !declip_mem) return;
43
44 /* First thing: saturate everything to +/- 2 which is the highest level our
45 non-linearity can handle. At the point where the signal reaches +/-2,
46 the derivative will be zero anyway, so this doesn't introduce any
47 discontinuity in the derivative. */
48 for (i=0;i<N*C;i++)
49 _x[i] = MAX16(-2.f, MIN16(2.f, _x[i]));
50 for (c=0;c<C;c++)
51 {
52 float a;
53 float x0;
54 int curr;
55
56 x = _x+c;
57 a = declip_mem[c];
58 /* Continue applying the non-linearity from the previous frame to avoid
59 any discontinuity. */
60 for (i=0;i<N;i++)
61 {
62 if (x[i*C]*a>=0)
63 break;
64 x[i*C] = x[i*C]+a*x[i*C]*x[i*C];
65 }
66
67 curr=0;
68 x0 = x[0];
69 while(1)
70 {
71 int start, end;
72 float maxval;
73 int special=0;
74 int peak_pos;
75 for (i=curr;i<N;i++)
76 {
77 if (x[i*C]>1 || x[i*C]<-1)
78 break;
79 }
80 if (i==N)
81 {
82 a=0;
83 break;
84 }
85 peak_pos = i;
86 start=end=i;
87 maxval=ABS16(x[i*C]);
88 /* Look for first zero crossing before clipping */
89 while (start>0 && x[i*C]*x[(start-1)*C]>=0)
90 start--;
91 /* Look for first zero crossing after clipping */
92 while (end<N && x[i*C]*x[end*C]>=0)
93 {
94 /* Look for other peaks until the next zero-crossing. */
95 if (ABS16(x[end*C])>maxval)
96 {
97 maxval = ABS16(x[end*C]);
98 peak_pos = end;
99 }
100 end++;
101 }
102 /* Detect the special case where we clip before the first zero crossing */
103 special = (start==0 && x[i*C]*x[0]>=0);
104
105 /* Compute a such that maxval + a*maxval^2 = 1 */
106 a=(maxval-1)/(maxval*maxval);
107 if (x[i*C]>0)
108 a = -a;
109 /* Apply soft clipping */
110 for (i=start;i<end;i++)
111 x[i*C] = x[i*C]+a*x[i*C]*x[i*C];
112
113 if (special && peak_pos>=2)
114 {
115 /* Add a linear ramp from the first sample to the signal peak.
116 This avoids a discontinuity at the beginning of the frame. */
117 float delta;
118 float offset = x0-x[0];
119 delta = offset / peak_pos;
120 for (i=curr;i<peak_pos;i++)
121 {
122 offset -= delta;
123 x[i*C] += offset;
124 x[i*C] = MAX16(-1.f, MIN16(1.f, x[i*C]));
125 }
126 }
127 curr = end;
128 if (curr==N)
129 break;
130 }
131 declip_mem[c] = a;
132 }
133}
134#endif
135
136#if 0
137int encode_size(int size, unsigned char *data)
138{
139 if (size < 252)
140 {
141 data[0] = size;
142 return 1;
143 } else {
144 data[0] = 252+(size&0x3);
145 data[1] = (size-(int)data[0])>>2;
146 return 2;
147 }
148}
149#endif
150
151static int parse_size(const unsigned char *data, opus_int32 len, opus_int16 *size)
152{
153 if (len<1)
154 {
155 *size = -1;
156 return -1;
157 } else if (data[0]<252)
158 {
159 *size = data[0];
160 return 1;
161 } else if (len<2)
162 {
163 *size = -1;
164 return -1;
165 } else {
166 *size = 4*data[1] + data[0];
167 return 2;
168 }
169}
170
171int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,
172 int self_delimited, unsigned char *out_toc,
173 const unsigned char *frames[48], opus_int16 size[48],
174 int *payload_offset, opus_int32 *packet_offset)
175{
176 int i, bytes;
177 int count;
178 int cbr;
179 unsigned char ch, toc;
180 int framesize;
181 opus_int32 last_size;
182 opus_int32 pad = 0;
183 const unsigned char *data0 = data;
184
185 if (size==NULL)
186 return OPUS_BAD_ARG;
187
188 framesize = opus_packet_get_samples_per_frame(data, 48000);
189
190 cbr = 0;
191 toc = *data++;
192 len--;
193 last_size = len;
194 switch (toc&0x3)
195 {
196 /* One frame */
197 case 0:
198 count=1;
199 break;
200 /* Two CBR frames */
201 case 1:
202 count=2;
203 cbr = 1;
204 if (!self_delimited)
205 {
206 if (len&0x1)
207 return OPUS_INVALID_PACKET;
208 last_size = len/2;
209 /* If last_size doesn't fit in size[0], we'll catch it later */
210 size[0] = (opus_int16)last_size;
211 }
212 break;
213 /* Two VBR frames */
214 case 2:
215 count = 2;
216 bytes = parse_size(data, len, size);
217 len -= bytes;
218 if (size[0]<0 || size[0] > len)
219 return OPUS_INVALID_PACKET;
220 data += bytes;
221 last_size = len-size[0];
222 break;
223 /* Multiple CBR/VBR frames (from 0 to 120 ms) */
224 default: /*case 3:*/
225 if (len<1)
226 return OPUS_INVALID_PACKET;
227 /* Number of frames encoded in bits 0 to 5 */
228 ch = *data++;
229 count = ch&0x3F;
230 if (count <= 0 || framesize*count > 5760)
231 return OPUS_INVALID_PACKET;
232 len--;
233 /* Padding flag is bit 6 */
234 if (ch&0x40)
235 {
236 int p;
237 do {
238 int tmp;
239 if (len<=0)
240 return OPUS_INVALID_PACKET;
241 p = *data++;
242 len--;
243 tmp = p==255 ? 254: p;
244 len -= tmp;
245 pad += tmp;
246 } while (p==255);
247 }
248 if (len<0)
249 return OPUS_INVALID_PACKET;
250 /* VBR flag is bit 7 */
251 cbr = !(ch&0x80);
252 if (!cbr)
253 {
254 /* VBR case */
255 last_size = len;
256 for (i=0;i<count-1;i++)
257 {
258 bytes = parse_size(data, len, size+i);
259 len -= bytes;
260 if (size[i]<0 || size[i] > len)
261 return OPUS_INVALID_PACKET;
262 data += bytes;
263 last_size -= bytes+size[i];
264 }
265 if (last_size<0)
266 return OPUS_INVALID_PACKET;
267 } else if (!self_delimited)
268 {
269 /* CBR case */
270 last_size = len/count;
271 if (last_size*count!=len)
272 return OPUS_INVALID_PACKET;
273 for (i=0;i<count-1;i++)
274 size[i] = (opus_int16)last_size;
275 }
276 break;
277 }
278 /* Self-delimited framing has an extra size for the last frame. */
279 if (self_delimited)
280 {
281 bytes = parse_size(data, len, size+count-1);
282 len -= bytes;
283 if (size[count-1]<0 || size[count-1] > len)
284 return OPUS_INVALID_PACKET;
285 data += bytes;
286 /* For CBR packets, apply the size to all the frames. */
287 if (cbr)
288 {
289 if (size[count-1]*count > len)
290 return OPUS_INVALID_PACKET;
291 for (i=0;i<count-1;i++)
292 size[i] = size[count-1];
293 } else if (bytes+size[count-1] > last_size)
294 return OPUS_INVALID_PACKET;
295 } else
296 {
297 /* Because it's not encoded explicitly, it's possible the size of the
298 last packet (or all the packets, for the CBR case) is larger than
299 1275. Reject them here.*/
300 if (last_size > 1275)
301 return OPUS_INVALID_PACKET;
302 size[count-1] = (opus_int16)last_size;
303 }
304
305 if (payload_offset)
306 *payload_offset = (int)(data-data0);
307
308 for (i=0;i<count;i++)
309 {
310 if (frames)
311 frames[i] = data;
312 data += size[i];
313 }
314
315 if (packet_offset)
316 *packet_offset = pad+(opus_int32)(data-data0);
317
318 if (out_toc)
319 *out_toc = toc;
320
321 return count;
322}
323
324#if 0
325int opus_packet_parse(const unsigned char *data, opus_int32 len,
326 unsigned char *out_toc, const unsigned char *frames[48],
327 opus_int16 size[48], int *payload_offset)
328{
329 return opus_packet_parse_impl(data, len, 0, out_toc,
330 frames, size, payload_offset, NULL);
331}
332#endif
333
diff --git a/lib/rbcodec/codecs/libopus/opus.h b/lib/rbcodec/codecs/libopus/opus.h
index 38817b405a..93a53a2ffc 100644
--- a/lib/rbcodec/codecs/libopus/opus.h
+++ b/lib/rbcodec/codecs/libopus/opus.h
@@ -911,6 +911,64 @@ OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_repacketizer_get_nb_frames(OpusRepa
911 */ 911 */
912OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *data, opus_int32 maxlen) OPUS_ARG_NONNULL(1); 912OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *data, opus_int32 maxlen) OPUS_ARG_NONNULL(1);
913 913
914/** Pads a given Opus packet to a larger size (possibly changing the TOC sequence).
915 * @param[in,out] data <tt>const unsigned char*</tt>: The buffer containing the
916 * packet to pad.
917 * @param len <tt>opus_int32</tt>: The size of the packet.
918 * This must be at least 1.
919 * @param new_len <tt>opus_int32</tt>: The desired size of the packet after padding.
920 * This must be at least as large as len.
921 * @returns an error code
922 * @retval #OPUS_OK \a on success.
923 * @retval #OPUS_BAD_ARG \a len was less than 1 or new_len was less than len.
924 * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet.
925 */
926OPUS_EXPORT int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len);
927
928/** Remove all padding from a given Opus packet and rewrite the TOC sequence to
929 * minimize space usage.
930 * @param[in,out] data <tt>const unsigned char*</tt>: The buffer containing the
931 * packet to strip.
932 * @param len <tt>opus_int32</tt>: The size of the packet.
933 * This must be at least 1.
934 * @returns The new size of the output packet on success, or an error code
935 * on failure.
936 * @retval #OPUS_BAD_ARG \a len was less than 1.
937 * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet.
938 */
939OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_packet_unpad(unsigned char *data, opus_int32 len);
940
941/** Pads a given Opus multi-stream packet to a larger size (possibly changing the TOC sequence).
942 * @param[in,out] data <tt>const unsigned char*</tt>: The buffer containing the
943 * packet to pad.
944 * @param len <tt>opus_int32</tt>: The size of the packet.
945 * This must be at least 1.
946 * @param new_len <tt>opus_int32</tt>: The desired size of the packet after padding.
947 * This must be at least 1.
948 * @param nb_streams <tt>opus_int32</tt>: The number of streams (not channels) in the packet.
949 * This must be at least as large as len.
950 * @returns an error code
951 * @retval #OPUS_OK \a on success.
952 * @retval #OPUS_BAD_ARG \a len was less than 1.
953 * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet.
954 */
955OPUS_EXPORT int opus_multistream_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len, int nb_streams);
956
957/** Remove all padding from a given Opus multi-stream packet and rewrite the TOC sequence to
958 * minimize space usage.
959 * @param[in,out] data <tt>const unsigned char*</tt>: The buffer containing the
960 * packet to strip.
961 * @param len <tt>opus_int32</tt>: The size of the packet.
962 * This must be at least 1.
963 * @param nb_streams <tt>opus_int32</tt>: The number of streams (not channels) in the packet.
964 * This must be at least 1.
965 * @returns The new size of the output packet on success, or an error code
966 * on failure.
967 * @retval #OPUS_BAD_ARG \a len was less than 1 or new_len was less than len.
968 * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet.
969 */
970OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_packet_unpad(unsigned char *data, opus_int32 len, int nb_streams);
971
914/**@}*/ 972/**@}*/
915 973
916#ifdef __cplusplus 974#ifdef __cplusplus
diff --git a/lib/rbcodec/codecs/libopus/opus_custom.h b/lib/rbcodec/codecs/libopus/opus_custom.h
index 6cf3963076..41f36bf2fb 100644
--- a/lib/rbcodec/codecs/libopus/opus_custom.h
+++ b/lib/rbcodec/codecs/libopus/opus_custom.h
@@ -47,7 +47,7 @@ extern "C" {
47#else 47#else
48# define OPUS_CUSTOM_EXPORT 48# define OPUS_CUSTOM_EXPORT
49# ifdef OPUS_BUILD 49# ifdef OPUS_BUILD
50# define OPUS_CUSTOM_EXPORT_STATIC static inline 50# define OPUS_CUSTOM_EXPORT_STATIC static OPUS_INLINE
51# else 51# else
52# define OPUS_CUSTOM_EXPORT_STATIC 52# define OPUS_CUSTOM_EXPORT_STATIC
53# endif 53# endif
@@ -140,6 +140,7 @@ OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_encoder_get_si
140 int channels 140 int channels
141) OPUS_ARG_NONNULL(1); 141) OPUS_ARG_NONNULL(1);
142 142
143# ifdef CUSTOM_MODES
143/** Initializes a previously allocated encoder state 144/** Initializes a previously allocated encoder state
144 * The memory pointed to by st must be the size returned by opus_custom_encoder_get_size. 145 * The memory pointed to by st must be the size returned by opus_custom_encoder_get_size.
145 * This is intended for applications which use their own allocator instead of malloc. 146 * This is intended for applications which use their own allocator instead of malloc.
@@ -152,12 +153,12 @@ OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_encoder_get_si
152 * @param [in] channels <tt>int</tt>: Number of channels 153 * @param [in] channels <tt>int</tt>: Number of channels
153 * @return OPUS_OK Success or @ref opus_errorcodes 154 * @return OPUS_OK Success or @ref opus_errorcodes
154 */ 155 */
155OPUS_CUSTOM_EXPORT_STATIC int opus_custom_encoder_init( 156OPUS_CUSTOM_EXPORT int opus_custom_encoder_init(
156 OpusCustomEncoder *st, 157 OpusCustomEncoder *st,
157 const OpusCustomMode *mode, 158 const OpusCustomMode *mode,
158 int channels 159 int channels
159) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); 160) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2);
160 161# endif
161#endif 162#endif
162 163
163 164
diff --git a/lib/rbcodec/codecs/libopus/opus_decoder.c b/lib/rbcodec/codecs/libopus/opus_decoder.c
index b430a4df07..198d168898 100644
--- a/lib/rbcodec/codecs/libopus/opus_decoder.c
+++ b/lib/rbcodec/codecs/libopus/opus_decoder.c
@@ -26,11 +26,15 @@
26*/ 26*/
27 27
28#ifdef HAVE_CONFIG_H 28#ifdef HAVE_CONFIG_H
29#include "config.h" 29# include "config.h"
30#endif 30#endif
31 31
32#ifndef OPUS_BUILD 32#ifndef OPUS_BUILD
33#error "OPUS_BUILD _MUST_ be defined to build Opus. This probably means you need other defines as well, as in a config.h. See the included build files for details." 33# error "OPUS_BUILD _MUST_ be defined to build Opus. This probably means you need other defines as well, as in a config.h. See the included build files for details."
34#endif
35
36#if defined(__GNUC__) && (__GNUC__ >= 2) && !defined(__OPTIMIZE__)
37# pragma message "You appear to be compiling without optimization, if so opus will be very slow."
34#endif 38#endif
35 39
36#include <stdarg.h> 40#include <stdarg.h>
@@ -71,11 +75,10 @@ struct OpusDecoder {
71#endif 75#endif
72 76
73 opus_uint32 rangeFinal; 77 opus_uint32 rangeFinal;
74 int arch;
75}; 78};
76 79
77#ifdef FIXED_POINT 80#ifdef FIXED_POINT
78static inline opus_int16 SAT16(opus_int32 x) { 81static OPUS_INLINE opus_int16 SAT16(opus_int32 x) {
79 return x > 32767 ? 32767 : x < -32768 ? -32768 : (opus_int16)x; 82 return x > 32767 ? 32767 : x < -32768 ? -32768 : (opus_int16)x;
80} 83}
81#endif 84#endif
@@ -121,7 +124,6 @@ int opus_decoder_init(OpusDecoder *st, opus_int32 Fs, int channels)
121 st->Fs = Fs; 124 st->Fs = Fs;
122 st->DecControl.API_sampleRate = st->Fs; 125 st->DecControl.API_sampleRate = st->Fs;
123 st->DecControl.nChannelsAPI = st->channels; 126 st->DecControl.nChannelsAPI = st->channels;
124 st->arch = opus_select_arch();
125 127
126 /* Reset decoder */ 128 /* Reset decoder */
127 ret = silk_InitDecoder( silk_dec ); 129 ret = silk_InitDecoder( silk_dec );
@@ -152,7 +154,6 @@ OpusDecoder *opus_decoder_create(opus_int32 Fs, int channels, int *error)
152 *error = OPUS_BAD_ARG; 154 *error = OPUS_BAD_ARG;
153 return NULL; 155 return NULL;
154 } 156 }
155
156 if (STATIC_DECODER_SIZE >= opus_decoder_get_size(channels)) 157 if (STATIC_DECODER_SIZE >= opus_decoder_get_size(channels))
157 st = (OpusDecoder *)s_dec; 158 st = (OpusDecoder *)s_dec;
158 else 159 else
@@ -265,26 +266,44 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
265 ec_dec_init(&dec,(unsigned char*)data,len); 266 ec_dec_init(&dec,(unsigned char*)data,len);
266 } else { 267 } else {
267 audiosize = frame_size; 268 audiosize = frame_size;
269 mode = st->prev_mode;
268 270
269 if (st->prev_mode == 0) 271 if (mode == 0)
270 { 272 {
271 /* If we haven't got any packet yet, all we can do is return zeros */ 273 /* If we haven't got any packet yet, all we can do is return zeros */
272 for (i=0;i<audiosize*st->channels;i++) 274 for (i=0;i<audiosize*st->channels;i++)
273 pcm[i] = 0; 275 pcm[i] = 0;
274 RESTORE_STACK; 276 RESTORE_STACK;
275 return audiosize; 277 return audiosize;
276 } else {
277 mode = st->prev_mode;
278 } 278 }
279 }
280 279
281 /* For CELT/hybrid PLC of more than 20 ms, opus_decode_native() will do 280 /* Avoids trying to run the PLC on sizes other than 2.5 (CELT), 5 (CELT),
282 multiple calls */ 281 10, or 20 (e.g. 12.5 or 30 ms). */
283 if (data==NULL && mode != MODE_SILK_ONLY) 282 if (audiosize > F20)
284 frame_size = IMIN(frame_size, F20); 283 {
284 do {
285 int ret = opus_decode_frame(st, NULL, 0, pcm, IMIN(audiosize, F20), 0);
286 if (ret<0)
287 {
288 RESTORE_STACK;
289 return ret;
290 }
291 pcm += ret*st->channels;
292 audiosize -= ret;
293 } while (audiosize > 0);
294 RESTORE_STACK;
295 return frame_size;
296 } else if (audiosize < F20)
297 {
298 if (audiosize > F10)
299 audiosize = F10;
300 else if (mode != MODE_SILK_ONLY && audiosize > F5 && audiosize < F10)
301 audiosize = F5;
302 }
303 }
285 304
286 pcm_transition_silk_size = 0; 305 pcm_transition_silk_size = ALLOC_NONE;
287 pcm_transition_celt_size = 0; 306 pcm_transition_celt_size = ALLOC_NONE;
288 if (data!=NULL && st->prev_mode > 0 && ( 307 if (data!=NULL && st->prev_mode > 0 && (
289 (mode == MODE_CELT_ONLY && st->prev_mode != MODE_CELT_ONLY && !st->prev_redundancy) 308 (mode == MODE_CELT_ONLY && st->prev_mode != MODE_CELT_ONLY && !st->prev_redundancy)
290 || (mode != MODE_CELT_ONLY && st->prev_mode == MODE_CELT_ONLY) ) 309 || (mode != MODE_CELT_ONLY && st->prev_mode == MODE_CELT_ONLY) )
@@ -313,7 +332,7 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
313 } 332 }
314 333
315 /* Don't allocate any memory when in CELT-only mode */ 334 /* Don't allocate any memory when in CELT-only mode */
316 pcm_silk_size = (mode != MODE_CELT_ONLY) ? IMAX(F10, frame_size)*st->channels : 0; 335 pcm_silk_size = (mode != MODE_CELT_ONLY) ? IMAX(F10, frame_size)*st->channels : ALLOC_NONE;
317 ALLOC(pcm_silk, pcm_silk_size, opus_int16); 336 ALLOC(pcm_silk, pcm_silk_size, opus_int16);
318 337
319 /* SILK processing */ 338 /* SILK processing */
@@ -363,7 +382,7 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
363 pcm_ptr[i] = 0; 382 pcm_ptr[i] = 0;
364 } else { 383 } else {
365 RESTORE_STACK; 384 RESTORE_STACK;
366 return OPUS_INVALID_PACKET; 385 return OPUS_INTERNAL_ERROR;
367 } 386 }
368 } 387 }
369 pcm_ptr += silk_frame_size * st->channels; 388 pcm_ptr += silk_frame_size * st->channels;
@@ -430,7 +449,7 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
430 if (redundancy) 449 if (redundancy)
431 { 450 {
432 transition = 0; 451 transition = 0;
433 pcm_transition_silk_size=0; 452 pcm_transition_silk_size=ALLOC_NONE;
434 } 453 }
435 454
436 ALLOC(pcm_transition_silk, pcm_transition_silk_size, opus_val16); 455 ALLOC(pcm_transition_silk, pcm_transition_silk_size, opus_val16);
@@ -442,7 +461,7 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
442 } 461 }
443 462
444 /* Only allocation memory for redundancy if/when needed */ 463 /* Only allocation memory for redundancy if/when needed */
445 redundant_audio_size = redundancy ? F5*st->channels : 0; 464 redundant_audio_size = redundancy ? F5*st->channels : ALLOC_NONE;
446 ALLOC(redundant_audio, redundant_audio_size, opus_val16); 465 ALLOC(redundant_audio, redundant_audio_size, opus_val16);
447 466
448 /* 5 ms redundant frame for CELT->SILK*/ 467 /* 5 ms redundant frame for CELT->SILK*/
@@ -569,189 +588,13 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
569 588
570} 589}
571 590
572static int parse_size(const unsigned char *data, opus_int32 len, opus_int16 *size)
573{
574 if (len<1)
575 {
576 *size = -1;
577 return -1;
578 } else if (data[0]<252)
579 {
580 *size = data[0];
581 return 1;
582 } else if (len<2)
583 {
584 *size = -1;
585 return -1;
586 } else {
587 *size = 4*data[1] + data[0];
588 return 2;
589 }
590}
591
592static int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,
593 int self_delimited, unsigned char *out_toc,
594 const unsigned char *frames[48], opus_int16 size[48], int *payload_offset)
595{
596 int i, bytes;
597 int count;
598 int cbr;
599 unsigned char ch, toc;
600 int framesize;
601 opus_int32 last_size;
602 const unsigned char *data0 = data;
603
604 if (size==NULL)
605 return OPUS_BAD_ARG;
606
607 framesize = opus_packet_get_samples_per_frame(data, 48000);
608
609 cbr = 0;
610 toc = *data++;
611 len--;
612 last_size = len;
613 switch (toc&0x3)
614 {
615 /* One frame */
616 case 0:
617 count=1;
618 break;
619 /* Two CBR frames */
620 case 1:
621 count=2;
622 cbr = 1;
623 if (!self_delimited)
624 {
625 if (len&0x1)
626 return OPUS_INVALID_PACKET;
627 last_size = len/2;
628 /* If last_size doesn't fit in size[0], we'll catch it later */
629 size[0] = (opus_int16)last_size;
630 }
631 break;
632 /* Two VBR frames */
633 case 2:
634 count = 2;
635 bytes = parse_size(data, len, size);
636 len -= bytes;
637 if (size[0]<0 || size[0] > len)
638 return OPUS_INVALID_PACKET;
639 data += bytes;
640 last_size = len-size[0];
641 break;
642 /* Multiple CBR/VBR frames (from 0 to 120 ms) */
643 default: /*case 3:*/
644 if (len<1)
645 return OPUS_INVALID_PACKET;
646 /* Number of frames encoded in bits 0 to 5 */
647 ch = *data++;
648 count = ch&0x3F;
649 if (count <= 0 || framesize*count > 5760)
650 return OPUS_INVALID_PACKET;
651 len--;
652 /* Padding flag is bit 6 */
653 if (ch&0x40)
654 {
655 int p;
656 do {
657 if (len<=0)
658 return OPUS_INVALID_PACKET;
659 p = *data++;
660 len--;
661 len -= p==255 ? 254: p;
662 } while (p==255);
663 }
664 if (len<0)
665 return OPUS_INVALID_PACKET;
666 /* VBR flag is bit 7 */
667 cbr = !(ch&0x80);
668 if (!cbr)
669 {
670 /* VBR case */
671 last_size = len;
672 for (i=0;i<count-1;i++)
673 {
674 bytes = parse_size(data, len, size+i);
675 len -= bytes;
676 if (size[i]<0 || size[i] > len)
677 return OPUS_INVALID_PACKET;
678 data += bytes;
679 last_size -= bytes+size[i];
680 }
681 if (last_size<0)
682 return OPUS_INVALID_PACKET;
683 } else if (!self_delimited)
684 {
685 /* CBR case */
686 last_size = len/count;
687 if (last_size*count!=len)
688 return OPUS_INVALID_PACKET;
689 for (i=0;i<count-1;i++)
690 size[i] = (opus_int16)last_size;
691 }
692 break;
693 }
694 /* Self-delimited framing has an extra size for the last frame. */
695 if (self_delimited)
696 {
697 bytes = parse_size(data, len, size+count-1);
698 len -= bytes;
699 if (size[count-1]<0 || size[count-1] > len)
700 return OPUS_INVALID_PACKET;
701 data += bytes;
702 /* For CBR packets, apply the size to all the frames. */
703 if (cbr)
704 {
705 if (size[count-1]*count > len)
706 return OPUS_INVALID_PACKET;
707 for (i=0;i<count-1;i++)
708 size[i] = size[count-1];
709 } else if(size[count-1] > last_size)
710 return OPUS_INVALID_PACKET;
711 } else
712 {
713 /* Because it's not encoded explicitly, it's possible the size of the
714 last packet (or all the packets, for the CBR case) is larger than
715 1275. Reject them here.*/
716 if (last_size > 1275)
717 return OPUS_INVALID_PACKET;
718 size[count-1] = (opus_int16)last_size;
719 }
720
721 if (frames)
722 {
723 for (i=0;i<count;i++)
724 {
725 frames[i] = data;
726 data += size[i];
727 }
728 }
729
730 if (out_toc)
731 *out_toc = toc;
732
733 if (payload_offset)
734 *payload_offset = (int)(data-data0);
735
736 return count;
737}
738
739int opus_packet_parse(const unsigned char *data, opus_int32 len,
740 unsigned char *out_toc, const unsigned char *frames[48],
741 opus_int16 size[48], int *payload_offset)
742{
743 return opus_packet_parse_impl(data, len, 0, out_toc,
744 frames, size, payload_offset);
745}
746
747int opus_decode_native(OpusDecoder *st, const unsigned char *data, 591int opus_decode_native(OpusDecoder *st, const unsigned char *data,
748 opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec, 592 opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec,
749 int self_delimited, int *packet_offset, int soft_clip) 593 int self_delimited, opus_int32 *packet_offset, int soft_clip)
750{ 594{
751 int i, nb_samples; 595 int i, nb_samples;
752 int count, offset; 596 int count, offset;
753 unsigned char toc; 597 unsigned char toc;
754 int tot_offset;
755 int packet_frame_size, packet_bandwidth, packet_mode, packet_stream_channels; 598 int packet_frame_size, packet_bandwidth, packet_mode, packet_stream_channels;
756 /* 48 x 2.5 ms = 120 ms */ 599 /* 48 x 2.5 ms = 120 ms */
757 opus_int16 size[48]; 600 opus_int16 size[48];
@@ -783,7 +626,10 @@ int opus_decode_native(OpusDecoder *st, const unsigned char *data,
783 packet_frame_size = opus_packet_get_samples_per_frame(data, st->Fs); 626 packet_frame_size = opus_packet_get_samples_per_frame(data, st->Fs);
784 packet_stream_channels = opus_packet_get_nb_channels(data); 627 packet_stream_channels = opus_packet_get_nb_channels(data);
785 628
786 count = opus_packet_parse_impl(data, len, self_delimited, &toc, NULL, size, &offset); 629 count = opus_packet_parse_impl(data, len, self_delimited, &toc, NULL,
630 size, &offset, packet_offset);
631 if (count<0)
632 return count;
787 633
788 data += offset; 634 data += offset;
789 635
@@ -822,11 +668,6 @@ int opus_decode_native(OpusDecoder *st, const unsigned char *data,
822 return frame_size; 668 return frame_size;
823 } 669 }
824 } 670 }
825 tot_offset = 0;
826 if (count < 0)
827 return count;
828
829 tot_offset += offset;
830 671
831 if (count*packet_frame_size > frame_size) 672 if (count*packet_frame_size > frame_size)
832 return OPUS_BUFFER_TOO_SMALL; 673 return OPUS_BUFFER_TOO_SMALL;
@@ -846,11 +687,8 @@ int opus_decode_native(OpusDecoder *st, const unsigned char *data,
846 return ret; 687 return ret;
847 celt_assert(ret==packet_frame_size); 688 celt_assert(ret==packet_frame_size);
848 data += size[i]; 689 data += size[i];
849 tot_offset += size[i];
850 nb_samples += ret; 690 nb_samples += ret;
851 } 691 }
852 if (packet_offset != NULL)
853 *packet_offset = tot_offset;
854 st->last_packet_duration = nb_samples; 692 st->last_packet_duration = nb_samples;
855 if (OPUS_CHECK_ARRAY(pcm, nb_samples*st->channels)) 693 if (OPUS_CHECK_ARRAY(pcm, nb_samples*st->channels))
856 OPUS_PRINT_INT(nb_samples); 694 OPUS_PRINT_INT(nb_samples);
@@ -868,6 +706,8 @@ int opus_decode_native(OpusDecoder *st, const unsigned char *data,
868int opus_decode(OpusDecoder *st, const unsigned char *data, 706int opus_decode(OpusDecoder *st, const unsigned char *data,
869 opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec) 707 opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec)
870{ 708{
709 if(frame_size<=0)
710 return OPUS_BAD_ARG;
871 return opus_decode_native(st, data, len, pcm, frame_size, decode_fec, 0, NULL, 0); 711 return opus_decode_native(st, data, len, pcm, frame_size, decode_fec, 0, NULL, 0);
872} 712}
873 713
@@ -879,6 +719,11 @@ int opus_decode_float(OpusDecoder *st, const unsigned char *data,
879 int ret, i; 719 int ret, i;
880 ALLOC_STACK; 720 ALLOC_STACK;
881 721
722 if(frame_size<=0)
723 {
724 RESTORE_STACK;
725 return OPUS_BAD_ARG;
726 }
882 ALLOC(out, frame_size*st->channels, opus_int16); 727 ALLOC(out, frame_size*st->channels, opus_int16);
883 728
884 ret = opus_decode_native(st, data, len, out, frame_size, decode_fec, 0, NULL, 0); 729 ret = opus_decode_native(st, data, len, out, frame_size, decode_fec, 0, NULL, 0);
@@ -901,7 +746,7 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
901 int ret, i; 746 int ret, i;
902 ALLOC_STACK; 747 ALLOC_STACK;
903 748
904 if(frame_size<0) 749 if(frame_size<=0)
905 { 750 {
906 RESTORE_STACK; 751 RESTORE_STACK;
907 return OPUS_BAD_ARG; 752 return OPUS_BAD_ARG;
@@ -922,6 +767,8 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
922int opus_decode_float(OpusDecoder *st, const unsigned char *data, 767int opus_decode_float(OpusDecoder *st, const unsigned char *data,
923 opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec) 768 opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec)
924{ 769{
770 if(frame_size<=0)
771 return OPUS_BAD_ARG;
925 return opus_decode_native(st, data, len, pcm, frame_size, decode_fec, 0, NULL, 0); 772 return opus_decode_native(st, data, len, pcm, frame_size, decode_fec, 0, NULL, 0);
926} 773}
927 774
diff --git a/lib/rbcodec/codecs/libopus/opus_defines.h b/lib/rbcodec/codecs/libopus/opus_defines.h
index 3474e84c43..265089f65e 100644
--- a/lib/rbcodec/codecs/libopus/opus_defines.h
+++ b/lib/rbcodec/codecs/libopus/opus_defines.h
@@ -98,6 +98,18 @@ extern "C" {
98# define OPUS_RESTRICT restrict 98# define OPUS_RESTRICT restrict
99#endif 99#endif
100 100
101#if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) )
102# if OPUS_GNUC_PREREQ(2,7)
103# define OPUS_INLINE __inline__
104# elif (defined(_MSC_VER))
105# define OPUS_INLINE __inline
106# else
107# define OPUS_INLINE
108# endif
109#else
110# define OPUS_INLINE inline
111#endif
112
101/**Warning attributes for opus functions 113/**Warning attributes for opus functions
102 * NONNULL is not used in OPUS_BUILD to avoid the compiler optimizing out 114 * NONNULL is not used in OPUS_BUILD to avoid the compiler optimizing out
103 * some paranoid null checks. */ 115 * some paranoid null checks. */
@@ -151,6 +163,8 @@ extern "C" {
151#define OPUS_GET_LAST_PACKET_DURATION_REQUEST 4039 163#define OPUS_GET_LAST_PACKET_DURATION_REQUEST 4039
152#define OPUS_SET_EXPERT_FRAME_DURATION_REQUEST 4040 164#define OPUS_SET_EXPERT_FRAME_DURATION_REQUEST 4040
153#define OPUS_GET_EXPERT_FRAME_DURATION_REQUEST 4041 165#define OPUS_GET_EXPERT_FRAME_DURATION_REQUEST 4041
166#define OPUS_SET_PREDICTION_DISABLED_REQUEST 4042
167#define OPUS_GET_PREDICTION_DISABLED_REQUEST 4043
154 168
155/* Don't use 4045, it's already taken by OPUS_GET_GAIN_REQUEST */ 169/* Don't use 4045, it's already taken by OPUS_GET_GAIN_REQUEST */
156 170
@@ -194,7 +208,6 @@ extern "C" {
194#define OPUS_FRAMESIZE_20_MS 5004 /**< Use 20 ms frames */ 208#define OPUS_FRAMESIZE_20_MS 5004 /**< Use 20 ms frames */
195#define OPUS_FRAMESIZE_40_MS 5005 /**< Use 40 ms frames */ 209#define OPUS_FRAMESIZE_40_MS 5005 /**< Use 40 ms frames */
196#define OPUS_FRAMESIZE_60_MS 5006 /**< Use 60 ms frames */ 210#define OPUS_FRAMESIZE_60_MS 5006 /**< Use 60 ms frames */
197#define OPUS_FRAMESIZE_VARIABLE 5010 /**< Optimize the frame size dynamically */
198 211
199/**@}*/ 212/**@}*/
200 213
@@ -575,6 +588,14 @@ extern "C" {
575 * @hideinitializer */ 588 * @hideinitializer */
576#define OPUS_GET_EXPERT_FRAME_DURATION(x) OPUS_GET_EXPERT_FRAME_DURATION_REQUEST, __opus_check_int_ptr(x) 589#define OPUS_GET_EXPERT_FRAME_DURATION(x) OPUS_GET_EXPERT_FRAME_DURATION_REQUEST, __opus_check_int_ptr(x)
577 590
591/** If set to 1, disables almost all use of prediction, making frames almost
592 completely independent. This reduces quality. (default : 0)
593 * @hideinitializer */
594#define OPUS_SET_PREDICTION_DISABLED(x) OPUS_SET_PREDICTION_DISABLED_REQUEST, __opus_check_int(x)
595/** Gets the encoder's configured prediction status.
596 * @hideinitializer */
597#define OPUS_GET_PREDICTION_DISABLED(x) OPUS_GET_PREDICTION_DISABLED_REQUEST, __opus_check_int_ptr(x)
598
578/**@}*/ 599/**@}*/
579 600
580/** @defgroup opus_genericctls Generic CTLs 601/** @defgroup opus_genericctls Generic CTLs
diff --git a/lib/rbcodec/codecs/libopus/opus_private.h b/lib/rbcodec/codecs/libopus/opus_private.h
index 9d8210b5f0..83225f2b6c 100644
--- a/lib/rbcodec/codecs/libopus/opus_private.h
+++ b/lib/rbcodec/codecs/libopus/opus_private.h
@@ -82,35 +82,48 @@ int get_mono_channel(const ChannelLayout *layout, int stream_id, int prev);
82#define OPUS_SET_FORCE_MODE_REQUEST 11002 82#define OPUS_SET_FORCE_MODE_REQUEST 11002
83#define OPUS_SET_FORCE_MODE(x) OPUS_SET_FORCE_MODE_REQUEST, __opus_check_int(x) 83#define OPUS_SET_FORCE_MODE(x) OPUS_SET_FORCE_MODE_REQUEST, __opus_check_int(x)
84 84
85typedef void (*downmix_func)(const void *, float *, int, int, int); 85typedef void (*downmix_func)(const void *, opus_val32 *, int, int, int, int, int);
86void downmix_float(const void *_x, float *sub, int subframe, int offset, int C); 86void downmix_float(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
87void downmix_int(const void *_x, float *sub, int subframe, int offset, int C); 87void downmix_int(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
88 88
89int optimize_framesize(const opus_val16 *x, int len, int C, opus_int32 Fs, 89int optimize_framesize(const opus_val16 *x, int len, int C, opus_int32 Fs,
90 int bitrate, opus_val16 tonality, opus_val32 *mem, int buffering, 90 int bitrate, opus_val16 tonality, float *mem, int buffering,
91 downmix_func downmix); 91 downmix_func downmix);
92 92
93int encode_size(int size, unsigned char *data); 93int encode_size(int size, unsigned char *data);
94 94
95opus_int32 frame_size_select(opus_int32 frame_size, int variable_duration, opus_int32 Fs); 95opus_int32 frame_size_select(opus_int32 frame_size, int variable_duration, opus_int32 Fs);
96 96
97opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_size, 97opus_int32 compute_frame_size(const void *analysis_pcm, int frame_size,
98 unsigned char *data, opus_int32 out_data_bytes, int lsb_depth 98 int variable_duration, int C, opus_int32 Fs, int bitrate_bps,
99#ifndef FIXED_POINT 99 int delay_compensation, downmix_func downmix
100 , AnalysisInfo *analysis_info 100#ifndef DISABLE_FLOAT_API
101 , float *subframe_mem
101#endif 102#endif
102 ); 103 );
103 104
105opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_size,
106 unsigned char *data, opus_int32 out_data_bytes, int lsb_depth,
107 const void *analysis_pcm, opus_int32 analysis_size, int c1, int c2, int analysis_channels, downmix_func downmix);
108
104int opus_decode_native(OpusDecoder *st, const unsigned char *data, opus_int32 len, 109int opus_decode_native(OpusDecoder *st, const unsigned char *data, opus_int32 len,
105 opus_val16 *pcm, int frame_size, int decode_fec, int self_delimited, 110 opus_val16 *pcm, int frame_size, int decode_fec, int self_delimited,
106 int *packet_offset, int soft_clip); 111 opus_int32 *packet_offset, int soft_clip);
107 112
108/* Make sure everything's aligned to sizeof(void *) bytes */ 113/* Make sure everything's aligned to sizeof(void *) bytes */
109static inline int align(int i) 114static OPUS_INLINE int align(int i)
110{ 115{
111 return (i+(int)sizeof(void *)-1)&-(int)sizeof(void *); 116 return (i+(int)sizeof(void *)-1)&-(int)sizeof(void *);
112} 117}
113 118
114opus_int32 opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int begin, int end, unsigned char *data, opus_int32 maxlen, int self_delimited); 119int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,
120 int self_delimited, unsigned char *out_toc,
121 const unsigned char *frames[48], opus_int16 size[48],
122 int *payload_offset, opus_int32 *packet_offset);
123
124opus_int32 opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int begin, int end,
125 unsigned char *data, opus_int32 maxlen, int self_delimited, int pad);
126
127int pad_frame(unsigned char *data, opus_int32 len, opus_int32 new_len);
115 128
116#endif /* OPUS_PRIVATE_H */ 129#endif /* OPUS_PRIVATE_H */
diff --git a/lib/rbcodec/codecs/libopus/silk/API.h b/lib/rbcodec/codecs/libopus/silk/API.h
index c477cb4729..f0601bcf6b 100644
--- a/lib/rbcodec/codecs/libopus/silk/API.h
+++ b/lib/rbcodec/codecs/libopus/silk/API.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -64,6 +64,7 @@ opus_int silk_Get_Encoder_Size( /* O Returns error co
64/*************************/ 64/*************************/
65opus_int silk_InitEncoder( /* O Returns error code */ 65opus_int silk_InitEncoder( /* O Returns error code */
66 void *encState, /* I/O State */ 66 void *encState, /* I/O State */
67 int arch, /* I Run-time architecture */
67 silk_EncControlStruct *encStatus /* O Encoder Status */ 68 silk_EncControlStruct *encStatus /* O Encoder Status */
68); 69);
69 70
diff --git a/lib/rbcodec/codecs/libopus/silk/CNG.c b/lib/rbcodec/codecs/libopus/silk/CNG.c
index 19c2e2230c..8481d95dbe 100644
--- a/lib/rbcodec/codecs/libopus/silk/CNG.c
+++ b/lib/rbcodec/codecs/libopus/silk/CNG.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -33,7 +33,7 @@ POSSIBILITY OF SUCH DAMAGE.
33#include "stack_alloc.h" 33#include "stack_alloc.h"
34 34
35/* Generates excitation for CNG LPC synthesis */ 35/* Generates excitation for CNG LPC synthesis */
36static inline void silk_CNG_exc( 36static OPUS_INLINE void silk_CNG_exc(
37 opus_int32 residual_Q10[], /* O CNG residual signal Q10 */ 37 opus_int32 residual_Q10[], /* O CNG residual signal Q10 */
38 opus_int32 exc_buf_Q14[], /* I Random samples buffer Q10 */ 38 opus_int32 exc_buf_Q14[], /* I Random samples buffer Q10 */
39 opus_int32 Gain_Q16, /* I Gain to apply */ 39 opus_int32 Gain_Q16, /* I Gain to apply */
diff --git a/lib/rbcodec/codecs/libopus/silk/Inlines.h b/lib/rbcodec/codecs/libopus/silk/Inlines.h
index bec35eb7dc..ec986cdfdd 100644
--- a/lib/rbcodec/codecs/libopus/silk/Inlines.h
+++ b/lib/rbcodec/codecs/libopus/silk/Inlines.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -26,7 +26,7 @@ POSSIBILITY OF SUCH DAMAGE.
26***********************************************************************/ 26***********************************************************************/
27 27
28/*! \file silk_Inlines.h 28/*! \file silk_Inlines.h
29 * \brief silk_Inlines.h defines inline signal processing functions. 29 * \brief silk_Inlines.h defines OPUS_INLINE signal processing functions.
30 */ 30 */
31 31
32#ifndef SILK_FIX_INLINES_H 32#ifndef SILK_FIX_INLINES_H
@@ -38,7 +38,7 @@ extern "C"
38#endif 38#endif
39 39
40/* count leading zeros of opus_int64 */ 40/* count leading zeros of opus_int64 */
41static inline opus_int32 silk_CLZ64( opus_int64 in ) 41static OPUS_INLINE opus_int32 silk_CLZ64( opus_int64 in )
42{ 42{
43 opus_int32 in_upper; 43 opus_int32 in_upper;
44 44
@@ -53,7 +53,7 @@ static inline opus_int32 silk_CLZ64( opus_int64 in )
53} 53}
54 54
55/* get number of leading zeros and fractional part (the bits right after the leading one */ 55/* get number of leading zeros and fractional part (the bits right after the leading one */
56static inline void silk_CLZ_FRAC( 56static OPUS_INLINE void silk_CLZ_FRAC(
57 opus_int32 in, /* I input */ 57 opus_int32 in, /* I input */
58 opus_int32 *lz, /* O number of leading zeros */ 58 opus_int32 *lz, /* O number of leading zeros */
59 opus_int32 *frac_Q7 /* O the 7 bits right after the leading one */ 59 opus_int32 *frac_Q7 /* O the 7 bits right after the leading one */
@@ -68,7 +68,7 @@ static inline void silk_CLZ_FRAC(
68/* Approximation of square root */ 68/* Approximation of square root */
69/* Accuracy: < +/- 10% for output values > 15 */ 69/* Accuracy: < +/- 10% for output values > 15 */
70/* < +/- 2.5% for output values > 120 */ 70/* < +/- 2.5% for output values > 120 */
71static inline opus_int32 silk_SQRT_APPROX( opus_int32 x ) 71static OPUS_INLINE opus_int32 silk_SQRT_APPROX( opus_int32 x )
72{ 72{
73 opus_int32 y, lz, frac_Q7; 73 opus_int32 y, lz, frac_Q7;
74 74
@@ -94,7 +94,7 @@ static inline opus_int32 silk_SQRT_APPROX( opus_int32 x )
94} 94}
95 95
96/* Divide two int32 values and return result as int32 in a given Q-domain */ 96/* Divide two int32 values and return result as int32 in a given Q-domain */
97static inline opus_int32 silk_DIV32_varQ( /* O returns a good approximation of "(a32 << Qres) / b32" */ 97static OPUS_INLINE opus_int32 silk_DIV32_varQ( /* O returns a good approximation of "(a32 << Qres) / b32" */
98 const opus_int32 a32, /* I numerator (Q0) */ 98 const opus_int32 a32, /* I numerator (Q0) */
99 const opus_int32 b32, /* I denominator (Q0) */ 99 const opus_int32 b32, /* I denominator (Q0) */
100 const opus_int Qres /* I Q-domain of result (>= 0) */ 100 const opus_int Qres /* I Q-domain of result (>= 0) */
@@ -140,7 +140,7 @@ static inline opus_int32 silk_DIV32_varQ( /* O returns a good approximation
140} 140}
141 141
142/* Invert int32 value and return result as int32 in a given Q-domain */ 142/* Invert int32 value and return result as int32 in a given Q-domain */
143static inline opus_int32 silk_INVERSE32_varQ( /* O returns a good approximation of "(1 << Qres) / b32" */ 143static OPUS_INLINE opus_int32 silk_INVERSE32_varQ( /* O returns a good approximation of "(1 << Qres) / b32" */
144 const opus_int32 b32, /* I denominator (Q0) */ 144 const opus_int32 b32, /* I denominator (Q0) */
145 const opus_int Qres /* I Q-domain of result (> 0) */ 145 const opus_int Qres /* I Q-domain of result (> 0) */
146) 146)
diff --git a/lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c b/lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c
index 9bfeba0f5f..9d1f16cb7d 100644
--- a/lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c
+++ b/lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/LPC_inv_pred_gain.c b/lib/rbcodec/codecs/libopus/silk/LPC_inv_pred_gain.c
index fec5732616..dd14d4bca6 100644
--- a/lib/rbcodec/codecs/libopus/silk/LPC_inv_pred_gain.c
+++ b/lib/rbcodec/codecs/libopus/silk/LPC_inv_pred_gain.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/MacroCount.h b/lib/rbcodec/codecs/libopus/silk/MacroCount.h
index 6395d250b2..834817d058 100644
--- a/lib/rbcodec/codecs/libopus/silk/MacroCount.h
+++ b/lib/rbcodec/codecs/libopus/silk/MacroCount.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -34,11 +34,11 @@ POSSIBILITY OF SUCH DAMAGE.
34 34
35extern opus_int64 ops_count; 35extern opus_int64 ops_count;
36 36
37static inline opus_int64 silk_SaveCount(){ 37static OPUS_INLINE opus_int64 silk_SaveCount(){
38 return(ops_count); 38 return(ops_count);
39} 39}
40 40
41static inline opus_int64 silk_SaveResetCount(){ 41static OPUS_INLINE opus_int64 silk_SaveResetCount(){
42 opus_int64 ret; 42 opus_int64 ret;
43 43
44 ret = ops_count; 44 ret = ops_count;
@@ -46,12 +46,12 @@ static inline opus_int64 silk_SaveResetCount(){
46 return(ret); 46 return(ret);
47} 47}
48 48
49static inline silk_PrintCount(){ 49static OPUS_INLINE silk_PrintCount(){
50 printf("ops_count = %d \n ", (opus_int32)ops_count); 50 printf("ops_count = %d \n ", (opus_int32)ops_count);
51} 51}
52 52
53#undef silk_MUL 53#undef silk_MUL
54static inline opus_int32 silk_MUL(opus_int32 a32, opus_int32 b32){ 54static OPUS_INLINE opus_int32 silk_MUL(opus_int32 a32, opus_int32 b32){
55 opus_int32 ret; 55 opus_int32 ret;
56 ops_count += 4; 56 ops_count += 4;
57 ret = a32 * b32; 57 ret = a32 * b32;
@@ -59,14 +59,14 @@ static inline opus_int32 silk_MUL(opus_int32 a32, opus_int32 b32){
59} 59}
60 60
61#undef silk_MUL_uint 61#undef silk_MUL_uint
62static inline opus_uint32 silk_MUL_uint(opus_uint32 a32, opus_uint32 b32){ 62static OPUS_INLINE opus_uint32 silk_MUL_uint(opus_uint32 a32, opus_uint32 b32){
63 opus_uint32 ret; 63 opus_uint32 ret;
64 ops_count += 4; 64 ops_count += 4;
65 ret = a32 * b32; 65 ret = a32 * b32;
66 return ret; 66 return ret;
67} 67}
68#undef silk_MLA 68#undef silk_MLA
69static inline opus_int32 silk_MLA(opus_int32 a32, opus_int32 b32, opus_int32 c32){ 69static OPUS_INLINE opus_int32 silk_MLA(opus_int32 a32, opus_int32 b32, opus_int32 c32){
70 opus_int32 ret; 70 opus_int32 ret;
71 ops_count += 4; 71 ops_count += 4;
72 ret = a32 + b32 * c32; 72 ret = a32 + b32 * c32;
@@ -74,7 +74,7 @@ static inline opus_int32 silk_MLA(opus_int32 a32, opus_int32 b32, opus_int32 c32
74} 74}
75 75
76#undef silk_MLA_uint 76#undef silk_MLA_uint
77static inline opus_int32 silk_MLA_uint(opus_uint32 a32, opus_uint32 b32, opus_uint32 c32){ 77static OPUS_INLINE opus_int32 silk_MLA_uint(opus_uint32 a32, opus_uint32 b32, opus_uint32 c32){
78 opus_uint32 ret; 78 opus_uint32 ret;
79 ops_count += 4; 79 ops_count += 4;
80 ret = a32 + b32 * c32; 80 ret = a32 + b32 * c32;
@@ -82,14 +82,14 @@ static inline opus_int32 silk_MLA_uint(opus_uint32 a32, opus_uint32 b32, opus_ui
82} 82}
83 83
84#undef silk_SMULWB 84#undef silk_SMULWB
85static inline opus_int32 silk_SMULWB(opus_int32 a32, opus_int32 b32){ 85static OPUS_INLINE opus_int32 silk_SMULWB(opus_int32 a32, opus_int32 b32){
86 opus_int32 ret; 86 opus_int32 ret;
87 ops_count += 5; 87 ops_count += 5;
88 ret = (a32 >> 16) * (opus_int32)((opus_int16)b32) + (((a32 & 0x0000FFFF) * (opus_int32)((opus_int16)b32)) >> 16); 88 ret = (a32 >> 16) * (opus_int32)((opus_int16)b32) + (((a32 & 0x0000FFFF) * (opus_int32)((opus_int16)b32)) >> 16);
89 return ret; 89 return ret;
90} 90}
91#undef silk_SMLAWB 91#undef silk_SMLAWB
92static inline opus_int32 silk_SMLAWB(opus_int32 a32, opus_int32 b32, opus_int32 c32){ 92static OPUS_INLINE opus_int32 silk_SMLAWB(opus_int32 a32, opus_int32 b32, opus_int32 c32){
93 opus_int32 ret; 93 opus_int32 ret;
94 ops_count += 5; 94 ops_count += 5;
95 ret = ((a32) + ((((b32) >> 16) * (opus_int32)((opus_int16)(c32))) + ((((b32) & 0x0000FFFF) * (opus_int32)((opus_int16)(c32))) >> 16))); 95 ret = ((a32) + ((((b32) >> 16) * (opus_int32)((opus_int16)(c32))) + ((((b32) & 0x0000FFFF) * (opus_int32)((opus_int16)(c32))) >> 16)));
@@ -97,14 +97,14 @@ static inline opus_int32 silk_SMLAWB(opus_int32 a32, opus_int32 b32, opus_int32
97} 97}
98 98
99#undef silk_SMULWT 99#undef silk_SMULWT
100static inline opus_int32 silk_SMULWT(opus_int32 a32, opus_int32 b32){ 100static OPUS_INLINE opus_int32 silk_SMULWT(opus_int32 a32, opus_int32 b32){
101 opus_int32 ret; 101 opus_int32 ret;
102 ops_count += 4; 102 ops_count += 4;
103 ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16); 103 ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16);
104 return ret; 104 return ret;
105} 105}
106#undef silk_SMLAWT 106#undef silk_SMLAWT
107static inline opus_int32 silk_SMLAWT(opus_int32 a32, opus_int32 b32, opus_int32 c32){ 107static OPUS_INLINE opus_int32 silk_SMLAWT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
108 opus_int32 ret; 108 opus_int32 ret;
109 ops_count += 4; 109 ops_count += 4;
110 ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16)); 110 ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16));
@@ -112,14 +112,14 @@ static inline opus_int32 silk_SMLAWT(opus_int32 a32, opus_int32 b32, opus_int32
112} 112}
113 113
114#undef silk_SMULBB 114#undef silk_SMULBB
115static inline opus_int32 silk_SMULBB(opus_int32 a32, opus_int32 b32){ 115static OPUS_INLINE opus_int32 silk_SMULBB(opus_int32 a32, opus_int32 b32){
116 opus_int32 ret; 116 opus_int32 ret;
117 ops_count += 1; 117 ops_count += 1;
118 ret = (opus_int32)((opus_int16)a32) * (opus_int32)((opus_int16)b32); 118 ret = (opus_int32)((opus_int16)a32) * (opus_int32)((opus_int16)b32);
119 return ret; 119 return ret;
120} 120}
121#undef silk_SMLABB 121#undef silk_SMLABB
122static inline opus_int32 silk_SMLABB(opus_int32 a32, opus_int32 b32, opus_int32 c32){ 122static OPUS_INLINE opus_int32 silk_SMLABB(opus_int32 a32, opus_int32 b32, opus_int32 c32){
123 opus_int32 ret; 123 opus_int32 ret;
124 ops_count += 1; 124 ops_count += 1;
125 ret = a32 + (opus_int32)((opus_int16)b32) * (opus_int32)((opus_int16)c32); 125 ret = a32 + (opus_int32)((opus_int16)b32) * (opus_int32)((opus_int16)c32);
@@ -127,7 +127,7 @@ static inline opus_int32 silk_SMLABB(opus_int32 a32, opus_int32 b32, opus_int32
127} 127}
128 128
129#undef silk_SMULBT 129#undef silk_SMULBT
130static inline opus_int32 silk_SMULBT(opus_int32 a32, opus_int32 b32 ){ 130static OPUS_INLINE opus_int32 silk_SMULBT(opus_int32 a32, opus_int32 b32 ){
131 opus_int32 ret; 131 opus_int32 ret;
132 ops_count += 4; 132 ops_count += 4;
133 ret = ((opus_int32)((opus_int16)a32)) * (b32 >> 16); 133 ret = ((opus_int32)((opus_int16)a32)) * (b32 >> 16);
@@ -135,7 +135,7 @@ static inline opus_int32 silk_SMULBT(opus_int32 a32, opus_int32 b32 ){
135} 135}
136 136
137#undef silk_SMLABT 137#undef silk_SMLABT
138static inline opus_int32 silk_SMLABT(opus_int32 a32, opus_int32 b32, opus_int32 c32){ 138static OPUS_INLINE opus_int32 silk_SMLABT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
139 opus_int32 ret; 139 opus_int32 ret;
140 ops_count += 1; 140 ops_count += 1;
141 ret = a32 + ((opus_int32)((opus_int16)b32)) * (c32 >> 16); 141 ret = a32 + ((opus_int32)((opus_int16)b32)) * (c32 >> 16);
@@ -143,7 +143,7 @@ static inline opus_int32 silk_SMLABT(opus_int32 a32, opus_int32 b32, opus_int32
143} 143}
144 144
145#undef silk_SMULTT 145#undef silk_SMULTT
146static inline opus_int32 silk_SMULTT(opus_int32 a32, opus_int32 b32){ 146static OPUS_INLINE opus_int32 silk_SMULTT(opus_int32 a32, opus_int32 b32){
147 opus_int32 ret; 147 opus_int32 ret;
148 ops_count += 1; 148 ops_count += 1;
149 ret = (a32 >> 16) * (b32 >> 16); 149 ret = (a32 >> 16) * (b32 >> 16);
@@ -151,7 +151,7 @@ static inline opus_int32 silk_SMULTT(opus_int32 a32, opus_int32 b32){
151} 151}
152 152
153#undef silk_SMLATT 153#undef silk_SMLATT
154static inline opus_int32 silk_SMLATT(opus_int32 a32, opus_int32 b32, opus_int32 c32){ 154static OPUS_INLINE opus_int32 silk_SMLATT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
155 opus_int32 ret; 155 opus_int32 ret;
156 ops_count += 1; 156 ops_count += 1;
157 ret = a32 + (b32 >> 16) * (c32 >> 16); 157 ret = a32 + (b32 >> 16) * (c32 >> 16);
@@ -179,7 +179,7 @@ static inline opus_int32 silk_SMLATT(opus_int32 a32, opus_int32 b32, opus_int32
179#define silk_SMLAWT_ovflw silk_SMLAWT 179#define silk_SMLAWT_ovflw silk_SMLAWT
180 180
181#undef silk_SMULL 181#undef silk_SMULL
182static inline opus_int64 silk_SMULL(opus_int32 a32, opus_int32 b32){ 182static OPUS_INLINE opus_int64 silk_SMULL(opus_int32 a32, opus_int32 b32){
183 opus_int64 ret; 183 opus_int64 ret;
184 ops_count += 8; 184 ops_count += 8;
185 ret = ((opus_int64)(a32) * /*(opus_int64)*/(b32)); 185 ret = ((opus_int64)(a32) * /*(opus_int64)*/(b32));
@@ -187,14 +187,14 @@ static inline opus_int64 silk_SMULL(opus_int32 a32, opus_int32 b32){
187} 187}
188 188
189#undef silk_SMLAL 189#undef silk_SMLAL
190static inline opus_int64 silk_SMLAL(opus_int64 a64, opus_int32 b32, opus_int32 c32){ 190static OPUS_INLINE opus_int64 silk_SMLAL(opus_int64 a64, opus_int32 b32, opus_int32 c32){
191 opus_int64 ret; 191 opus_int64 ret;
192 ops_count += 8; 192 ops_count += 8;
193 ret = a64 + ((opus_int64)(b32) * /*(opus_int64)*/(c32)); 193 ret = a64 + ((opus_int64)(b32) * /*(opus_int64)*/(c32));
194 return ret; 194 return ret;
195} 195}
196#undef silk_SMLALBB 196#undef silk_SMLALBB
197static inline opus_int64 silk_SMLALBB(opus_int64 a64, opus_int16 b16, opus_int16 c16){ 197static OPUS_INLINE opus_int64 silk_SMLALBB(opus_int64 a64, opus_int16 b16, opus_int16 c16){
198 opus_int64 ret; 198 opus_int64 ret;
199 ops_count += 4; 199 ops_count += 4;
200 ret = a64 + ((opus_int64)(b16) * /*(opus_int64)*/(c16)); 200 ret = a64 + ((opus_int64)(b16) * /*(opus_int64)*/(c16));
@@ -202,7 +202,7 @@ static inline opus_int64 silk_SMLALBB(opus_int64 a64, opus_int16 b16, opus_int16
202} 202}
203 203
204#undef SigProcFIX_CLZ16 204#undef SigProcFIX_CLZ16
205static inline opus_int32 SigProcFIX_CLZ16(opus_int16 in16) 205static OPUS_INLINE opus_int32 SigProcFIX_CLZ16(opus_int16 in16)
206{ 206{
207 opus_int32 out32 = 0; 207 opus_int32 out32 = 0;
208 ops_count += 10; 208 ops_count += 10;
@@ -240,7 +240,7 @@ static inline opus_int32 SigProcFIX_CLZ16(opus_int16 in16)
240} 240}
241 241
242#undef SigProcFIX_CLZ32 242#undef SigProcFIX_CLZ32
243static inline opus_int32 SigProcFIX_CLZ32(opus_int32 in32) 243static OPUS_INLINE opus_int32 SigProcFIX_CLZ32(opus_int32 in32)
244{ 244{
245 /* test highest 16 bits and convert to opus_int16 */ 245 /* test highest 16 bits and convert to opus_int16 */
246 ops_count += 2; 246 ops_count += 2;
@@ -252,19 +252,19 @@ static inline opus_int32 SigProcFIX_CLZ32(opus_int32 in32)
252} 252}
253 253
254#undef silk_DIV32 254#undef silk_DIV32
255static inline opus_int32 silk_DIV32(opus_int32 a32, opus_int32 b32){ 255static OPUS_INLINE opus_int32 silk_DIV32(opus_int32 a32, opus_int32 b32){
256 ops_count += 64; 256 ops_count += 64;
257 return a32 / b32; 257 return a32 / b32;
258} 258}
259 259
260#undef silk_DIV32_16 260#undef silk_DIV32_16
261static inline opus_int32 silk_DIV32_16(opus_int32 a32, opus_int32 b32){ 261static OPUS_INLINE opus_int32 silk_DIV32_16(opus_int32 a32, opus_int32 b32){
262 ops_count += 32; 262 ops_count += 32;
263 return a32 / b32; 263 return a32 / b32;
264} 264}
265 265
266#undef silk_SAT8 266#undef silk_SAT8
267static inline opus_int8 silk_SAT8(opus_int64 a){ 267static OPUS_INLINE opus_int8 silk_SAT8(opus_int64 a){
268 opus_int8 tmp; 268 opus_int8 tmp;
269 ops_count += 1; 269 ops_count += 1;
270 tmp = (opus_int8)((a) > silk_int8_MAX ? silk_int8_MAX : \ 270 tmp = (opus_int8)((a) > silk_int8_MAX ? silk_int8_MAX : \
@@ -273,7 +273,7 @@ static inline opus_int8 silk_SAT8(opus_int64 a){
273} 273}
274 274
275#undef silk_SAT16 275#undef silk_SAT16
276static inline opus_int16 silk_SAT16(opus_int64 a){ 276static OPUS_INLINE opus_int16 silk_SAT16(opus_int64 a){
277 opus_int16 tmp; 277 opus_int16 tmp;
278 ops_count += 1; 278 ops_count += 1;
279 tmp = (opus_int16)((a) > silk_int16_MAX ? silk_int16_MAX : \ 279 tmp = (opus_int16)((a) > silk_int16_MAX ? silk_int16_MAX : \
@@ -281,7 +281,7 @@ static inline opus_int16 silk_SAT16(opus_int64 a){
281 return(tmp); 281 return(tmp);
282} 282}
283#undef silk_SAT32 283#undef silk_SAT32
284static inline opus_int32 silk_SAT32(opus_int64 a){ 284static OPUS_INLINE opus_int32 silk_SAT32(opus_int64 a){
285 opus_int32 tmp; 285 opus_int32 tmp;
286 ops_count += 1; 286 ops_count += 1;
287 tmp = (opus_int32)((a) > silk_int32_MAX ? silk_int32_MAX : \ 287 tmp = (opus_int32)((a) > silk_int32_MAX ? silk_int32_MAX : \
@@ -289,7 +289,7 @@ static inline opus_int32 silk_SAT32(opus_int64 a){
289 return(tmp); 289 return(tmp);
290} 290}
291#undef silk_POS_SAT32 291#undef silk_POS_SAT32
292static inline opus_int32 silk_POS_SAT32(opus_int64 a){ 292static OPUS_INLINE opus_int32 silk_POS_SAT32(opus_int64 a){
293 opus_int32 tmp; 293 opus_int32 tmp;
294 ops_count += 1; 294 ops_count += 1;
295 tmp = (opus_int32)((a) > silk_int32_MAX ? silk_int32_MAX : (a)); 295 tmp = (opus_int32)((a) > silk_int32_MAX ? silk_int32_MAX : (a));
@@ -297,14 +297,14 @@ static inline opus_int32 silk_POS_SAT32(opus_int64 a){
297} 297}
298 298
299#undef silk_ADD_POS_SAT8 299#undef silk_ADD_POS_SAT8
300static inline opus_int8 silk_ADD_POS_SAT8(opus_int64 a, opus_int64 b){ 300static OPUS_INLINE opus_int8 silk_ADD_POS_SAT8(opus_int64 a, opus_int64 b){
301 opus_int8 tmp; 301 opus_int8 tmp;
302 ops_count += 1; 302 ops_count += 1;
303 tmp = (opus_int8)((((a)+(b)) & 0x80) ? silk_int8_MAX : ((a)+(b))); 303 tmp = (opus_int8)((((a)+(b)) & 0x80) ? silk_int8_MAX : ((a)+(b)));
304 return(tmp); 304 return(tmp);
305} 305}
306#undef silk_ADD_POS_SAT16 306#undef silk_ADD_POS_SAT16
307static inline opus_int16 silk_ADD_POS_SAT16(opus_int64 a, opus_int64 b){ 307static OPUS_INLINE opus_int16 silk_ADD_POS_SAT16(opus_int64 a, opus_int64 b){
308 opus_int16 tmp; 308 opus_int16 tmp;
309 ops_count += 1; 309 ops_count += 1;
310 tmp = (opus_int16)((((a)+(b)) & 0x8000) ? silk_int16_MAX : ((a)+(b))); 310 tmp = (opus_int16)((((a)+(b)) & 0x8000) ? silk_int16_MAX : ((a)+(b)));
@@ -312,7 +312,7 @@ static inline opus_int16 silk_ADD_POS_SAT16(opus_int64 a, opus_int64 b){
312} 312}
313 313
314#undef silk_ADD_POS_SAT32 314#undef silk_ADD_POS_SAT32
315static inline opus_int32 silk_ADD_POS_SAT32(opus_int64 a, opus_int64 b){ 315static OPUS_INLINE opus_int32 silk_ADD_POS_SAT32(opus_int64 a, opus_int64 b){
316 opus_int32 tmp; 316 opus_int32 tmp;
317 ops_count += 1; 317 ops_count += 1;
318 tmp = (opus_int32)((((a)+(b)) & 0x80000000) ? silk_int32_MAX : ((a)+(b))); 318 tmp = (opus_int32)((((a)+(b)) & 0x80000000) ? silk_int32_MAX : ((a)+(b)));
@@ -320,7 +320,7 @@ static inline opus_int32 silk_ADD_POS_SAT32(opus_int64 a, opus_int64 b){
320} 320}
321 321
322#undef silk_ADD_POS_SAT64 322#undef silk_ADD_POS_SAT64
323static inline opus_int64 silk_ADD_POS_SAT64(opus_int64 a, opus_int64 b){ 323static OPUS_INLINE opus_int64 silk_ADD_POS_SAT64(opus_int64 a, opus_int64 b){
324 opus_int64 tmp; 324 opus_int64 tmp;
325 ops_count += 1; 325 ops_count += 1;
326 tmp = ((((a)+(b)) & 0x8000000000000000LL) ? silk_int64_MAX : ((a)+(b))); 326 tmp = ((((a)+(b)) & 0x8000000000000000LL) ? silk_int64_MAX : ((a)+(b)));
@@ -328,40 +328,40 @@ static inline opus_int64 silk_ADD_POS_SAT64(opus_int64 a, opus_int64 b){
328} 328}
329 329
330#undef silk_LSHIFT8 330#undef silk_LSHIFT8
331static inline opus_int8 silk_LSHIFT8(opus_int8 a, opus_int32 shift){ 331static OPUS_INLINE opus_int8 silk_LSHIFT8(opus_int8 a, opus_int32 shift){
332 opus_int8 ret; 332 opus_int8 ret;
333 ops_count += 1; 333 ops_count += 1;
334 ret = a << shift; 334 ret = a << shift;
335 return ret; 335 return ret;
336} 336}
337#undef silk_LSHIFT16 337#undef silk_LSHIFT16
338static inline opus_int16 silk_LSHIFT16(opus_int16 a, opus_int32 shift){ 338static OPUS_INLINE opus_int16 silk_LSHIFT16(opus_int16 a, opus_int32 shift){
339 opus_int16 ret; 339 opus_int16 ret;
340 ops_count += 1; 340 ops_count += 1;
341 ret = a << shift; 341 ret = a << shift;
342 return ret; 342 return ret;
343} 343}
344#undef silk_LSHIFT32 344#undef silk_LSHIFT32
345static inline opus_int32 silk_LSHIFT32(opus_int32 a, opus_int32 shift){ 345static OPUS_INLINE opus_int32 silk_LSHIFT32(opus_int32 a, opus_int32 shift){
346 opus_int32 ret; 346 opus_int32 ret;
347 ops_count += 1; 347 ops_count += 1;
348 ret = a << shift; 348 ret = a << shift;
349 return ret; 349 return ret;
350} 350}
351#undef silk_LSHIFT64 351#undef silk_LSHIFT64
352static inline opus_int64 silk_LSHIFT64(opus_int64 a, opus_int shift){ 352static OPUS_INLINE opus_int64 silk_LSHIFT64(opus_int64 a, opus_int shift){
353 ops_count += 1; 353 ops_count += 1;
354 return a << shift; 354 return a << shift;
355} 355}
356 356
357#undef silk_LSHIFT_ovflw 357#undef silk_LSHIFT_ovflw
358static inline opus_int32 silk_LSHIFT_ovflw(opus_int32 a, opus_int32 shift){ 358static OPUS_INLINE opus_int32 silk_LSHIFT_ovflw(opus_int32 a, opus_int32 shift){
359 ops_count += 1; 359 ops_count += 1;
360 return a << shift; 360 return a << shift;
361} 361}
362 362
363#undef silk_LSHIFT_uint 363#undef silk_LSHIFT_uint
364static inline opus_uint32 silk_LSHIFT_uint(opus_uint32 a, opus_int32 shift){ 364static OPUS_INLINE opus_uint32 silk_LSHIFT_uint(opus_uint32 a, opus_int32 shift){
365 opus_uint32 ret; 365 opus_uint32 ret;
366 ops_count += 1; 366 ops_count += 1;
367 ret = a << shift; 367 ret = a << shift;
@@ -369,83 +369,83 @@ static inline opus_uint32 silk_LSHIFT_uint(opus_uint32 a, opus_int32 shift){
369} 369}
370 370
371#undef silk_RSHIFT8 371#undef silk_RSHIFT8
372static inline opus_int8 silk_RSHIFT8(opus_int8 a, opus_int32 shift){ 372static OPUS_INLINE opus_int8 silk_RSHIFT8(opus_int8 a, opus_int32 shift){
373 ops_count += 1; 373 ops_count += 1;
374 return a >> shift; 374 return a >> shift;
375} 375}
376#undef silk_RSHIFT16 376#undef silk_RSHIFT16
377static inline opus_int16 silk_RSHIFT16(opus_int16 a, opus_int32 shift){ 377static OPUS_INLINE opus_int16 silk_RSHIFT16(opus_int16 a, opus_int32 shift){
378 ops_count += 1; 378 ops_count += 1;
379 return a >> shift; 379 return a >> shift;
380} 380}
381#undef silk_RSHIFT32 381#undef silk_RSHIFT32
382static inline opus_int32 silk_RSHIFT32(opus_int32 a, opus_int32 shift){ 382static OPUS_INLINE opus_int32 silk_RSHIFT32(opus_int32 a, opus_int32 shift){
383 ops_count += 1; 383 ops_count += 1;
384 return a >> shift; 384 return a >> shift;
385} 385}
386#undef silk_RSHIFT64 386#undef silk_RSHIFT64
387static inline opus_int64 silk_RSHIFT64(opus_int64 a, opus_int64 shift){ 387static OPUS_INLINE opus_int64 silk_RSHIFT64(opus_int64 a, opus_int64 shift){
388 ops_count += 1; 388 ops_count += 1;
389 return a >> shift; 389 return a >> shift;
390} 390}
391 391
392#undef silk_RSHIFT_uint 392#undef silk_RSHIFT_uint
393static inline opus_uint32 silk_RSHIFT_uint(opus_uint32 a, opus_int32 shift){ 393static OPUS_INLINE opus_uint32 silk_RSHIFT_uint(opus_uint32 a, opus_int32 shift){
394 ops_count += 1; 394 ops_count += 1;
395 return a >> shift; 395 return a >> shift;
396} 396}
397 397
398#undef silk_ADD_LSHIFT 398#undef silk_ADD_LSHIFT
399static inline opus_int32 silk_ADD_LSHIFT(opus_int32 a, opus_int32 b, opus_int32 shift){ 399static OPUS_INLINE opus_int32 silk_ADD_LSHIFT(opus_int32 a, opus_int32 b, opus_int32 shift){
400 opus_int32 ret; 400 opus_int32 ret;
401 ops_count += 1; 401 ops_count += 1;
402 ret = a + (b << shift); 402 ret = a + (b << shift);
403 return ret; /* shift >= 0*/ 403 return ret; /* shift >= 0*/
404} 404}
405#undef silk_ADD_LSHIFT32 405#undef silk_ADD_LSHIFT32
406static inline opus_int32 silk_ADD_LSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){ 406static OPUS_INLINE opus_int32 silk_ADD_LSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
407 opus_int32 ret; 407 opus_int32 ret;
408 ops_count += 1; 408 ops_count += 1;
409 ret = a + (b << shift); 409 ret = a + (b << shift);
410 return ret; /* shift >= 0*/ 410 return ret; /* shift >= 0*/
411} 411}
412#undef silk_ADD_LSHIFT_uint 412#undef silk_ADD_LSHIFT_uint
413static inline opus_uint32 silk_ADD_LSHIFT_uint(opus_uint32 a, opus_uint32 b, opus_int32 shift){ 413static OPUS_INLINE opus_uint32 silk_ADD_LSHIFT_uint(opus_uint32 a, opus_uint32 b, opus_int32 shift){
414 opus_uint32 ret; 414 opus_uint32 ret;
415 ops_count += 1; 415 ops_count += 1;
416 ret = a + (b << shift); 416 ret = a + (b << shift);
417 return ret; /* shift >= 0*/ 417 return ret; /* shift >= 0*/
418} 418}
419#undef silk_ADD_RSHIFT 419#undef silk_ADD_RSHIFT
420static inline opus_int32 silk_ADD_RSHIFT(opus_int32 a, opus_int32 b, opus_int32 shift){ 420static OPUS_INLINE opus_int32 silk_ADD_RSHIFT(opus_int32 a, opus_int32 b, opus_int32 shift){
421 opus_int32 ret; 421 opus_int32 ret;
422 ops_count += 1; 422 ops_count += 1;
423 ret = a + (b >> shift); 423 ret = a + (b >> shift);
424 return ret; /* shift > 0*/ 424 return ret; /* shift > 0*/
425} 425}
426#undef silk_ADD_RSHIFT32 426#undef silk_ADD_RSHIFT32
427static inline opus_int32 silk_ADD_RSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){ 427static OPUS_INLINE opus_int32 silk_ADD_RSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
428 opus_int32 ret; 428 opus_int32 ret;
429 ops_count += 1; 429 ops_count += 1;
430 ret = a + (b >> shift); 430 ret = a + (b >> shift);
431 return ret; /* shift > 0*/ 431 return ret; /* shift > 0*/
432} 432}
433#undef silk_ADD_RSHIFT_uint 433#undef silk_ADD_RSHIFT_uint
434static inline opus_uint32 silk_ADD_RSHIFT_uint(opus_uint32 a, opus_uint32 b, opus_int32 shift){ 434static OPUS_INLINE opus_uint32 silk_ADD_RSHIFT_uint(opus_uint32 a, opus_uint32 b, opus_int32 shift){
435 opus_uint32 ret; 435 opus_uint32 ret;
436 ops_count += 1; 436 ops_count += 1;
437 ret = a + (b >> shift); 437 ret = a + (b >> shift);
438 return ret; /* shift > 0*/ 438 return ret; /* shift > 0*/
439} 439}
440#undef silk_SUB_LSHIFT32 440#undef silk_SUB_LSHIFT32
441static inline opus_int32 silk_SUB_LSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){ 441static OPUS_INLINE opus_int32 silk_SUB_LSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
442 opus_int32 ret; 442 opus_int32 ret;
443 ops_count += 1; 443 ops_count += 1;
444 ret = a - (b << shift); 444 ret = a - (b << shift);
445 return ret; /* shift >= 0*/ 445 return ret; /* shift >= 0*/
446} 446}
447#undef silk_SUB_RSHIFT32 447#undef silk_SUB_RSHIFT32
448static inline opus_int32 silk_SUB_RSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){ 448static OPUS_INLINE opus_int32 silk_SUB_RSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
449 opus_int32 ret; 449 opus_int32 ret;
450 ops_count += 1; 450 ops_count += 1;
451 ret = a - (b >> shift); 451 ret = a - (b >> shift);
@@ -453,7 +453,7 @@ static inline opus_int32 silk_SUB_RSHIFT32(opus_int32 a, opus_int32 b, opus_int3
453} 453}
454 454
455#undef silk_RSHIFT_ROUND 455#undef silk_RSHIFT_ROUND
456static inline opus_int32 silk_RSHIFT_ROUND(opus_int32 a, opus_int32 shift){ 456static OPUS_INLINE opus_int32 silk_RSHIFT_ROUND(opus_int32 a, opus_int32 shift){
457 opus_int32 ret; 457 opus_int32 ret;
458 ops_count += 3; 458 ops_count += 3;
459 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1; 459 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
@@ -461,7 +461,7 @@ static inline opus_int32 silk_RSHIFT_ROUND(opus_int32 a, opus_int32 shift){
461} 461}
462 462
463#undef silk_RSHIFT_ROUND64 463#undef silk_RSHIFT_ROUND64
464static inline opus_int64 silk_RSHIFT_ROUND64(opus_int64 a, opus_int32 shift){ 464static OPUS_INLINE opus_int64 silk_RSHIFT_ROUND64(opus_int64 a, opus_int32 shift){
465 opus_int64 ret; 465 opus_int64 ret;
466 ops_count += 6; 466 ops_count += 6;
467 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1; 467 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
@@ -469,13 +469,13 @@ static inline opus_int64 silk_RSHIFT_ROUND64(opus_int64 a, opus_int32 shift){
469} 469}
470 470
471#undef silk_abs_int64 471#undef silk_abs_int64
472static inline opus_int64 silk_abs_int64(opus_int64 a){ 472static OPUS_INLINE opus_int64 silk_abs_int64(opus_int64 a){
473 ops_count += 1; 473 ops_count += 1;
474 return (((a) > 0) ? (a) : -(a)); /* Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN*/ 474 return (((a) > 0) ? (a) : -(a)); /* Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN*/
475} 475}
476 476
477#undef silk_abs_int32 477#undef silk_abs_int32
478static inline opus_int32 silk_abs_int32(opus_int32 a){ 478static OPUS_INLINE opus_int32 silk_abs_int32(opus_int32 a){
479 ops_count += 1; 479 ops_count += 1;
480 return silk_abs(a); 480 return silk_abs(a);
481} 481}
@@ -498,7 +498,7 @@ static silk_sign(a){
498} 498}
499 499
500#undef silk_ADD16 500#undef silk_ADD16
501static inline opus_int16 silk_ADD16(opus_int16 a, opus_int16 b){ 501static OPUS_INLINE opus_int16 silk_ADD16(opus_int16 a, opus_int16 b){
502 opus_int16 ret; 502 opus_int16 ret;
503 ops_count += 1; 503 ops_count += 1;
504 ret = a + b; 504 ret = a + b;
@@ -506,7 +506,7 @@ static inline opus_int16 silk_ADD16(opus_int16 a, opus_int16 b){
506} 506}
507 507
508#undef silk_ADD32 508#undef silk_ADD32
509static inline opus_int32 silk_ADD32(opus_int32 a, opus_int32 b){ 509static OPUS_INLINE opus_int32 silk_ADD32(opus_int32 a, opus_int32 b){
510 opus_int32 ret; 510 opus_int32 ret;
511 ops_count += 1; 511 ops_count += 1;
512 ret = a + b; 512 ret = a + b;
@@ -514,7 +514,7 @@ static inline opus_int32 silk_ADD32(opus_int32 a, opus_int32 b){
514} 514}
515 515
516#undef silk_ADD64 516#undef silk_ADD64
517static inline opus_int64 silk_ADD64(opus_int64 a, opus_int64 b){ 517static OPUS_INLINE opus_int64 silk_ADD64(opus_int64 a, opus_int64 b){
518 opus_int64 ret; 518 opus_int64 ret;
519 ops_count += 2; 519 ops_count += 2;
520 ret = a + b; 520 ret = a + b;
@@ -522,7 +522,7 @@ static inline opus_int64 silk_ADD64(opus_int64 a, opus_int64 b){
522} 522}
523 523
524#undef silk_SUB16 524#undef silk_SUB16
525static inline opus_int16 silk_SUB16(opus_int16 a, opus_int16 b){ 525static OPUS_INLINE opus_int16 silk_SUB16(opus_int16 a, opus_int16 b){
526 opus_int16 ret; 526 opus_int16 ret;
527 ops_count += 1; 527 ops_count += 1;
528 ret = a - b; 528 ret = a - b;
@@ -530,7 +530,7 @@ static inline opus_int16 silk_SUB16(opus_int16 a, opus_int16 b){
530} 530}
531 531
532#undef silk_SUB32 532#undef silk_SUB32
533static inline opus_int32 silk_SUB32(opus_int32 a, opus_int32 b){ 533static OPUS_INLINE opus_int32 silk_SUB32(opus_int32 a, opus_int32 b){
534 opus_int32 ret; 534 opus_int32 ret;
535 ops_count += 1; 535 ops_count += 1;
536 ret = a - b; 536 ret = a - b;
@@ -538,7 +538,7 @@ static inline opus_int32 silk_SUB32(opus_int32 a, opus_int32 b){
538} 538}
539 539
540#undef silk_SUB64 540#undef silk_SUB64
541static inline opus_int64 silk_SUB64(opus_int64 a, opus_int64 b){ 541static OPUS_INLINE opus_int64 silk_SUB64(opus_int64 a, opus_int64 b){
542 opus_int64 ret; 542 opus_int64 ret;
543 ops_count += 2; 543 ops_count += 2;
544 ret = a - b; 544 ret = a - b;
@@ -546,7 +546,7 @@ static inline opus_int64 silk_SUB64(opus_int64 a, opus_int64 b){
546} 546}
547 547
548#undef silk_ADD_SAT16 548#undef silk_ADD_SAT16
549static inline opus_int16 silk_ADD_SAT16( opus_int16 a16, opus_int16 b16 ) { 549static OPUS_INLINE opus_int16 silk_ADD_SAT16( opus_int16 a16, opus_int16 b16 ) {
550 opus_int16 res; 550 opus_int16 res;
551 /* Nb will be counted in AKP_add32 and silk_SAT16*/ 551 /* Nb will be counted in AKP_add32 and silk_SAT16*/
552 res = (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a16), (b16) ) ); 552 res = (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a16), (b16) ) );
@@ -554,7 +554,7 @@ static inline opus_int16 silk_ADD_SAT16( opus_int16 a16, opus_int16 b16 ) {
554} 554}
555 555
556#undef silk_ADD_SAT32 556#undef silk_ADD_SAT32
557static inline opus_int32 silk_ADD_SAT32(opus_int32 a32, opus_int32 b32){ 557static OPUS_INLINE opus_int32 silk_ADD_SAT32(opus_int32 a32, opus_int32 b32){
558 opus_int32 res; 558 opus_int32 res;
559 ops_count += 1; 559 ops_count += 1;
560 res = ((((a32) + (b32)) & 0x80000000) == 0 ? \ 560 res = ((((a32) + (b32)) & 0x80000000) == 0 ? \
@@ -564,7 +564,7 @@ static inline opus_int32 silk_ADD_SAT32(opus_int32 a32, opus_int32 b32){
564} 564}
565 565
566#undef silk_ADD_SAT64 566#undef silk_ADD_SAT64
567static inline opus_int64 silk_ADD_SAT64( opus_int64 a64, opus_int64 b64 ) { 567static OPUS_INLINE opus_int64 silk_ADD_SAT64( opus_int64 a64, opus_int64 b64 ) {
568 opus_int64 res; 568 opus_int64 res;
569 ops_count += 1; 569 ops_count += 1;
570 res = ((((a64) + (b64)) & 0x8000000000000000LL) == 0 ? \ 570 res = ((((a64) + (b64)) & 0x8000000000000000LL) == 0 ? \
@@ -574,7 +574,7 @@ static inline opus_int64 silk_ADD_SAT64( opus_int64 a64, opus_int64 b64 ) {
574} 574}
575 575
576#undef silk_SUB_SAT16 576#undef silk_SUB_SAT16
577static inline opus_int16 silk_SUB_SAT16( opus_int16 a16, opus_int16 b16 ) { 577static OPUS_INLINE opus_int16 silk_SUB_SAT16( opus_int16 a16, opus_int16 b16 ) {
578 opus_int16 res; 578 opus_int16 res;
579 silk_assert(0); 579 silk_assert(0);
580 /* Nb will be counted in sub-macros*/ 580 /* Nb will be counted in sub-macros*/
@@ -583,7 +583,7 @@ static inline opus_int16 silk_SUB_SAT16( opus_int16 a16, opus_int16 b16 ) {
583} 583}
584 584
585#undef silk_SUB_SAT32 585#undef silk_SUB_SAT32
586static inline opus_int32 silk_SUB_SAT32( opus_int32 a32, opus_int32 b32 ) { 586static OPUS_INLINE opus_int32 silk_SUB_SAT32( opus_int32 a32, opus_int32 b32 ) {
587 opus_int32 res; 587 opus_int32 res;
588 ops_count += 1; 588 ops_count += 1;
589 res = ((((a32)-(b32)) & 0x80000000) == 0 ? \ 589 res = ((((a32)-(b32)) & 0x80000000) == 0 ? \
@@ -593,7 +593,7 @@ static inline opus_int32 silk_SUB_SAT32( opus_int32 a32, opus_int32 b32 ) {
593} 593}
594 594
595#undef silk_SUB_SAT64 595#undef silk_SUB_SAT64
596static inline opus_int64 silk_SUB_SAT64( opus_int64 a64, opus_int64 b64 ) { 596static OPUS_INLINE opus_int64 silk_SUB_SAT64( opus_int64 a64, opus_int64 b64 ) {
597 opus_int64 res; 597 opus_int64 res;
598 ops_count += 1; 598 ops_count += 1;
599 res = ((((a64)-(b64)) & 0x8000000000000000LL) == 0 ? \ 599 res = ((((a64)-(b64)) & 0x8000000000000000LL) == 0 ? \
@@ -604,7 +604,7 @@ static inline opus_int64 silk_SUB_SAT64( opus_int64 a64, opus_int64 b64 ) {
604} 604}
605 605
606#undef silk_SMULWW 606#undef silk_SMULWW
607static inline opus_int32 silk_SMULWW(opus_int32 a32, opus_int32 b32){ 607static OPUS_INLINE opus_int32 silk_SMULWW(opus_int32 a32, opus_int32 b32){
608 opus_int32 ret; 608 opus_int32 ret;
609 /* Nb will be counted in sub-macros*/ 609 /* Nb will be counted in sub-macros*/
610 ret = silk_MLA(silk_SMULWB((a32), (b32)), (a32), silk_RSHIFT_ROUND((b32), 16)); 610 ret = silk_MLA(silk_SMULWB((a32), (b32)), (a32), silk_RSHIFT_ROUND((b32), 16));
@@ -612,7 +612,7 @@ static inline opus_int32 silk_SMULWW(opus_int32 a32, opus_int32 b32){
612} 612}
613 613
614#undef silk_SMLAWW 614#undef silk_SMLAWW
615static inline opus_int32 silk_SMLAWW(opus_int32 a32, opus_int32 b32, opus_int32 c32){ 615static OPUS_INLINE opus_int32 silk_SMLAWW(opus_int32 a32, opus_int32 b32, opus_int32 c32){
616 opus_int32 ret; 616 opus_int32 ret;
617 /* Nb will be counted in sub-macros*/ 617 /* Nb will be counted in sub-macros*/
618 ret = silk_MLA(silk_SMLAWB((a32), (b32), (c32)), (b32), silk_RSHIFT_ROUND((c32), 16)); 618 ret = silk_MLA(silk_SMLAWB((a32), (b32), (c32)), (b32), silk_RSHIFT_ROUND((c32), 16));
@@ -620,26 +620,26 @@ static inline opus_int32 silk_SMLAWW(opus_int32 a32, opus_int32 b32, opus_int32
620} 620}
621 621
622#undef silk_min_int 622#undef silk_min_int
623static inline opus_int silk_min_int(opus_int a, opus_int b) 623static OPUS_INLINE opus_int silk_min_int(opus_int a, opus_int b)
624{ 624{
625 ops_count += 1; 625 ops_count += 1;
626 return (((a) < (b)) ? (a) : (b)); 626 return (((a) < (b)) ? (a) : (b));
627} 627}
628 628
629#undef silk_min_16 629#undef silk_min_16
630static inline opus_int16 silk_min_16(opus_int16 a, opus_int16 b) 630static OPUS_INLINE opus_int16 silk_min_16(opus_int16 a, opus_int16 b)
631{ 631{
632 ops_count += 1; 632 ops_count += 1;
633 return (((a) < (b)) ? (a) : (b)); 633 return (((a) < (b)) ? (a) : (b));
634} 634}
635#undef silk_min_32 635#undef silk_min_32
636static inline opus_int32 silk_min_32(opus_int32 a, opus_int32 b) 636static OPUS_INLINE opus_int32 silk_min_32(opus_int32 a, opus_int32 b)
637{ 637{
638 ops_count += 1; 638 ops_count += 1;
639 return (((a) < (b)) ? (a) : (b)); 639 return (((a) < (b)) ? (a) : (b));
640} 640}
641#undef silk_min_64 641#undef silk_min_64
642static inline opus_int64 silk_min_64(opus_int64 a, opus_int64 b) 642static OPUS_INLINE opus_int64 silk_min_64(opus_int64 a, opus_int64 b)
643{ 643{
644 ops_count += 1; 644 ops_count += 1;
645 return (((a) < (b)) ? (a) : (b)); 645 return (((a) < (b)) ? (a) : (b));
@@ -647,26 +647,26 @@ static inline opus_int64 silk_min_64(opus_int64 a, opus_int64 b)
647 647
648/* silk_min() versions with typecast in the function call */ 648/* silk_min() versions with typecast in the function call */
649#undef silk_max_int 649#undef silk_max_int
650static inline opus_int silk_max_int(opus_int a, opus_int b) 650static OPUS_INLINE opus_int silk_max_int(opus_int a, opus_int b)
651{ 651{
652 ops_count += 1; 652 ops_count += 1;
653 return (((a) > (b)) ? (a) : (b)); 653 return (((a) > (b)) ? (a) : (b));
654} 654}
655#undef silk_max_16 655#undef silk_max_16
656static inline opus_int16 silk_max_16(opus_int16 a, opus_int16 b) 656static OPUS_INLINE opus_int16 silk_max_16(opus_int16 a, opus_int16 b)
657{ 657{
658 ops_count += 1; 658 ops_count += 1;
659 return (((a) > (b)) ? (a) : (b)); 659 return (((a) > (b)) ? (a) : (b));
660} 660}
661#undef silk_max_32 661#undef silk_max_32
662static inline opus_int32 silk_max_32(opus_int32 a, opus_int32 b) 662static OPUS_INLINE opus_int32 silk_max_32(opus_int32 a, opus_int32 b)
663{ 663{
664 ops_count += 1; 664 ops_count += 1;
665 return (((a) > (b)) ? (a) : (b)); 665 return (((a) > (b)) ? (a) : (b));
666} 666}
667 667
668#undef silk_max_64 668#undef silk_max_64
669static inline opus_int64 silk_max_64(opus_int64 a, opus_int64 b) 669static OPUS_INLINE opus_int64 silk_max_64(opus_int64 a, opus_int64 b)
670{ 670{
671 ops_count += 1; 671 ops_count += 1;
672 return (((a) > (b)) ? (a) : (b)); 672 return (((a) > (b)) ? (a) : (b));
@@ -674,7 +674,7 @@ static inline opus_int64 silk_max_64(opus_int64 a, opus_int64 b)
674 674
675 675
676#undef silk_LIMIT_int 676#undef silk_LIMIT_int
677static inline opus_int silk_LIMIT_int(opus_int a, opus_int limit1, opus_int limit2) 677static OPUS_INLINE opus_int silk_LIMIT_int(opus_int a, opus_int limit1, opus_int limit2)
678{ 678{
679 opus_int ret; 679 opus_int ret;
680 ops_count += 6; 680 ops_count += 6;
@@ -686,7 +686,7 @@ static inline opus_int silk_LIMIT_int(opus_int a, opus_int limit1, opus_int limi
686} 686}
687 687
688#undef silk_LIMIT_16 688#undef silk_LIMIT_16
689static inline opus_int16 silk_LIMIT_16(opus_int16 a, opus_int16 limit1, opus_int16 limit2) 689static OPUS_INLINE opus_int16 silk_LIMIT_16(opus_int16 a, opus_int16 limit1, opus_int16 limit2)
690{ 690{
691 opus_int16 ret; 691 opus_int16 ret;
692 ops_count += 6; 692 ops_count += 6;
@@ -699,7 +699,7 @@ return(ret);
699 699
700 700
701#undef silk_LIMIT_32 701#undef silk_LIMIT_32
702static inline opus_int silk_LIMIT_32(opus_int32 a, opus_int32 limit1, opus_int32 limit2) 702static OPUS_INLINE opus_int silk_LIMIT_32(opus_int32 a, opus_int32 limit1, opus_int32 limit2)
703{ 703{
704 opus_int32 ret; 704 opus_int32 ret;
705 ops_count += 6; 705 ops_count += 6;
diff --git a/lib/rbcodec/codecs/libopus/silk/MacroDebug.h b/lib/rbcodec/codecs/libopus/silk/MacroDebug.h
index d3d84b6caa..35aedc5c5f 100644
--- a/lib/rbcodec/codecs/libopus/silk/MacroDebug.h
+++ b/lib/rbcodec/codecs/libopus/silk/MacroDebug.h
@@ -9,7 +9,7 @@ this list of conditions and the following disclaimer.
9- Redistributions in binary form must reproduce the above copyright 9- Redistributions in binary form must reproduce the above copyright
10notice, this list of conditions and the following disclaimer in the 10notice, this list of conditions and the following disclaimer in the
11documentation and/or other materials provided with the distribution. 11documentation and/or other materials provided with the distribution.
12- Neither the name of Internet Society, IETF or IETF Trust, nor the 12- Neither the name of Internet Society, IETF or IETF Trust, nor the
13names of specific contributors, may be used to endorse or promote 13names of specific contributors, may be used to endorse or promote
14products derived from this software without specific prior written 14products derived from this software without specific prior written
15permission. 15permission.
@@ -36,7 +36,7 @@ POSSIBILITY OF SUCH DAMAGE.
36 36
37#undef silk_ADD16 37#undef silk_ADD16
38#define silk_ADD16(a,b) silk_ADD16_((a), (b), __FILE__, __LINE__) 38#define silk_ADD16(a,b) silk_ADD16_((a), (b), __FILE__, __LINE__)
39static inline opus_int16 silk_ADD16_(opus_int16 a, opus_int16 b, char *file, int line){ 39static OPUS_INLINE opus_int16 silk_ADD16_(opus_int16 a, opus_int16 b, char *file, int line){
40 opus_int16 ret; 40 opus_int16 ret;
41 41
42 ret = a + b; 42 ret = a + b;
@@ -52,7 +52,7 @@ static inline opus_int16 silk_ADD16_(opus_int16 a, opus_int16 b, char *file, int
52 52
53#undef silk_ADD32 53#undef silk_ADD32
54#define silk_ADD32(a,b) silk_ADD32_((a), (b), __FILE__, __LINE__) 54#define silk_ADD32(a,b) silk_ADD32_((a), (b), __FILE__, __LINE__)
55static inline opus_int32 silk_ADD32_(opus_int32 a, opus_int32 b, char *file, int line){ 55static OPUS_INLINE opus_int32 silk_ADD32_(opus_int32 a, opus_int32 b, char *file, int line){
56 opus_int32 ret; 56 opus_int32 ret;
57 57
58 ret = a + b; 58 ret = a + b;
@@ -68,7 +68,7 @@ static inline opus_int32 silk_ADD32_(opus_int32 a, opus_int32 b, char *file, int
68 68
69#undef silk_ADD64 69#undef silk_ADD64
70#define silk_ADD64(a,b) silk_ADD64_((a), (b), __FILE__, __LINE__) 70#define silk_ADD64(a,b) silk_ADD64_((a), (b), __FILE__, __LINE__)
71static inline opus_int64 silk_ADD64_(opus_int64 a, opus_int64 b, char *file, int line){ 71static OPUS_INLINE opus_int64 silk_ADD64_(opus_int64 a, opus_int64 b, char *file, int line){
72 opus_int64 ret; 72 opus_int64 ret;
73 73
74 ret = a + b; 74 ret = a + b;
@@ -84,7 +84,7 @@ static inline opus_int64 silk_ADD64_(opus_int64 a, opus_int64 b, char *file, int
84 84
85#undef silk_SUB16 85#undef silk_SUB16
86#define silk_SUB16(a,b) silk_SUB16_((a), (b), __FILE__, __LINE__) 86#define silk_SUB16(a,b) silk_SUB16_((a), (b), __FILE__, __LINE__)
87static inline opus_int16 silk_SUB16_(opus_int16 a, opus_int16 b, char *file, int line){ 87static OPUS_INLINE opus_int16 silk_SUB16_(opus_int16 a, opus_int16 b, char *file, int line){
88 opus_int16 ret; 88 opus_int16 ret;
89 89
90 ret = a - b; 90 ret = a - b;
@@ -100,7 +100,7 @@ static inline opus_int16 silk_SUB16_(opus_int16 a, opus_int16 b, char *file, int
100 100
101#undef silk_SUB32 101#undef silk_SUB32
102#define silk_SUB32(a,b) silk_SUB32_((a), (b), __FILE__, __LINE__) 102#define silk_SUB32(a,b) silk_SUB32_((a), (b), __FILE__, __LINE__)
103static inline opus_int32 silk_SUB32_(opus_int32 a, opus_int32 b, char *file, int line){ 103static OPUS_INLINE opus_int32 silk_SUB32_(opus_int32 a, opus_int32 b, char *file, int line){
104 opus_int32 ret; 104 opus_int32 ret;
105 105
106 ret = a - b; 106 ret = a - b;
@@ -116,7 +116,7 @@ static inline opus_int32 silk_SUB32_(opus_int32 a, opus_int32 b, char *file, int
116 116
117#undef silk_SUB64 117#undef silk_SUB64
118#define silk_SUB64(a,b) silk_SUB64_((a), (b), __FILE__, __LINE__) 118#define silk_SUB64(a,b) silk_SUB64_((a), (b), __FILE__, __LINE__)
119static inline opus_int64 silk_SUB64_(opus_int64 a, opus_int64 b, char *file, int line){ 119static OPUS_INLINE opus_int64 silk_SUB64_(opus_int64 a, opus_int64 b, char *file, int line){
120 opus_int64 ret; 120 opus_int64 ret;
121 121
122 ret = a - b; 122 ret = a - b;
@@ -132,7 +132,7 @@ static inline opus_int64 silk_SUB64_(opus_int64 a, opus_int64 b, char *file, int
132 132
133#undef silk_ADD_SAT16 133#undef silk_ADD_SAT16
134#define silk_ADD_SAT16(a,b) silk_ADD_SAT16_((a), (b), __FILE__, __LINE__) 134#define silk_ADD_SAT16(a,b) silk_ADD_SAT16_((a), (b), __FILE__, __LINE__)
135static inline opus_int16 silk_ADD_SAT16_( opus_int16 a16, opus_int16 b16, char *file, int line) { 135static OPUS_INLINE opus_int16 silk_ADD_SAT16_( opus_int16 a16, opus_int16 b16, char *file, int line) {
136 opus_int16 res; 136 opus_int16 res;
137 res = (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a16), (b16) ) ); 137 res = (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a16), (b16) ) );
138 if ( res != silk_SAT16( (opus_int32)a16 + (opus_int32)b16 ) ) 138 if ( res != silk_SAT16( (opus_int32)a16 + (opus_int32)b16 ) )
@@ -147,7 +147,7 @@ static inline opus_int16 silk_ADD_SAT16_( opus_int16 a16, opus_int16 b16, char *
147 147
148#undef silk_ADD_SAT32 148#undef silk_ADD_SAT32
149#define silk_ADD_SAT32(a,b) silk_ADD_SAT32_((a), (b), __FILE__, __LINE__) 149#define silk_ADD_SAT32(a,b) silk_ADD_SAT32_((a), (b), __FILE__, __LINE__)
150static inline opus_int32 silk_ADD_SAT32_(opus_int32 a32, opus_int32 b32, char *file, int line){ 150static OPUS_INLINE opus_int32 silk_ADD_SAT32_(opus_int32 a32, opus_int32 b32, char *file, int line){
151 opus_int32 res; 151 opus_int32 res;
152 res = ((((opus_uint32)(a32) + (opus_uint32)(b32)) & 0x80000000) == 0 ? \ 152 res = ((((opus_uint32)(a32) + (opus_uint32)(b32)) & 0x80000000) == 0 ? \
153 ((((a32) & (b32)) & 0x80000000) != 0 ? silk_int32_MIN : (a32)+(b32)) : \ 153 ((((a32) & (b32)) & 0x80000000) != 0 ? silk_int32_MIN : (a32)+(b32)) : \
@@ -164,7 +164,7 @@ static inline opus_int32 silk_ADD_SAT32_(opus_int32 a32, opus_int32 b32, char *f
164 164
165#undef silk_ADD_SAT64 165#undef silk_ADD_SAT64
166#define silk_ADD_SAT64(a,b) silk_ADD_SAT64_((a), (b), __FILE__, __LINE__) 166#define silk_ADD_SAT64(a,b) silk_ADD_SAT64_((a), (b), __FILE__, __LINE__)
167static inline opus_int64 silk_ADD_SAT64_( opus_int64 a64, opus_int64 b64, char *file, int line) { 167static OPUS_INLINE opus_int64 silk_ADD_SAT64_( opus_int64 a64, opus_int64 b64, char *file, int line) {
168 opus_int64 res; 168 opus_int64 res;
169 int fail = 0; 169 int fail = 0;
170 res = ((((a64) + (b64)) & 0x8000000000000000LL) == 0 ? \ 170 res = ((((a64) + (b64)) & 0x8000000000000000LL) == 0 ? \
@@ -193,7 +193,7 @@ static inline opus_int64 silk_ADD_SAT64_( opus_int64 a64, opus_int64 b64, char *
193 193
194#undef silk_SUB_SAT16 194#undef silk_SUB_SAT16
195#define silk_SUB_SAT16(a,b) silk_SUB_SAT16_((a), (b), __FILE__, __LINE__) 195#define silk_SUB_SAT16(a,b) silk_SUB_SAT16_((a), (b), __FILE__, __LINE__)
196static inline opus_int16 silk_SUB_SAT16_( opus_int16 a16, opus_int16 b16, char *file, int line ) { 196static OPUS_INLINE opus_int16 silk_SUB_SAT16_( opus_int16 a16, opus_int16 b16, char *file, int line ) {
197 opus_int16 res; 197 opus_int16 res;
198 res = (opus_int16)silk_SAT16( silk_SUB32( (opus_int32)(a16), (b16) ) ); 198 res = (opus_int16)silk_SAT16( silk_SUB32( (opus_int32)(a16), (b16) ) );
199 if ( res != silk_SAT16( (opus_int32)a16 - (opus_int32)b16 ) ) 199 if ( res != silk_SAT16( (opus_int32)a16 - (opus_int32)b16 ) )
@@ -208,7 +208,7 @@ static inline opus_int16 silk_SUB_SAT16_( opus_int16 a16, opus_int16 b16, char *
208 208
209#undef silk_SUB_SAT32 209#undef silk_SUB_SAT32
210#define silk_SUB_SAT32(a,b) silk_SUB_SAT32_((a), (b), __FILE__, __LINE__) 210#define silk_SUB_SAT32(a,b) silk_SUB_SAT32_((a), (b), __FILE__, __LINE__)
211static inline opus_int32 silk_SUB_SAT32_( opus_int32 a32, opus_int32 b32, char *file, int line ) { 211static OPUS_INLINE opus_int32 silk_SUB_SAT32_( opus_int32 a32, opus_int32 b32, char *file, int line ) {
212 opus_int32 res; 212 opus_int32 res;
213 res = ((((opus_uint32)(a32)-(opus_uint32)(b32)) & 0x80000000) == 0 ? \ 213 res = ((((opus_uint32)(a32)-(opus_uint32)(b32)) & 0x80000000) == 0 ? \
214 (( (a32) & ((b32)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a32)-(b32)) : \ 214 (( (a32) & ((b32)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a32)-(b32)) : \
@@ -225,7 +225,7 @@ static inline opus_int32 silk_SUB_SAT32_( opus_int32 a32, opus_int32 b32, char *
225 225
226#undef silk_SUB_SAT64 226#undef silk_SUB_SAT64
227#define silk_SUB_SAT64(a,b) silk_SUB_SAT64_((a), (b), __FILE__, __LINE__) 227#define silk_SUB_SAT64(a,b) silk_SUB_SAT64_((a), (b), __FILE__, __LINE__)
228static inline opus_int64 silk_SUB_SAT64_( opus_int64 a64, opus_int64 b64, char *file, int line ) { 228static OPUS_INLINE opus_int64 silk_SUB_SAT64_( opus_int64 a64, opus_int64 b64, char *file, int line ) {
229 opus_int64 res; 229 opus_int64 res;
230 int fail = 0; 230 int fail = 0;
231 res = ((((a64)-(b64)) & 0x8000000000000000LL) == 0 ? \ 231 res = ((((a64)-(b64)) & 0x8000000000000000LL) == 0 ? \
@@ -254,7 +254,7 @@ static inline opus_int64 silk_SUB_SAT64_( opus_int64 a64, opus_int64 b64, char *
254 254
255#undef silk_MUL 255#undef silk_MUL
256#define silk_MUL(a,b) silk_MUL_((a), (b), __FILE__, __LINE__) 256#define silk_MUL(a,b) silk_MUL_((a), (b), __FILE__, __LINE__)
257static inline opus_int32 silk_MUL_(opus_int32 a32, opus_int32 b32, char *file, int line){ 257static OPUS_INLINE opus_int32 silk_MUL_(opus_int32 a32, opus_int32 b32, char *file, int line){
258 opus_int32 ret; 258 opus_int32 ret;
259 opus_int64 ret64; 259 opus_int64 ret64;
260 ret = a32 * b32; 260 ret = a32 * b32;
@@ -271,7 +271,7 @@ static inline opus_int32 silk_MUL_(opus_int32 a32, opus_int32 b32, char *file, i
271 271
272#undef silk_MUL_uint 272#undef silk_MUL_uint
273#define silk_MUL_uint(a,b) silk_MUL_uint_((a), (b), __FILE__, __LINE__) 273#define silk_MUL_uint(a,b) silk_MUL_uint_((a), (b), __FILE__, __LINE__)
274static inline opus_uint32 silk_MUL_uint_(opus_uint32 a32, opus_uint32 b32, char *file, int line){ 274static OPUS_INLINE opus_uint32 silk_MUL_uint_(opus_uint32 a32, opus_uint32 b32, char *file, int line){
275 opus_uint32 ret; 275 opus_uint32 ret;
276 ret = a32 * b32; 276 ret = a32 * b32;
277 if ( (opus_uint64)ret != (opus_uint64)a32 * (opus_uint64)b32 ) 277 if ( (opus_uint64)ret != (opus_uint64)a32 * (opus_uint64)b32 )
@@ -286,7 +286,7 @@ static inline opus_uint32 silk_MUL_uint_(opus_uint32 a32, opus_uint32 b32, char
286 286
287#undef silk_MLA 287#undef silk_MLA
288#define silk_MLA(a,b,c) silk_MLA_((a), (b), (c), __FILE__, __LINE__) 288#define silk_MLA(a,b,c) silk_MLA_((a), (b), (c), __FILE__, __LINE__)
289static inline opus_int32 silk_MLA_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){ 289static OPUS_INLINE opus_int32 silk_MLA_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
290 opus_int32 ret; 290 opus_int32 ret;
291 ret = a32 + b32 * c32; 291 ret = a32 + b32 * c32;
292 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int64)c32 ) 292 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int64)c32 )
@@ -301,7 +301,7 @@ static inline opus_int32 silk_MLA_(opus_int32 a32, opus_int32 b32, opus_int32 c3
301 301
302#undef silk_MLA_uint 302#undef silk_MLA_uint
303#define silk_MLA_uint(a,b,c) silk_MLA_uint_((a), (b), (c), __FILE__, __LINE__) 303#define silk_MLA_uint(a,b,c) silk_MLA_uint_((a), (b), (c), __FILE__, __LINE__)
304static inline opus_int32 silk_MLA_uint_(opus_uint32 a32, opus_uint32 b32, opus_uint32 c32, char *file, int line){ 304static OPUS_INLINE opus_int32 silk_MLA_uint_(opus_uint32 a32, opus_uint32 b32, opus_uint32 c32, char *file, int line){
305 opus_uint32 ret; 305 opus_uint32 ret;
306 ret = a32 + b32 * c32; 306 ret = a32 + b32 * c32;
307 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int64)c32 ) 307 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int64)c32 )
@@ -316,7 +316,7 @@ static inline opus_int32 silk_MLA_uint_(opus_uint32 a32, opus_uint32 b32, opus_u
316 316
317#undef silk_SMULWB 317#undef silk_SMULWB
318#define silk_SMULWB(a,b) silk_SMULWB_((a), (b), __FILE__, __LINE__) 318#define silk_SMULWB(a,b) silk_SMULWB_((a), (b), __FILE__, __LINE__)
319static inline opus_int32 silk_SMULWB_(opus_int32 a32, opus_int32 b32, char *file, int line){ 319static OPUS_INLINE opus_int32 silk_SMULWB_(opus_int32 a32, opus_int32 b32, char *file, int line){
320 opus_int32 ret; 320 opus_int32 ret;
321 ret = (a32 >> 16) * (opus_int32)((opus_int16)b32) + (((a32 & 0x0000FFFF) * (opus_int32)((opus_int16)b32)) >> 16); 321 ret = (a32 >> 16) * (opus_int32)((opus_int16)b32) + (((a32 & 0x0000FFFF) * (opus_int32)((opus_int16)b32)) >> 16);
322 if ( (opus_int64)ret != ((opus_int64)a32 * (opus_int16)b32) >> 16 ) 322 if ( (opus_int64)ret != ((opus_int64)a32 * (opus_int16)b32) >> 16 )
@@ -331,7 +331,7 @@ static inline opus_int32 silk_SMULWB_(opus_int32 a32, opus_int32 b32, char *file
331 331
332#undef silk_SMLAWB 332#undef silk_SMLAWB
333#define silk_SMLAWB(a,b,c) silk_SMLAWB_((a), (b), (c), __FILE__, __LINE__) 333#define silk_SMLAWB(a,b,c) silk_SMLAWB_((a), (b), (c), __FILE__, __LINE__)
334static inline opus_int32 silk_SMLAWB_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){ 334static OPUS_INLINE opus_int32 silk_SMLAWB_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
335 opus_int32 ret; 335 opus_int32 ret;
336 ret = silk_ADD32( a32, silk_SMULWB( b32, c32 ) ); 336 ret = silk_ADD32( a32, silk_SMULWB( b32, c32 ) );
337 if ( silk_ADD32( a32, silk_SMULWB( b32, c32 ) ) != silk_ADD_SAT32( a32, silk_SMULWB( b32, c32 ) ) ) 337 if ( silk_ADD32( a32, silk_SMULWB( b32, c32 ) ) != silk_ADD_SAT32( a32, silk_SMULWB( b32, c32 ) ) )
@@ -346,7 +346,7 @@ static inline opus_int32 silk_SMLAWB_(opus_int32 a32, opus_int32 b32, opus_int32
346 346
347#undef silk_SMULWT 347#undef silk_SMULWT
348#define silk_SMULWT(a,b) silk_SMULWT_((a), (b), __FILE__, __LINE__) 348#define silk_SMULWT(a,b) silk_SMULWT_((a), (b), __FILE__, __LINE__)
349static inline opus_int32 silk_SMULWT_(opus_int32 a32, opus_int32 b32, char *file, int line){ 349static OPUS_INLINE opus_int32 silk_SMULWT_(opus_int32 a32, opus_int32 b32, char *file, int line){
350 opus_int32 ret; 350 opus_int32 ret;
351 ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16); 351 ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16);
352 if ( (opus_int64)ret != ((opus_int64)a32 * (b32 >> 16)) >> 16 ) 352 if ( (opus_int64)ret != ((opus_int64)a32 * (b32 >> 16)) >> 16 )
@@ -361,7 +361,7 @@ static inline opus_int32 silk_SMULWT_(opus_int32 a32, opus_int32 b32, char *file
361 361
362#undef silk_SMLAWT 362#undef silk_SMLAWT
363#define silk_SMLAWT(a,b,c) silk_SMLAWT_((a), (b), (c), __FILE__, __LINE__) 363#define silk_SMLAWT(a,b,c) silk_SMLAWT_((a), (b), (c), __FILE__, __LINE__)
364static inline opus_int32 silk_SMLAWT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){ 364static OPUS_INLINE opus_int32 silk_SMLAWT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
365 opus_int32 ret; 365 opus_int32 ret;
366 ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16)); 366 ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16));
367 if ( (opus_int64)ret != (opus_int64)a32 + (((opus_int64)b32 * (c32 >> 16)) >> 16) ) 367 if ( (opus_int64)ret != (opus_int64)a32 + (((opus_int64)b32 * (c32 >> 16)) >> 16) )
@@ -376,7 +376,7 @@ static inline opus_int32 silk_SMLAWT_(opus_int32 a32, opus_int32 b32, opus_int32
376 376
377#undef silk_SMULL 377#undef silk_SMULL
378#define silk_SMULL(a,b) silk_SMULL_((a), (b), __FILE__, __LINE__) 378#define silk_SMULL(a,b) silk_SMULL_((a), (b), __FILE__, __LINE__)
379static inline opus_int64 silk_SMULL_(opus_int64 a64, opus_int64 b64, char *file, int line){ 379static OPUS_INLINE opus_int64 silk_SMULL_(opus_int64 a64, opus_int64 b64, char *file, int line){
380 opus_int64 ret64; 380 opus_int64 ret64;
381 int fail = 0; 381 int fail = 0;
382 ret64 = a64 * b64; 382 ret64 = a64 * b64;
@@ -398,7 +398,7 @@ static inline opus_int64 silk_SMULL_(opus_int64 a64, opus_int64 b64, char *file,
398/* no checking needed for silk_SMULBB */ 398/* no checking needed for silk_SMULBB */
399#undef silk_SMLABB 399#undef silk_SMLABB
400#define silk_SMLABB(a,b,c) silk_SMLABB_((a), (b), (c), __FILE__, __LINE__) 400#define silk_SMLABB(a,b,c) silk_SMLABB_((a), (b), (c), __FILE__, __LINE__)
401static inline opus_int32 silk_SMLABB_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){ 401static OPUS_INLINE opus_int32 silk_SMLABB_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
402 opus_int32 ret; 402 opus_int32 ret;
403 ret = a32 + (opus_int32)((opus_int16)b32) * (opus_int32)((opus_int16)c32); 403 ret = a32 + (opus_int32)((opus_int16)b32) * (opus_int32)((opus_int16)c32);
404 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int16)c32 ) 404 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int16)c32 )
@@ -414,7 +414,7 @@ static inline opus_int32 silk_SMLABB_(opus_int32 a32, opus_int32 b32, opus_int32
414/* no checking needed for silk_SMULBT */ 414/* no checking needed for silk_SMULBT */
415#undef silk_SMLABT 415#undef silk_SMLABT
416#define silk_SMLABT(a,b,c) silk_SMLABT_((a), (b), (c), __FILE__, __LINE__) 416#define silk_SMLABT(a,b,c) silk_SMLABT_((a), (b), (c), __FILE__, __LINE__)
417static inline opus_int32 silk_SMLABT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){ 417static OPUS_INLINE opus_int32 silk_SMLABT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
418 opus_int32 ret; 418 opus_int32 ret;
419 ret = a32 + ((opus_int32)((opus_int16)b32)) * (c32 >> 16); 419 ret = a32 + ((opus_int32)((opus_int16)b32)) * (c32 >> 16);
420 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (c32 >> 16) ) 420 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (c32 >> 16) )
@@ -430,7 +430,7 @@ static inline opus_int32 silk_SMLABT_(opus_int32 a32, opus_int32 b32, opus_int32
430/* no checking needed for silk_SMULTT */ 430/* no checking needed for silk_SMULTT */
431#undef silk_SMLATT 431#undef silk_SMLATT
432#define silk_SMLATT(a,b,c) silk_SMLATT_((a), (b), (c), __FILE__, __LINE__) 432#define silk_SMLATT(a,b,c) silk_SMLATT_((a), (b), (c), __FILE__, __LINE__)
433static inline opus_int32 silk_SMLATT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){ 433static OPUS_INLINE opus_int32 silk_SMLATT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
434 opus_int32 ret; 434 opus_int32 ret;
435 ret = a32 + (b32 >> 16) * (c32 >> 16); 435 ret = a32 + (b32 >> 16) * (c32 >> 16);
436 if ( (opus_int64)ret != (opus_int64)a32 + (b32 >> 16) * (c32 >> 16) ) 436 if ( (opus_int64)ret != (opus_int64)a32 + (b32 >> 16) * (c32 >> 16) )
@@ -445,7 +445,7 @@ static inline opus_int32 silk_SMLATT_(opus_int32 a32, opus_int32 b32, opus_int32
445 445
446#undef silk_SMULWW 446#undef silk_SMULWW
447#define silk_SMULWW(a,b) silk_SMULWW_((a), (b), __FILE__, __LINE__) 447#define silk_SMULWW(a,b) silk_SMULWW_((a), (b), __FILE__, __LINE__)
448static inline opus_int32 silk_SMULWW_(opus_int32 a32, opus_int32 b32, char *file, int line){ 448static OPUS_INLINE opus_int32 silk_SMULWW_(opus_int32 a32, opus_int32 b32, char *file, int line){
449 opus_int32 ret, tmp1, tmp2; 449 opus_int32 ret, tmp1, tmp2;
450 opus_int64 ret64; 450 opus_int64 ret64;
451 int fail = 0; 451 int fail = 0;
@@ -476,7 +476,7 @@ static inline opus_int32 silk_SMULWW_(opus_int32 a32, opus_int32 b32, char *file
476 476
477#undef silk_SMLAWW 477#undef silk_SMLAWW
478#define silk_SMLAWW(a,b,c) silk_SMLAWW_((a), (b), (c), __FILE__, __LINE__) 478#define silk_SMLAWW(a,b,c) silk_SMLAWW_((a), (b), (c), __FILE__, __LINE__)
479static inline opus_int32 silk_SMLAWW_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){ 479static OPUS_INLINE opus_int32 silk_SMLAWW_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
480 opus_int32 ret, tmp; 480 opus_int32 ret, tmp;
481 481
482 tmp = silk_SMULWW( b32, c32 ); 482 tmp = silk_SMULWW( b32, c32 );
@@ -505,7 +505,7 @@ static inline opus_int32 silk_SMLAWW_(opus_int32 a32, opus_int32 b32, opus_int32
505 505
506#undef silk_DIV32 506#undef silk_DIV32
507#define silk_DIV32(a,b) silk_DIV32_((a), (b), __FILE__, __LINE__) 507#define silk_DIV32(a,b) silk_DIV32_((a), (b), __FILE__, __LINE__)
508static inline opus_int32 silk_DIV32_(opus_int32 a32, opus_int32 b32, char *file, int line){ 508static OPUS_INLINE opus_int32 silk_DIV32_(opus_int32 a32, opus_int32 b32, char *file, int line){
509 if ( b32 == 0 ) 509 if ( b32 == 0 )
510 { 510 {
511 fprintf (stderr, "silk_DIV32(%d, %d) in %s: line %d\n", a32, b32, file, line); 511 fprintf (stderr, "silk_DIV32(%d, %d) in %s: line %d\n", a32, b32, file, line);
@@ -518,7 +518,7 @@ static inline opus_int32 silk_DIV32_(opus_int32 a32, opus_int32 b32, char *file,
518 518
519#undef silk_DIV32_16 519#undef silk_DIV32_16
520#define silk_DIV32_16(a,b) silk_DIV32_16_((a), (b), __FILE__, __LINE__) 520#define silk_DIV32_16(a,b) silk_DIV32_16_((a), (b), __FILE__, __LINE__)
521static inline opus_int32 silk_DIV32_16_(opus_int32 a32, opus_int32 b32, char *file, int line){ 521static OPUS_INLINE opus_int32 silk_DIV32_16_(opus_int32 a32, opus_int32 b32, char *file, int line){
522 int fail = 0; 522 int fail = 0;
523 fail |= b32 == 0; 523 fail |= b32 == 0;
524 fail |= b32 > silk_int16_MAX; 524 fail |= b32 > silk_int16_MAX;
@@ -544,7 +544,7 @@ static inline opus_int32 silk_DIV32_16_(opus_int32 a32, opus_int32 b32, char *fi
544 544
545#undef silk_LSHIFT8 545#undef silk_LSHIFT8
546#define silk_LSHIFT8(a,b) silk_LSHIFT8_((a), (b), __FILE__, __LINE__) 546#define silk_LSHIFT8(a,b) silk_LSHIFT8_((a), (b), __FILE__, __LINE__)
547static inline opus_int8 silk_LSHIFT8_(opus_int8 a, opus_int32 shift, char *file, int line){ 547static OPUS_INLINE opus_int8 silk_LSHIFT8_(opus_int8 a, opus_int32 shift, char *file, int line){
548 opus_int8 ret; 548 opus_int8 ret;
549 int fail = 0; 549 int fail = 0;
550 ret = a << shift; 550 ret = a << shift;
@@ -563,7 +563,7 @@ static inline opus_int8 silk_LSHIFT8_(opus_int8 a, opus_int32 shift, char *file,
563 563
564#undef silk_LSHIFT16 564#undef silk_LSHIFT16
565#define silk_LSHIFT16(a,b) silk_LSHIFT16_((a), (b), __FILE__, __LINE__) 565#define silk_LSHIFT16(a,b) silk_LSHIFT16_((a), (b), __FILE__, __LINE__)
566static inline opus_int16 silk_LSHIFT16_(opus_int16 a, opus_int32 shift, char *file, int line){ 566static OPUS_INLINE opus_int16 silk_LSHIFT16_(opus_int16 a, opus_int32 shift, char *file, int line){
567 opus_int16 ret; 567 opus_int16 ret;
568 int fail = 0; 568 int fail = 0;
569 ret = a << shift; 569 ret = a << shift;
@@ -582,7 +582,7 @@ static inline opus_int16 silk_LSHIFT16_(opus_int16 a, opus_int32 shift, char *fi
582 582
583#undef silk_LSHIFT32 583#undef silk_LSHIFT32
584#define silk_LSHIFT32(a,b) silk_LSHIFT32_((a), (b), __FILE__, __LINE__) 584#define silk_LSHIFT32(a,b) silk_LSHIFT32_((a), (b), __FILE__, __LINE__)
585static inline opus_int32 silk_LSHIFT32_(opus_int32 a, opus_int32 shift, char *file, int line){ 585static OPUS_INLINE opus_int32 silk_LSHIFT32_(opus_int32 a, opus_int32 shift, char *file, int line){
586 opus_int32 ret; 586 opus_int32 ret;
587 int fail = 0; 587 int fail = 0;
588 ret = a << shift; 588 ret = a << shift;
@@ -601,7 +601,7 @@ static inline opus_int32 silk_LSHIFT32_(opus_int32 a, opus_int32 shift, char *fi
601 601
602#undef silk_LSHIFT64 602#undef silk_LSHIFT64
603#define silk_LSHIFT64(a,b) silk_LSHIFT64_((a), (b), __FILE__, __LINE__) 603#define silk_LSHIFT64(a,b) silk_LSHIFT64_((a), (b), __FILE__, __LINE__)
604static inline opus_int64 silk_LSHIFT64_(opus_int64 a, opus_int shift, char *file, int line){ 604static OPUS_INLINE opus_int64 silk_LSHIFT64_(opus_int64 a, opus_int shift, char *file, int line){
605 opus_int64 ret; 605 opus_int64 ret;
606 int fail = 0; 606 int fail = 0;
607 ret = a << shift; 607 ret = a << shift;
@@ -620,7 +620,7 @@ static inline opus_int64 silk_LSHIFT64_(opus_int64 a, opus_int shift, char *file
620 620
621#undef silk_LSHIFT_ovflw 621#undef silk_LSHIFT_ovflw
622#define silk_LSHIFT_ovflw(a,b) silk_LSHIFT_ovflw_((a), (b), __FILE__, __LINE__) 622#define silk_LSHIFT_ovflw(a,b) silk_LSHIFT_ovflw_((a), (b), __FILE__, __LINE__)
623static inline opus_int32 silk_LSHIFT_ovflw_(opus_int32 a, opus_int32 shift, char *file, int line){ 623static OPUS_INLINE opus_int32 silk_LSHIFT_ovflw_(opus_int32 a, opus_int32 shift, char *file, int line){
624 if ( (shift < 0) || (shift >= 32) ) /* no check for overflow */ 624 if ( (shift < 0) || (shift >= 32) ) /* no check for overflow */
625 { 625 {
626 fprintf (stderr, "silk_LSHIFT_ovflw(%d, %d) in %s: line %d\n", a, shift, file, line); 626 fprintf (stderr, "silk_LSHIFT_ovflw(%d, %d) in %s: line %d\n", a, shift, file, line);
@@ -633,7 +633,7 @@ static inline opus_int32 silk_LSHIFT_ovflw_(opus_int32 a, opus_int32 shift, char
633 633
634#undef silk_LSHIFT_uint 634#undef silk_LSHIFT_uint
635#define silk_LSHIFT_uint(a,b) silk_LSHIFT_uint_((a), (b), __FILE__, __LINE__) 635#define silk_LSHIFT_uint(a,b) silk_LSHIFT_uint_((a), (b), __FILE__, __LINE__)
636static inline opus_uint32 silk_LSHIFT_uint_(opus_uint32 a, opus_int32 shift, char *file, int line){ 636static OPUS_INLINE opus_uint32 silk_LSHIFT_uint_(opus_uint32 a, opus_int32 shift, char *file, int line){
637 opus_uint32 ret; 637 opus_uint32 ret;
638 ret = a << shift; 638 ret = a << shift;
639 if ( (shift < 0) || ((opus_int64)ret != ((opus_int64)a) << shift)) 639 if ( (shift < 0) || ((opus_int64)ret != ((opus_int64)a) << shift))
@@ -648,7 +648,7 @@ static inline opus_uint32 silk_LSHIFT_uint_(opus_uint32 a, opus_int32 shift, cha
648 648
649#undef silk_RSHIFT8 649#undef silk_RSHIFT8
650#define silk_RSHITF8(a,b) silk_RSHIFT8_((a), (b), __FILE__, __LINE__) 650#define silk_RSHITF8(a,b) silk_RSHIFT8_((a), (b), __FILE__, __LINE__)
651static inline opus_int8 silk_RSHIFT8_(opus_int8 a, opus_int32 shift, char *file, int line){ 651static OPUS_INLINE opus_int8 silk_RSHIFT8_(opus_int8 a, opus_int32 shift, char *file, int line){
652 if ( (shift < 0) || (shift>=8) ) 652 if ( (shift < 0) || (shift>=8) )
653 { 653 {
654 fprintf (stderr, "silk_RSHITF8(%d, %d) in %s: line %d\n", a, shift, file, line); 654 fprintf (stderr, "silk_RSHITF8(%d, %d) in %s: line %d\n", a, shift, file, line);
@@ -661,7 +661,7 @@ static inline opus_int8 silk_RSHIFT8_(opus_int8 a, opus_int32 shift, char *file,
661 661
662#undef silk_RSHIFT16 662#undef silk_RSHIFT16
663#define silk_RSHITF16(a,b) silk_RSHIFT16_((a), (b), __FILE__, __LINE__) 663#define silk_RSHITF16(a,b) silk_RSHIFT16_((a), (b), __FILE__, __LINE__)
664static inline opus_int16 silk_RSHIFT16_(opus_int16 a, opus_int32 shift, char *file, int line){ 664static OPUS_INLINE opus_int16 silk_RSHIFT16_(opus_int16 a, opus_int32 shift, char *file, int line){
665 if ( (shift < 0) || (shift>=16) ) 665 if ( (shift < 0) || (shift>=16) )
666 { 666 {
667 fprintf (stderr, "silk_RSHITF16(%d, %d) in %s: line %d\n", a, shift, file, line); 667 fprintf (stderr, "silk_RSHITF16(%d, %d) in %s: line %d\n", a, shift, file, line);
@@ -674,7 +674,7 @@ static inline opus_int16 silk_RSHIFT16_(opus_int16 a, opus_int32 shift, char *fi
674 674
675#undef silk_RSHIFT32 675#undef silk_RSHIFT32
676#define silk_RSHIFT32(a,b) silk_RSHIFT32_((a), (b), __FILE__, __LINE__) 676#define silk_RSHIFT32(a,b) silk_RSHIFT32_((a), (b), __FILE__, __LINE__)
677static inline opus_int32 silk_RSHIFT32_(opus_int32 a, opus_int32 shift, char *file, int line){ 677static OPUS_INLINE opus_int32 silk_RSHIFT32_(opus_int32 a, opus_int32 shift, char *file, int line){
678 if ( (shift < 0) || (shift>=32) ) 678 if ( (shift < 0) || (shift>=32) )
679 { 679 {
680 fprintf (stderr, "silk_RSHITF32(%d, %d) in %s: line %d\n", a, shift, file, line); 680 fprintf (stderr, "silk_RSHITF32(%d, %d) in %s: line %d\n", a, shift, file, line);
@@ -687,7 +687,7 @@ static inline opus_int32 silk_RSHIFT32_(opus_int32 a, opus_int32 shift, char *fi
687 687
688#undef silk_RSHIFT64 688#undef silk_RSHIFT64
689#define silk_RSHIFT64(a,b) silk_RSHIFT64_((a), (b), __FILE__, __LINE__) 689#define silk_RSHIFT64(a,b) silk_RSHIFT64_((a), (b), __FILE__, __LINE__)
690static inline opus_int64 silk_RSHIFT64_(opus_int64 a, opus_int64 shift, char *file, int line){ 690static OPUS_INLINE opus_int64 silk_RSHIFT64_(opus_int64 a, opus_int64 shift, char *file, int line){
691 if ( (shift < 0) || (shift>=64) ) 691 if ( (shift < 0) || (shift>=64) )
692 { 692 {
693 fprintf (stderr, "silk_RSHITF64(%lld, %lld) in %s: line %d\n", (long long)a, (long long)shift, file, line); 693 fprintf (stderr, "silk_RSHITF64(%lld, %lld) in %s: line %d\n", (long long)a, (long long)shift, file, line);
@@ -700,7 +700,7 @@ static inline opus_int64 silk_RSHIFT64_(opus_int64 a, opus_int64 shift, char *fi
700 700
701#undef silk_RSHIFT_uint 701#undef silk_RSHIFT_uint
702#define silk_RSHIFT_uint(a,b) silk_RSHIFT_uint_((a), (b), __FILE__, __LINE__) 702#define silk_RSHIFT_uint(a,b) silk_RSHIFT_uint_((a), (b), __FILE__, __LINE__)
703static inline opus_uint32 silk_RSHIFT_uint_(opus_uint32 a, opus_int32 shift, char *file, int line){ 703static OPUS_INLINE opus_uint32 silk_RSHIFT_uint_(opus_uint32 a, opus_int32 shift, char *file, int line){
704 if ( (shift < 0) || (shift>32) ) 704 if ( (shift < 0) || (shift>32) )
705 { 705 {
706 fprintf (stderr, "silk_RSHIFT_uint(%u, %d) in %s: line %d\n", a, shift, file, line); 706 fprintf (stderr, "silk_RSHIFT_uint(%u, %d) in %s: line %d\n", a, shift, file, line);
@@ -713,7 +713,7 @@ static inline opus_uint32 silk_RSHIFT_uint_(opus_uint32 a, opus_int32 shift, cha
713 713
714#undef silk_ADD_LSHIFT 714#undef silk_ADD_LSHIFT
715#define silk_ADD_LSHIFT(a,b,c) silk_ADD_LSHIFT_((a), (b), (c), __FILE__, __LINE__) 715#define silk_ADD_LSHIFT(a,b,c) silk_ADD_LSHIFT_((a), (b), (c), __FILE__, __LINE__)
716static inline int silk_ADD_LSHIFT_(int a, int b, int shift, char *file, int line){ 716static OPUS_INLINE int silk_ADD_LSHIFT_(int a, int b, int shift, char *file, int line){
717 opus_int16 ret; 717 opus_int16 ret;
718 ret = a + (b << shift); 718 ret = a + (b << shift);
719 if ( (shift < 0) || (shift>15) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) ) 719 if ( (shift < 0) || (shift>15) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
@@ -728,7 +728,7 @@ static inline int silk_ADD_LSHIFT_(int a, int b, int shift, char *file, int line
728 728
729#undef silk_ADD_LSHIFT32 729#undef silk_ADD_LSHIFT32
730#define silk_ADD_LSHIFT32(a,b,c) silk_ADD_LSHIFT32_((a), (b), (c), __FILE__, __LINE__) 730#define silk_ADD_LSHIFT32(a,b,c) silk_ADD_LSHIFT32_((a), (b), (c), __FILE__, __LINE__)
731static inline opus_int32 silk_ADD_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){ 731static OPUS_INLINE opus_int32 silk_ADD_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
732 opus_int32 ret; 732 opus_int32 ret;
733 ret = a + (b << shift); 733 ret = a + (b << shift);
734 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) ) 734 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
@@ -743,7 +743,7 @@ static inline opus_int32 silk_ADD_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int
743 743
744#undef silk_ADD_LSHIFT_uint 744#undef silk_ADD_LSHIFT_uint
745#define silk_ADD_LSHIFT_uint(a,b,c) silk_ADD_LSHIFT_uint_((a), (b), (c), __FILE__, __LINE__) 745#define silk_ADD_LSHIFT_uint(a,b,c) silk_ADD_LSHIFT_uint_((a), (b), (c), __FILE__, __LINE__)
746static inline opus_uint32 silk_ADD_LSHIFT_uint_(opus_uint32 a, opus_uint32 b, opus_int32 shift, char *file, int line){ 746static OPUS_INLINE opus_uint32 silk_ADD_LSHIFT_uint_(opus_uint32 a, opus_uint32 b, opus_int32 shift, char *file, int line){
747 opus_uint32 ret; 747 opus_uint32 ret;
748 ret = a + (b << shift); 748 ret = a + (b << shift);
749 if ( (shift < 0) || (shift>32) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) ) 749 if ( (shift < 0) || (shift>32) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
@@ -758,7 +758,7 @@ static inline opus_uint32 silk_ADD_LSHIFT_uint_(opus_uint32 a, opus_uint32 b, op
758 758
759#undef silk_ADD_RSHIFT 759#undef silk_ADD_RSHIFT
760#define silk_ADD_RSHIFT(a,b,c) silk_ADD_RSHIFT_((a), (b), (c), __FILE__, __LINE__) 760#define silk_ADD_RSHIFT(a,b,c) silk_ADD_RSHIFT_((a), (b), (c), __FILE__, __LINE__)
761static inline int silk_ADD_RSHIFT_(int a, int b, int shift, char *file, int line){ 761static OPUS_INLINE int silk_ADD_RSHIFT_(int a, int b, int shift, char *file, int line){
762 opus_int16 ret; 762 opus_int16 ret;
763 ret = a + (b >> shift); 763 ret = a + (b >> shift);
764 if ( (shift < 0) || (shift>15) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) ) 764 if ( (shift < 0) || (shift>15) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
@@ -773,7 +773,7 @@ static inline int silk_ADD_RSHIFT_(int a, int b, int shift, char *file, int line
773 773
774#undef silk_ADD_RSHIFT32 774#undef silk_ADD_RSHIFT32
775#define silk_ADD_RSHIFT32(a,b,c) silk_ADD_RSHIFT32_((a), (b), (c), __FILE__, __LINE__) 775#define silk_ADD_RSHIFT32(a,b,c) silk_ADD_RSHIFT32_((a), (b), (c), __FILE__, __LINE__)
776static inline opus_int32 silk_ADD_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){ 776static OPUS_INLINE opus_int32 silk_ADD_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
777 opus_int32 ret; 777 opus_int32 ret;
778 ret = a + (b >> shift); 778 ret = a + (b >> shift);
779 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) ) 779 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
@@ -788,7 +788,7 @@ static inline opus_int32 silk_ADD_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int
788 788
789#undef silk_ADD_RSHIFT_uint 789#undef silk_ADD_RSHIFT_uint
790#define silk_ADD_RSHIFT_uint(a,b,c) silk_ADD_RSHIFT_uint_((a), (b), (c), __FILE__, __LINE__) 790#define silk_ADD_RSHIFT_uint(a,b,c) silk_ADD_RSHIFT_uint_((a), (b), (c), __FILE__, __LINE__)
791static inline opus_uint32 silk_ADD_RSHIFT_uint_(opus_uint32 a, opus_uint32 b, opus_int32 shift, char *file, int line){ 791static OPUS_INLINE opus_uint32 silk_ADD_RSHIFT_uint_(opus_uint32 a, opus_uint32 b, opus_int32 shift, char *file, int line){
792 opus_uint32 ret; 792 opus_uint32 ret;
793 ret = a + (b >> shift); 793 ret = a + (b >> shift);
794 if ( (shift < 0) || (shift>32) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) ) 794 if ( (shift < 0) || (shift>32) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
@@ -803,7 +803,7 @@ static inline opus_uint32 silk_ADD_RSHIFT_uint_(opus_uint32 a, opus_uint32 b, op
803 803
804#undef silk_SUB_LSHIFT32 804#undef silk_SUB_LSHIFT32
805#define silk_SUB_LSHIFT32(a,b,c) silk_SUB_LSHIFT32_((a), (b), (c), __FILE__, __LINE__) 805#define silk_SUB_LSHIFT32(a,b,c) silk_SUB_LSHIFT32_((a), (b), (c), __FILE__, __LINE__)
806static inline opus_int32 silk_SUB_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){ 806static OPUS_INLINE opus_int32 silk_SUB_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
807 opus_int32 ret; 807 opus_int32 ret;
808 ret = a - (b << shift); 808 ret = a - (b << shift);
809 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a - (((opus_int64)b) << shift)) ) 809 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a - (((opus_int64)b) << shift)) )
@@ -818,7 +818,7 @@ static inline opus_int32 silk_SUB_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int
818 818
819#undef silk_SUB_RSHIFT32 819#undef silk_SUB_RSHIFT32
820#define silk_SUB_RSHIFT32(a,b,c) silk_SUB_RSHIFT32_((a), (b), (c), __FILE__, __LINE__) 820#define silk_SUB_RSHIFT32(a,b,c) silk_SUB_RSHIFT32_((a), (b), (c), __FILE__, __LINE__)
821static inline opus_int32 silk_SUB_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){ 821static OPUS_INLINE opus_int32 silk_SUB_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
822 opus_int32 ret; 822 opus_int32 ret;
823 ret = a - (b >> shift); 823 ret = a - (b >> shift);
824 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a - (((opus_int64)b) >> shift)) ) 824 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a - (((opus_int64)b) >> shift)) )
@@ -833,7 +833,7 @@ static inline opus_int32 silk_SUB_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int
833 833
834#undef silk_RSHIFT_ROUND 834#undef silk_RSHIFT_ROUND
835#define silk_RSHIFT_ROUND(a,b) silk_RSHIFT_ROUND_((a), (b), __FILE__, __LINE__) 835#define silk_RSHIFT_ROUND(a,b) silk_RSHIFT_ROUND_((a), (b), __FILE__, __LINE__)
836static inline opus_int32 silk_RSHIFT_ROUND_(opus_int32 a, opus_int32 shift, char *file, int line){ 836static OPUS_INLINE opus_int32 silk_RSHIFT_ROUND_(opus_int32 a, opus_int32 shift, char *file, int line){
837 opus_int32 ret; 837 opus_int32 ret;
838 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1; 838 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
839 /* the marco definition can't handle a shift of zero */ 839 /* the marco definition can't handle a shift of zero */
@@ -849,7 +849,7 @@ static inline opus_int32 silk_RSHIFT_ROUND_(opus_int32 a, opus_int32 shift, char
849 849
850#undef silk_RSHIFT_ROUND64 850#undef silk_RSHIFT_ROUND64
851#define silk_RSHIFT_ROUND64(a,b) silk_RSHIFT_ROUND64_((a), (b), __FILE__, __LINE__) 851#define silk_RSHIFT_ROUND64(a,b) silk_RSHIFT_ROUND64_((a), (b), __FILE__, __LINE__)
852static inline opus_int64 silk_RSHIFT_ROUND64_(opus_int64 a, opus_int32 shift, char *file, int line){ 852static OPUS_INLINE opus_int64 silk_RSHIFT_ROUND64_(opus_int64 a, opus_int32 shift, char *file, int line){
853 opus_int64 ret; 853 opus_int64 ret;
854 /* the marco definition can't handle a shift of zero */ 854 /* the marco definition can't handle a shift of zero */
855 if ( (shift <= 0) || (shift>=64) ) 855 if ( (shift <= 0) || (shift>=64) )
@@ -865,14 +865,14 @@ static inline opus_int64 silk_RSHIFT_ROUND64_(opus_int64 a, opus_int32 shift, ch
865 865
866/* silk_abs is used on floats also, so doesn't work... */ 866/* silk_abs is used on floats also, so doesn't work... */
867/*#undef silk_abs 867/*#undef silk_abs
868static inline opus_int32 silk_abs(opus_int32 a){ 868static OPUS_INLINE opus_int32 silk_abs(opus_int32 a){
869 silk_assert(a != 0x80000000); 869 silk_assert(a != 0x80000000);
870 return (((a) > 0) ? (a) : -(a)); // Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN 870 return (((a) > 0) ? (a) : -(a)); // Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN
871}*/ 871}*/
872 872
873#undef silk_abs_int64 873#undef silk_abs_int64
874#define silk_abs_int64(a) silk_abs_int64_((a), __FILE__, __LINE__) 874#define silk_abs_int64(a) silk_abs_int64_((a), __FILE__, __LINE__)
875static inline opus_int64 silk_abs_int64_(opus_int64 a, char *file, int line){ 875static OPUS_INLINE opus_int64 silk_abs_int64_(opus_int64 a, char *file, int line){
876 if ( a == silk_int64_MIN ) 876 if ( a == silk_int64_MIN )
877 { 877 {
878 fprintf (stderr, "silk_abs_int64(%lld) in %s: line %d\n", (long long)a, file, line); 878 fprintf (stderr, "silk_abs_int64(%lld) in %s: line %d\n", (long long)a, file, line);
@@ -885,7 +885,7 @@ static inline opus_int64 silk_abs_int64_(opus_int64 a, char *file, int line){
885 885
886#undef silk_abs_int32 886#undef silk_abs_int32
887#define silk_abs_int32(a) silk_abs_int32_((a), __FILE__, __LINE__) 887#define silk_abs_int32(a) silk_abs_int32_((a), __FILE__, __LINE__)
888static inline opus_int32 silk_abs_int32_(opus_int32 a, char *file, int line){ 888static OPUS_INLINE opus_int32 silk_abs_int32_(opus_int32 a, char *file, int line){
889 if ( a == silk_int32_MIN ) 889 if ( a == silk_int32_MIN )
890 { 890 {
891 fprintf (stderr, "silk_abs_int32(%d) in %s: line %d\n", a, file, line); 891 fprintf (stderr, "silk_abs_int32(%d) in %s: line %d\n", a, file, line);
@@ -898,7 +898,7 @@ static inline opus_int32 silk_abs_int32_(opus_int32 a, char *file, int line){
898 898
899#undef silk_CHECK_FIT8 899#undef silk_CHECK_FIT8
900#define silk_CHECK_FIT8(a) silk_CHECK_FIT8_((a), __FILE__, __LINE__) 900#define silk_CHECK_FIT8(a) silk_CHECK_FIT8_((a), __FILE__, __LINE__)
901static inline opus_int8 silk_CHECK_FIT8_( opus_int64 a, char *file, int line ){ 901static OPUS_INLINE opus_int8 silk_CHECK_FIT8_( opus_int64 a, char *file, int line ){
902 opus_int8 ret; 902 opus_int8 ret;
903 ret = (opus_int8)a; 903 ret = (opus_int8)a;
904 if ( (opus_int64)ret != a ) 904 if ( (opus_int64)ret != a )
@@ -913,7 +913,7 @@ static inline opus_int8 silk_CHECK_FIT8_( opus_int64 a, char *file, int line ){
913 913
914#undef silk_CHECK_FIT16 914#undef silk_CHECK_FIT16
915#define silk_CHECK_FIT16(a) silk_CHECK_FIT16_((a), __FILE__, __LINE__) 915#define silk_CHECK_FIT16(a) silk_CHECK_FIT16_((a), __FILE__, __LINE__)
916static inline opus_int16 silk_CHECK_FIT16_( opus_int64 a, char *file, int line ){ 916static OPUS_INLINE opus_int16 silk_CHECK_FIT16_( opus_int64 a, char *file, int line ){
917 opus_int16 ret; 917 opus_int16 ret;
918 ret = (opus_int16)a; 918 ret = (opus_int16)a;
919 if ( (opus_int64)ret != a ) 919 if ( (opus_int64)ret != a )
@@ -928,7 +928,7 @@ static inline opus_int16 silk_CHECK_FIT16_( opus_int64 a, char *file, int line )
928 928
929#undef silk_CHECK_FIT32 929#undef silk_CHECK_FIT32
930#define silk_CHECK_FIT32(a) silk_CHECK_FIT32_((a), __FILE__, __LINE__) 930#define silk_CHECK_FIT32(a) silk_CHECK_FIT32_((a), __FILE__, __LINE__)
931static inline opus_int32 silk_CHECK_FIT32_( opus_int64 a, char *file, int line ){ 931static OPUS_INLINE opus_int32 silk_CHECK_FIT32_( opus_int64 a, char *file, int line ){
932 opus_int32 ret; 932 opus_int32 ret;
933 ret = (opus_int32)a; 933 ret = (opus_int32)a;
934 if ( (opus_int64)ret != a ) 934 if ( (opus_int64)ret != a )
diff --git a/lib/rbcodec/codecs/libopus/silk/NLSF2A.c b/lib/rbcodec/codecs/libopus/silk/NLSF2A.c
index f9a09b0d5f..b1c559ea68 100644
--- a/lib/rbcodec/codecs/libopus/silk/NLSF2A.c
+++ b/lib/rbcodec/codecs/libopus/silk/NLSF2A.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -41,7 +41,7 @@ POSSIBILITY OF SUCH DAMAGE.
41#define QA 16 41#define QA 16
42 42
43/* helper function for NLSF2A(..) */ 43/* helper function for NLSF2A(..) */
44static inline void silk_NLSF2A_find_poly( 44static OPUS_INLINE void silk_NLSF2A_find_poly(
45 opus_int32 *out, /* O intermediate polynomial, QA [dd+1] */ 45 opus_int32 *out, /* O intermediate polynomial, QA [dd+1] */
46 const opus_int32 *cLSF, /* I vector of interleaved 2*cos(LSFs), QA [d] */ 46 const opus_int32 *cLSF, /* I vector of interleaved 2*cos(LSFs), QA [d] */
47 opus_int dd /* I polynomial order (= 1/2 * filter order) */ 47 opus_int dd /* I polynomial order (= 1/2 * filter order) */
diff --git a/lib/rbcodec/codecs/libopus/silk/NLSF_VQ_weights_laroia.c b/lib/rbcodec/codecs/libopus/silk/NLSF_VQ_weights_laroia.c
index bd5f52d2b3..04894c59ab 100644
--- a/lib/rbcodec/codecs/libopus/silk/NLSF_VQ_weights_laroia.c
+++ b/lib/rbcodec/codecs/libopus/silk/NLSF_VQ_weights_laroia.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/NLSF_decode.c b/lib/rbcodec/codecs/libopus/silk/NLSF_decode.c
index 5845c37452..9f715060b8 100644
--- a/lib/rbcodec/codecs/libopus/silk/NLSF_decode.c
+++ b/lib/rbcodec/codecs/libopus/silk/NLSF_decode.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE.
32#include "main.h" 32#include "main.h"
33 33
34/* Predictive dequantizer for NLSF residuals */ 34/* Predictive dequantizer for NLSF residuals */
35static inline void silk_NLSF_residual_dequant( /* O Returns RD value in Q30 */ 35static OPUS_INLINE void silk_NLSF_residual_dequant( /* O Returns RD value in Q30 */
36 opus_int16 x_Q10[], /* O Output [ order ] */ 36 opus_int16 x_Q10[], /* O Output [ order ] */
37 const opus_int8 indices[], /* I Quantization indices [ order ] */ 37 const opus_int8 indices[], /* I Quantization indices [ order ] */
38 const opus_uint8 pred_coef_Q8[], /* I Backward predictor coefs [ order ] */ 38 const opus_uint8 pred_coef_Q8[], /* I Backward predictor coefs [ order ] */
diff --git a/lib/rbcodec/codecs/libopus/silk/NLSF_stabilize.c b/lib/rbcodec/codecs/libopus/silk/NLSF_stabilize.c
index e732992282..1fa1ea379b 100644
--- a/lib/rbcodec/codecs/libopus/silk/NLSF_stabilize.c
+++ b/lib/rbcodec/codecs/libopus/silk/NLSF_stabilize.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/NLSF_unpack.c b/lib/rbcodec/codecs/libopus/silk/NLSF_unpack.c
index d84eb8121d..17bd23f752 100644
--- a/lib/rbcodec/codecs/libopus/silk/NLSF_unpack.c
+++ b/lib/rbcodec/codecs/libopus/silk/NLSF_unpack.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/PLC.c b/lib/rbcodec/codecs/libopus/silk/PLC.c
index d9fda74555..01f40014c4 100644
--- a/lib/rbcodec/codecs/libopus/silk/PLC.c
+++ b/lib/rbcodec/codecs/libopus/silk/PLC.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -38,12 +38,12 @@ static const opus_int16 HARM_ATT_Q15[NB_ATT] = { 32440, 31130 }; /*
38static const opus_int16 PLC_RAND_ATTENUATE_V_Q15[NB_ATT] = { 31130, 26214 }; /* 0.95, 0.8 */ 38static const opus_int16 PLC_RAND_ATTENUATE_V_Q15[NB_ATT] = { 31130, 26214 }; /* 0.95, 0.8 */
39static const opus_int16 PLC_RAND_ATTENUATE_UV_Q15[NB_ATT] = { 32440, 29491 }; /* 0.99, 0.9 */ 39static const opus_int16 PLC_RAND_ATTENUATE_UV_Q15[NB_ATT] = { 32440, 29491 }; /* 0.99, 0.9 */
40 40
41static inline void silk_PLC_update( 41static OPUS_INLINE void silk_PLC_update(
42 silk_decoder_state *psDec, /* I/O Decoder state */ 42 silk_decoder_state *psDec, /* I/O Decoder state */
43 silk_decoder_control *psDecCtrl /* I/O Decoder control */ 43 silk_decoder_control *psDecCtrl /* I/O Decoder control */
44); 44);
45 45
46static inline void silk_PLC_conceal( 46static OPUS_INLINE void silk_PLC_conceal(
47 silk_decoder_state *psDec, /* I/O Decoder state */ 47 silk_decoder_state *psDec, /* I/O Decoder state */
48 silk_decoder_control *psDecCtrl, /* I/O Decoder control */ 48 silk_decoder_control *psDecCtrl, /* I/O Decoder control */
49 opus_int16 frame[] /* O LPC residual signal */ 49 opus_int16 frame[] /* O LPC residual signal */
@@ -92,7 +92,7 @@ void silk_PLC(
92/**************************************************/ 92/**************************************************/
93/* Update state of PLC */ 93/* Update state of PLC */
94/**************************************************/ 94/**************************************************/
95static inline void silk_PLC_update( 95static OPUS_INLINE void silk_PLC_update(
96 silk_decoder_state *psDec, /* I/O Decoder state */ 96 silk_decoder_state *psDec, /* I/O Decoder state */
97 silk_decoder_control *psDecCtrl /* I/O Decoder control */ 97 silk_decoder_control *psDecCtrl /* I/O Decoder control */
98) 98)
@@ -165,7 +165,7 @@ static inline void silk_PLC_update(
165 psPLC->nb_subfr = psDec->nb_subfr; 165 psPLC->nb_subfr = psDec->nb_subfr;
166} 166}
167 167
168static inline void silk_PLC_conceal( 168static OPUS_INLINE void silk_PLC_conceal(
169 silk_decoder_state *psDec, /* I/O Decoder state */ 169 silk_decoder_state *psDec, /* I/O Decoder state */
170 silk_decoder_control *psDecCtrl, /* I/O Decoder control */ 170 silk_decoder_control *psDecCtrl, /* I/O Decoder control */
171 opus_int16 frame[] /* O LPC residual signal */ 171 opus_int16 frame[] /* O LPC residual signal */
diff --git a/lib/rbcodec/codecs/libopus/silk/PLC.h b/lib/rbcodec/codecs/libopus/silk/PLC.h
index 172c63ae83..f1e2eccc69 100644
--- a/lib/rbcodec/codecs/libopus/silk/PLC.h
+++ b/lib/rbcodec/codecs/libopus/silk/PLC.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/SigProc_FIX.h b/lib/rbcodec/codecs/libopus/silk/SigProc_FIX.h
index 64c0b0eaec..1b58057910 100644
--- a/lib/rbcodec/codecs/libopus/silk/SigProc_FIX.h
+++ b/lib/rbcodec/codecs/libopus/silk/SigProc_FIX.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -227,7 +227,8 @@ void silk_autocorr(
227 opus_int *scale, /* O Scaling of the correlation vector */ 227 opus_int *scale, /* O Scaling of the correlation vector */
228 const opus_int16 *inputData, /* I Input data to correlate */ 228 const opus_int16 *inputData, /* I Input data to correlate */
229 const opus_int inputDataSize, /* I Length of input */ 229 const opus_int inputDataSize, /* I Length of input */
230 const opus_int correlationCount /* I Number of correlation taps to compute */ 230 const opus_int correlationCount, /* I Number of correlation taps to compute */
231 int arch /* I Run-time architecture */
231); 232);
232 233
233void silk_decode_pitch( 234void silk_decode_pitch(
@@ -249,7 +250,8 @@ opus_int silk_pitch_analysis_core( /* O Voicing estimate: 0
249 const opus_int search_thres2_Q13, /* I Final threshold for lag candidates 0 - 1 */ 250 const opus_int search_thres2_Q13, /* I Final threshold for lag candidates 0 - 1 */
250 const opus_int Fs_kHz, /* I Sample frequency (kHz) */ 251 const opus_int Fs_kHz, /* I Sample frequency (kHz) */
251 const opus_int complexity, /* I Complexity setting, 0-2, where 2 is highest */ 252 const opus_int complexity, /* I Complexity setting, 0-2, where 2 is highest */
252 const opus_int nb_subfr /* I number of 5 ms subframes */ 253 const opus_int nb_subfr, /* I number of 5 ms subframes */
254 int arch /* I Run-time architecture */
253); 255);
254 256
255/* Compute Normalized Line Spectral Frequencies (NLSFs) from whitening filter coefficients */ 257/* Compute Normalized Line Spectral Frequencies (NLSFs) from whitening filter coefficients */
@@ -309,7 +311,8 @@ void silk_burg_modified(
309 const opus_int32 minInvGain_Q30, /* I Inverse of max prediction gain */ 311 const opus_int32 minInvGain_Q30, /* I Inverse of max prediction gain */
310 const opus_int subfr_length, /* I Input signal subframe length (incl. D preceding samples) */ 312 const opus_int subfr_length, /* I Input signal subframe length (incl. D preceding samples) */
311 const opus_int nb_subfr, /* I Number of subframes stacked in x */ 313 const opus_int nb_subfr, /* I Number of subframes stacked in x */
312 const opus_int D /* I Order */ 314 const opus_int D, /* I Order */
315 int arch /* I Run-time architecture */
313); 316);
314 317
315/* Copy and multiply a vector by a constant */ 318/* Copy and multiply a vector by a constant */
@@ -358,8 +361,8 @@ opus_int64 silk_inner_prod16_aligned_64(
358/* Rotate a32 right by 'rot' bits. Negative rot values result in rotating 361/* Rotate a32 right by 'rot' bits. Negative rot values result in rotating
359 left. Output is 32bit int. 362 left. Output is 32bit int.
360 Note: contemporary compilers recognize the C expression below and 363 Note: contemporary compilers recognize the C expression below and
361 compile it into a 'ror' instruction if available. No need for inline ASM! */ 364 compile it into a 'ror' instruction if available. No need for OPUS_INLINE ASM! */
362static inline opus_int32 silk_ROR32( opus_int32 a32, opus_int rot ) 365static OPUS_INLINE opus_int32 silk_ROR32( opus_int32 a32, opus_int rot )
363{ 366{
364 opus_uint32 x = (opus_uint32) a32; 367 opus_uint32 x = (opus_uint32) a32;
365 opus_uint32 r = (opus_uint32) rot; 368 opus_uint32 r = (opus_uint32) rot;
@@ -508,37 +511,37 @@ static inline opus_int32 silk_ROR32( opus_int32 a32, opus_int rot )
508#define SILK_FIX_CONST( C, Q ) ((opus_int32)((C) * ((opus_int64)1 << (Q)) + 0.5)) 511#define SILK_FIX_CONST( C, Q ) ((opus_int32)((C) * ((opus_int64)1 << (Q)) + 0.5))
509 512
510/* silk_min() versions with typecast in the function call */ 513/* silk_min() versions with typecast in the function call */
511static inline opus_int silk_min_int(opus_int a, opus_int b) 514static OPUS_INLINE opus_int silk_min_int(opus_int a, opus_int b)
512{ 515{
513 return (((a) < (b)) ? (a) : (b)); 516 return (((a) < (b)) ? (a) : (b));
514} 517}
515static inline opus_int16 silk_min_16(opus_int16 a, opus_int16 b) 518static OPUS_INLINE opus_int16 silk_min_16(opus_int16 a, opus_int16 b)
516{ 519{
517 return (((a) < (b)) ? (a) : (b)); 520 return (((a) < (b)) ? (a) : (b));
518} 521}
519static inline opus_int32 silk_min_32(opus_int32 a, opus_int32 b) 522static OPUS_INLINE opus_int32 silk_min_32(opus_int32 a, opus_int32 b)
520{ 523{
521 return (((a) < (b)) ? (a) : (b)); 524 return (((a) < (b)) ? (a) : (b));
522} 525}
523static inline opus_int64 silk_min_64(opus_int64 a, opus_int64 b) 526static OPUS_INLINE opus_int64 silk_min_64(opus_int64 a, opus_int64 b)
524{ 527{
525 return (((a) < (b)) ? (a) : (b)); 528 return (((a) < (b)) ? (a) : (b));
526} 529}
527 530
528/* silk_min() versions with typecast in the function call */ 531/* silk_min() versions with typecast in the function call */
529static inline opus_int silk_max_int(opus_int a, opus_int b) 532static OPUS_INLINE opus_int silk_max_int(opus_int a, opus_int b)
530{ 533{
531 return (((a) > (b)) ? (a) : (b)); 534 return (((a) > (b)) ? (a) : (b));
532} 535}
533static inline opus_int16 silk_max_16(opus_int16 a, opus_int16 b) 536static OPUS_INLINE opus_int16 silk_max_16(opus_int16 a, opus_int16 b)
534{ 537{
535 return (((a) > (b)) ? (a) : (b)); 538 return (((a) > (b)) ? (a) : (b));
536} 539}
537static inline opus_int32 silk_max_32(opus_int32 a, opus_int32 b) 540static OPUS_INLINE opus_int32 silk_max_32(opus_int32 a, opus_int32 b)
538{ 541{
539 return (((a) > (b)) ? (a) : (b)); 542 return (((a) > (b)) ? (a) : (b));
540} 543}
541static inline opus_int64 silk_max_64(opus_int64 a, opus_int64 b) 544static OPUS_INLINE opus_int64 silk_max_64(opus_int64 a, opus_int64 b)
542{ 545{
543 return (((a) > (b)) ? (a) : (b)); 546 return (((a) > (b)) ? (a) : (b));
544} 547}
@@ -576,11 +579,11 @@ static inline opus_int64 silk_max_64(opus_int64 a, opus_int64 b)
576#include "MacroCount.h" 579#include "MacroCount.h"
577#include "MacroDebug.h" 580#include "MacroDebug.h"
578 581
579#ifdef ARMv4_ASM 582#ifdef OPUS_ARM_INLINE_ASM
580#include "arm/SigProc_FIX_armv4.h" 583#include "arm/SigProc_FIX_armv4.h"
581#endif 584#endif
582 585
583#ifdef ARMv5E_ASM 586#ifdef OPUS_ARM_INLINE_EDSP
584#include "arm/SigProc_FIX_armv5e.h" 587#include "arm/SigProc_FIX_armv5e.h"
585#endif 588#endif
586 589
diff --git a/lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv4.h b/lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv4.h
index d69573e3d4..ff62b1e5d6 100644
--- a/lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv4.h
+++ b/lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv4.h
@@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
30#define SILK_SIGPROC_FIX_ARMv4_H 30#define SILK_SIGPROC_FIX_ARMv4_H
31 31
32#undef silk_MLA 32#undef silk_MLA
33static inline opus_int32 silk_MLA_armv4(opus_int32 a, opus_int32 b, 33static OPUS_INLINE opus_int32 silk_MLA_armv4(opus_int32 a, opus_int32 b,
34 opus_int32 c) 34 opus_int32 c)
35{ 35{
36 opus_int32 res; 36 opus_int32 res;
diff --git a/lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv5e.h b/lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv5e.h
index 81a6324f65..617a09cab1 100644
--- a/lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv5e.h
+++ b/lib/rbcodec/codecs/libopus/silk/arm/SigProc_FIX_armv5e.h
@@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
30#define SILK_SIGPROC_FIX_ARMv5E_H 30#define SILK_SIGPROC_FIX_ARMv5E_H
31 31
32#undef silk_SMULTT 32#undef silk_SMULTT
33static inline opus_int32 silk_SMULTT_armv5e(opus_int32 a, opus_int32 b) 33static OPUS_INLINE opus_int32 silk_SMULTT_armv5e(opus_int32 a, opus_int32 b)
34{ 34{
35 opus_int32 res; 35 opus_int32 res;
36 __asm__( 36 __asm__(
@@ -44,7 +44,7 @@ static inline opus_int32 silk_SMULTT_armv5e(opus_int32 a, opus_int32 b)
44#define silk_SMULTT(a, b) (silk_SMULTT_armv5e(a, b)) 44#define silk_SMULTT(a, b) (silk_SMULTT_armv5e(a, b))
45 45
46#undef silk_SMLATT 46#undef silk_SMLATT
47static inline opus_int32 silk_SMLATT_armv5e(opus_int32 a, opus_int32 b, 47static OPUS_INLINE opus_int32 silk_SMLATT_armv5e(opus_int32 a, opus_int32 b,
48 opus_int32 c) 48 opus_int32 c)
49{ 49{
50 opus_int32 res; 50 opus_int32 res;
diff --git a/lib/rbcodec/codecs/libopus/silk/arm/macros_armv4.h b/lib/rbcodec/codecs/libopus/silk/arm/macros_armv4.h
index 58df6c2e2b..3f30e97288 100644
--- a/lib/rbcodec/codecs/libopus/silk/arm/macros_armv4.h
+++ b/lib/rbcodec/codecs/libopus/silk/arm/macros_armv4.h
@@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
30 30
31/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */ 31/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */
32#undef silk_SMULWB 32#undef silk_SMULWB
33static inline opus_int32 silk_SMULWB_armv4(opus_int32 a, opus_int16 b) 33static OPUS_INLINE opus_int32 silk_SMULWB_armv4(opus_int32 a, opus_int16 b)
34{ 34{
35 unsigned rd_lo; 35 unsigned rd_lo;
36 int rd_hi; 36 int rd_hi;
@@ -50,7 +50,7 @@ static inline opus_int32 silk_SMULWB_armv4(opus_int32 a, opus_int16 b)
50 50
51/* (a32 * (b32 >> 16)) >> 16 */ 51/* (a32 * (b32 >> 16)) >> 16 */
52#undef silk_SMULWT 52#undef silk_SMULWT
53static inline opus_int32 silk_SMULWT_armv4(opus_int32 a, opus_int32 b) 53static OPUS_INLINE opus_int32 silk_SMULWT_armv4(opus_int32 a, opus_int32 b)
54{ 54{
55 unsigned rd_lo; 55 unsigned rd_lo;
56 int rd_hi; 56 int rd_hi;
@@ -70,7 +70,7 @@ static inline opus_int32 silk_SMULWT_armv4(opus_int32 a, opus_int32 b)
70 70
71/* (a32 * b32) >> 16 */ 71/* (a32 * b32) >> 16 */
72#undef silk_SMULWW 72#undef silk_SMULWW
73static inline opus_int32 silk_SMULWW_armv4(opus_int32 a, opus_int32 b) 73static OPUS_INLINE opus_int32 silk_SMULWW_armv4(opus_int32 a, opus_int32 b)
74{ 74{
75 unsigned rd_lo; 75 unsigned rd_lo;
76 int rd_hi; 76 int rd_hi;
@@ -85,7 +85,7 @@ static inline opus_int32 silk_SMULWW_armv4(opus_int32 a, opus_int32 b)
85#define silk_SMULWW(a, b) (silk_SMULWW_armv4(a, b)) 85#define silk_SMULWW(a, b) (silk_SMULWW_armv4(a, b))
86 86
87#undef silk_SMLAWW 87#undef silk_SMLAWW
88static inline opus_int32 silk_SMLAWW_armv4(opus_int32 a, opus_int32 b, 88static OPUS_INLINE opus_int32 silk_SMLAWW_armv4(opus_int32 a, opus_int32 b,
89 opus_int32 c) 89 opus_int32 c)
90{ 90{
91 unsigned rd_lo; 91 unsigned rd_lo;
diff --git a/lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h b/lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h
index 63b1e30f48..aad4117e46 100644
--- a/lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h
+++ b/lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h
@@ -31,7 +31,7 @@ POSSIBILITY OF SUCH DAMAGE.
31 31
32/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */ 32/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */
33#undef silk_SMULWB 33#undef silk_SMULWB
34static inline opus_int32 silk_SMULWB_armv5e(opus_int32 a, opus_int16 b) 34static OPUS_INLINE opus_int32 silk_SMULWB_armv5e(opus_int32 a, opus_int16 b)
35{ 35{
36 int res; 36 int res;
37 __asm__( 37 __asm__(
@@ -46,7 +46,7 @@ static inline opus_int32 silk_SMULWB_armv5e(opus_int32 a, opus_int16 b)
46 46
47/* a32 + (b32 * (opus_int32)((opus_int16)(c32))) >> 16 output have to be 32bit int */ 47/* a32 + (b32 * (opus_int32)((opus_int16)(c32))) >> 16 output have to be 32bit int */
48#undef silk_SMLAWB 48#undef silk_SMLAWB
49static inline opus_int32 silk_SMLAWB_armv5e(opus_int32 a, opus_int32 b, 49static OPUS_INLINE opus_int32 silk_SMLAWB_armv5e(opus_int32 a, opus_int32 b,
50 opus_int16 c) 50 opus_int16 c)
51{ 51{
52 int res; 52 int res;
@@ -62,7 +62,7 @@ static inline opus_int32 silk_SMLAWB_armv5e(opus_int32 a, opus_int32 b,
62 62
63/* (a32 * (b32 >> 16)) >> 16 */ 63/* (a32 * (b32 >> 16)) >> 16 */
64#undef silk_SMULWT 64#undef silk_SMULWT
65static inline opus_int32 silk_SMULWT_armv5e(opus_int32 a, opus_int32 b) 65static OPUS_INLINE opus_int32 silk_SMULWT_armv5e(opus_int32 a, opus_int32 b)
66{ 66{
67 int res; 67 int res;
68 __asm__( 68 __asm__(
@@ -77,7 +77,7 @@ static inline opus_int32 silk_SMULWT_armv5e(opus_int32 a, opus_int32 b)
77 77
78/* a32 + (b32 * (c32 >> 16)) >> 16 */ 78/* a32 + (b32 * (c32 >> 16)) >> 16 */
79#undef silk_SMLAWT 79#undef silk_SMLAWT
80static inline opus_int32 silk_SMLAWT_armv5e(opus_int32 a, opus_int32 b, 80static OPUS_INLINE opus_int32 silk_SMLAWT_armv5e(opus_int32 a, opus_int32 b,
81 opus_int32 c) 81 opus_int32 c)
82{ 82{
83 int res; 83 int res;
@@ -93,7 +93,7 @@ static inline opus_int32 silk_SMLAWT_armv5e(opus_int32 a, opus_int32 b,
93 93
94/* (opus_int32)((opus_int16)(a3))) * (opus_int32)((opus_int16)(b32)) output have to be 32bit int */ 94/* (opus_int32)((opus_int16)(a3))) * (opus_int32)((opus_int16)(b32)) output have to be 32bit int */
95#undef silk_SMULBB 95#undef silk_SMULBB
96static inline opus_int32 silk_SMULBB_armv5e(opus_int32 a, opus_int32 b) 96static OPUS_INLINE opus_int32 silk_SMULBB_armv5e(opus_int32 a, opus_int32 b)
97{ 97{
98 int res; 98 int res;
99 __asm__( 99 __asm__(
@@ -108,7 +108,7 @@ static inline opus_int32 silk_SMULBB_armv5e(opus_int32 a, opus_int32 b)
108 108
109/* a32 + (opus_int32)((opus_int16)(b32)) * (opus_int32)((opus_int16)(c32)) output have to be 32bit int */ 109/* a32 + (opus_int32)((opus_int16)(b32)) * (opus_int32)((opus_int16)(c32)) output have to be 32bit int */
110#undef silk_SMLABB 110#undef silk_SMLABB
111static inline opus_int32 silk_SMLABB_armv5e(opus_int32 a, opus_int32 b, 111static OPUS_INLINE opus_int32 silk_SMLABB_armv5e(opus_int32 a, opus_int32 b,
112 opus_int32 c) 112 opus_int32 c)
113{ 113{
114 int res; 114 int res;
@@ -124,7 +124,7 @@ static inline opus_int32 silk_SMLABB_armv5e(opus_int32 a, opus_int32 b,
124 124
125/* (opus_int32)((opus_int16)(a32)) * (b32 >> 16) */ 125/* (opus_int32)((opus_int16)(a32)) * (b32 >> 16) */
126#undef silk_SMULBT 126#undef silk_SMULBT
127static inline opus_int32 silk_SMULBT_armv5e(opus_int32 a, opus_int32 b) 127static OPUS_INLINE opus_int32 silk_SMULBT_armv5e(opus_int32 a, opus_int32 b)
128{ 128{
129 int res; 129 int res;
130 __asm__( 130 __asm__(
@@ -139,7 +139,7 @@ static inline opus_int32 silk_SMULBT_armv5e(opus_int32 a, opus_int32 b)
139 139
140/* a32 + (opus_int32)((opus_int16)(b32)) * (c32 >> 16) */ 140/* a32 + (opus_int32)((opus_int16)(b32)) * (c32 >> 16) */
141#undef silk_SMLABT 141#undef silk_SMLABT
142static inline opus_int32 silk_SMLABT_armv5e(opus_int32 a, opus_int32 b, 142static OPUS_INLINE opus_int32 silk_SMLABT_armv5e(opus_int32 a, opus_int32 b,
143 opus_int32 c) 143 opus_int32 c)
144{ 144{
145 int res; 145 int res;
@@ -155,7 +155,7 @@ static inline opus_int32 silk_SMLABT_armv5e(opus_int32 a, opus_int32 b,
155 155
156/* add/subtract with output saturated */ 156/* add/subtract with output saturated */
157#undef silk_ADD_SAT32 157#undef silk_ADD_SAT32
158static inline opus_int32 silk_ADD_SAT32_armv5e(opus_int32 a, opus_int32 b) 158static OPUS_INLINE opus_int32 silk_ADD_SAT32_armv5e(opus_int32 a, opus_int32 b)
159{ 159{
160 int res; 160 int res;
161 __asm__( 161 __asm__(
@@ -169,7 +169,7 @@ static inline opus_int32 silk_ADD_SAT32_armv5e(opus_int32 a, opus_int32 b)
169#define silk_ADD_SAT32(a, b) (silk_ADD_SAT32_armv5e(a, b)) 169#define silk_ADD_SAT32(a, b) (silk_ADD_SAT32_armv5e(a, b))
170 170
171#undef silk_SUB_SAT32 171#undef silk_SUB_SAT32
172static inline opus_int32 silk_SUB_SAT32_armv5e(opus_int32 a, opus_int32 b) 172static OPUS_INLINE opus_int32 silk_SUB_SAT32_armv5e(opus_int32 a, opus_int32 b)
173{ 173{
174 int res; 174 int res;
175 __asm__( 175 __asm__(
@@ -183,7 +183,7 @@ static inline opus_int32 silk_SUB_SAT32_armv5e(opus_int32 a, opus_int32 b)
183#define silk_SUB_SAT32(a, b) (silk_SUB_SAT32_armv5e(a, b)) 183#define silk_SUB_SAT32(a, b) (silk_SUB_SAT32_armv5e(a, b))
184 184
185#undef silk_CLZ16 185#undef silk_CLZ16
186static inline opus_int32 silk_CLZ16_armv5(opus_int16 in16) 186static OPUS_INLINE opus_int32 silk_CLZ16_armv5(opus_int16 in16)
187{ 187{
188 int res; 188 int res;
189 __asm__( 189 __asm__(
@@ -197,7 +197,7 @@ static inline opus_int32 silk_CLZ16_armv5(opus_int16 in16)
197#define silk_CLZ16(in16) (silk_CLZ16_armv5(in16)) 197#define silk_CLZ16(in16) (silk_CLZ16_armv5(in16))
198 198
199#undef silk_CLZ32 199#undef silk_CLZ32
200static inline opus_int32 silk_CLZ32_armv5(opus_int32 in32) 200static OPUS_INLINE opus_int32 silk_CLZ32_armv5(opus_int32 in32)
201{ 201{
202 int res; 202 int res;
203 __asm__( 203 __asm__(
diff --git a/lib/rbcodec/codecs/libopus/silk/bwexpander.c b/lib/rbcodec/codecs/libopus/silk/bwexpander.c
index a0157b0606..2eb4456695 100644
--- a/lib/rbcodec/codecs/libopus/silk/bwexpander.c
+++ b/lib/rbcodec/codecs/libopus/silk/bwexpander.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/bwexpander_32.c b/lib/rbcodec/codecs/libopus/silk/bwexpander_32.c
index 80628cd7a7..d0010f73df 100644
--- a/lib/rbcodec/codecs/libopus/silk/bwexpander_32.c
+++ b/lib/rbcodec/codecs/libopus/silk/bwexpander_32.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/code_signs.c b/lib/rbcodec/codecs/libopus/silk/code_signs.c
index f9173278ab..561043c739 100644
--- a/lib/rbcodec/codecs/libopus/silk/code_signs.c
+++ b/lib/rbcodec/codecs/libopus/silk/code_signs.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/control.h b/lib/rbcodec/codecs/libopus/silk/control.h
index 77530f8feb..747e5426a0 100644
--- a/lib/rbcodec/codecs/libopus/silk/control.h
+++ b/lib/rbcodec/codecs/libopus/silk/control.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -92,6 +92,9 @@ typedef struct {
92 /* I: Opus encoder is allowing us to switch bandwidth */ 92 /* I: Opus encoder is allowing us to switch bandwidth */
93 opus_int opusCanSwitch; 93 opus_int opusCanSwitch;
94 94
95 /* I: Make frames as independent as possible (but still use LPC) */
96 opus_int reducedDependency;
97
95 /* O: Internal sampling rate used, in Hertz; 8000/12000/16000 */ 98 /* O: Internal sampling rate used, in Hertz; 8000/12000/16000 */
96 opus_int32 internalSampleRate; 99 opus_int32 internalSampleRate;
97 100
diff --git a/lib/rbcodec/codecs/libopus/silk/dec_API.c b/lib/rbcodec/codecs/libopus/silk/dec_API.c
index 5b6e518130..4cbcf71514 100644
--- a/lib/rbcodec/codecs/libopus/silk/dec_API.c
+++ b/lib/rbcodec/codecs/libopus/silk/dec_API.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -305,7 +305,7 @@ opus_int silk_Decode( /* O Returns error co
305 305
306 /* Set up pointers to temp buffers */ 306 /* Set up pointers to temp buffers */
307 ALLOC( samplesOut2_tmp, 307 ALLOC( samplesOut2_tmp,
308 decControl->nChannelsAPI == 2 ? *nSamplesOut : 0, opus_int16 ); 308 decControl->nChannelsAPI == 2 ? *nSamplesOut : ALLOC_NONE, opus_int16 );
309 if( decControl->nChannelsAPI == 2 ) { 309 if( decControl->nChannelsAPI == 2 ) {
310 resample_out_ptr = samplesOut2_tmp; 310 resample_out_ptr = samplesOut2_tmp;
311 } else { 311 } else {
diff --git a/lib/rbcodec/codecs/libopus/silk/decode_core.c b/lib/rbcodec/codecs/libopus/silk/decode_core.c
index b298389f07..87fbd5de9f 100644
--- a/lib/rbcodec/codecs/libopus/silk/decode_core.c
+++ b/lib/rbcodec/codecs/libopus/silk/decode_core.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/decode_frame.c b/lib/rbcodec/codecs/libopus/silk/decode_frame.c
index a9ad7928ef..abc00a3d54 100644
--- a/lib/rbcodec/codecs/libopus/silk/decode_frame.c
+++ b/lib/rbcodec/codecs/libopus/silk/decode_frame.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/decode_indices.c b/lib/rbcodec/codecs/libopus/silk/decode_indices.c
index f5a2665107..7afe5c26c1 100644
--- a/lib/rbcodec/codecs/libopus/silk/decode_indices.c
+++ b/lib/rbcodec/codecs/libopus/silk/decode_indices.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/decode_parameters.c b/lib/rbcodec/codecs/libopus/silk/decode_parameters.c
index fa72395c3b..e345b1dcef 100644
--- a/lib/rbcodec/codecs/libopus/silk/decode_parameters.c
+++ b/lib/rbcodec/codecs/libopus/silk/decode_parameters.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/decode_pitch.c b/lib/rbcodec/codecs/libopus/silk/decode_pitch.c
index f9e3e3bc2b..fedbc6a525 100644
--- a/lib/rbcodec/codecs/libopus/silk/decode_pitch.c
+++ b/lib/rbcodec/codecs/libopus/silk/decode_pitch.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/decode_pulses.c b/lib/rbcodec/codecs/libopus/silk/decode_pulses.c
index 2d8f28186f..e8a87c2ab7 100644
--- a/lib/rbcodec/codecs/libopus/silk/decode_pulses.c
+++ b/lib/rbcodec/codecs/libopus/silk/decode_pulses.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/decoder_set_fs.c b/lib/rbcodec/codecs/libopus/silk/decoder_set_fs.c
index de410797ae..eef0fd25e1 100644
--- a/lib/rbcodec/codecs/libopus/silk/decoder_set_fs.c
+++ b/lib/rbcodec/codecs/libopus/silk/decoder_set_fs.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/define.h b/lib/rbcodec/codecs/libopus/silk/define.h
index ee3a534b41..c47aca9f58 100644
--- a/lib/rbcodec/codecs/libopus/silk/define.h
+++ b/lib/rbcodec/codecs/libopus/silk/define.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/errors.h b/lib/rbcodec/codecs/libopus/silk/errors.h
index 00b67163c9..45070800f2 100644
--- a/lib/rbcodec/codecs/libopus/silk/errors.h
+++ b/lib/rbcodec/codecs/libopus/silk/errors.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/gain_quant.c b/lib/rbcodec/codecs/libopus/silk/gain_quant.c
index 47e747ee4a..ed084073b1 100644
--- a/lib/rbcodec/codecs/libopus/silk/gain_quant.c
+++ b/lib/rbcodec/codecs/libopus/silk/gain_quant.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/init_decoder.c b/lib/rbcodec/codecs/libopus/silk/init_decoder.c
index 68a20ae6b0..f887c67886 100644
--- a/lib/rbcodec/codecs/libopus/silk/init_decoder.c
+++ b/lib/rbcodec/codecs/libopus/silk/init_decoder.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/log2lin.c b/lib/rbcodec/codecs/libopus/silk/log2lin.c
index 50be565cb5..a692e009db 100644
--- a/lib/rbcodec/codecs/libopus/silk/log2lin.c
+++ b/lib/rbcodec/codecs/libopus/silk/log2lin.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -41,7 +41,9 @@ opus_int32 silk_log2lin(
41 41
42 if( inLog_Q7 < 0 ) { 42 if( inLog_Q7 < 0 ) {
43 return 0; 43 return 0;
44 } 44 } else if ( inLog_Q7 >= 3967 ) {
45 return silk_int32_MAX;
46 }
45 47
46 out = silk_LSHIFT( 1, silk_RSHIFT( inLog_Q7, 7 ) ); 48 out = silk_LSHIFT( 1, silk_RSHIFT( inLog_Q7, 7 ) );
47 frac_Q7 = inLog_Q7 & 0x7F; 49 frac_Q7 = inLog_Q7 & 0x7F;
diff --git a/lib/rbcodec/codecs/libopus/silk/macros.h b/lib/rbcodec/codecs/libopus/silk/macros.h
index 97f03c886a..482dc3c6eb 100644
--- a/lib/rbcodec/codecs/libopus/silk/macros.h
+++ b/lib/rbcodec/codecs/libopus/silk/macros.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -32,7 +32,10 @@ POSSIBILITY OF SUCH DAMAGE.
32#include "config.h" 32#include "config.h"
33#endif 33#endif
34 34
35/* This is an inline header file for general platform. */ 35#include "opus_types.h"
36#include "opus_defines.h"
37
38/* This is an OPUS_INLINE header file for general platform. */
36 39
37/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */ 40/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */
38#define silk_SMULWB(a32, b32) ((((a32) >> 16) * (opus_int32)((opus_int16)(b32))) + ((((a32) & 0x0000FFFF) * (opus_int32)((opus_int16)(b32))) >> 16)) 41#define silk_SMULWB(a32, b32) ((((a32) >> 16) * (opus_int32)((opus_int16)(b32))) + ((((a32) & 0x0000FFFF) * (opus_int32)((opus_int16)(b32))) >> 16))
@@ -78,12 +81,12 @@ POSSIBILITY OF SUCH DAMAGE.
78 81
79#include "ecintrin.h" 82#include "ecintrin.h"
80 83
81static inline opus_int32 silk_CLZ16(opus_int16 in16) 84static OPUS_INLINE opus_int32 silk_CLZ16(opus_int16 in16)
82{ 85{
83 return 32 - EC_ILOG(in16<<16|0x8000); 86 return 32 - EC_ILOG(in16<<16|0x8000);
84} 87}
85 88
86static inline opus_int32 silk_CLZ32(opus_int32 in32) 89static OPUS_INLINE opus_int32 silk_CLZ32(opus_int32 in32)
87{ 90{
88 return in32 ? 32 - EC_ILOG(in32) : 32; 91 return in32 ? 32 - EC_ILOG(in32) : 32;
89} 92}
@@ -100,15 +103,15 @@ static inline opus_int32 silk_CLZ32(opus_int32 in32)
100 (*((Matrix_base_adr) + ((row)+(M)*(column)))) 103 (*((Matrix_base_adr) + ((row)+(M)*(column))))
101#endif 104#endif
102 105
103#ifdef ARMv4_ASM 106#ifdef OPUS_ARM_INLINE_ASM
104#include "arm/macros_armv4.h" 107#include "arm/macros_armv4.h"
105#endif 108#endif
106 109
107#ifdef ARMv5E_ASM 110#ifdef OPUS_ARM_INLINE_EDSP
108#include "arm/macros_armv5e.h" 111#include "arm/macros_armv5e.h"
109#endif 112#endif
110 113
111#ifdef CF_ASM 114#ifdef OPUS_CF_INLINE_ASM
112#include "cf/macros_cf.h" 115#include "cf/macros_cf.h"
113#endif 116#endif
114 117
diff --git a/lib/rbcodec/codecs/libopus/silk/main.h b/lib/rbcodec/codecs/libopus/silk/main.h
index 376c77c8b3..2bdf89784d 100644
--- a/lib/rbcodec/codecs/libopus/silk/main.h
+++ b/lib/rbcodec/codecs/libopus/silk/main.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -204,6 +204,7 @@ void silk_quant_LTP_gains(
204 opus_int16 B_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (un)quantized LTP gains */ 204 opus_int16 B_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (un)quantized LTP gains */
205 opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook Index */ 205 opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook Index */
206 opus_int8 *periodicity_index, /* O Periodicity Index */ 206 opus_int8 *periodicity_index, /* O Periodicity Index */
207 opus_int32 *sum_gain_dB_Q7, /* I/O Cumulative max prediction gain */
207 const opus_int32 W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ], /* I Error Weights in Q18 */ 208 const opus_int32 W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ], /* I Error Weights in Q18 */
208 opus_int mu_Q9, /* I Mu value (R/D tradeoff) */ 209 opus_int mu_Q9, /* I Mu value (R/D tradeoff) */
209 opus_int lowComplexity, /* I Flag for low complexity */ 210 opus_int lowComplexity, /* I Flag for low complexity */
@@ -214,11 +215,14 @@ void silk_quant_LTP_gains(
214void silk_VQ_WMat_EC( 215void silk_VQ_WMat_EC(
215 opus_int8 *ind, /* O index of best codebook vector */ 216 opus_int8 *ind, /* O index of best codebook vector */
216 opus_int32 *rate_dist_Q14, /* O best weighted quant error + mu * rate */ 217 opus_int32 *rate_dist_Q14, /* O best weighted quant error + mu * rate */
218 opus_int *gain_Q7, /* O sum of absolute LTP coefficients */
217 const opus_int16 *in_Q14, /* I input vector to be quantized */ 219 const opus_int16 *in_Q14, /* I input vector to be quantized */
218 const opus_int32 *W_Q18, /* I weighting matrix */ 220 const opus_int32 *W_Q18, /* I weighting matrix */
219 const opus_int8 *cb_Q7, /* I codebook */ 221 const opus_int8 *cb_Q7, /* I codebook */
222 const opus_uint8 *cb_gain_Q7, /* I codebook effective gain */
220 const opus_uint8 *cl_Q5, /* I code length for each codebook vector */ 223 const opus_uint8 *cl_Q5, /* I code length for each codebook vector */
221 const opus_int mu_Q9, /* I tradeoff betw. weighted error and rate */ 224 const opus_int mu_Q9, /* I tradeoff betw. weighted error and rate */
225 const opus_int32 max_gain_Q7, /* I maximum sum of absolute LTP coefficients */
222 opus_int L /* I number of vectors in codebook */ 226 opus_int L /* I number of vectors in codebook */
223); 227);
224 228
diff --git a/lib/rbcodec/codecs/libopus/silk/pitch_est_defines.h b/lib/rbcodec/codecs/libopus/silk/pitch_est_defines.h
index 1e4440121b..e1e4b5d768 100644
--- a/lib/rbcodec/codecs/libopus/silk/pitch_est_defines.h
+++ b/lib/rbcodec/codecs/libopus/silk/pitch_est_defines.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/pitch_est_tables.c b/lib/rbcodec/codecs/libopus/silk/pitch_est_tables.c
index 38d6df4572..81a8bacaca 100644
--- a/lib/rbcodec/codecs/libopus/silk/pitch_est_tables.c
+++ b/lib/rbcodec/codecs/libopus/silk/pitch_est_tables.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler.c b/lib/rbcodec/codecs/libopus/silk/resampler.c
index 624cae00ed..374fbb3722 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler.c
+++ b/lib/rbcodec/codecs/libopus/silk/resampler.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler_private.h b/lib/rbcodec/codecs/libopus/silk/resampler_private.h
index 273f93e680..422a7d9d95 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler_private.h
+++ b/lib/rbcodec/codecs/libopus/silk/resampler_private.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler_private_AR2.c b/lib/rbcodec/codecs/libopus/silk/resampler_private_AR2.c
index 7377459159..5fff23714f 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler_private_AR2.c
+++ b/lib/rbcodec/codecs/libopus/silk/resampler_private_AR2.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler_private_IIR_FIR.c b/lib/rbcodec/codecs/libopus/silk/resampler_private_IIR_FIR.c
index ce9aff0907..c7b4f6ed5e 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler_private_IIR_FIR.c
+++ b/lib/rbcodec/codecs/libopus/silk/resampler_private_IIR_FIR.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -33,7 +33,7 @@ POSSIBILITY OF SUCH DAMAGE.
33#include "resampler_private.h" 33#include "resampler_private.h"
34#include "stack_alloc.h" 34#include "stack_alloc.h"
35 35
36static inline opus_int16 *silk_resampler_private_IIR_FIR_INTERPOL( 36static OPUS_INLINE opus_int16 *silk_resampler_private_IIR_FIR_INTERPOL(
37 opus_int16 *out, 37 opus_int16 *out,
38 opus_int16 *buf, 38 opus_int16 *buf,
39 opus_int32 max_index_Q16, 39 opus_int32 max_index_Q16,
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler_private_down_FIR.c b/lib/rbcodec/codecs/libopus/silk/resampler_private_down_FIR.c
index 163fedd818..783e42b356 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler_private_down_FIR.c
+++ b/lib/rbcodec/codecs/libopus/silk/resampler_private_down_FIR.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -33,7 +33,7 @@ POSSIBILITY OF SUCH DAMAGE.
33#include "resampler_private.h" 33#include "resampler_private.h"
34#include "stack_alloc.h" 34#include "stack_alloc.h"
35 35
36static inline opus_int16 *silk_resampler_private_down_FIR_INTERPOL( 36static OPUS_INLINE opus_int16 *silk_resampler_private_down_FIR_INTERPOL(
37 opus_int16 *out, 37 opus_int16 *out,
38 opus_int32 *buf, 38 opus_int32 *buf,
39 const opus_int16 *FIR_Coefs, 39 const opus_int16 *FIR_Coefs,
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler_private_up2_HQ.c b/lib/rbcodec/codecs/libopus/silk/resampler_private_up2_HQ.c
index e611d4206d..c7ec8de365 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler_private_up2_HQ.c
+++ b/lib/rbcodec/codecs/libopus/silk/resampler_private_up2_HQ.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler_rom.c b/lib/rbcodec/codecs/libopus/silk/resampler_rom.c
index edec0436e4..2d502706f9 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler_rom.c
+++ b/lib/rbcodec/codecs/libopus/silk/resampler_rom.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler_rom.h b/lib/rbcodec/codecs/libopus/silk/resampler_rom.h
index ffc7f5dabd..490b3388dc 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler_rom.h
+++ b/lib/rbcodec/codecs/libopus/silk/resampler_rom.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/resampler_structs.h b/lib/rbcodec/codecs/libopus/silk/resampler_structs.h
index cbcac20fe7..9e9457d11c 100644
--- a/lib/rbcodec/codecs/libopus/silk/resampler_structs.h
+++ b/lib/rbcodec/codecs/libopus/silk/resampler_structs.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/shell_coder.c b/lib/rbcodec/codecs/libopus/silk/shell_coder.c
index f402cc4328..9d6e1bb366 100644
--- a/lib/rbcodec/codecs/libopus/silk/shell_coder.c
+++ b/lib/rbcodec/codecs/libopus/silk/shell_coder.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -33,7 +33,7 @@ POSSIBILITY OF SUCH DAMAGE.
33 33
34/* shell coder; pulse-subframe length is hardcoded */ 34/* shell coder; pulse-subframe length is hardcoded */
35 35
36static inline void combine_pulses( 36static OPUS_INLINE void combine_pulses(
37 opus_int *out, /* O combined pulses vector [len] */ 37 opus_int *out, /* O combined pulses vector [len] */
38 const opus_int *in, /* I input vector [2 * len] */ 38 const opus_int *in, /* I input vector [2 * len] */
39 const opus_int len /* I number of OUTPUT samples */ 39 const opus_int len /* I number of OUTPUT samples */
@@ -46,7 +46,7 @@ static inline void combine_pulses(
46} 46}
47 47
48#if 0 48#if 0
49static inline void encode_split( 49static OPUS_INLINE void encode_split(
50 ec_enc *psRangeEnc, /* I/O compressor data structure */ 50 ec_enc *psRangeEnc, /* I/O compressor data structure */
51 const opus_int p_child1, /* I pulse amplitude of first child subframe */ 51 const opus_int p_child1, /* I pulse amplitude of first child subframe */
52 const opus_int p, /* I pulse amplitude of current subframe */ 52 const opus_int p, /* I pulse amplitude of current subframe */
@@ -59,7 +59,7 @@ static inline void encode_split(
59} 59}
60#endif 60#endif
61 61
62static inline void decode_split( 62static OPUS_INLINE void decode_split(
63 opus_int *p_child1, /* O pulse amplitude of first child subframe */ 63 opus_int *p_child1, /* O pulse amplitude of first child subframe */
64 opus_int *p_child2, /* O pulse amplitude of second child subframe */ 64 opus_int *p_child2, /* O pulse amplitude of second child subframe */
65 ec_dec *psRangeDec, /* I/O Compressor data structure */ 65 ec_dec *psRangeDec, /* I/O Compressor data structure */
diff --git a/lib/rbcodec/codecs/libopus/silk/sort.c b/lib/rbcodec/codecs/libopus/silk/sort.c
index b311e24c9f..2f9930d9ce 100644
--- a/lib/rbcodec/codecs/libopus/silk/sort.c
+++ b/lib/rbcodec/codecs/libopus/silk/sort.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -83,6 +83,7 @@ void silk_insertion_sort_increasing(
83 } 83 }
84 } 84 }
85} 85}
86#endif
86 87
87#ifdef FIXED_POINT 88#ifdef FIXED_POINT
88/* This function is only used by the fixed-point build */ 89/* This function is only used by the fixed-point build */
@@ -132,7 +133,6 @@ void silk_insertion_sort_decreasing_int16(
132 } 133 }
133} 134}
134#endif 135#endif
135#endif
136 136
137void silk_insertion_sort_increasing_all_values_int16( 137void silk_insertion_sort_increasing_all_values_int16(
138 opus_int16 *a, /* I/O Unsorted / Sorted vector */ 138 opus_int16 *a, /* I/O Unsorted / Sorted vector */
diff --git a/lib/rbcodec/codecs/libopus/silk/stereo_MS_to_LR.c b/lib/rbcodec/codecs/libopus/silk/stereo_MS_to_LR.c
index 22d61a5f1d..62521a4f35 100644
--- a/lib/rbcodec/codecs/libopus/silk/stereo_MS_to_LR.c
+++ b/lib/rbcodec/codecs/libopus/silk/stereo_MS_to_LR.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/stereo_decode_pred.c b/lib/rbcodec/codecs/libopus/silk/stereo_decode_pred.c
index 586b4d81df..56ba3925e8 100644
--- a/lib/rbcodec/codecs/libopus/silk/stereo_decode_pred.c
+++ b/lib/rbcodec/codecs/libopus/silk/stereo_decode_pred.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/structs.h b/lib/rbcodec/codecs/libopus/silk/structs.h
index 8828f44d03..1826b36a80 100644
--- a/lib/rbcodec/codecs/libopus/silk/structs.h
+++ b/lib/rbcodec/codecs/libopus/silk/structs.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -171,6 +171,7 @@ typedef struct {
171 opus_int32 pitchEstimationThreshold_Q16; /* Threshold for pitch estimator */ 171 opus_int32 pitchEstimationThreshold_Q16; /* Threshold for pitch estimator */
172 opus_int LTPQuantLowComplexity; /* Flag for low complexity LTP quantization */ 172 opus_int LTPQuantLowComplexity; /* Flag for low complexity LTP quantization */
173 opus_int mu_LTP_Q9; /* Rate-distortion tradeoff in LTP quantization */ 173 opus_int mu_LTP_Q9; /* Rate-distortion tradeoff in LTP quantization */
174 opus_int32 sum_log_gain_Q7; /* Cumulative max prediction gain */
174 opus_int NLSF_MSVQ_Survivors; /* Number of survivors in NLSF MSVQ */ 175 opus_int NLSF_MSVQ_Survivors; /* Number of survivors in NLSF MSVQ */
175 opus_int first_frame_after_reset; /* Flag for deactivating NLSF interpolation, pitch prediction */ 176 opus_int first_frame_after_reset; /* Flag for deactivating NLSF interpolation, pitch prediction */
176 opus_int controlled_since_last_payload; /* Flag for ensuring codec_control only runs once per packet */ 177 opus_int controlled_since_last_payload; /* Flag for ensuring codec_control only runs once per packet */
@@ -191,6 +192,8 @@ typedef struct {
191 SideInfoIndices indices; 192 SideInfoIndices indices;
192 opus_int8 pulses[ MAX_FRAME_LENGTH ]; 193 opus_int8 pulses[ MAX_FRAME_LENGTH ];
193 194
195 int arch;
196
194 /* Input/output buffering */ 197 /* Input/output buffering */
195 opus_int16 inputBuf[ MAX_FRAME_LENGTH + 2 ]; /* Buffer containing input signal */ 198 opus_int16 inputBuf[ MAX_FRAME_LENGTH + 2 ]; /* Buffer containing input signal */
196 opus_int inputBufIx; 199 opus_int inputBufIx;
diff --git a/lib/rbcodec/codecs/libopus/silk/sum_sqr_shift.c b/lib/rbcodec/codecs/libopus/silk/sum_sqr_shift.c
index 815489a4a6..12514c9917 100644
--- a/lib/rbcodec/codecs/libopus/silk/sum_sqr_shift.c
+++ b/lib/rbcodec/codecs/libopus/silk/sum_sqr_shift.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/table_LSF_cos.c b/lib/rbcodec/codecs/libopus/silk/table_LSF_cos.c
index 93a7039c15..ec9dc63927 100644
--- a/lib/rbcodec/codecs/libopus/silk/table_LSF_cos.c
+++ b/lib/rbcodec/codecs/libopus/silk/table_LSF_cos.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/tables.h b/lib/rbcodec/codecs/libopus/silk/tables.h
index 6e4b670647..a91431e854 100644
--- a/lib/rbcodec/codecs/libopus/silk/tables.h
+++ b/lib/rbcodec/codecs/libopus/silk/tables.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -78,6 +78,8 @@ extern const opus_uint8 * const silk_LTP_gain_iCDF_ptrs[ NB_LTP_CBKS ];
78extern const opus_uint8 * const silk_LTP_gain_BITS_Q5_ptrs[ NB_LTP_CBKS ]; /* 3 */ 78extern const opus_uint8 * const silk_LTP_gain_BITS_Q5_ptrs[ NB_LTP_CBKS ]; /* 3 */
79extern const opus_int16 silk_LTP_gain_middle_avg_RD_Q14; 79extern const opus_int16 silk_LTP_gain_middle_avg_RD_Q14;
80extern const opus_int8 * const silk_LTP_vq_ptrs_Q7[ NB_LTP_CBKS ]; /* 168 */ 80extern const opus_int8 * const silk_LTP_vq_ptrs_Q7[ NB_LTP_CBKS ]; /* 168 */
81extern const opus_uint8 * const silk_LTP_vq_gain_ptrs_Q7[NB_LTP_CBKS];
82
81extern const opus_int8 silk_LTP_vq_sizes[ NB_LTP_CBKS ]; /* 3 */ 83extern const opus_int8 silk_LTP_vq_sizes[ NB_LTP_CBKS ]; /* 3 */
82 84
83extern const opus_uint8 silk_LTPscale_iCDF[ 3 ]; /* 4 */ 85extern const opus_uint8 silk_LTPscale_iCDF[ 3 ]; /* 4 */
diff --git a/lib/rbcodec/codecs/libopus/silk/tables_LTP.c b/lib/rbcodec/codecs/libopus/silk/tables_LTP.c
index d16a511cc2..ea518652b8 100644
--- a/lib/rbcodec/codecs/libopus/silk/tables_LTP.c
+++ b/lib/rbcodec/codecs/libopus/silk/tables_LTP.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -51,6 +51,7 @@ static const opus_uint8 silk_LTP_gain_iCDF_2[32] = {
51 24, 20, 16, 12, 9, 5, 2, 0 51 24, 20, 16, 12, 9, 5, 2, 0
52}; 52};
53 53
54#if 0
54const opus_int16 silk_LTP_gain_middle_avg_RD_Q14 = 12304; 55const opus_int16 silk_LTP_gain_middle_avg_RD_Q14 = 12304;
55 56
56static const opus_uint8 silk_LTP_gain_BITS_Q5_0[8] = { 57static const opus_uint8 silk_LTP_gain_BITS_Q5_0[8] = {
@@ -68,6 +69,7 @@ static const opus_uint8 silk_LTP_gain_BITS_Q5_2[32] = {
68 160, 160, 166, 166, 173, 173, 182, 192, 69 160, 160, 166, 166, 173, 173, 182, 192,
69 182, 192, 192, 192, 205, 192, 205, 224 70 182, 192, 192, 192, 205, 192, 205, 224
70}; 71};
72#endif
71 73
72const opus_uint8 * const silk_LTP_gain_iCDF_ptrs[NB_LTP_CBKS] = { 74const opus_uint8 * const silk_LTP_gain_iCDF_ptrs[NB_LTP_CBKS] = {
73 silk_LTP_gain_iCDF_0, 75 silk_LTP_gain_iCDF_0,
@@ -75,11 +77,13 @@ const opus_uint8 * const silk_LTP_gain_iCDF_ptrs[NB_LTP_CBKS] = {
75 silk_LTP_gain_iCDF_2 77 silk_LTP_gain_iCDF_2
76}; 78};
77 79
80#if 0
78const opus_uint8 * const silk_LTP_gain_BITS_Q5_ptrs[NB_LTP_CBKS] = { 81const opus_uint8 * const silk_LTP_gain_BITS_Q5_ptrs[NB_LTP_CBKS] = {
79 silk_LTP_gain_BITS_Q5_0, 82 silk_LTP_gain_BITS_Q5_0,
80 silk_LTP_gain_BITS_Q5_1, 83 silk_LTP_gain_BITS_Q5_1,
81 silk_LTP_gain_BITS_Q5_2 84 silk_LTP_gain_BITS_Q5_2
82}; 85};
86#endif
83 87
84static const opus_int8 silk_LTP_gain_vq_0[8][5] = 88static const opus_int8 silk_LTP_gain_vq_0[8][5] =
85{ 89{
@@ -267,6 +271,32 @@ const opus_int8 * const silk_LTP_vq_ptrs_Q7[NB_LTP_CBKS] = {
267 (opus_int8 *)&silk_LTP_gain_vq_2[0][0] 271 (opus_int8 *)&silk_LTP_gain_vq_2[0][0]
268}; 272};
269 273
274#if 0
275/* Maximum frequency-dependent response of the pitch taps above,
276 computed as max(abs(freqz(taps))) */
277static const opus_uint8 silk_LTP_gain_vq_0_gain[8] = {
278 46, 2, 90, 87, 93, 91, 82, 98
279};
280
281static const opus_uint8 silk_LTP_gain_vq_1_gain[16] = {
282 109, 120, 118, 12, 113, 115, 117, 119,
283 99, 59, 87, 111, 63, 111, 112, 80
284};
285
286static const opus_uint8 silk_LTP_gain_vq_2_gain[32] = {
287 126, 124, 125, 124, 129, 121, 126, 23,
288 132, 127, 127, 127, 126, 127, 122, 133,
289 130, 134, 101, 118, 119, 145, 126, 86,
290 124, 120, 123, 119, 170, 173, 107, 109
291};
292
293const opus_uint8 * const silk_LTP_vq_gain_ptrs_Q7[NB_LTP_CBKS] = {
294 &silk_LTP_gain_vq_0_gain[0],
295 &silk_LTP_gain_vq_1_gain[0],
296 &silk_LTP_gain_vq_2_gain[0]
297};
298
270const opus_int8 silk_LTP_vq_sizes[NB_LTP_CBKS] = { 299const opus_int8 silk_LTP_vq_sizes[NB_LTP_CBKS] = {
271 8, 16, 32 300 8, 16, 32
272}; 301};
302#endif
diff --git a/lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_NB_MB.c b/lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_NB_MB.c
index 492ed61d75..8c59d207aa 100644
--- a/lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_NB_MB.c
+++ b/lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_NB_MB.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_WB.c b/lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_WB.c
index 0806d32f9e..50af87eb2e 100644
--- a/lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_WB.c
+++ b/lib/rbcodec/codecs/libopus/silk/tables_NLSF_CB_WB.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/tables_gain.c b/lib/rbcodec/codecs/libopus/silk/tables_gain.c
index 8cf7d643b2..37e41d890c 100644
--- a/lib/rbcodec/codecs/libopus/silk/tables_gain.c
+++ b/lib/rbcodec/codecs/libopus/silk/tables_gain.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/tables_other.c b/lib/rbcodec/codecs/libopus/silk/tables_other.c
index e4204f9366..398686bf26 100644
--- a/lib/rbcodec/codecs/libopus/silk/tables_other.c
+++ b/lib/rbcodec/codecs/libopus/silk/tables_other.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/tables_pitch_lag.c b/lib/rbcodec/codecs/libopus/silk/tables_pitch_lag.c
index 97869b7331..e80cc59a27 100644
--- a/lib/rbcodec/codecs/libopus/silk/tables_pitch_lag.c
+++ b/lib/rbcodec/codecs/libopus/silk/tables_pitch_lag.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/tables_pulses_per_block.c b/lib/rbcodec/codecs/libopus/silk/tables_pulses_per_block.c
index 91060572d1..c7c01c8893 100644
--- a/lib/rbcodec/codecs/libopus/silk/tables_pulses_per_block.c
+++ b/lib/rbcodec/codecs/libopus/silk/tables_pulses_per_block.c
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
diff --git a/lib/rbcodec/codecs/libopus/silk/typedef.h b/lib/rbcodec/codecs/libopus/silk/typedef.h
index 073aa28cc7..97b7e709be 100644
--- a/lib/rbcodec/codecs/libopus/silk/typedef.h
+++ b/lib/rbcodec/codecs/libopus/silk/typedef.h
@@ -8,7 +8,7 @@ this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright 8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the 9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution. 10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the 11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote 12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written 13products derived from this software without specific prior written
14permission. 14permission.
@@ -29,6 +29,7 @@ POSSIBILITY OF SUCH DAMAGE.
29#define SILK_TYPEDEF_H 29#define SILK_TYPEDEF_H
30 30
31#include "opus_types.h" 31#include "opus_types.h"
32#include "opus_defines.h"
32 33
33#ifndef FIXED_POINT 34#ifndef FIXED_POINT
34# include <float.h> 35# include <float.h>
@@ -63,7 +64,7 @@ POSSIBILITY OF SUCH DAMAGE.
63#ifdef __GNUC__ 64#ifdef __GNUC__
64__attribute__((noreturn)) 65__attribute__((noreturn))
65#endif 66#endif
66static inline void _silk_fatal(const char *str, const char *file, int line) 67static OPUS_INLINE void _silk_fatal(const char *str, const char *file, int line)
67{ 68{
68 fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str); 69 fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str);
69 abort(); 70 abort();