Index: webrtc/modules/audio_coding/codecs/opus/opus/src/silk/float/LPC_analysis_filter_FLP.c |
diff --git a/webrtc/modules/audio_coding/codecs/opus/opus/src/silk/float/LPC_analysis_filter_FLP.c b/webrtc/modules/audio_coding/codecs/opus/opus/src/silk/float/LPC_analysis_filter_FLP.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cae89a0a182cad44946421cc88f89524653bfd5c |
--- /dev/null |
+++ b/webrtc/modules/audio_coding/codecs/opus/opus/src/silk/float/LPC_analysis_filter_FLP.c |
@@ -0,0 +1,249 @@ |
+/*********************************************************************** |
+Copyright (c) 2006-2011, Skype Limited. All rights reserved. |
+Redistribution and use in source and binary forms, with or without |
+modification, are permitted provided that the following conditions |
+are met: |
+- Redistributions of source code must retain the above copyright notice, |
+this list of conditions and the following disclaimer. |
+- Redistributions in binary form must reproduce the above copyright |
+notice, this list of conditions and the following disclaimer in the |
+documentation and/or other materials provided with the distribution. |
+- Neither the name of Internet Society, IETF or IETF Trust, nor the |
+names of specific contributors, may be used to endorse or promote |
+products derived from this software without specific prior written |
+permission. |
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
+POSSIBILITY OF SUCH DAMAGE. |
+***********************************************************************/ |
+ |
+#ifdef HAVE_CONFIG_H |
+#include "config.h" |
+#endif |
+ |
+#include <stdlib.h> |
+#include "main_FLP.h" |
+ |
+/************************************************/ |
+/* LPC analysis filter */ |
+/* NB! State is kept internally and the */ |
+/* filter always starts with zero state */ |
+/* first Order output samples are set to zero */ |
+/************************************************/ |
+ |
+/* 16th order LPC analysis filter, does not write first 16 samples */ |
+static OPUS_INLINE void silk_LPC_analysis_filter16_FLP( |
+ silk_float r_LPC[], /* O LPC residual signal */ |
+ const silk_float PredCoef[], /* I LPC coefficients */ |
+ const silk_float s[], /* I Input signal */ |
+ const opus_int length /* I Length of input signal */ |
+) |
+{ |
+ opus_int ix; |
+ silk_float LPC_pred; |
+ const silk_float *s_ptr; |
+ |
+ for( ix = 16; ix < length; ix++ ) { |
+ s_ptr = &s[ix - 1]; |
+ |
+ /* short-term prediction */ |
+ LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] + |
+ s_ptr[ -1 ] * PredCoef[ 1 ] + |
+ s_ptr[ -2 ] * PredCoef[ 2 ] + |
+ s_ptr[ -3 ] * PredCoef[ 3 ] + |
+ s_ptr[ -4 ] * PredCoef[ 4 ] + |
+ s_ptr[ -5 ] * PredCoef[ 5 ] + |
+ s_ptr[ -6 ] * PredCoef[ 6 ] + |
+ s_ptr[ -7 ] * PredCoef[ 7 ] + |
+ s_ptr[ -8 ] * PredCoef[ 8 ] + |
+ s_ptr[ -9 ] * PredCoef[ 9 ] + |
+ s_ptr[ -10 ] * PredCoef[ 10 ] + |
+ s_ptr[ -11 ] * PredCoef[ 11 ] + |
+ s_ptr[ -12 ] * PredCoef[ 12 ] + |
+ s_ptr[ -13 ] * PredCoef[ 13 ] + |
+ s_ptr[ -14 ] * PredCoef[ 14 ] + |
+ s_ptr[ -15 ] * PredCoef[ 15 ]; |
+ |
+ /* prediction error */ |
+ r_LPC[ix] = s_ptr[ 1 ] - LPC_pred; |
+ } |
+} |
+ |
+/* 12th order LPC analysis filter, does not write first 12 samples */ |
+static OPUS_INLINE void silk_LPC_analysis_filter12_FLP( |
+ silk_float r_LPC[], /* O LPC residual signal */ |
+ const silk_float PredCoef[], /* I LPC coefficients */ |
+ const silk_float s[], /* I Input signal */ |
+ const opus_int length /* I Length of input signal */ |
+) |
+{ |
+ opus_int ix; |
+ silk_float LPC_pred; |
+ const silk_float *s_ptr; |
+ |
+ for( ix = 12; ix < length; ix++ ) { |
+ s_ptr = &s[ix - 1]; |
+ |
+ /* short-term prediction */ |
+ LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] + |
+ s_ptr[ -1 ] * PredCoef[ 1 ] + |
+ s_ptr[ -2 ] * PredCoef[ 2 ] + |
+ s_ptr[ -3 ] * PredCoef[ 3 ] + |
+ s_ptr[ -4 ] * PredCoef[ 4 ] + |
+ s_ptr[ -5 ] * PredCoef[ 5 ] + |
+ s_ptr[ -6 ] * PredCoef[ 6 ] + |
+ s_ptr[ -7 ] * PredCoef[ 7 ] + |
+ s_ptr[ -8 ] * PredCoef[ 8 ] + |
+ s_ptr[ -9 ] * PredCoef[ 9 ] + |
+ s_ptr[ -10 ] * PredCoef[ 10 ] + |
+ s_ptr[ -11 ] * PredCoef[ 11 ]; |
+ |
+ /* prediction error */ |
+ r_LPC[ix] = s_ptr[ 1 ] - LPC_pred; |
+ } |
+} |
+ |
+/* 10th order LPC analysis filter, does not write first 10 samples */ |
+static OPUS_INLINE void silk_LPC_analysis_filter10_FLP( |
+ silk_float r_LPC[], /* O LPC residual signal */ |
+ const silk_float PredCoef[], /* I LPC coefficients */ |
+ const silk_float s[], /* I Input signal */ |
+ const opus_int length /* I Length of input signal */ |
+) |
+{ |
+ opus_int ix; |
+ silk_float LPC_pred; |
+ const silk_float *s_ptr; |
+ |
+ for( ix = 10; ix < length; ix++ ) { |
+ s_ptr = &s[ix - 1]; |
+ |
+ /* short-term prediction */ |
+ LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] + |
+ s_ptr[ -1 ] * PredCoef[ 1 ] + |
+ s_ptr[ -2 ] * PredCoef[ 2 ] + |
+ s_ptr[ -3 ] * PredCoef[ 3 ] + |
+ s_ptr[ -4 ] * PredCoef[ 4 ] + |
+ s_ptr[ -5 ] * PredCoef[ 5 ] + |
+ s_ptr[ -6 ] * PredCoef[ 6 ] + |
+ s_ptr[ -7 ] * PredCoef[ 7 ] + |
+ s_ptr[ -8 ] * PredCoef[ 8 ] + |
+ s_ptr[ -9 ] * PredCoef[ 9 ]; |
+ |
+ /* prediction error */ |
+ r_LPC[ix] = s_ptr[ 1 ] - LPC_pred; |
+ } |
+} |
+ |
+/* 8th order LPC analysis filter, does not write first 8 samples */ |
+static OPUS_INLINE void silk_LPC_analysis_filter8_FLP( |
+ silk_float r_LPC[], /* O LPC residual signal */ |
+ const silk_float PredCoef[], /* I LPC coefficients */ |
+ const silk_float s[], /* I Input signal */ |
+ const opus_int length /* I Length of input signal */ |
+) |
+{ |
+ opus_int ix; |
+ silk_float LPC_pred; |
+ const silk_float *s_ptr; |
+ |
+ for( ix = 8; ix < length; ix++ ) { |
+ s_ptr = &s[ix - 1]; |
+ |
+ /* short-term prediction */ |
+ LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] + |
+ s_ptr[ -1 ] * PredCoef[ 1 ] + |
+ s_ptr[ -2 ] * PredCoef[ 2 ] + |
+ s_ptr[ -3 ] * PredCoef[ 3 ] + |
+ s_ptr[ -4 ] * PredCoef[ 4 ] + |
+ s_ptr[ -5 ] * PredCoef[ 5 ] + |
+ s_ptr[ -6 ] * PredCoef[ 6 ] + |
+ s_ptr[ -7 ] * PredCoef[ 7 ]; |
+ |
+ /* prediction error */ |
+ r_LPC[ix] = s_ptr[ 1 ] - LPC_pred; |
+ } |
+} |
+ |
+/* 6th order LPC analysis filter, does not write first 6 samples */ |
+static OPUS_INLINE void silk_LPC_analysis_filter6_FLP( |
+ silk_float r_LPC[], /* O LPC residual signal */ |
+ const silk_float PredCoef[], /* I LPC coefficients */ |
+ const silk_float s[], /* I Input signal */ |
+ const opus_int length /* I Length of input signal */ |
+) |
+{ |
+ opus_int ix; |
+ silk_float LPC_pred; |
+ const silk_float *s_ptr; |
+ |
+ for( ix = 6; ix < length; ix++ ) { |
+ s_ptr = &s[ix - 1]; |
+ |
+ /* short-term prediction */ |
+ LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] + |
+ s_ptr[ -1 ] * PredCoef[ 1 ] + |
+ s_ptr[ -2 ] * PredCoef[ 2 ] + |
+ s_ptr[ -3 ] * PredCoef[ 3 ] + |
+ s_ptr[ -4 ] * PredCoef[ 4 ] + |
+ s_ptr[ -5 ] * PredCoef[ 5 ]; |
+ |
+ /* prediction error */ |
+ r_LPC[ix] = s_ptr[ 1 ] - LPC_pred; |
+ } |
+} |
+ |
+/************************************************/ |
+/* LPC analysis filter */ |
+/* NB! State is kept internally and the */ |
+/* filter always starts with zero state */ |
+/* first Order output samples are set to zero */ |
+/************************************************/ |
+void silk_LPC_analysis_filter_FLP( |
+ silk_float r_LPC[], /* O LPC residual signal */ |
+ const silk_float PredCoef[], /* I LPC coefficients */ |
+ const silk_float s[], /* I Input signal */ |
+ const opus_int length, /* I Length of input signal */ |
+ const opus_int Order /* I LPC order */ |
+) |
+{ |
+ silk_assert( Order <= length ); |
+ |
+ switch( Order ) { |
+ case 6: |
+ silk_LPC_analysis_filter6_FLP( r_LPC, PredCoef, s, length ); |
+ break; |
+ |
+ case 8: |
+ silk_LPC_analysis_filter8_FLP( r_LPC, PredCoef, s, length ); |
+ break; |
+ |
+ case 10: |
+ silk_LPC_analysis_filter10_FLP( r_LPC, PredCoef, s, length ); |
+ break; |
+ |
+ case 12: |
+ silk_LPC_analysis_filter12_FLP( r_LPC, PredCoef, s, length ); |
+ break; |
+ |
+ case 16: |
+ silk_LPC_analysis_filter16_FLP( r_LPC, PredCoef, s, length ); |
+ break; |
+ |
+ default: |
+ silk_assert( 0 ); |
+ break; |
+ } |
+ |
+ /* Set first Order output samples to zero */ |
+ silk_memset( r_LPC, 0, Order * sizeof( silk_float ) ); |
+} |
+ |