diff options
Diffstat (limited to 'lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c')
-rw-r--r-- | lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c b/lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c index 7d4458a637..9bfeba0f5f 100644 --- a/lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c +++ b/lib/rbcodec/codecs/libopus/silk/LPC_analysis_filter.c | |||
@@ -12,7 +12,7 @@ documentation and/or other materials provided with the distribution. | |||
12 | names of specific contributors, may be used to endorse or promote | 12 | names of specific contributors, may be used to endorse or promote |
13 | products derived from this software without specific prior written | 13 | products derived from this software without specific prior written |
14 | permission. | 14 | permission. |
15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | 18 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
@@ -26,10 +26,11 @@ POSSIBILITY OF SUCH DAMAGE. | |||
26 | ***********************************************************************/ | 26 | ***********************************************************************/ |
27 | 27 | ||
28 | #ifdef HAVE_CONFIG_H | 28 | #ifdef HAVE_CONFIG_H |
29 | #include "opus_config.h" | 29 | #include "config.h" |
30 | #endif | 30 | #endif |
31 | 31 | ||
32 | #include "SigProc_FIX.h" | 32 | #include "SigProc_FIX.h" |
33 | #include "celt_lpc.h" | ||
33 | 34 | ||
34 | /*******************************************/ | 35 | /*******************************************/ |
35 | /* LPC analysis filter */ | 36 | /* LPC analysis filter */ |
@@ -46,14 +47,33 @@ void silk_LPC_analysis_filter( | |||
46 | const opus_int32 d /* I Filter order */ | 47 | const opus_int32 d /* I Filter order */ |
47 | ) | 48 | ) |
48 | { | 49 | { |
49 | opus_int ix, j; | 50 | opus_int j; |
51 | #ifdef FIXED_POINT | ||
52 | opus_int16 mem[SILK_MAX_ORDER_LPC]; | ||
53 | opus_int16 num[SILK_MAX_ORDER_LPC]; | ||
54 | #else | ||
55 | int ix; | ||
50 | opus_int32 out32_Q12, out32; | 56 | opus_int32 out32_Q12, out32; |
51 | const opus_int16 *in_ptr; | 57 | const opus_int16 *in_ptr; |
58 | #endif | ||
52 | 59 | ||
53 | silk_assert( d >= 6 ); | 60 | silk_assert( d >= 6 ); |
54 | silk_assert( (d & 1) == 0 ); | 61 | silk_assert( (d & 1) == 0 ); |
55 | silk_assert( d <= len ); | 62 | silk_assert( d <= len ); |
56 | 63 | ||
64 | #ifdef FIXED_POINT | ||
65 | silk_assert( d <= SILK_MAX_ORDER_LPC ); | ||
66 | for ( j = 0; j < d; j++ ) { | ||
67 | num[ j ] = -B[ j ]; | ||
68 | } | ||
69 | for (j=0;j<d;j++) { | ||
70 | mem[ j ] = in[ d - j - 1 ]; | ||
71 | } | ||
72 | celt_fir( in + d, num, out + d, len - d, d, mem ); | ||
73 | for ( j = 0; j < d; j++ ) { | ||
74 | out[ j ] = 0; | ||
75 | } | ||
76 | #else | ||
57 | for( ix = d; ix < len; ix++ ) { | 77 | for( ix = d; ix < len; ix++ ) { |
58 | in_ptr = &in[ ix - 1 ]; | 78 | in_ptr = &in[ ix - 1 ]; |
59 | 79 | ||
@@ -82,4 +102,5 @@ void silk_LPC_analysis_filter( | |||
82 | 102 | ||
83 | /* Set first d output samples to zero */ | 103 | /* Set first d output samples to zero */ |
84 | silk_memset( out, 0, d * sizeof( opus_int16 ) ); | 104 | silk_memset( out, 0, d * sizeof( opus_int16 ) ); |
105 | #endif | ||
85 | } | 106 | } |