summaryrefslogtreecommitdiff
path: root/src/opus-1.0.2/silk/float
diff options
context:
space:
mode:
Diffstat (limited to 'src/opus-1.0.2/silk/float')
-rw-r--r--src/opus-1.0.2/silk/float/LPC_analysis_filter_FLP.c249
-rw-r--r--src/opus-1.0.2/silk/float/LPC_inv_pred_gain_FLP.c76
-rw-r--r--src/opus-1.0.2/silk/float/LTP_analysis_filter_FLP.c75
-rw-r--r--src/opus-1.0.2/silk/float/LTP_scale_ctrl_FLP.c52
-rw-r--r--src/opus-1.0.2/silk/float/SigProc_FLP.h203
-rw-r--r--src/opus-1.0.2/silk/float/apply_sine_window_FLP.c81
-rw-r--r--src/opus-1.0.2/silk/float/autocorrelation_FLP.c52
-rw-r--r--src/opus-1.0.2/silk/float/burg_modified_FLP.c186
-rw-r--r--src/opus-1.0.2/silk/float/bwexpander_FLP.c49
-rw-r--r--src/opus-1.0.2/silk/float/corrMatrix_FLP.c93
-rw-r--r--src/opus-1.0.2/silk/float/encode_frame_FLP.c372
-rw-r--r--src/opus-1.0.2/silk/float/energy_FLP.c60
-rw-r--r--src/opus-1.0.2/silk/float/find_LPC_FLP.c104
-rw-r--r--src/opus-1.0.2/silk/float/find_LTP_FLP.c132
-rw-r--r--src/opus-1.0.2/silk/float/find_pitch_lags_FLP.c131
-rw-r--r--src/opus-1.0.2/silk/float/find_pred_coefs_FLP.c116
-rw-r--r--src/opus-1.0.2/silk/float/inner_product_FLP.c60
-rw-r--r--src/opus-1.0.2/silk/float/k2a_FLP.c53
-rw-r--r--src/opus-1.0.2/silk/float/levinsondurbin_FLP.c81
-rw-r--r--src/opus-1.0.2/silk/float/main_FLP.h309
-rw-r--r--src/opus-1.0.2/silk/float/noise_shape_analysis_FLP.c365
-rw-r--r--src/opus-1.0.2/silk/float/pitch_analysis_core_FLP.c630
-rw-r--r--src/opus-1.0.2/silk/float/prefilter_FLP.c206
-rw-r--r--src/opus-1.0.2/silk/float/process_gains_FLP.c103
-rw-r--r--src/opus-1.0.2/silk/float/regularize_correlations_FLP.c48
-rw-r--r--src/opus-1.0.2/silk/float/residual_energy_FLP.c117
-rw-r--r--src/opus-1.0.2/silk/float/scale_copy_vector_FLP.c57
-rw-r--r--src/opus-1.0.2/silk/float/scale_vector_FLP.c56
-rw-r--r--src/opus-1.0.2/silk/float/schur_FLP.c70
-rw-r--r--src/opus-1.0.2/silk/float/solve_LS_FLP.c207
-rw-r--r--src/opus-1.0.2/silk/float/sort_FLP.c83
-rw-r--r--src/opus-1.0.2/silk/float/structs_FLP.h131
-rw-r--r--src/opus-1.0.2/silk/float/warped_autocorrelation_FLP.c73
-rw-r--r--src/opus-1.0.2/silk/float/wrappers_FLP.c200
34 files changed, 0 insertions, 4880 deletions
diff --git a/src/opus-1.0.2/silk/float/LPC_analysis_filter_FLP.c b/src/opus-1.0.2/silk/float/LPC_analysis_filter_FLP.c
deleted file mode 100644
index 9845655b..00000000
--- a/src/opus-1.0.2/silk/float/LPC_analysis_filter_FLP.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/***********************************************************************
-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 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 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 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 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 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 ) );
-}
-
diff --git a/src/opus-1.0.2/silk/float/LPC_inv_pred_gain_FLP.c b/src/opus-1.0.2/silk/float/LPC_inv_pred_gain_FLP.c
deleted file mode 100644
index 8645f77f..00000000
--- a/src/opus-1.0.2/silk/float/LPC_inv_pred_gain_FLP.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/***********************************************************************
-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 "SigProc_FIX.h"
-#include "SigProc_FLP.h"
-
-#define RC_THRESHOLD 0.9999f
-
-/* compute inverse of LPC prediction gain, and */
-/* test if LPC coefficients are stable (all poles within unit circle) */
-/* this code is based on silk_a2k_FLP() */
-silk_float silk_LPC_inverse_pred_gain_FLP( /* O return inverse prediction gain, energy domain */
- const silk_float *A, /* I prediction coefficients [order] */
- opus_int32 order /* I prediction order */
-)
-{
- opus_int k, n;
- double invGain, rc, rc_mult1, rc_mult2;
- silk_float Atmp[ 2 ][ SILK_MAX_ORDER_LPC ];
- silk_float *Aold, *Anew;
-
- Anew = Atmp[ order & 1 ];
- silk_memcpy( Anew, A, order * sizeof(silk_float) );
-
- invGain = 1.0;
- for( k = order - 1; k > 0; k-- ) {
- rc = -Anew[ k ];
- if( rc > RC_THRESHOLD || rc < -RC_THRESHOLD ) {
- return 0.0f;
- }
- rc_mult1 = 1.0f - rc * rc;
- rc_mult2 = 1.0f / rc_mult1;
- invGain *= rc_mult1;
- /* swap pointers */
- Aold = Anew;
- Anew = Atmp[ k & 1 ];
- for( n = 0; n < k; n++ ) {
- Anew[ n ] = (silk_float)( ( Aold[ n ] - Aold[ k - n - 1 ] * rc ) * rc_mult2 );
- }
- }
- rc = -Anew[ 0 ];
- if( rc > RC_THRESHOLD || rc < -RC_THRESHOLD ) {
- return 0.0f;
- }
- rc_mult1 = 1.0f - rc * rc;
- invGain *= rc_mult1;
- return (silk_float)invGain;
-}
diff --git a/src/opus-1.0.2/silk/float/LTP_analysis_filter_FLP.c b/src/opus-1.0.2/silk/float/LTP_analysis_filter_FLP.c
deleted file mode 100644
index d3a6a5ae..00000000
--- a/src/opus-1.0.2/silk/float/LTP_analysis_filter_FLP.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-
-void silk_LTP_analysis_filter_FLP(
- silk_float *LTP_res, /* O LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */
- const silk_float *x, /* I Input signal, with preceding samples */
- const silk_float B[ LTP_ORDER * MAX_NB_SUBFR ], /* I LTP coefficients for each subframe */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const silk_float invGains[ MAX_NB_SUBFR ], /* I Inverse quantization gains */
- const opus_int subfr_length, /* I Length of each subframe */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int pre_length /* I Preceding samples for each subframe */
-)
-{
- const silk_float *x_ptr, *x_lag_ptr;
- silk_float Btmp[ LTP_ORDER ];
- silk_float *LTP_res_ptr;
- silk_float inv_gain;
- opus_int k, i, j;
-
- x_ptr = x;
- LTP_res_ptr = LTP_res;
- for( k = 0; k < nb_subfr; k++ ) {
- x_lag_ptr = x_ptr - pitchL[ k ];
- inv_gain = invGains[ k ];
- for( i = 0; i < LTP_ORDER; i++ ) {
- Btmp[ i ] = B[ k * LTP_ORDER + i ];
- }
-
- /* LTP analysis FIR filter */
- for( i = 0; i < subfr_length + pre_length; i++ ) {
- LTP_res_ptr[ i ] = x_ptr[ i ];
- /* Subtract long-term prediction */
- for( j = 0; j < LTP_ORDER; j++ ) {
- LTP_res_ptr[ i ] -= Btmp[ j ] * x_lag_ptr[ LTP_ORDER / 2 - j ];
- }
- LTP_res_ptr[ i ] *= inv_gain;
- x_lag_ptr++;
- }
-
- /* Update pointers */
- LTP_res_ptr += subfr_length + pre_length;
- x_ptr += subfr_length;
- }
-}
diff --git a/src/opus-1.0.2/silk/float/LTP_scale_ctrl_FLP.c b/src/opus-1.0.2/silk/float/LTP_scale_ctrl_FLP.c
deleted file mode 100644
index f3f0c572..00000000
--- a/src/opus-1.0.2/silk/float/LTP_scale_ctrl_FLP.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-
-void silk_LTP_scale_ctrl_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int round_loss;
-
- if( condCoding == CODE_INDEPENDENTLY ) {
- /* Only scale if first frame in packet */
- round_loss = psEnc->sCmn.PacketLoss_perc + psEnc->sCmn.nFramesPerPacket;
- psEnc->sCmn.indices.LTP_scaleIndex = (opus_int8)silk_LIMIT( round_loss * psEncCtrl->LTPredCodGain * 0.1f, 0.0f, 2.0f );
- } else {
- /* Default is minimum scaling */
- psEnc->sCmn.indices.LTP_scaleIndex = 0;
- }
-
- psEncCtrl->LTP_scale = (silk_float)silk_LTPScales_table_Q14[ psEnc->sCmn.indices.LTP_scaleIndex ] / 16384.0f;
-}
diff --git a/src/opus-1.0.2/silk/float/SigProc_FLP.h b/src/opus-1.0.2/silk/float/SigProc_FLP.h
deleted file mode 100644
index 036b46da..00000000
--- a/src/opus-1.0.2/silk/float/SigProc_FLP.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/***********************************************************************
-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.
-***********************************************************************/
-
-#ifndef SILK_SIGPROC_FLP_H
-#define SILK_SIGPROC_FLP_H
-
-#include "SigProc_FIX.h"
-#include "float_cast.h"
-#include <math.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/********************************************************************/
-/* SIGNAL PROCESSING FUNCTIONS */
-/********************************************************************/
-
-/* Chirp (bw expand) LP AR filter */
-void silk_bwexpander_FLP(
- silk_float *ar, /* I/O AR filter to be expanded (without leading 1) */
- const opus_int d, /* I length of ar */
- const silk_float chirp /* I chirp factor (typically in range (0..1) ) */
-);
-
-/* compute inverse of LPC prediction gain, and */
-/* test if LPC coefficients are stable (all poles within unit circle) */
-/* this code is based on silk_FLP_a2k() */
-silk_float silk_LPC_inverse_pred_gain_FLP( /* O return inverse prediction gain, energy domain */
- const silk_float *A, /* I prediction coefficients [order] */
- opus_int32 order /* I prediction order */
-);
-
-silk_float silk_schur_FLP( /* O returns residual energy */
- silk_float refl_coef[], /* O reflection coefficients (length order) */
- const silk_float auto_corr[], /* I autocorrelation sequence (length order+1) */
- opus_int order /* I order */
-);
-
-void silk_k2a_FLP(
- silk_float *A, /* O prediction coefficients [order] */
- const silk_float *rc, /* I reflection coefficients [order] */
- opus_int32 order /* I prediction order */
-);
-
-/* Solve the normal equations using the Levinson-Durbin recursion */
-silk_float silk_levinsondurbin_FLP( /* O prediction error energy */
- silk_float A[], /* O prediction coefficients [order] */
- const silk_float corr[], /* I input auto-correlations [order + 1] */
- const opus_int order /* I prediction order */
-);
-
-/* compute autocorrelation */
-void silk_autocorrelation_FLP(
- silk_float *results, /* O result (length correlationCount) */
- const silk_float *inputData, /* I input data to correlate */
- opus_int inputDataSize, /* I length of input */
- opus_int correlationCount /* I number of correlation taps to compute */
-);
-
-opus_int silk_pitch_analysis_core_FLP( /* O Voicing estimate: 0 voiced, 1 unvoiced */
- const silk_float *frame, /* I Signal of length PE_FRAME_LENGTH_MS*Fs_kHz */
- opus_int *pitch_out, /* O Pitch lag values [nb_subfr] */
- opus_int16 *lagIndex, /* O Lag Index */
- opus_int8 *contourIndex, /* O Pitch contour Index */
- silk_float *LTPCorr, /* I/O Normalized correlation; input: value from previous frame */
- opus_int prevLag, /* I Last lag of previous frame; set to zero is unvoiced */
- const silk_float search_thres1, /* I First stage threshold for lag candidates 0 - 1 */
- const silk_float search_thres2, /* I Final threshold for lag candidates 0 - 1 */
- const opus_int Fs_kHz, /* I sample frequency (kHz) */
- const opus_int complexity, /* I Complexity setting, 0-2, where 2 is highest */
- const opus_int nb_subfr /* I Number of 5 ms subframes */
-);
-
-void silk_insertion_sort_decreasing_FLP(
- silk_float *a, /* I/O Unsorted / Sorted vector */
- opus_int *idx, /* O Index vector for the sorted elements */
- const opus_int L, /* I Vector length */
- const opus_int K /* I Number of correctly sorted positions */
-);
-
-/* Compute reflection coefficients from input signal */
-silk_float silk_burg_modified_FLP( /* O returns residual energy */
- silk_float A[], /* O prediction coefficients (length order) */
- const silk_float x[], /* I input signal, length: nb_subfr*(D+L_sub) */
- const silk_float minInvGain, /* I minimum inverse prediction gain */
- const opus_int subfr_length, /* I input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I number of subframes stacked in x */
- const opus_int D /* I order */
-);
-
-/* multiply a vector by a constant */
-void silk_scale_vector_FLP(
- silk_float *data1,
- silk_float gain,
- opus_int dataSize
-);
-
-/* copy and multiply a vector by a constant */
-void silk_scale_copy_vector_FLP(
- silk_float *data_out,
- const silk_float *data_in,
- silk_float gain,
- opus_int dataSize
-);
-
-/* inner product of two silk_float arrays, with result as double */
-double silk_inner_product_FLP(
- const silk_float *data1,
- const silk_float *data2,
- opus_int dataSize
-);
-
-/* sum of squares of a silk_float array, with result as double */
-double silk_energy_FLP(
- const silk_float *data,
- opus_int dataSize
-);
-
-/********************************************************************/
-/* MACROS */
-/********************************************************************/
-
-#define PI (3.1415926536f)
-
-#define silk_min_float( a, b ) (((a) < (b)) ? (a) : (b))
-#define silk_max_float( a, b ) (((a) > (b)) ? (a) : (b))
-#define silk_abs_float( a ) ((silk_float)fabs(a))
-
-/* sigmoid function */
-static inline silk_float silk_sigmoid( silk_float x )
-{
- return (silk_float)(1.0 / (1.0 + exp(-x)));
-}
-
-/* floating-point to integer conversion (rounding) */
-static inline opus_int32 silk_float2int( silk_float x )
-{
- return (opus_int32)float2int( x );
-}
-
-/* floating-point to integer conversion (rounding) */
-static inline void silk_float2short_array(
- opus_int16 *out,
- const silk_float *in,
- opus_int32 length
-)
-{
- opus_int32 k;
- for( k = length - 1; k >= 0; k-- ) {
- out[k] = silk_SAT16( (opus_int32)float2int( in[k] ) );
- }
-}
-
-/* integer to floating-point conversion */
-static inline void silk_short2float_array(
- silk_float *out,
- const opus_int16 *in,
- opus_int32 length
-)
-{
- opus_int32 k;
- for( k = length - 1; k >= 0; k-- ) {
- out[k] = (silk_float)in[k];
- }
-}
-
-/* using log2() helps the fixed-point conversion */
-static inline silk_float silk_log2( double x )
-{
- return ( silk_float )( 3.32192809488736 * log10( x ) );
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SILK_SIGPROC_FLP_H */
diff --git a/src/opus-1.0.2/silk/float/apply_sine_window_FLP.c b/src/opus-1.0.2/silk/float/apply_sine_window_FLP.c
deleted file mode 100644
index e06333f7..00000000
--- a/src/opus-1.0.2/silk/float/apply_sine_window_FLP.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-
-/* Apply sine window to signal vector */
-/* Window types: */
-/* 1 -> sine window from 0 to pi/2 */
-/* 2 -> sine window from pi/2 to pi */
-void silk_apply_sine_window_FLP(
- silk_float px_win[], /* O Pointer to windowed signal */
- const silk_float px[], /* I Pointer to input signal */
- const opus_int win_type, /* I Selects a window type */
- const opus_int length /* I Window length, multiple of 4 */
-)
-{
- opus_int k;
- silk_float freq, c, S0, S1;
-
- silk_assert( win_type == 1 || win_type == 2 );
-
- /* Length must be multiple of 4 */
- silk_assert( ( length & 3 ) == 0 );
-
- freq = PI / ( length + 1 );
-
- /* Approximation of 2 * cos(f) */
- c = 2.0f - freq * freq;
-
- /* Initialize state */
- if( win_type < 2 ) {
- /* Start from 0 */
- S0 = 0.0f;
- /* Approximation of sin(f) */
- S1 = freq;
- } else {
- /* Start from 1 */
- S0 = 1.0f;
- /* Approximation of cos(f) */
- S1 = 0.5f * c;
- }
-
- /* Uses the recursive equation: sin(n*f) = 2 * cos(f) * sin((n-1)*f) - sin((n-2)*f) */
- /* 4 samples at a time */
- for( k = 0; k < length; k += 4 ) {
- px_win[ k + 0 ] = px[ k + 0 ] * 0.5f * ( S0 + S1 );
- px_win[ k + 1 ] = px[ k + 1 ] * S1;
- S0 = c * S1 - S0;
- px_win[ k + 2 ] = px[ k + 2 ] * 0.5f * ( S1 + S0 );
- px_win[ k + 3 ] = px[ k + 3 ] * S0;
- S1 = c * S0 - S1;
- }
-}
diff --git a/src/opus-1.0.2/silk/float/autocorrelation_FLP.c b/src/opus-1.0.2/silk/float/autocorrelation_FLP.c
deleted file mode 100644
index 9ce709e2..00000000
--- a/src/opus-1.0.2/silk/float/autocorrelation_FLP.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/***********************************************************************
-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 "typedef.h"
-#include "SigProc_FLP.h"
-
-/* compute autocorrelation */
-void silk_autocorrelation_FLP(
- silk_float *results, /* O result (length correlationCount) */
- const silk_float *inputData, /* I input data to correlate */
- opus_int inputDataSize, /* I length of input */
- opus_int correlationCount /* I number of correlation taps to compute */
-)
-{
- opus_int i;
-
- if( correlationCount > inputDataSize ) {
- correlationCount = inputDataSize;
- }
-
- for( i = 0; i < correlationCount; i++ ) {
- results[ i ] = (silk_float)silk_inner_product_FLP( inputData, inputData + i, inputDataSize - i );
- }
-}
diff --git a/src/opus-1.0.2/silk/float/burg_modified_FLP.c b/src/opus-1.0.2/silk/float/burg_modified_FLP.c
deleted file mode 100644
index 31c9b228..00000000
--- a/src/opus-1.0.2/silk/float/burg_modified_FLP.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-#include "tuning_parameters.h"
-#include "define.h"
-
-#define MAX_FRAME_SIZE 384 /* subfr_length * nb_subfr = ( 0.005 * 16000 + 16 ) * 4 = 384*/
-
-/* Compute reflection coefficients from input signal */
-silk_float silk_burg_modified_FLP( /* O returns residual energy */
- silk_float A[], /* O prediction coefficients (length order) */
- const silk_float x[], /* I input signal, length: nb_subfr*(D+L_sub) */
- const silk_float minInvGain, /* I minimum inverse prediction gain */
- const opus_int subfr_length, /* I input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I number of subframes stacked in x */
- const opus_int D /* I order */
-)
-{
- opus_int k, n, s, reached_max_gain;
- double C0, invGain, num, nrg_f, nrg_b, rc, Atmp, tmp1, tmp2;
- const silk_float *x_ptr;
- double C_first_row[ SILK_MAX_ORDER_LPC ], C_last_row[ SILK_MAX_ORDER_LPC ];
- double CAf[ SILK_MAX_ORDER_LPC + 1 ], CAb[ SILK_MAX_ORDER_LPC + 1 ];
- double Af[ SILK_MAX_ORDER_LPC ];
-
- silk_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE );
-
- /* Compute autocorrelations, added over subframes */
- C0 = silk_energy_FLP( x, nb_subfr * subfr_length );
- silk_memset( C_first_row, 0, SILK_MAX_ORDER_LPC * sizeof( double ) );
- for( s = 0; s < nb_subfr; s++ ) {
- x_ptr = x + s * subfr_length;
- for( n = 1; n < D + 1; n++ ) {
- C_first_row[ n - 1 ] += silk_inner_product_FLP( x_ptr, x_ptr + n, subfr_length - n );
- }
- }
- silk_memcpy( C_last_row, C_first_row, SILK_MAX_ORDER_LPC * sizeof( double ) );
-
- /* Initialize */
- CAb[ 0 ] = CAf[ 0 ] = C0 + FIND_LPC_COND_FAC * C0 + 1e-9f;
- invGain = 1.0f;
- reached_max_gain = 0;
- for( n = 0; n < D; n++ ) {
- /* Update first row of correlation matrix (without first element) */
- /* Update last row of correlation matrix (without last element, stored in reversed order) */
- /* Update C * Af */
- /* Update C * flipud(Af) (stored in reversed order) */
- for( s = 0; s < nb_subfr; s++ ) {
- x_ptr = x + s * subfr_length;
- tmp1 = x_ptr[ n ];
- tmp2 = x_ptr[ subfr_length - n - 1 ];
- for( k = 0; k < n; k++ ) {
- C_first_row[ k ] -= x_ptr[ n ] * x_ptr[ n - k - 1 ];
- C_last_row[ k ] -= x_ptr[ subfr_length - n - 1 ] * x_ptr[ subfr_length - n + k ];
- Atmp = Af[ k ];
- tmp1 += x_ptr[ n - k - 1 ] * Atmp;
- tmp2 += x_ptr[ subfr_length - n + k ] * Atmp;
- }
- for( k = 0; k <= n; k++ ) {
- CAf[ k ] -= tmp1 * x_ptr[ n - k ];
- CAb[ k ] -= tmp2 * x_ptr[ subfr_length - n + k - 1 ];
- }
- }
- tmp1 = C_first_row[ n ];
- tmp2 = C_last_row[ n ];
- for( k = 0; k < n; k++ ) {
- Atmp = Af[ k ];
- tmp1 += C_last_row[ n - k - 1 ] * Atmp;
- tmp2 += C_first_row[ n - k - 1 ] * Atmp;
- }
- CAf[ n + 1 ] = tmp1;
- CAb[ n + 1 ] = tmp2;
-
- /* Calculate nominator and denominator for the next order reflection (parcor) coefficient */
- num = CAb[ n + 1 ];
- nrg_b = CAb[ 0 ];
- nrg_f = CAf[ 0 ];
- for( k = 0; k < n; k++ ) {
- Atmp = Af[ k ];
- num += CAb[ n - k ] * Atmp;
- nrg_b += CAb[ k + 1 ] * Atmp;
- nrg_f += CAf[ k + 1 ] * Atmp;
- }
- silk_assert( nrg_f > 0.0 );
- silk_assert( nrg_b > 0.0 );
-
- /* Calculate the next order reflection (parcor) coefficient */
- rc = -2.0 * num / ( nrg_f + nrg_b );
- silk_assert( rc > -1.0 && rc < 1.0 );
-
- /* Update inverse prediction gain */
- tmp1 = invGain * ( 1.0 - rc * rc );
- if( tmp1 <= minInvGain ) {
- /* Max prediction gain exceeded; set reflection coefficient such that max prediction gain is exactly hit */
- rc = sqrt( 1.0 - minInvGain / invGain );
- if( num > 0 ) {
- /* Ensure adjusted reflection coefficients has the original sign */
- rc = -rc;
- }
- invGain = minInvGain;
- reached_max_gain = 1;
- } else {
- invGain = tmp1;
- }
-
- /* Update the AR coefficients */
- for( k = 0; k < (n + 1) >> 1; k++ ) {
- tmp1 = Af[ k ];
- tmp2 = Af[ n - k - 1 ];
- Af[ k ] = tmp1 + rc * tmp2;
- Af[ n - k - 1 ] = tmp2 + rc * tmp1;
- }
- Af[ n ] = rc;
-
- if( reached_max_gain ) {
- /* Reached max prediction gain; set remaining coefficients to zero and exit loop */
- for( k = n + 1; k < D; k++ ) {
- Af[ k ] = 0.0;
- }
- break;
- }
-
- /* Update C * Af and C * Ab */
- for( k = 0; k <= n + 1; k++ ) {
- tmp1 = CAf[ k ];
- CAf[ k ] += rc * CAb[ n - k + 1 ];
- CAb[ n - k + 1 ] += rc * tmp1;
- }
- }
-
- if( reached_max_gain ) {
- /* Convert to silk_float */
- for( k = 0; k < D; k++ ) {
- A[ k ] = (silk_float)( -Af[ k ] );
- }
- /* Subtract energy of preceding samples from C0 */
- for( s = 0; s < nb_subfr; s++ ) {
- C0 -= silk_energy_FLP( x + s * subfr_length, D );
- }
- /* Approximate residual energy */
- nrg_f = C0 * invGain;
- } else {
- /* Compute residual energy and store coefficients as silk_float */
- nrg_f = CAf[ 0 ];
- tmp1 = 1.0;
- for( k = 0; k < D; k++ ) {
- Atmp = Af[ k ];
- nrg_f += CAf[ k + 1 ] * Atmp;
- tmp1 += Atmp * Atmp;
- A[ k ] = (silk_float)(-Atmp);
- }
- nrg_f -= FIND_LPC_COND_FAC * C0 * tmp1;
- }
-
- /* Return residual energy */
- return (silk_float)nrg_f;
-}
diff --git a/src/opus-1.0.2/silk/float/bwexpander_FLP.c b/src/opus-1.0.2/silk/float/bwexpander_FLP.c
deleted file mode 100644
index 59ca4eaf..00000000
--- a/src/opus-1.0.2/silk/float/bwexpander_FLP.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-
-/* Chirp (bw expand) LP AR filter */
-void silk_bwexpander_FLP(
- silk_float *ar, /* I/O AR filter to be expanded (without leading 1) */
- const opus_int d, /* I length of ar */
- const silk_float chirp /* I chirp factor (typically in range (0..1) ) */
-)
-{
- opus_int i;
- silk_float cfac = chirp;
-
- for( i = 0; i < d - 1; i++ ) {
- ar[ i ] *= cfac;
- cfac *= chirp;
- }
- ar[ d - 1 ] *= cfac;
-}
diff --git a/src/opus-1.0.2/silk/float/corrMatrix_FLP.c b/src/opus-1.0.2/silk/float/corrMatrix_FLP.c
deleted file mode 100644
index c59f73c3..00000000
--- a/src/opus-1.0.2/silk/float/corrMatrix_FLP.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/***********************************************************************
-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
-
-/**********************************************************************
- * Correlation matrix computations for LS estimate.
- **********************************************************************/
-
-#include "main_FLP.h"
-
-/* Calculates correlation vector X'*t */
-void silk_corrVector_FLP(
- const silk_float *x, /* I x vector [L+order-1] used to create X */
- const silk_float *t, /* I Target vector [L] */
- const opus_int L, /* I Length of vecors */
- const opus_int Order, /* I Max lag for correlation */
- silk_float *Xt /* O X'*t correlation vector [order] */
-)
-{
- opus_int lag;
- const silk_float *ptr1;
-
- ptr1 = &x[ Order - 1 ]; /* Points to first sample of column 0 of X: X[:,0] */
- for( lag = 0; lag < Order; lag++ ) {
- /* Calculate X[:,lag]'*t */
- Xt[ lag ] = (silk_float)silk_inner_product_FLP( ptr1, t, L );
- ptr1--; /* Next column of X */
- }
-}
-
-/* Calculates correlation matrix X'*X */
-void silk_corrMatrix_FLP(
- const silk_float *x, /* I x vector [ L+order-1 ] used to create X */
- const opus_int L, /* I Length of vectors */
- const opus_int Order, /* I Max lag for correlation */
- silk_float *XX /* O X'*X correlation matrix [order x order] */
-)
-{
- opus_int j, lag;
- double energy;
- const silk_float *ptr1, *ptr2;
-
- ptr1 = &x[ Order - 1 ]; /* First sample of column 0 of X */
- energy = silk_energy_FLP( ptr1, L ); /* X[:,0]'*X[:,0] */
- matrix_ptr( XX, 0, 0, Order ) = ( silk_float )energy;
- for( j = 1; j < Order; j++ ) {
- /* Calculate X[:,j]'*X[:,j] */
- energy += ptr1[ -j ] * ptr1[ -j ] - ptr1[ L - j ] * ptr1[ L - j ];
- matrix_ptr( XX, j, j, Order ) = ( silk_float )energy;
- }
-
- ptr2 = &x[ Order - 2 ]; /* First sample of column 1 of X */
- for( lag = 1; lag < Order; lag++ ) {
- /* Calculate X[:,0]'*X[:,lag] */
- energy = silk_inner_product_FLP( ptr1, ptr2, L );
- matrix_ptr( XX, lag, 0, Order ) = ( silk_float )energy;
- matrix_ptr( XX, 0, lag, Order ) = ( silk_float )energy;
- /* Calculate X[:,j]'*X[:,j + lag] */
- for( j = 1; j < ( Order - lag ); j++ ) {
- energy += ptr1[ -j ] * ptr2[ -j ] - ptr1[ L - j ] * ptr2[ L - j ];
- matrix_ptr( XX, lag + j, j, Order ) = ( silk_float )energy;
- matrix_ptr( XX, j, lag + j, Order ) = ( silk_float )energy;
- }
- ptr2--; /* Next column of X */
- }
-}
diff --git a/src/opus-1.0.2/silk/float/encode_frame_FLP.c b/src/opus-1.0.2/silk/float/encode_frame_FLP.c
deleted file mode 100644
index 23260bc7..00000000
--- a/src/opus-1.0.2/silk/float/encode_frame_FLP.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-#include "tuning_parameters.h"
-
-/* Low Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode with lower bitrate */
-static inline void silk_LBRR_encode_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float xfw[], /* I Input signal */
- opus_int condCoding /* I The type of conditional coding used so far for this frame */
-);
-
-void silk_encode_do_VAD_FLP(
- silk_encoder_state_FLP *psEnc /* I/O Encoder state FLP */
-)
-{
- /****************************/
- /* Voice Activity Detection */
- /****************************/
- silk_VAD_GetSA_Q8( &psEnc->sCmn, psEnc->sCmn.inputBuf + 1 );
-
- /**************************************************/
- /* Convert speech activity into VAD and DTX flags */
- /**************************************************/
- if( psEnc->sCmn.speech_activity_Q8 < SILK_FIX_CONST( SPEECH_ACTIVITY_DTX_THRES, 8 ) ) {
- psEnc->sCmn.indices.signalType = TYPE_NO_VOICE_ACTIVITY;
- psEnc->sCmn.noSpeechCounter++;
- if( psEnc->sCmn.noSpeechCounter < NB_SPEECH_FRAMES_BEFORE_DTX ) {
- psEnc->sCmn.inDTX = 0;
- } else if( psEnc->sCmn.noSpeechCounter > MAX_CONSECUTIVE_DTX + NB_SPEECH_FRAMES_BEFORE_DTX ) {
- psEnc->sCmn.noSpeechCounter = NB_SPEECH_FRAMES_BEFORE_DTX;
- psEnc->sCmn.inDTX = 0;
- }
- psEnc->sCmn.VAD_flags[ psEnc->sCmn.nFramesEncoded ] = 0;
- } else {
- psEnc->sCmn.noSpeechCounter = 0;
- psEnc->sCmn.inDTX = 0;
- psEnc->sCmn.indices.signalType = TYPE_UNVOICED;
- psEnc->sCmn.VAD_flags[ psEnc->sCmn.nFramesEncoded ] = 1;
- }
-}
-
-/****************/
-/* Encode frame */
-/****************/
-opus_int silk_encode_frame_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- opus_int32 *pnBytesOut, /* O Number of payload bytes; */
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- opus_int condCoding, /* I The type of conditional coding to use */
- opus_int maxBits, /* I If > 0: maximum number of output bits */
- opus_int useCBR /* I Flag to force constant-bitrate operation */
-)
-{
- silk_encoder_control_FLP sEncCtrl;
- opus_int i, iter, maxIter, found_upper, found_lower, ret = 0;
- silk_float *x_frame, *res_pitch_frame;
- silk_float xfw[ MAX_FRAME_LENGTH ];
- silk_float res_pitch[ 2 * MAX_FRAME_LENGTH + LA_PITCH_MAX ];
- ec_enc sRangeEnc_copy, sRangeEnc_copy2;
- silk_nsq_state sNSQ_copy, sNSQ_copy2;
- opus_int32 seed_copy, nBits, nBits_lower, nBits_upper, gainMult_lower, gainMult_upper;
- opus_int32 gainsID, gainsID_lower, gainsID_upper;
- opus_int16 gainMult_Q8;
- opus_int16 ec_prevLagIndex_copy;
- opus_int ec_prevSignalType_copy;
- opus_int8 LastGainIndex_copy2;
- opus_int32 pGains_Q16[ MAX_NB_SUBFR ];
- opus_uint8 ec_buf_copy[ 1275 ];
-
- /* This is totally unnecessary but many compilers (including gcc) are too dumb to realise it */
- LastGainIndex_copy2 = nBits_lower = nBits_upper = gainMult_lower = gainMult_upper = 0;
-
- psEnc->sCmn.indices.Seed = psEnc->sCmn.frameCounter++ & 3;
-
- /**************************************************************/
- /* Set up Input Pointers, and insert frame in input buffer */
- /**************************************************************/
- /* pointers aligned with start of frame to encode */
- x_frame = psEnc->x_buf + psEnc->sCmn.ltp_mem_length; /* start of frame to encode */
- res_pitch_frame = res_pitch + psEnc->sCmn.ltp_mem_length; /* start of pitch LPC residual frame */
-
- /***************************************/
- /* Ensure smooth bandwidth transitions */
- /***************************************/
- silk_LP_variable_cutoff( &psEnc->sCmn.sLP, psEnc->sCmn.inputBuf + 1, psEnc->sCmn.frame_length );
-
- /*******************************************/
- /* Copy new frame to front of input buffer */
- /*******************************************/
- silk_short2float_array( x_frame + LA_SHAPE_MS * psEnc->sCmn.fs_kHz, psEnc->sCmn.inputBuf + 1, psEnc->sCmn.frame_length );
-
- /* Add tiny signal to avoid high CPU load from denormalized floating point numbers */
- for( i = 0; i < 8; i++ ) {
- x_frame[ LA_SHAPE_MS * psEnc->sCmn.fs_kHz + i * ( psEnc->sCmn.frame_length >> 3 ) ] += ( 1 - ( i & 2 ) ) * 1e-6f;
- }
-
- if( !psEnc->sCmn.prefillFlag ) {
- /*****************************************/
- /* Find pitch lags, initial LPC analysis */
- /*****************************************/
- silk_find_pitch_lags_FLP( psEnc, &sEncCtrl, res_pitch, x_frame );
-
- /************************/
- /* Noise shape analysis */
- /************************/
- silk_noise_shape_analysis_FLP( psEnc, &sEncCtrl, res_pitch_frame, x_frame );
-
- /***************************************************/
- /* Find linear prediction coefficients (LPC + LTP) */
- /***************************************************/
- silk_find_pred_coefs_FLP( psEnc, &sEncCtrl, res_pitch, x_frame, condCoding );
-
- /****************************************/
- /* Process gains */
- /****************************************/
- silk_process_gains_FLP( psEnc, &sEncCtrl, condCoding );
-
- /*****************************************/
- /* Prefiltering for noise shaper */
- /*****************************************/
- silk_prefilter_FLP( psEnc, &sEncCtrl, xfw, x_frame );
-
- /****************************************/
- /* Low Bitrate Redundant Encoding */
- /****************************************/
- silk_LBRR_encode_FLP( psEnc, &sEncCtrl, xfw, condCoding );
-
- /* Loop over quantizer and entroy coding to control bitrate */
- maxIter = 6;
- gainMult_Q8 = SILK_FIX_CONST( 1, 8 );
- found_lower = 0;
- found_upper = 0;
- gainsID = silk_gains_ID( psEnc->sCmn.indices.GainsIndices, psEnc->sCmn.nb_subfr );
- gainsID_lower = -1;
- gainsID_upper = -1;
- /* Copy part of the input state */
- silk_memcpy( &sRangeEnc_copy, psRangeEnc, sizeof( ec_enc ) );
- silk_memcpy( &sNSQ_copy, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- seed_copy = psEnc->sCmn.indices.Seed;
- ec_prevLagIndex_copy = psEnc->sCmn.ec_prevLagIndex;
- ec_prevSignalType_copy = psEnc->sCmn.ec_prevSignalType;
- for( iter = 0; ; iter++ ) {
- if( gainsID == gainsID_lower ) {
- nBits = nBits_lower;
- } else if( gainsID == gainsID_upper ) {
- nBits = nBits_upper;
- } else {
- /* Restore part of the input state */
- if( iter > 0 ) {
- silk_memcpy( psRangeEnc, &sRangeEnc_copy, sizeof( ec_enc ) );
- silk_memcpy( &psEnc->sCmn.sNSQ, &sNSQ_copy, sizeof( silk_nsq_state ) );
- psEnc->sCmn.indices.Seed = seed_copy;
- psEnc->sCmn.ec_prevLagIndex = ec_prevLagIndex_copy;
- psEnc->sCmn.ec_prevSignalType = ec_prevSignalType_copy;
- }
-
- /*****************************************/
- /* Noise shaping quantization */
- /*****************************************/
- silk_NSQ_wrapper_FLP( psEnc, &sEncCtrl, &psEnc->sCmn.indices, &psEnc->sCmn.sNSQ, psEnc->sCmn.pulses, xfw );
-
- /****************************************/
- /* Encode Parameters */
- /****************************************/
- silk_encode_indices( &psEnc->sCmn, psRangeEnc, psEnc->sCmn.nFramesEncoded, 0, condCoding );
-
- /****************************************/
- /* Encode Excitation Signal */
- /****************************************/
- silk_encode_pulses( psRangeEnc, psEnc->sCmn.indices.signalType, psEnc->sCmn.indices.quantOffsetType,
- psEnc->sCmn.pulses, psEnc->sCmn.frame_length );
-
- nBits = ec_tell( psRangeEnc );
-
- if( useCBR == 0 && iter == 0 && nBits <= maxBits ) {
- break;
- }
- }
-
- if( iter == maxIter ) {
- if( found_lower && ( gainsID == gainsID_lower || nBits > maxBits ) ) {
- /* Restore output state from earlier iteration that did meet the bitrate budget */
- silk_memcpy( psRangeEnc, &sRangeEnc_copy2, sizeof( ec_enc ) );
- silk_assert( sRangeEnc_copy2.offs <= 1275 );
- silk_memcpy( psRangeEnc->buf, ec_buf_copy, sRangeEnc_copy2.offs );
- silk_memcpy( &psEnc->sCmn.sNSQ, &sNSQ_copy2, sizeof( silk_nsq_state ) );
- psEnc->sShape.LastGainIndex = LastGainIndex_copy2;
- }
- break;
- }
-
- if( nBits > maxBits ) {
- if( found_lower == 0 && iter >= 2 ) {
- /* Adjust the quantizer's rate/distortion tradeoff and discard previous "upper" results */
- sEncCtrl.Lambda *= 1.5f;
- found_upper = 0;
- gainsID_upper = -1;
- } else {
- found_upper = 1;
- nBits_upper = nBits;
- gainMult_upper = gainMult_Q8;
- gainsID_upper = gainsID;
- }
- } else if( nBits < maxBits - 5 ) {
- found_lower = 1;
- nBits_lower = nBits;
- gainMult_lower = gainMult_Q8;
- if( gainsID != gainsID_lower ) {
- gainsID_lower = gainsID;
- /* Copy part of the output state */
- silk_memcpy( &sRangeEnc_copy2, psRangeEnc, sizeof( ec_enc ) );
- silk_assert( psRangeEnc->offs <= 1275 );
- silk_memcpy( ec_buf_copy, psRangeEnc->buf, psRangeEnc->offs );
- silk_memcpy( &sNSQ_copy2, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- LastGainIndex_copy2 = psEnc->sShape.LastGainIndex;
- }
- } else {
- /* Within 5 bits of budget: close enough */
- break;
- }
-
- if( ( found_lower & found_upper ) == 0 ) {
- /* Adjust gain according to high-rate rate/distortion curve */
- opus_int32 gain_factor_Q16;
- gain_factor_Q16 = silk_log2lin( silk_LSHIFT( nBits - maxBits, 7 ) / psEnc->sCmn.frame_length + SILK_FIX_CONST( 16, 7 ) );
- gain_factor_Q16 = silk_min_32( gain_factor_Q16, SILK_FIX_CONST( 2, 16 ) );
- if( nBits > maxBits ) {
- gain_factor_Q16 = silk_max_32( gain_factor_Q16, SILK_FIX_CONST( 1.3, 16 ) );
- }
- gainMult_Q8 = silk_SMULWB( gain_factor_Q16, gainMult_Q8 );
- } else {
- /* Adjust gain by interpolating */
- gainMult_Q8 = gainMult_lower + ( ( gainMult_upper - gainMult_lower ) * ( maxBits - nBits_lower ) ) / ( nBits_upper - nBits_lower );
- /* New gain multplier must be between 25% and 75% of old range (note that gainMult_upper < gainMult_lower) */
- if( gainMult_Q8 > silk_ADD_RSHIFT32( gainMult_lower, gainMult_upper - gainMult_lower, 2 ) ) {
- gainMult_Q8 = silk_ADD_RSHIFT32( gainMult_lower, gainMult_upper - gainMult_lower, 2 );
- } else
- if( gainMult_Q8 < silk_SUB_RSHIFT32( gainMult_upper, gainMult_upper - gainMult_lower, 2 ) ) {
- gainMult_Q8 = silk_SUB_RSHIFT32( gainMult_upper, gainMult_upper - gainMult_lower, 2 );
- }
- }
-
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- pGains_Q16[ i ] = silk_LSHIFT_SAT32( silk_SMULWB( sEncCtrl.GainsUnq_Q16[ i ], gainMult_Q8 ), 8 );
- }
-
- /* Quantize gains */
- psEnc->sShape.LastGainIndex = sEncCtrl.lastGainIndexPrev;
- silk_gains_quant( psEnc->sCmn.indices.GainsIndices, pGains_Q16,
- &psEnc->sShape.LastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /* Unique identifier of gains vector */
- gainsID = silk_gains_ID( psEnc->sCmn.indices.GainsIndices, psEnc->sCmn.nb_subfr );
-
- /* Overwrite unquantized gains with quantized gains and convert back to Q0 from Q16 */
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- sEncCtrl.Gains[ i ] = pGains_Q16[ i ] / 65536.0f;
- }
- }
- }
-
- /* Update input buffer */
- silk_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ],
- ( psEnc->sCmn.ltp_mem_length + LA_SHAPE_MS * psEnc->sCmn.fs_kHz ) * sizeof( silk_float ) );
-
- /* Parameters needed for next frame */
- psEnc->sCmn.prevLag = sEncCtrl.pitchL[ psEnc->sCmn.nb_subfr - 1 ];
- psEnc->sCmn.prevSignalType = psEnc->sCmn.indices.signalType;
-
- /* Exit without entropy coding */
- if( psEnc->sCmn.prefillFlag ) {
- /* No payload */
- *pnBytesOut = 0;
- return ret;
- }
-
- /****************************************/
- /* Finalize payload */
- /****************************************/
- psEnc->sCmn.first_frame_after_reset = 0;
- /* Payload size */
- *pnBytesOut = silk_RSHIFT( ec_tell( psRangeEnc ) + 7, 3 );
-
- return ret;
-}
-
-/* Low-Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode excitation at lower bitrate */
-static inline void silk_LBRR_encode_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float xfw[], /* I Input signal */
- opus_int condCoding /* I The type of conditional coding used so far for this frame */
-)
-{
- opus_int k;
- opus_int32 Gains_Q16[ MAX_NB_SUBFR ];
- silk_float TempGains[ MAX_NB_SUBFR ];
- SideInfoIndices *psIndices_LBRR = &psEnc->sCmn.indices_LBRR[ psEnc->sCmn.nFramesEncoded ];
- silk_nsq_state sNSQ_LBRR;
-
- /*******************************************/
- /* Control use of inband LBRR */
- /*******************************************/
- if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.speech_activity_Q8 > SILK_FIX_CONST( LBRR_SPEECH_ACTIVITY_THRES, 8 ) ) {
- psEnc->sCmn.LBRR_flags[ psEnc->sCmn.nFramesEncoded ] = 1;
-
- /* Copy noise shaping quantizer state and quantization indices from regular encoding */
- silk_memcpy( &sNSQ_LBRR, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- silk_memcpy( psIndices_LBRR, &psEnc->sCmn.indices, sizeof( SideInfoIndices ) );
-
- /* Save original gains */
- silk_memcpy( TempGains, psEncCtrl->Gains, psEnc->sCmn.nb_subfr * sizeof( silk_float ) );
-
- if( psEnc->sCmn.nFramesEncoded == 0 || psEnc->sCmn.LBRR_flags[ psEnc->sCmn.nFramesEncoded - 1 ] == 0 ) {
- /* First frame in packet or previous frame not LBRR coded */
- psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex;
-
- /* Increase Gains to get target LBRR rate */
- psIndices_LBRR->GainsIndices[ 0 ] += psEnc->sCmn.LBRR_GainIncreases;
- psIndices_LBRR->GainsIndices[ 0 ] = silk_min_int( psIndices_LBRR->GainsIndices[ 0 ], N_LEVELS_QGAIN - 1 );
- }
-
- /* Decode to get gains in sync with decoder */
- silk_gains_dequant( Gains_Q16, psIndices_LBRR->GainsIndices,
- &psEnc->sCmn.LBRRprevLastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /* Overwrite unquantized gains with quantized gains and convert back to Q0 from Q16 */
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains[ k ] = Gains_Q16[ k ] * ( 1.0f / 65536.0f );
- }
-
- /*****************************************/
- /* Noise shaping quantization */
- /*****************************************/
- silk_NSQ_wrapper_FLP( psEnc, psEncCtrl, psIndices_LBRR, &sNSQ_LBRR,
- psEnc->sCmn.pulses_LBRR[ psEnc->sCmn.nFramesEncoded ], xfw );
-
- /* Restore original gains */
- silk_memcpy( psEncCtrl->Gains, TempGains, psEnc->sCmn.nb_subfr * sizeof( silk_float ) );
- }
-}
diff --git a/src/opus-1.0.2/silk/float/energy_FLP.c b/src/opus-1.0.2/silk/float/energy_FLP.c
deleted file mode 100644
index e3eedf97..00000000
--- a/src/opus-1.0.2/silk/float/energy_FLP.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-
-/* sum of squares of a silk_float array, with result as double */
-double silk_energy_FLP(
- const silk_float *data,
- opus_int dataSize
-)
-{
- opus_int i, dataSize4;
- double result;
-
- /* 4x unrolled loop */
- result = 0.0;
- dataSize4 = dataSize & 0xFFFC;
- for( i = 0; i < dataSize4; i += 4 ) {
- result += data[ i + 0 ] * (double)data[ i + 0 ] +
- data[ i + 1 ] * (double)data[ i + 1 ] +
- data[ i + 2 ] * (double)data[ i + 2 ] +
- data[ i + 3 ] * (double)data[ i + 3 ];
- }
-
- /* add any remaining products */
- for( ; i < dataSize; i++ ) {
- result += data[ i ] * (double)data[ i ];
- }
-
- silk_assert( result >= 0.0 );
- return result;
-}
diff --git a/src/opus-1.0.2/silk/float/find_LPC_FLP.c b/src/opus-1.0.2/silk/float/find_LPC_FLP.c
deleted file mode 100644
index 66fa7dd4..00000000
--- a/src/opus-1.0.2/silk/float/find_LPC_FLP.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/***********************************************************************
-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 "define.h"
-#include "main_FLP.h"
-#include "tuning_parameters.h"
-
-/* LPC analysis */
-void silk_find_LPC_FLP(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- opus_int16 NLSF_Q15[], /* O NLSFs */
- const silk_float x[], /* I Input signal */
- const silk_float minInvGain /* I Inverse of max prediction gain */
-)
-{
- opus_int k, subfr_length;
- silk_float a[ MAX_LPC_ORDER ];
-
- /* Used only for NLSF interpolation */
- silk_float res_nrg, res_nrg_2nd, res_nrg_interp;
- opus_int16 NLSF0_Q15[ MAX_LPC_ORDER ];
- silk_float a_tmp[ MAX_LPC_ORDER ];
- silk_float LPC_res[ MAX_FRAME_LENGTH + MAX_NB_SUBFR * MAX_LPC_ORDER ];
-
- subfr_length = psEncC->subfr_length + psEncC->predictLPCOrder;
-
- /* Default: No interpolation */
- psEncC->indices.NLSFInterpCoef_Q2 = 4;
-
- /* Burg AR analysis for the full frame */
- res_nrg = silk_burg_modified_FLP( a, x, minInvGain, subfr_length, psEncC->nb_subfr, psEncC->predictLPCOrder );
-
- if( psEncC->useInterpolatedNLSFs && !psEncC->first_frame_after_reset && psEncC->nb_subfr == MAX_NB_SUBFR ) {
- /* Optimal solution for last 10 ms; subtract residual energy here, as that's easier than */
- /* adding it to the residual energy of the first 10 ms in each iteration of the search below */
- res_nrg -= silk_burg_modified_FLP( a_tmp, x + ( MAX_NB_SUBFR / 2 ) * subfr_length, minInvGain, subfr_length, MAX_NB_SUBFR / 2, psEncC->predictLPCOrder );
-
- /* Convert to NLSFs */
- silk_A2NLSF_FLP( NLSF_Q15, a_tmp, psEncC->predictLPCOrder );
-
- /* Search over interpolation indices to find the one with lowest residual energy */
- res_nrg_2nd = silk_float_MAX;
- for( k = 3; k >= 0; k-- ) {
- /* Interpolate NLSFs for first half */
- silk_interpolate( NLSF0_Q15, psEncC->prev_NLSFq_Q15, NLSF_Q15, k, psEncC->predictLPCOrder );
-
- /* Convert to LPC for residual energy evaluation */
- silk_NLSF2A_FLP( a_tmp, NLSF0_Q15, psEncC->predictLPCOrder );
-
- /* Calculate residual energy with LSF interpolation */
- silk_LPC_analysis_filter_FLP( LPC_res, a_tmp, x, 2 * subfr_length, psEncC->predictLPCOrder );
- res_nrg_interp = (silk_float)(
- silk_energy_FLP( LPC_res + psEncC->predictLPCOrder, subfr_length - psEncC->predictLPCOrder ) +
- silk_energy_FLP( LPC_res + psEncC->predictLPCOrder + subfr_length, subfr_length - psEncC->predictLPCOrder ) );
-
- /* Determine whether current interpolated NLSFs are best so far */
- if( res_nrg_interp < res_nrg ) {
- /* Interpolation has lower residual energy */
- res_nrg = res_nrg_interp;
- psEncC->indices.NLSFInterpCoef_Q2 = (opus_int8)k;
- } else if( res_nrg_interp > res_nrg_2nd ) {
- /* No reason to continue iterating - residual energies will continue to climb */
- break;
- }
- res_nrg_2nd = res_nrg_interp;
- }
- }
-
- if( psEncC->indices.NLSFInterpCoef_Q2 == 4 ) {
- /* NLSF interpolation is currently inactive, calculate NLSFs from full frame AR coefficients */
- silk_A2NLSF_FLP( NLSF_Q15, a, psEncC->predictLPCOrder );
- }
-
- silk_assert( psEncC->indices.NLSFInterpCoef_Q2 == 4 ||
- ( psEncC->useInterpolatedNLSFs && !psEncC->first_frame_after_reset && psEncC->nb_subfr == MAX_NB_SUBFR ) );
-}
diff --git a/src/opus-1.0.2/silk/float/find_LTP_FLP.c b/src/opus-1.0.2/silk/float/find_LTP_FLP.c
deleted file mode 100644
index 0a3c71bb..00000000
--- a/src/opus-1.0.2/silk/float/find_LTP_FLP.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-#include "tuning_parameters.h"
-
-void silk_find_LTP_FLP(
- silk_float b[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */
- silk_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */
- silk_float *LTPredCodGain, /* O LTP coding gain */
- const silk_float r_lpc[], /* I LPC residual */
- const opus_int lag[ MAX_NB_SUBFR ], /* I LTP lags */
- const silk_float Wght[ MAX_NB_SUBFR ], /* I Weights */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int mem_offset /* I Number of samples in LTP memory */
-)
-{
- opus_int i, k;
- silk_float *b_ptr, temp, *WLTP_ptr;
- silk_float LPC_res_nrg, LPC_LTP_res_nrg;
- silk_float d[ MAX_NB_SUBFR ], m, g, delta_b[ LTP_ORDER ];
- silk_float w[ MAX_NB_SUBFR ], nrg[ MAX_NB_SUBFR ], regu;
- silk_float Rr[ LTP_ORDER ], rr[ MAX_NB_SUBFR ];
- const silk_float *r_ptr, *lag_ptr;
-
- b_ptr = b;
- WLTP_ptr = WLTP;
- r_ptr = &r_lpc[ mem_offset ];
- for( k = 0; k < nb_subfr; k++ ) {
- lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 );
-
- silk_corrMatrix_FLP( lag_ptr, subfr_length, LTP_ORDER, WLTP_ptr );
- silk_corrVector_FLP( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr );
-
- rr[ k ] = ( silk_float )silk_energy_FLP( r_ptr, subfr_length );
- regu = 1.0f + rr[ k ] +
- matrix_ptr( WLTP_ptr, 0, 0, LTP_ORDER ) +
- matrix_ptr( WLTP_ptr, LTP_ORDER-1, LTP_ORDER-1, LTP_ORDER );
- regu *= LTP_DAMPING / 3;
- silk_regularize_correlations_FLP( WLTP_ptr, &rr[ k ], regu, LTP_ORDER );
- silk_solve_LDL_FLP( WLTP_ptr, LTP_ORDER, Rr, b_ptr );
-
- /* Calculate residual energy */
- nrg[ k ] = silk_residual_energy_covar_FLP( b_ptr, WLTP_ptr, Rr, rr[ k ], LTP_ORDER );
-
- temp = Wght[ k ] / ( nrg[ k ] * Wght[ k ] + 0.01f * subfr_length );
- silk_scale_vector_FLP( WLTP_ptr, temp, LTP_ORDER * LTP_ORDER );
- w[ k ] = matrix_ptr( WLTP_ptr, LTP_ORDER / 2, LTP_ORDER / 2, LTP_ORDER );
-
- r_ptr += subfr_length;
- b_ptr += LTP_ORDER;
- WLTP_ptr += LTP_ORDER * LTP_ORDER;
- }
-
- /* Compute LTP coding gain */
- if( LTPredCodGain != NULL ) {
- LPC_LTP_res_nrg = 1e-6f;
- LPC_res_nrg = 0.0f;
- for( k = 0; k < nb_subfr; k++ ) {
- LPC_res_nrg += rr[ k ] * Wght[ k ];
- LPC_LTP_res_nrg += nrg[ k ] * Wght[ k ];
- }
-
- silk_assert( LPC_LTP_res_nrg > 0 );
- *LTPredCodGain = 3.0f * silk_log2( LPC_res_nrg / LPC_LTP_res_nrg );
- }
-
- /* Smoothing */
- /* d = sum( B, 1 ); */
- b_ptr = b;
- for( k = 0; k < nb_subfr; k++ ) {
- d[ k ] = 0;
- for( i = 0; i < LTP_ORDER; i++ ) {
- d[ k ] += b_ptr[ i ];
- }
- b_ptr += LTP_ORDER;
- }
- /* m = ( w * d' ) / ( sum( w ) + 1e-3 ); */
- temp = 1e-3f;
- for( k = 0; k < nb_subfr; k++ ) {
- temp += w[ k ];
- }
- m = 0;
- for( k = 0; k < nb_subfr; k++ ) {
- m += d[ k ] * w[ k ];
- }
- m = m / temp;
-
- b_ptr = b;
- for( k = 0; k < nb_subfr; k++ ) {
- g = LTP_SMOOTHING / ( LTP_SMOOTHING + w[ k ] ) * ( m - d[ k ] );
- temp = 0;
- for( i = 0; i < LTP_ORDER; i++ ) {
- delta_b[ i ] = silk_max_float( b_ptr[ i ], 0.1f );
- temp += delta_b[ i ];
- }
- temp = g / temp;
- for( i = 0; i < LTP_ORDER; i++ ) {
- b_ptr[ i ] = b_ptr[ i ] + delta_b[ i ] * temp;
- }
- b_ptr += LTP_ORDER;
- }
-}
diff --git a/src/opus-1.0.2/silk/float/find_pitch_lags_FLP.c b/src/opus-1.0.2/silk/float/find_pitch_lags_FLP.c
deleted file mode 100644
index 00862a6d..00000000
--- a/src/opus-1.0.2/silk/float/find_pitch_lags_FLP.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/***********************************************************************
-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"
-#include "tuning_parameters.h"
-
-void silk_find_pitch_lags_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- silk_float res[], /* O Residual */
- const silk_float x[] /* I Speech signal */
-)
-{
- opus_int buf_len;
- silk_float thrhld, res_nrg;
- const silk_float *x_buf_ptr, *x_buf;
- silk_float auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ];
- silk_float A[ MAX_FIND_PITCH_LPC_ORDER ];
- silk_float refl_coef[ MAX_FIND_PITCH_LPC_ORDER ];
- silk_float Wsig[ FIND_PITCH_LPC_WIN_MAX ];
- silk_float *Wsig_ptr;
-
- /******************************************/
- /* Set up buffer lengths etc based on Fs */
- /******************************************/
- buf_len = psEnc->sCmn.la_pitch + psEnc->sCmn.frame_length + psEnc->sCmn.ltp_mem_length;
-
- /* Safety check */
- silk_assert( buf_len >= psEnc->sCmn.pitch_LPC_win_length );
-
- x_buf = x - psEnc->sCmn.ltp_mem_length;
-
- /******************************************/
- /* Estimate LPC AR coeficients */
- /******************************************/
-
- /* Calculate windowed signal */
-
- /* First LA_LTP samples */
- x_buf_ptr = x_buf + buf_len - psEnc->sCmn.pitch_LPC_win_length;
- Wsig_ptr = Wsig;
- silk_apply_sine_window_FLP( Wsig_ptr, x_buf_ptr, 1, psEnc->sCmn.la_pitch );
-
- /* Middle non-windowed samples */
- Wsig_ptr += psEnc->sCmn.la_pitch;
- x_buf_ptr += psEnc->sCmn.la_pitch;
- silk_memcpy( Wsig_ptr, x_buf_ptr, ( psEnc->sCmn.pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 ) ) * sizeof( silk_float ) );
-
- /* Last LA_LTP samples */
- Wsig_ptr += psEnc->sCmn.pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 );
- x_buf_ptr += psEnc->sCmn.pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 );
- silk_apply_sine_window_FLP( Wsig_ptr, x_buf_ptr, 2, psEnc->sCmn.la_pitch );
-
- /* Calculate autocorrelation sequence */
- silk_autocorrelation_FLP( auto_corr, Wsig, psEnc->sCmn.pitch_LPC_win_length, psEnc->sCmn.pitchEstimationLPCOrder + 1 );
-
- /* Add white noise, as a fraction of the energy */
- auto_corr[ 0 ] += auto_corr[ 0 ] * FIND_PITCH_WHITE_NOISE_FRACTION + 1;
-
- /* Calculate the reflection coefficients using Schur */
- res_nrg = silk_schur_FLP( refl_coef, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder );
-
- /* Prediction gain */
- psEncCtrl->predGain = auto_corr[ 0 ] / silk_max_float( res_nrg, 1.0f );
-
- /* Convert reflection coefficients to prediction coefficients */
- silk_k2a_FLP( A, refl_coef, psEnc->sCmn.pitchEstimationLPCOrder );
-
- /* Bandwidth expansion */
- silk_bwexpander_FLP( A, psEnc->sCmn.pitchEstimationLPCOrder, FIND_PITCH_BANDWIDTH_EXPANSION );
-
- /*****************************************/
- /* LPC analysis filtering */
- /*****************************************/
- silk_LPC_analysis_filter_FLP( res, A, x_buf, buf_len, psEnc->sCmn.pitchEstimationLPCOrder );
-
- if( psEnc->sCmn.indices.signalType != TYPE_NO_VOICE_ACTIVITY && psEnc->sCmn.first_frame_after_reset == 0 ) {
- /* Threshold for pitch estimator */
- thrhld = 0.6f;
- thrhld -= 0.004f * psEnc->sCmn.pitchEstimationLPCOrder;
- thrhld -= 0.1f * psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f );
- thrhld -= 0.15f * (psEnc->sCmn.prevSignalType >> 1);
- thrhld -= 0.1f * psEnc->sCmn.input_tilt_Q15 * ( 1.0f / 32768.0f );
-
- /*****************************************/
- /* Call Pitch estimator */
- /*****************************************/
- if( silk_pitch_analysis_core_FLP( res, psEncCtrl->pitchL, &psEnc->sCmn.indices.lagIndex,
- &psEnc->sCmn.indices.contourIndex, &psEnc->LTPCorr, psEnc->sCmn.prevLag, psEnc->sCmn.pitchEstimationThreshold_Q16 / 65536.0f,
- thrhld, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity, psEnc->sCmn.nb_subfr ) == 0 )
- {
- psEnc->sCmn.indices.signalType = TYPE_VOICED;
- } else {
- psEnc->sCmn.indices.signalType = TYPE_UNVOICED;
- }
- } else {
- silk_memset( psEncCtrl->pitchL, 0, sizeof( psEncCtrl->pitchL ) );
- psEnc->sCmn.indices.lagIndex = 0;
- psEnc->sCmn.indices.contourIndex = 0;
- psEnc->LTPCorr = 0;
- }
-}
diff --git a/src/opus-1.0.2/silk/float/find_pred_coefs_FLP.c b/src/opus-1.0.2/silk/float/find_pred_coefs_FLP.c
deleted file mode 100644
index 2156893a..00000000
--- a/src/opus-1.0.2/silk/float/find_pred_coefs_FLP.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-
-/* Find LPC and LTP coefficients */
-void silk_find_pred_coefs_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float res_pitch[], /* I Residual from pitch analysis */
- const silk_float x[], /* I Speech signal */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int i;
- silk_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ];
- silk_float invGains[ MAX_NB_SUBFR ], Wght[ MAX_NB_SUBFR ];
- opus_int16 NLSF_Q15[ MAX_LPC_ORDER ];
- const silk_float *x_ptr;
- silk_float *x_pre_ptr, LPC_in_pre[ MAX_NB_SUBFR * MAX_LPC_ORDER + MAX_FRAME_LENGTH ];
- silk_float minInvGain;
-
- /* Weighting for weighted least squares */
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- silk_assert( psEncCtrl->Gains[ i ] > 0.0f );
- invGains[ i ] = 1.0f / psEncCtrl->Gains[ i ];
- Wght[ i ] = invGains[ i ] * invGains[ i ];
- }
-
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /**********/
- /* VOICED */
- /**********/
- silk_assert( psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder >= psEncCtrl->pitchL[ 0 ] + LTP_ORDER / 2 );
-
- /* LTP analysis */
- silk_find_LTP_FLP( psEncCtrl->LTPCoef, WLTP, &psEncCtrl->LTPredCodGain, res_pitch,
- psEncCtrl->pitchL, Wght, psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.ltp_mem_length );
-
- /* Quantize LTP gain parameters */
- silk_quant_LTP_gains_FLP( psEncCtrl->LTPCoef, psEnc->sCmn.indices.LTPIndex, &psEnc->sCmn.indices.PERIndex,
- WLTP, psEnc->sCmn.mu_LTP_Q9, psEnc->sCmn.LTPQuantLowComplexity, psEnc->sCmn.nb_subfr );
-
- /* Control LTP scaling */
- silk_LTP_scale_ctrl_FLP( psEnc, psEncCtrl, condCoding );
-
- /* Create LTP residual */
- silk_LTP_analysis_filter_FLP( LPC_in_pre, x - psEnc->sCmn.predictLPCOrder, psEncCtrl->LTPCoef,
- psEncCtrl->pitchL, invGains, psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
- } else {
- /************/
- /* UNVOICED */
- /************/
- /* Create signal with prepended subframes, scaled by inverse gains */
- x_ptr = x - psEnc->sCmn.predictLPCOrder;
- x_pre_ptr = LPC_in_pre;
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- silk_scale_copy_vector_FLP( x_pre_ptr, x_ptr, invGains[ i ],
- psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder );
- x_pre_ptr += psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder;
- x_ptr += psEnc->sCmn.subfr_length;
- }
- silk_memset( psEncCtrl->LTPCoef, 0, psEnc->sCmn.nb_subfr * LTP_ORDER * sizeof( silk_float ) );
- psEncCtrl->LTPredCodGain = 0.0f;
- }
-
- /* Limit on total predictive coding gain */
- if( psEnc->sCmn.first_frame_after_reset ) {
- minInvGain = 1.0f / MAX_PREDICTION_POWER_GAIN_AFTER_RESET;
- } else {
- minInvGain = (silk_float)pow( 2, psEncCtrl->LTPredCodGain / 3 ) / MAX_PREDICTION_POWER_GAIN;
- minInvGain /= 0.25f + 0.75f * psEncCtrl->coding_quality;
- }
-
- /* LPC_in_pre contains the LTP-filtered input for voiced, and the unfiltered input for unvoiced */
- silk_find_LPC_FLP( &psEnc->sCmn, NLSF_Q15, LPC_in_pre, minInvGain );
-
- /* Quantize LSFs */
- silk_process_NLSFs_FLP( &psEnc->sCmn, psEncCtrl->PredCoef, NLSF_Q15, psEnc->sCmn.prev_NLSFq_Q15 );
-
- /* Calculate residual energy using quantized LPC coefficients */
- silk_residual_energy_FLP( psEncCtrl->ResNrg, LPC_in_pre, psEncCtrl->PredCoef, psEncCtrl->Gains,
- psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
-
- /* Copy to prediction struct for use in next frame for interpolation */
- silk_memcpy( psEnc->sCmn.prev_NLSFq_Q15, NLSF_Q15, sizeof( psEnc->sCmn.prev_NLSFq_Q15 ) );
-}
-
diff --git a/src/opus-1.0.2/silk/float/inner_product_FLP.c b/src/opus-1.0.2/silk/float/inner_product_FLP.c
deleted file mode 100644
index 60823d6e..00000000
--- a/src/opus-1.0.2/silk/float/inner_product_FLP.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-
-/* inner product of two silk_float arrays, with result as double */
-double silk_inner_product_FLP(
- const silk_float *data1,
- const silk_float *data2,
- opus_int dataSize
-)
-{
- opus_int i, dataSize4;
- double result;
-
- /* 4x unrolled loop */
- result = 0.0;
- dataSize4 = dataSize & 0xFFFC;
- for( i = 0; i < dataSize4; i += 4 ) {
- result += data1[ i + 0 ] * (double)data2[ i + 0 ] +
- data1[ i + 1 ] * (double)data2[ i + 1 ] +
- data1[ i + 2 ] * (double)data2[ i + 2 ] +
- data1[ i + 3 ] * (double)data2[ i + 3 ];
- }
-
- /* add any remaining products */
- for( ; i < dataSize; i++ ) {
- result += data1[ i ] * (double)data2[ i ];
- }
-
- return result;
-}
diff --git a/src/opus-1.0.2/silk/float/k2a_FLP.c b/src/opus-1.0.2/silk/float/k2a_FLP.c
deleted file mode 100644
index 6f05d4b9..00000000
--- a/src/opus-1.0.2/silk/float/k2a_FLP.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-
-/* step up function, converts reflection coefficients to prediction coefficients */
-void silk_k2a_FLP(
- silk_float *A, /* O prediction coefficients [order] */
- const silk_float *rc, /* I reflection coefficients [order] */
- opus_int32 order /* I prediction order */
-)
-{
- opus_int k, n;
- silk_float Atmp[ SILK_MAX_ORDER_LPC ];
-
- for( k = 0; k < order; k++ ) {
- for( n = 0; n < k; n++ ) {
- Atmp[ n ] = A[ n ];
- }
- for( n = 0; n < k; n++ ) {
- A[ n ] += Atmp[ k - n - 1 ] * rc[ k ];
- }
- A[ k ] = -rc[ k ];
- }
-}
diff --git a/src/opus-1.0.2/silk/float/levinsondurbin_FLP.c b/src/opus-1.0.2/silk/float/levinsondurbin_FLP.c
deleted file mode 100644
index b4cd34e2..00000000
--- a/src/opus-1.0.2/silk/float/levinsondurbin_FLP.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-
-/* Solve the normal equations using the Levinson-Durbin recursion */
-silk_float silk_levinsondurbin_FLP( /* O prediction error energy */
- silk_float A[], /* O prediction coefficients [order] */
- const silk_float corr[], /* I input auto-correlations [order + 1] */
- const opus_int order /* I prediction order */
-)
-{
- opus_int i, mHalf, m;
- silk_float min_nrg, nrg, t, km, Atmp1, Atmp2;
-
- min_nrg = 1e-12f * corr[ 0 ] + 1e-9f;
- nrg = corr[ 0 ];
- nrg = silk_max_float(min_nrg, nrg);
- A[ 0 ] = corr[ 1 ] / nrg;
- nrg -= A[ 0 ] * corr[ 1 ];
- nrg = silk_max_float(min_nrg, nrg);
-
- for( m = 1; m < order; m++ )
- {
- t = corr[ m + 1 ];
- for( i = 0; i < m; i++ ) {
- t -= A[ i ] * corr[ m - i ];
- }
-
- /* reflection coefficient */
- km = t / nrg;
-
- /* residual energy */
- nrg -= km * t;
- nrg = silk_max_float(min_nrg, nrg);
-
- mHalf = m >> 1;
- for( i = 0; i < mHalf; i++ ) {
- Atmp1 = A[ i ];
- Atmp2 = A[ m - i - 1 ];
- A[ m - i - 1 ] -= km * Atmp1;
- A[ i ] -= km * Atmp2;
- }
- if( m & 1 ) {
- A[ mHalf ] -= km * A[ mHalf ];
- }
- A[ m ] = km;
- }
-
- /* return the residual energy */
- return nrg;
-}
-
diff --git a/src/opus-1.0.2/silk/float/main_FLP.h b/src/opus-1.0.2/silk/float/main_FLP.h
deleted file mode 100644
index 93455d4d..00000000
--- a/src/opus-1.0.2/silk/float/main_FLP.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/***********************************************************************
-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.
-***********************************************************************/
-
-#ifndef SILK_MAIN_FLP_H
-#define SILK_MAIN_FLP_H
-
-#include "SigProc_FLP.h"
-#include "SigProc_FIX.h"
-#include "structs_FLP.h"
-#include "main.h"
-#include "define.h"
-#include "debug.h"
-#include "entenc.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define silk_encoder_state_Fxx silk_encoder_state_FLP
-#define silk_encode_do_VAD_Fxx silk_encode_do_VAD_FLP
-#define silk_encode_frame_Fxx silk_encode_frame_FLP
-
-/*********************/
-/* Encoder Functions */
-/*********************/
-
-/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
-void silk_HP_variable_cutoff(
- silk_encoder_state_Fxx state_Fxx[] /* I/O Encoder states */
-);
-
-/* Encoder main function */
-void silk_encode_do_VAD_FLP(
- silk_encoder_state_FLP *psEnc /* I/O Encoder state FLP */
-);
-
-/* Encoder main function */
-opus_int silk_encode_frame_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- opus_int32 *pnBytesOut, /* O Number of payload bytes; */
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- opus_int condCoding, /* I The type of conditional coding to use */
- opus_int maxBits, /* I If > 0: maximum number of output bits */
- opus_int useCBR /* I Flag to force constant-bitrate operation */
-);
-
-/* Initializes the Silk encoder state */
-opus_int silk_init_encoder(
- silk_encoder_state_FLP *psEnc /* I/O Encoder state FLP */
-);
-
-/* Control the Silk encoder */
-opus_int silk_control_encoder(
- silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */
- silk_EncControlStruct *encControl, /* I Control structure */
- const opus_int32 TargetRate_bps, /* I Target max bitrate (bps) */
- const opus_int allow_bw_switch, /* I Flag to allow switching audio bandwidth */
- const opus_int channelNb, /* I Channel number */
- const opus_int force_fs_kHz
-);
-
-/****************/
-/* Prefiltering */
-/****************/
-void silk_prefilter_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- const silk_encoder_control_FLP *psEncCtrl, /* I Encoder control FLP */
- silk_float xw[], /* O Weighted signal */
- const silk_float x[] /* I Speech signal */
-);
-
-/**************************/
-/* Noise shaping analysis */
-/**************************/
-/* Compute noise shaping coefficients and initial gain values */
-void silk_noise_shape_analysis_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float *pitch_res, /* I LPC residual from pitch analysis */
- const silk_float *x /* I Input signal [frame_length + la_shape] */
-);
-
-/* Autocorrelations for a warped frequency axis */
-void silk_warped_autocorrelation_FLP(
- silk_float *corr, /* O Result [order + 1] */
- const silk_float *input, /* I Input data to correlate */
- const silk_float warping, /* I Warping coefficient */
- const opus_int length, /* I Length of input */
- const opus_int order /* I Correlation order (even) */
-);
-
-/* Calculation of LTP state scaling */
-void silk_LTP_scale_ctrl_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/**********************************************/
-/* Prediction Analysis */
-/**********************************************/
-/* Find pitch lags */
-void silk_find_pitch_lags_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- silk_float res[], /* O Residual */
- const silk_float x[] /* I Speech signal */
-);
-
-/* Find LPC and LTP coefficients */
-void silk_find_pred_coefs_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float res_pitch[], /* I Residual from pitch analysis */
- const silk_float x[], /* I Speech signal */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/* LPC analysis */
-void silk_find_LPC_FLP(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- opus_int16 NLSF_Q15[], /* O NLSFs */
- const silk_float x[], /* I Input signal */
- const silk_float minInvGain /* I Prediction gain from LTP (dB) */
-);
-
-/* LTP analysis */
-void silk_find_LTP_FLP(
- silk_float b[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */
- silk_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */
- silk_float *LTPredCodGain, /* O LTP coding gain */
- const silk_float r_lpc[], /* I LPC residual */
- const opus_int lag[ MAX_NB_SUBFR ], /* I LTP lags */
- const silk_float Wght[ MAX_NB_SUBFR ], /* I Weights */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int mem_offset /* I Number of samples in LTP memory */
-);
-
-void silk_LTP_analysis_filter_FLP(
- silk_float *LTP_res, /* O LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */
- const silk_float *x, /* I Input signal, with preceding samples */
- const silk_float B[ LTP_ORDER * MAX_NB_SUBFR ], /* I LTP coefficients for each subframe */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const silk_float invGains[ MAX_NB_SUBFR ], /* I Inverse quantization gains */
- const opus_int subfr_length, /* I Length of each subframe */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int pre_length /* I Preceding samples for each subframe */
-);
-
-/* Calculates residual energies of input subframes where all subframes have LPC_order */
-/* of preceding samples */
-void silk_residual_energy_FLP(
- silk_float nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */
- const silk_float x[], /* I Input signal */
- silk_float a[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */
- const silk_float gains[], /* I Quantization gains */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int LPC_order /* I LPC order */
-);
-
-/* 16th order LPC analysis filter */
-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 */
-);
-
-/* LTP tap quantizer */
-void silk_quant_LTP_gains_FLP(
- silk_float B[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (Un-)quantized LTP gains */
- opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook index */
- opus_int8 *periodicity_index, /* O Periodicity index */
- const silk_float W[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* I Error weights */
- const opus_int mu_Q10, /* I Mu value (R/D tradeoff) */
- const opus_int lowComplexity, /* I Flag for low complexity */
- const opus_int nb_subfr /* I number of subframes */
-);
-
-/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
-silk_float silk_residual_energy_covar_FLP( /* O Weighted residual energy */
- const silk_float *c, /* I Filter coefficients */
- silk_float *wXX, /* I/O Weighted correlation matrix, reg. out */
- const silk_float *wXx, /* I Weighted correlation vector */
- const silk_float wxx, /* I Weighted correlation value */
- const opus_int D /* I Dimension */
-);
-
-/* Processing of gains */
-void silk_process_gains_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/******************/
-/* Linear Algebra */
-/******************/
-/* Calculates correlation matrix X'*X */
-void silk_corrMatrix_FLP(
- const silk_float *x, /* I x vector [ L+order-1 ] used to create X */
- const opus_int L, /* I Length of vectors */
- const opus_int Order, /* I Max lag for correlation */
- silk_float *XX /* O X'*X correlation matrix [order x order] */
-);
-
-/* Calculates correlation vector X'*t */
-void silk_corrVector_FLP(
- const silk_float *x, /* I x vector [L+order-1] used to create X */
- const silk_float *t, /* I Target vector [L] */
- const opus_int L, /* I Length of vecors */
- const opus_int Order, /* I Max lag for correlation */
- silk_float *Xt /* O X'*t correlation vector [order] */
-);
-
-/* Add noise to matrix diagonal */
-void silk_regularize_correlations_FLP(
- silk_float *XX, /* I/O Correlation matrices */
- silk_float *xx, /* I/O Correlation values */
- const silk_float noise, /* I Noise energy to add */
- const opus_int D /* I Dimension of XX */
-);
-
-/* Function to solve linear equation Ax = b, where A is an MxM symmetric matrix */
-void silk_solve_LDL_FLP(
- silk_float *A, /* I/O Symmetric square matrix, out: reg. */
- const opus_int M, /* I Size of matrix */
- const silk_float *b, /* I Pointer to b vector */
- silk_float *x /* O Pointer to x solution vector */
-);
-
-/* Apply sine window to signal vector. */
-/* Window types: */
-/* 1 -> sine window from 0 to pi/2 */
-/* 2 -> sine window from pi/2 to pi */
-void silk_apply_sine_window_FLP(
- silk_float px_win[], /* O Pointer to windowed signal */
- const silk_float px[], /* I Pointer to input signal */
- const opus_int win_type, /* I Selects a window type */
- const opus_int length /* I Window length, multiple of 4 */
-);
-
-/* Wrapper functions. Call flp / fix code */
-
-/* Convert AR filter coefficients to NLSF parameters */
-void silk_A2NLSF_FLP(
- opus_int16 *NLSF_Q15, /* O NLSF vector [ LPC_order ] */
- const silk_float *pAR, /* I LPC coefficients [ LPC_order ] */
- const opus_int LPC_order /* I LPC order */
-);
-
-/* Convert NLSF parameters to AR prediction filter coefficients */
-void silk_NLSF2A_FLP(
- silk_float *pAR, /* O LPC coefficients [ LPC_order ] */
- const opus_int16 *NLSF_Q15, /* I NLSF vector [ LPC_order ] */
- const opus_int LPC_order /* I LPC order */
-);
-
-/* Limit, stabilize, and quantize NLSFs */
-void silk_process_NLSFs_FLP(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- silk_float PredCoef[ 2 ][ MAX_LPC_ORDER ], /* O Prediction coefficients */
- opus_int16 NLSF_Q15[ MAX_LPC_ORDER ], /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */
- const opus_int16 prev_NLSF_Q15[ MAX_LPC_ORDER ] /* I Previous Normalized LSFs (0 - (2^15-1)) */
-);
-
-/* Floating-point Silk NSQ wrapper */
-void silk_NSQ_wrapper_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- SideInfoIndices *psIndices, /* I/O Quantization indices */
- silk_nsq_state *psNSQ, /* I/O Noise Shaping Quantzation state */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const silk_float x[] /* I Prefiltered input signal */
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/src/opus-1.0.2/silk/float/noise_shape_analysis_FLP.c b/src/opus-1.0.2/silk/float/noise_shape_analysis_FLP.c
deleted file mode 100644
index 33bfd20d..00000000
--- a/src/opus-1.0.2/silk/float/noise_shape_analysis_FLP.c
+++ /dev/null
@@ -1,365 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-#include "tuning_parameters.h"
-
-/* Compute gain to make warped filter coefficients have a zero mean log frequency response on a */
-/* non-warped frequency scale. (So that it can be implemented with a minimum-phase monic filter.) */
-/* Note: A monic filter is one with the first coefficient equal to 1.0. In Silk we omit the first */
-/* coefficient in an array of coefficients, for monic filters. */
-static inline silk_float warped_gain(
- const silk_float *coefs,
- silk_float lambda,
- opus_int order
-) {
- opus_int i;
- silk_float gain;
-
- lambda = -lambda;
- gain = coefs[ order - 1 ];
- for( i = order - 2; i >= 0; i-- ) {
- gain = lambda * gain + coefs[ i ];
- }
- return (silk_float)( 1.0f / ( 1.0f - lambda * gain ) );
-}
-
-/* Convert warped filter coefficients to monic pseudo-warped coefficients and limit maximum */
-/* amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */
-static inline void warped_true2monic_coefs(
- silk_float *coefs_syn,
- silk_float *coefs_ana,
- silk_float lambda,
- silk_float limit,
- opus_int order
-) {
- opus_int i, iter, ind = 0;
- silk_float tmp, maxabs, chirp, gain_syn, gain_ana;
-
- /* Convert to monic coefficients */
- for( i = order - 1; i > 0; i-- ) {
- coefs_syn[ i - 1 ] -= lambda * coefs_syn[ i ];
- coefs_ana[ i - 1 ] -= lambda * coefs_ana[ i ];
- }
- gain_syn = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_syn[ 0 ] );
- gain_ana = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_ana[ 0 ] );
- for( i = 0; i < order; i++ ) {
- coefs_syn[ i ] *= gain_syn;
- coefs_ana[ i ] *= gain_ana;
- }
-
- /* Limit */
- for( iter = 0; iter < 10; iter++ ) {
- /* Find maximum absolute value */
- maxabs = -1.0f;
- for( i = 0; i < order; i++ ) {
- tmp = silk_max( silk_abs_float( coefs_syn[ i ] ), silk_abs_float( coefs_ana[ i ] ) );
- if( tmp > maxabs ) {
- maxabs = tmp;
- ind = i;
- }
- }
- if( maxabs <= limit ) {
- /* Coefficients are within range - done */
- return;
- }
-
- /* Convert back to true warped coefficients */
- for( i = 1; i < order; i++ ) {
- coefs_syn[ i - 1 ] += lambda * coefs_syn[ i ];
- coefs_ana[ i - 1 ] += lambda * coefs_ana[ i ];
- }
- gain_syn = 1.0f / gain_syn;
- gain_ana = 1.0f / gain_ana;
- for( i = 0; i < order; i++ ) {
- coefs_syn[ i ] *= gain_syn;
- coefs_ana[ i ] *= gain_ana;
- }
-
- /* Apply bandwidth expansion */
- chirp = 0.99f - ( 0.8f + 0.1f * iter ) * ( maxabs - limit ) / ( maxabs * ( ind + 1 ) );
- silk_bwexpander_FLP( coefs_syn, order, chirp );
- silk_bwexpander_FLP( coefs_ana, order, chirp );
-
- /* Convert to monic warped coefficients */
- for( i = order - 1; i > 0; i-- ) {
- coefs_syn[ i - 1 ] -= lambda * coefs_syn[ i ];
- coefs_ana[ i - 1 ] -= lambda * coefs_ana[ i ];
- }
- gain_syn = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_syn[ 0 ] );
- gain_ana = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_ana[ 0 ] );
- for( i = 0; i < order; i++ ) {
- coefs_syn[ i ] *= gain_syn;
- coefs_ana[ i ] *= gain_ana;
- }
- }
- silk_assert( 0 );
-}
-
-/* Compute noise shaping coefficients and initial gain values */
-void silk_noise_shape_analysis_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float *pitch_res, /* I LPC residual from pitch analysis */
- const silk_float *x /* I Input signal [frame_length + la_shape] */
-)
-{
- silk_shape_state_FLP *psShapeSt = &psEnc->sShape;
- opus_int k, nSamples;
- silk_float SNR_adj_dB, HarmBoost, HarmShapeGain, Tilt;
- silk_float nrg, pre_nrg, log_energy, log_energy_prev, energy_variation;
- silk_float delta, BWExp1, BWExp2, gain_mult, gain_add, strength, b, warping;
- silk_float x_windowed[ SHAPE_LPC_WIN_MAX ];
- silk_float auto_corr[ MAX_SHAPE_LPC_ORDER + 1 ];
- const silk_float *x_ptr, *pitch_res_ptr;
-
- /* Point to start of first LPC analysis block */
- x_ptr = x - psEnc->sCmn.la_shape;
-
- /****************/
- /* GAIN CONTROL */
- /****************/
- SNR_adj_dB = psEnc->sCmn.SNR_dB_Q7 * ( 1 / 128.0f );
-
- /* Input quality is the average of the quality in the lowest two VAD bands */
- psEncCtrl->input_quality = 0.5f * ( psEnc->sCmn.input_quality_bands_Q15[ 0 ] + psEnc->sCmn.input_quality_bands_Q15[ 1 ] ) * ( 1.0f / 32768.0f );
-
- /* Coding quality level, between 0.0 and 1.0 */
- psEncCtrl->coding_quality = silk_sigmoid( 0.25f * ( SNR_adj_dB - 20.0f ) );
-
- if( psEnc->sCmn.useCBR == 0 ) {
- /* Reduce coding SNR during low speech activity */
- b = 1.0f - psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f );
- SNR_adj_dB -= BG_SNR_DECR_dB * psEncCtrl->coding_quality * ( 0.5f + 0.5f * psEncCtrl->input_quality ) * b * b;
- }
-
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Reduce gains for periodic signals */
- SNR_adj_dB += HARM_SNR_INCR_dB * psEnc->LTPCorr;
- } else {
- /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */
- SNR_adj_dB += ( -0.4f * psEnc->sCmn.SNR_dB_Q7 * ( 1 / 128.0f ) + 6.0f ) * ( 1.0f - psEncCtrl->input_quality );
- }
-
- /*************************/
- /* SPARSENESS PROCESSING */
- /*************************/
- /* Set quantizer offset */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Initially set to 0; may be overruled in process_gains(..) */
- psEnc->sCmn.indices.quantOffsetType = 0;
- psEncCtrl->sparseness = 0.0f;
- } else {
- /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */
- nSamples = 2 * psEnc->sCmn.fs_kHz;
- energy_variation = 0.0f;
- log_energy_prev = 0.0f;
- pitch_res_ptr = pitch_res;
- for( k = 0; k < silk_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) / 2; k++ ) {
- nrg = ( silk_float )nSamples + ( silk_float )silk_energy_FLP( pitch_res_ptr, nSamples );
- log_energy = silk_log2( nrg );
- if( k > 0 ) {
- energy_variation += silk_abs_float( log_energy - log_energy_prev );
- }
- log_energy_prev = log_energy;
- pitch_res_ptr += nSamples;
- }
- psEncCtrl->sparseness = silk_sigmoid( 0.4f * ( energy_variation - 5.0f ) );
-
- /* Set quantization offset depending on sparseness measure */
- if( psEncCtrl->sparseness > SPARSENESS_THRESHOLD_QNT_OFFSET ) {
- psEnc->sCmn.indices.quantOffsetType = 0;
- } else {
- psEnc->sCmn.indices.quantOffsetType = 1;
- }
-
- /* Increase coding SNR for sparse signals */
- SNR_adj_dB += SPARSE_SNR_INCR_dB * ( psEncCtrl->sparseness - 0.5f );
- }
-
- /*******************************/
- /* Control bandwidth expansion */
- /*******************************/
- /* More BWE for signals with high prediction gain */
- strength = FIND_PITCH_WHITE_NOISE_FRACTION * psEncCtrl->predGain; /* between 0.0 and 1.0 */
- BWExp1 = BWExp2 = BANDWIDTH_EXPANSION / ( 1.0f + strength * strength );
- delta = LOW_RATE_BANDWIDTH_EXPANSION_DELTA * ( 1.0f - 0.75f * psEncCtrl->coding_quality );
- BWExp1 -= delta;
- BWExp2 += delta;
- /* BWExp1 will be applied after BWExp2, so make it relative */
- BWExp1 /= BWExp2;
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Slightly more warping in analysis will move quantization noise up in frequency, where it's better masked */
- warping = (silk_float)psEnc->sCmn.warping_Q16 / 65536.0f + 0.01f * psEncCtrl->coding_quality;
- } else {
- warping = 0.0f;
- }
-
- /********************************************/
- /* Compute noise shaping AR coefs and gains */
- /********************************************/
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Apply window: sine slope followed by flat part followed by cosine slope */
- opus_int shift, slope_part, flat_part;
- flat_part = psEnc->sCmn.fs_kHz * 3;
- slope_part = ( psEnc->sCmn.shapeWinLength - flat_part ) / 2;
-
- silk_apply_sine_window_FLP( x_windowed, x_ptr, 1, slope_part );
- shift = slope_part;
- silk_memcpy( x_windowed + shift, x_ptr + shift, flat_part * sizeof(silk_float) );
- shift += flat_part;
- silk_apply_sine_window_FLP( x_windowed + shift, x_ptr + shift, 2, slope_part );
-
- /* Update pointer: next LPC analysis block */
- x_ptr += psEnc->sCmn.subfr_length;
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Calculate warped auto correlation */
- silk_warped_autocorrelation_FLP( auto_corr, x_windowed, warping,
- psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder );
- } else {
- /* Calculate regular auto correlation */
- silk_autocorrelation_FLP( auto_corr, x_windowed, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder + 1 );
- }
-
- /* Add white noise, as a fraction of energy */
- auto_corr[ 0 ] += auto_corr[ 0 ] * SHAPE_WHITE_NOISE_FRACTION;
-
- /* Convert correlations to prediction coefficients, and compute residual energy */
- nrg = silk_levinsondurbin_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], auto_corr, psEnc->sCmn.shapingLPCOrder );
- psEncCtrl->Gains[ k ] = ( silk_float )sqrt( nrg );
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Adjust gain for warping */
- psEncCtrl->Gains[ k ] *= warped_gain( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder );
- }
-
- /* Bandwidth expansion for synthesis filter shaping */
- silk_bwexpander_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder, BWExp2 );
-
- /* Compute noise shaping filter coefficients */
- silk_memcpy(
- &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ],
- &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ],
- psEnc->sCmn.shapingLPCOrder * sizeof( silk_float ) );
-
- /* Bandwidth expansion for analysis filter shaping */
- silk_bwexpander_FLP( &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder, BWExp1 );
-
- /* Ratio of prediction gains, in energy domain */
- pre_nrg = silk_LPC_inverse_pred_gain_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder );
- nrg = silk_LPC_inverse_pred_gain_FLP( &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder );
- psEncCtrl->GainsPre[ k ] = 1.0f - 0.7f * ( 1.0f - pre_nrg / nrg );
-
- /* Convert to monic warped prediction coefficients and limit absolute values */
- warped_true2monic_coefs( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ],
- warping, 3.999f, psEnc->sCmn.shapingLPCOrder );
- }
-
- /*****************/
- /* Gain tweaking */
- /*****************/
- /* Increase gains during low speech activity */
- gain_mult = (silk_float)pow( 2.0f, -0.16f * SNR_adj_dB );
- gain_add = (silk_float)pow( 2.0f, 0.16f * MIN_QGAIN_DB );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains[ k ] *= gain_mult;
- psEncCtrl->Gains[ k ] += gain_add;
- }
-
- gain_mult = 1.0f + INPUT_TILT + psEncCtrl->coding_quality * HIGH_RATE_INPUT_TILT;
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->GainsPre[ k ] *= gain_mult;
- }
-
- /************************************************/
- /* Control low-frequency shaping and noise tilt */
- /************************************************/
- /* Less low frequency shaping for noisy inputs */
- strength = LOW_FREQ_SHAPING * ( 1.0f + LOW_QUALITY_LOW_FREQ_SHAPING_DECR * ( psEnc->sCmn.input_quality_bands_Q15[ 0 ] * ( 1.0f / 32768.0f ) - 1.0f ) );
- strength *= psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f );
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Reduce low frequencies quantization noise for periodic signals, depending on pitch lag */
- /*f = 400; freqz([1, -0.98 + 2e-4 * f], [1, -0.97 + 7e-4 * f], 2^12, Fs); axis([0, 1000, -10, 1])*/
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- b = 0.2f / psEnc->sCmn.fs_kHz + 3.0f / psEncCtrl->pitchL[ k ];
- psEncCtrl->LF_MA_shp[ k ] = -1.0f + b;
- psEncCtrl->LF_AR_shp[ k ] = 1.0f - b - b * strength;
- }
- Tilt = - HP_NOISE_COEF -
- (1 - HP_NOISE_COEF) * HARM_HP_NOISE_COEF * psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f );
- } else {
- b = 1.3f / psEnc->sCmn.fs_kHz;
- psEncCtrl->LF_MA_shp[ 0 ] = -1.0f + b;
- psEncCtrl->LF_AR_shp[ 0 ] = 1.0f - b - b * strength * 0.6f;
- for( k = 1; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->LF_MA_shp[ k ] = psEncCtrl->LF_MA_shp[ 0 ];
- psEncCtrl->LF_AR_shp[ k ] = psEncCtrl->LF_AR_shp[ 0 ];
- }
- Tilt = -HP_NOISE_COEF;
- }
-
- /****************************/
- /* HARMONIC SHAPING CONTROL */
- /****************************/
- /* Control boosting of harmonic frequencies */
- HarmBoost = LOW_RATE_HARMONIC_BOOST * ( 1.0f - psEncCtrl->coding_quality ) * psEnc->LTPCorr;
-
- /* More harmonic boost for noisy input signals */
- HarmBoost += LOW_INPUT_QUALITY_HARMONIC_BOOST * ( 1.0f - psEncCtrl->input_quality );
-
- if( USE_HARM_SHAPING && psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Harmonic noise shaping */
- HarmShapeGain = HARMONIC_SHAPING;
-
- /* More harmonic noise shaping for high bitrates or noisy input */
- HarmShapeGain += HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING *
- ( 1.0f - ( 1.0f - psEncCtrl->coding_quality ) * psEncCtrl->input_quality );
-
- /* Less harmonic noise shaping for less periodic signals */
- HarmShapeGain *= ( silk_float )sqrt( psEnc->LTPCorr );
- } else {
- HarmShapeGain = 0.0f;
- }
-
- /*************************/
- /* Smooth over subframes */
- /*************************/
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psShapeSt->HarmBoost_smth += SUBFR_SMTH_COEF * ( HarmBoost - psShapeSt->HarmBoost_smth );
- psEncCtrl->HarmBoost[ k ] = psShapeSt->HarmBoost_smth;
- psShapeSt->HarmShapeGain_smth += SUBFR_SMTH_COEF * ( HarmShapeGain - psShapeSt->HarmShapeGain_smth );
- psEncCtrl->HarmShapeGain[ k ] = psShapeSt->HarmShapeGain_smth;
- psShapeSt->Tilt_smth += SUBFR_SMTH_COEF * ( Tilt - psShapeSt->Tilt_smth );
- psEncCtrl->Tilt[ k ] = psShapeSt->Tilt_smth;
- }
-}
diff --git a/src/opus-1.0.2/silk/float/pitch_analysis_core_FLP.c b/src/opus-1.0.2/silk/float/pitch_analysis_core_FLP.c
deleted file mode 100644
index fbff90c3..00000000
--- a/src/opus-1.0.2/silk/float/pitch_analysis_core_FLP.c
+++ /dev/null
@@ -1,630 +0,0 @@
-/***********************************************************************
-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
-
-/*****************************************************************************
-* Pitch analyser function
-******************************************************************************/
-#include "SigProc_FLP.h"
-#include "SigProc_FIX.h"
-#include "pitch_est_defines.h"
-
-#define SCRATCH_SIZE 22
-#define eps 1.192092896e-07f
-
-/************************************************************/
-/* Internally used functions */
-/************************************************************/
-static void silk_P_Ana_calc_corr_st3(
- silk_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
- const silk_float frame[], /* I vector to correlate */
- opus_int start_lag, /* I start lag */
- opus_int sf_length, /* I sub frame length */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity /* I Complexity setting */
-);
-
-static void silk_P_Ana_calc_energy_st3(
- silk_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
- const silk_float frame[], /* I vector to correlate */
- opus_int start_lag, /* I start lag */
- opus_int sf_length, /* I sub frame length */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity /* I Complexity setting */
-);
-
-/************************************************************/
-/* CORE PITCH ANALYSIS FUNCTION */
-/************************************************************/
-opus_int silk_pitch_analysis_core_FLP( /* O Voicing estimate: 0 voiced, 1 unvoiced */
- const silk_float *frame, /* I Signal of length PE_FRAME_LENGTH_MS*Fs_kHz */
- opus_int *pitch_out, /* O Pitch lag values [nb_subfr] */
- opus_int16 *lagIndex, /* O Lag Index */
- opus_int8 *contourIndex, /* O Pitch contour Index */
- silk_float *LTPCorr, /* I/O Normalized correlation; input: value from previous frame */
- opus_int prevLag, /* I Last lag of previous frame; set to zero is unvoiced */
- const silk_float search_thres1, /* I First stage threshold for lag candidates 0 - 1 */
- const silk_float search_thres2, /* I Final threshold for lag candidates 0 - 1 */
- const opus_int Fs_kHz, /* I sample frequency (kHz) */
- const opus_int complexity, /* I Complexity setting, 0-2, where 2 is highest */
- const opus_int nb_subfr /* I Number of 5 ms subframes */
-)
-{
- opus_int i, k, d, j;
- silk_float frame_8kHz[ PE_MAX_FRAME_LENGTH_MS * 8 ];
- silk_float frame_4kHz[ PE_MAX_FRAME_LENGTH_MS * 4 ];
- opus_int16 frame_8_FIX[ PE_MAX_FRAME_LENGTH_MS * 8 ];
- opus_int16 frame_4_FIX[ PE_MAX_FRAME_LENGTH_MS * 4 ];
- opus_int32 filt_state[ 6 ];
- silk_float threshold, contour_bias;
- silk_float C[ PE_MAX_NB_SUBFR][ (PE_MAX_LAG >> 1) + 5 ];
- silk_float CC[ PE_NB_CBKS_STAGE2_EXT ];
- const silk_float *target_ptr, *basis_ptr;
- double cross_corr, normalizer, energy, energy_tmp;
- opus_int d_srch[ PE_D_SRCH_LENGTH ];
- opus_int16 d_comp[ (PE_MAX_LAG >> 1) + 5 ];
- opus_int length_d_srch, length_d_comp;
- silk_float Cmax, CCmax, CCmax_b, CCmax_new_b, CCmax_new;
- opus_int CBimax, CBimax_new, lag, start_lag, end_lag, lag_new;
- opus_int cbk_size;
- silk_float lag_log2, prevLag_log2, delta_lag_log2_sqr;
- silk_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ];
- silk_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ];
- opus_int lag_counter;
- opus_int frame_length, frame_length_8kHz, frame_length_4kHz;
- opus_int sf_length, sf_length_8kHz, sf_length_4kHz;
- opus_int min_lag, min_lag_8kHz, min_lag_4kHz;
- opus_int max_lag, max_lag_8kHz, max_lag_4kHz;
- opus_int nb_cbk_search;
- const opus_int8 *Lag_CB_ptr;
-
- /* Check for valid sampling frequency */
- silk_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 );
-
- /* Check for valid complexity setting */
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- silk_assert( search_thres1 >= 0.0f && search_thres1 <= 1.0f );
- silk_assert( search_thres2 >= 0.0f && search_thres2 <= 1.0f );
-
- /* Set up frame lengths max / min lag for the sampling frequency */
- frame_length = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * Fs_kHz;
- frame_length_4kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 4;
- frame_length_8kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 8;
- sf_length = PE_SUBFR_LENGTH_MS * Fs_kHz;
- sf_length_4kHz = PE_SUBFR_LENGTH_MS * 4;
- sf_length_8kHz = PE_SUBFR_LENGTH_MS * 8;
- min_lag = PE_MIN_LAG_MS * Fs_kHz;
- min_lag_4kHz = PE_MIN_LAG_MS * 4;
- min_lag_8kHz = PE_MIN_LAG_MS * 8;
- max_lag = PE_MAX_LAG_MS * Fs_kHz - 1;
- max_lag_4kHz = PE_MAX_LAG_MS * 4;
- max_lag_8kHz = PE_MAX_LAG_MS * 8 - 1;
-
- silk_memset(C, 0, sizeof(silk_float) * nb_subfr * ((PE_MAX_LAG >> 1) + 5));
-
- /* Resample from input sampled at Fs_kHz to 8 kHz */
- if( Fs_kHz == 16 ) {
- /* Resample to 16 -> 8 khz */
- opus_int16 frame_16_FIX[ 16 * PE_MAX_FRAME_LENGTH_MS ];
- silk_float2short_array( frame_16_FIX, frame, frame_length );
- silk_memset( filt_state, 0, 2 * sizeof( opus_int32 ) );
- silk_resampler_down2( filt_state, frame_8_FIX, frame_16_FIX, frame_length );
- silk_short2float_array( frame_8kHz, frame_8_FIX, frame_length_8kHz );
- } else if( Fs_kHz == 12 ) {
- /* Resample to 12 -> 8 khz */
- opus_int16 frame_12_FIX[ 12 * PE_MAX_FRAME_LENGTH_MS ];
- silk_float2short_array( frame_12_FIX, frame, frame_length );
- silk_memset( filt_state, 0, 6 * sizeof( opus_int32 ) );
- silk_resampler_down2_3( filt_state, frame_8_FIX, frame_12_FIX, frame_length );
- silk_short2float_array( frame_8kHz, frame_8_FIX, frame_length_8kHz );
- } else {
- silk_assert( Fs_kHz == 8 );
- silk_float2short_array( frame_8_FIX, frame, frame_length_8kHz );
- }
-
- /* Decimate again to 4 kHz */
- silk_memset( filt_state, 0, 2 * sizeof( opus_int32 ) );
- silk_resampler_down2( filt_state, frame_4_FIX, frame_8_FIX, frame_length_8kHz );
- silk_short2float_array( frame_4kHz, frame_4_FIX, frame_length_4kHz );
-
- /* Low-pass filter */
- for( i = frame_length_4kHz - 1; i > 0; i-- ) {
- frame_4kHz[ i ] += frame_4kHz[ i - 1 ];
- }
-
- /******************************************************************************
- * FIRST STAGE, operating in 4 khz
- ******************************************************************************/
- target_ptr = &frame_4kHz[ silk_LSHIFT( sf_length_4kHz, 2 ) ];
- for( k = 0; k < nb_subfr >> 1; k++ ) {
- /* Check that we are within range of the array */
- silk_assert( target_ptr >= frame_4kHz );
- silk_assert( target_ptr + sf_length_8kHz <= frame_4kHz + frame_length_4kHz );
-
- basis_ptr = target_ptr - min_lag_4kHz;
-
- /* Check that we are within range of the array */
- silk_assert( basis_ptr >= frame_4kHz );
- silk_assert( basis_ptr + sf_length_8kHz <= frame_4kHz + frame_length_4kHz );
-
- /* Calculate first vector products before loop */
- cross_corr = silk_inner_product_FLP( target_ptr, basis_ptr, sf_length_8kHz );
- normalizer = silk_energy_FLP( basis_ptr, sf_length_8kHz ) + sf_length_8kHz * 4000.0f;
-
- C[ 0 ][ min_lag_4kHz ] += (silk_float)(cross_corr / sqrt(normalizer));
-
- /* From now on normalizer is computed recursively */
- for(d = min_lag_4kHz + 1; d <= max_lag_4kHz; d++) {
- basis_ptr--;
-
- /* Check that we are within range of the array */
- silk_assert( basis_ptr >= frame_4kHz );
- silk_assert( basis_ptr + sf_length_8kHz <= frame_4kHz + frame_length_4kHz );
-
- cross_corr = silk_inner_product_FLP(target_ptr, basis_ptr, sf_length_8kHz);
-
- /* Add contribution of new sample and remove contribution from oldest sample */
- normalizer +=
- basis_ptr[ 0 ] * (double)basis_ptr[ 0 ] -
- basis_ptr[ sf_length_8kHz ] * (double)basis_ptr[ sf_length_8kHz ];
- C[ 0 ][ d ] += (silk_float)(cross_corr / sqrt( normalizer ));
- }
- /* Update target pointer */
- target_ptr += sf_length_8kHz;
- }
-
- /* Apply short-lag bias */
- for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) {
- C[ 0 ][ i ] -= C[ 0 ][ i ] * i / 4096.0f;
- }
-
- /* Sort */
- length_d_srch = 4 + 2 * complexity;
- silk_assert( 3 * length_d_srch <= PE_D_SRCH_LENGTH );
- silk_insertion_sort_decreasing_FLP( &C[ 0 ][ min_lag_4kHz ], d_srch, max_lag_4kHz - min_lag_4kHz + 1, length_d_srch );
-
- /* Escape if correlation is very low already here */
- Cmax = C[ 0 ][ min_lag_4kHz ];
- target_ptr = &frame_4kHz[ silk_SMULBB( sf_length_4kHz, nb_subfr ) ];
- energy = 1000.0f;
- for( i = 0; i < silk_LSHIFT( sf_length_4kHz, 2 ); i++ ) {
- energy += target_ptr[i] * (double)target_ptr[i];
- }
- threshold = Cmax * Cmax;
- if( energy / 16.0f > threshold ) {
- silk_memset( pitch_out, 0, nb_subfr * sizeof( opus_int ) );
- *LTPCorr = 0.0f;
- *lagIndex = 0;
- *contourIndex = 0;
- return 1;
- }
-
- threshold = search_thres1 * Cmax;
- for( i = 0; i < length_d_srch; i++ ) {
- /* Convert to 8 kHz indices for the sorted correlation that exceeds the threshold */
- if( C[ 0 ][ min_lag_4kHz + i ] > threshold ) {
- d_srch[ i ] = silk_LSHIFT( d_srch[ i ] + min_lag_4kHz, 1 );
- } else {
- length_d_srch = i;
- break;
- }
- }
- silk_assert( length_d_srch > 0 );
-
- for( i = min_lag_8kHz - 5; i < max_lag_8kHz + 5; i++ ) {
- d_comp[ i ] = 0;
- }
- for( i = 0; i < length_d_srch; i++ ) {
- d_comp[ d_srch[ i ] ] = 1;
- }
-
- /* Convolution */
- for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) {
- d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ];
- }
-
- length_d_srch = 0;
- for( i = min_lag_8kHz; i < max_lag_8kHz + 1; i++ ) {
- if( d_comp[ i + 1 ] > 0 ) {
- d_srch[ length_d_srch ] = i;
- length_d_srch++;
- }
- }
-
- /* Convolution */
- for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) {
- d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ] + d_comp[ i - 3 ];
- }
-
- length_d_comp = 0;
- for( i = min_lag_8kHz; i < max_lag_8kHz + 4; i++ ) {
- if( d_comp[ i ] > 0 ) {
- d_comp[ length_d_comp ] = (opus_int16)( i - 2 );
- length_d_comp++;
- }
- }
-
- /**********************************************************************************
- ** SECOND STAGE, operating at 8 kHz, on lag sections with high correlation
- *************************************************************************************/
- /*********************************************************************************
- * Find energy of each subframe projected onto its history, for a range of delays
- *********************************************************************************/
- silk_memset( C, 0, PE_MAX_NB_SUBFR*((PE_MAX_LAG >> 1) + 5) * sizeof(silk_float));
-
- if( Fs_kHz == 8 ) {
- target_ptr = &frame[ PE_LTP_MEM_LENGTH_MS * 8 ];
- } else {
- target_ptr = &frame_8kHz[ PE_LTP_MEM_LENGTH_MS * 8 ];
- }
- for( k = 0; k < nb_subfr; k++ ) {
- energy_tmp = silk_energy_FLP( target_ptr, sf_length_8kHz );
- for( j = 0; j < length_d_comp; j++ ) {
- d = d_comp[ j ];
- basis_ptr = target_ptr - d;
- cross_corr = silk_inner_product_FLP( basis_ptr, target_ptr, sf_length_8kHz );
- energy = silk_energy_FLP( basis_ptr, sf_length_8kHz );
- if( cross_corr > 0.0f ) {
- C[ k ][ d ] = (silk_float)(cross_corr * cross_corr / (energy * energy_tmp + eps));
- } else {
- C[ k ][ d ] = 0.0f;
- }
- }
- target_ptr += sf_length_8kHz;
- }
-
- /* search over lag range and lags codebook */
- /* scale factor for lag codebook, as a function of center lag */
-
- CCmax = 0.0f; /* This value doesn't matter */
- CCmax_b = -1000.0f;
-
- CBimax = 0; /* To avoid returning undefined lag values */
- lag = -1; /* To check if lag with strong enough correlation has been found */
-
- if( prevLag > 0 ) {
- if( Fs_kHz == 12 ) {
- prevLag = silk_LSHIFT( prevLag, 1 ) / 3;
- } else if( Fs_kHz == 16 ) {
- prevLag = silk_RSHIFT( prevLag, 1 );
- }
- prevLag_log2 = silk_log2((silk_float)prevLag);
- } else {
- prevLag_log2 = 0;
- }
-
- /* Set up stage 2 codebook based on number of subframes */
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- cbk_size = PE_NB_CBKS_STAGE2_EXT;
- Lag_CB_ptr = &silk_CB_lags_stage2[ 0 ][ 0 ];
- if( Fs_kHz == 8 && complexity > SILK_PE_MIN_COMPLEX ) {
- /* If input is 8 khz use a larger codebook here because it is last stage */
- nb_cbk_search = PE_NB_CBKS_STAGE2_EXT;
- } else {
- nb_cbk_search = PE_NB_CBKS_STAGE2;
- }
- } else {
- cbk_size = PE_NB_CBKS_STAGE2_10MS;
- Lag_CB_ptr = &silk_CB_lags_stage2_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE2_10MS;
- }
-
- for( k = 0; k < length_d_srch; k++ ) {
- d = d_srch[ k ];
- for( j = 0; j < nb_cbk_search; j++ ) {
- CC[j] = 0.0f;
- for( i = 0; i < nb_subfr; i++ ) {
- /* Try all codebooks */
- CC[ j ] += C[ i ][ d + matrix_ptr( Lag_CB_ptr, i, j, cbk_size )];
- }
- }
- /* Find best codebook */
- CCmax_new = -1000.0f;
- CBimax_new = 0;
- for( i = 0; i < nb_cbk_search; i++ ) {
- if( CC[ i ] > CCmax_new ) {
- CCmax_new = CC[ i ];
- CBimax_new = i;
- }
- }
- CCmax_new = silk_max_float(CCmax_new, 0.0f); /* To avoid taking square root of negative number later */
- CCmax_new_b = CCmax_new;
-
- /* Bias towards shorter lags */
- lag_log2 = silk_log2((silk_float)d);
- CCmax_new_b -= PE_SHORTLAG_BIAS * nb_subfr * lag_log2;
-
- /* Bias towards previous lag */
- if( prevLag > 0 ) {
- delta_lag_log2_sqr = lag_log2 - prevLag_log2;
- delta_lag_log2_sqr *= delta_lag_log2_sqr;
- CCmax_new_b -= PE_PREVLAG_BIAS * nb_subfr * (*LTPCorr) * delta_lag_log2_sqr / (delta_lag_log2_sqr + 0.5f);
- }
-
- if( CCmax_new_b > CCmax_b && /* Find maximum biased correlation */
- CCmax_new > nb_subfr * search_thres2 * search_thres2 && /* Correlation needs to be high enough to be voiced */
- silk_CB_lags_stage2[ 0 ][ CBimax_new ] <= min_lag_8kHz /* Lag must be in range */
- ) {
- CCmax_b = CCmax_new_b;
- CCmax = CCmax_new;
- lag = d;
- CBimax = CBimax_new;
- }
- }
-
- if( lag == -1 ) {
- /* No suitable candidate found */
- silk_memset( pitch_out, 0, PE_MAX_NB_SUBFR * sizeof(opus_int) );
- *LTPCorr = 0.0f;
- *lagIndex = 0;
- *contourIndex = 0;
- return 1;
- }
-
- if( Fs_kHz > 8 ) {
- /* Search in original signal */
-
- /* Compensate for decimation */
- silk_assert( lag == silk_SAT16( lag ) );
- if( Fs_kHz == 12 ) {
- lag = silk_RSHIFT_ROUND( silk_SMULBB( lag, 3 ), 1 );
- } else { /* Fs_kHz == 16 */
- lag = silk_LSHIFT( lag, 1 );
- }
-
- lag = silk_LIMIT_int( lag, min_lag, max_lag );
- start_lag = silk_max_int( lag - 2, min_lag );
- end_lag = silk_min_int( lag + 2, max_lag );
- lag_new = lag; /* to avoid undefined lag */
- CBimax = 0; /* to avoid undefined lag */
- silk_assert( CCmax >= 0.0f );
- *LTPCorr = (silk_float)sqrt( CCmax / nb_subfr ); /* Output normalized correlation */
-
- CCmax = -1000.0f;
-
- /* Calculate the correlations and energies needed in stage 3 */
- silk_P_Ana_calc_corr_st3( cross_corr_st3, frame, start_lag, sf_length, nb_subfr, complexity );
- silk_P_Ana_calc_energy_st3( energies_st3, frame, start_lag, sf_length, nb_subfr, complexity );
-
- lag_counter = 0;
- silk_assert( lag == silk_SAT16( lag ) );
- contour_bias = PE_FLATCONTOUR_BIAS / lag;
-
- /* Set up cbk parameters according to complexity setting and frame length */
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- nb_cbk_search = (opus_int)silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- } else {
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- }
-
- for( d = start_lag; d <= end_lag; d++ ) {
- for( j = 0; j < nb_cbk_search; j++ ) {
- cross_corr = 0.0;
- energy = eps;
- for( k = 0; k < nb_subfr; k++ ) {
- energy += energies_st3[ k ][ j ][ lag_counter ];
- cross_corr += cross_corr_st3[ k ][ j ][ lag_counter ];
- }
- if( cross_corr > 0.0 ) {
- CCmax_new = (silk_float)(cross_corr * cross_corr / energy);
- /* Reduce depending on flatness of contour */
- CCmax_new *= 1.0f - contour_bias * j;
- } else {
- CCmax_new = 0.0f;
- }
-
- if( CCmax_new > CCmax &&
- ( d + (opus_int)silk_CB_lags_stage3[ 0 ][ j ] ) <= max_lag
- ) {
- CCmax = CCmax_new;
- lag_new = d;
- CBimax = j;
- }
- }
- lag_counter++;
- }
-
- for( k = 0; k < nb_subfr; k++ ) {
- pitch_out[ k ] = lag_new + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );
- pitch_out[ k ] = silk_LIMIT( pitch_out[ k ], min_lag, PE_MAX_LAG_MS * Fs_kHz );
- }
- *lagIndex = (opus_int16)( lag_new - min_lag );
- *contourIndex = (opus_int8)CBimax;
- } else { /* Fs_kHz == 8 */
- /* Save Lags and correlation */
- silk_assert( CCmax >= 0.0f );
- *LTPCorr = (silk_float)sqrt( CCmax / nb_subfr ); /* Output normalized correlation */
- for( k = 0; k < nb_subfr; k++ ) {
- pitch_out[ k ] = lag + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );
- pitch_out[ k ] = silk_LIMIT( pitch_out[ k ], min_lag_8kHz, PE_MAX_LAG_MS * Fs_kHz );
- }
- *lagIndex = (opus_int16)( lag - min_lag_8kHz );
- *contourIndex = (opus_int8)CBimax;
- }
- silk_assert( *lagIndex >= 0 );
- /* return as voiced */
- return 0;
-}
-
-static void silk_P_Ana_calc_corr_st3(
- silk_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
- const silk_float frame[], /* I vector to correlate */
- opus_int start_lag, /* I start lag */
- opus_int sf_length, /* I sub frame length */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity /* I Complexity setting */
-)
- /***********************************************************************
- Calculates the correlations used in stage 3 search. In order to cover
- the whole lag codebook for all the searched offset lags (lag +- 2),
- the following correlations are needed in each sub frame:
-
- sf1: lag range [-8,...,7] total 16 correlations
- sf2: lag range [-4,...,4] total 9 correlations
- sf3: lag range [-3,....4] total 8 correltions
- sf4: lag range [-6,....8] total 15 correlations
-
- In total 48 correlations. The direct implementation computed in worst case
- 4*12*5 = 240 correlations, but more likely around 120.
- **********************************************************************/
-{
- const silk_float *target_ptr, *basis_ptr;
- opus_int i, j, k, lag_counter, lag_low, lag_high;
- opus_int nb_cbk_search, delta, idx, cbk_size;
- silk_float scratch_mem[ SCRATCH_SIZE ];
- const opus_int8 *Lag_range_ptr, *Lag_CB_ptr;
-
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- Lag_range_ptr = &silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- nb_cbk_search = silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- } else {
- silk_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
- Lag_range_ptr = &silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- }
-
- target_ptr = &frame[ silk_LSHIFT( sf_length, 2 ) ]; /* Pointer to middle of frame */
- for( k = 0; k < nb_subfr; k++ ) {
- lag_counter = 0;
-
- /* Calculate the correlations for each subframe */
- lag_low = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- lag_high = matrix_ptr( Lag_range_ptr, k, 1, 2 );
- for( j = lag_low; j <= lag_high; j++ ) {
- basis_ptr = target_ptr - ( start_lag + j );
- silk_assert( lag_counter < SCRATCH_SIZE );
- scratch_mem[ lag_counter ] = (silk_float)silk_inner_product_FLP( target_ptr, basis_ptr, sf_length );
- lag_counter++;
- }
-
- delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- for( i = 0; i < nb_cbk_search; i++ ) {
- /* Fill out the 3 dim array that stores the correlations for */
- /* each code_book vector for each start lag */
- idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
- for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
- silk_assert( idx + j < SCRATCH_SIZE );
- silk_assert( idx + j < lag_counter );
- cross_corr_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
- }
- }
- target_ptr += sf_length;
- }
-}
-
-static void silk_P_Ana_calc_energy_st3(
- silk_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
- const silk_float frame[], /* I vector to correlate */
- opus_int start_lag, /* I start lag */
- opus_int sf_length, /* I sub frame length */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity /* I Complexity setting */
-)
-/****************************************************************
-Calculate the energies for first two subframes. The energies are
-calculated recursively.
-****************************************************************/
-{
- const silk_float *target_ptr, *basis_ptr;
- double energy;
- opus_int k, i, j, lag_counter;
- opus_int nb_cbk_search, delta, idx, cbk_size, lag_diff;
- silk_float scratch_mem[ SCRATCH_SIZE ];
- const opus_int8 *Lag_range_ptr, *Lag_CB_ptr;
-
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- Lag_range_ptr = &silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- nb_cbk_search = silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- } else {
- silk_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
- Lag_range_ptr = &silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- }
-
- target_ptr = &frame[ silk_LSHIFT( sf_length, 2 ) ];
- for( k = 0; k < nb_subfr; k++ ) {
- lag_counter = 0;
-
- /* Calculate the energy for first lag */
- basis_ptr = target_ptr - ( start_lag + matrix_ptr( Lag_range_ptr, k, 0, 2 ) );
- energy = silk_energy_FLP( basis_ptr, sf_length ) + 1e-3;
- silk_assert( energy >= 0.0 );
- scratch_mem[lag_counter] = (silk_float)energy;
- lag_counter++;
-
- lag_diff = ( matrix_ptr( Lag_range_ptr, k, 1, 2 ) - matrix_ptr( Lag_range_ptr, k, 0, 2 ) + 1 );
- for( i = 1; i < lag_diff; i++ ) {
- /* remove part outside new window */
- energy -= basis_ptr[sf_length - i] * (double)basis_ptr[sf_length - i];
- silk_assert( energy >= 0.0 );
-
- /* add part that comes into window */
- energy += basis_ptr[ -i ] * (double)basis_ptr[ -i ];
- silk_assert( energy >= 0.0 );
- silk_assert( lag_counter < SCRATCH_SIZE );
- scratch_mem[lag_counter] = (silk_float)energy;
- lag_counter++;
- }
-
- delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- for( i = 0; i < nb_cbk_search; i++ ) {
- /* Fill out the 3 dim array that stores the correlations for */
- /* each code_book vector for each start lag */
- idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
- for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
- silk_assert( idx + j < SCRATCH_SIZE );
- silk_assert( idx + j < lag_counter );
- energies_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
- silk_assert( energies_st3[ k ][ i ][ j ] >= 0.0f );
- }
- }
- target_ptr += sf_length;
- }
-}
diff --git a/src/opus-1.0.2/silk/float/prefilter_FLP.c b/src/opus-1.0.2/silk/float/prefilter_FLP.c
deleted file mode 100644
index d6c84398..00000000
--- a/src/opus-1.0.2/silk/float/prefilter_FLP.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-#include "tuning_parameters.h"
-
-/*
-* Prefilter for finding Quantizer input signal
-*/
-static inline void silk_prefilt_FLP(
- silk_prefilter_state_FLP *P, /* I/O state */
- silk_float st_res[], /* I */
- silk_float xw[], /* O */
- silk_float *HarmShapeFIR, /* I */
- silk_float Tilt, /* I */
- silk_float LF_MA_shp, /* I */
- silk_float LF_AR_shp, /* I */
- opus_int lag, /* I */
- opus_int length /* I */
-);
-
-static void silk_warped_LPC_analysis_filter_FLP(
- silk_float state[], /* I/O State [order + 1] */
- silk_float res[], /* O Residual signal [length] */
- const silk_float coef[], /* I Coefficients [order] */
- const silk_float input[], /* I Input signal [length] */
- const silk_float lambda, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order /* I Filter order (even) */
-)
-{
- opus_int n, i;
- silk_float acc, tmp1, tmp2;
-
- /* Order must be even */
- silk_assert( ( order & 1 ) == 0 );
-
- for( n = 0; n < length; n++ ) {
- /* Output of lowpass section */
- tmp2 = state[ 0 ] + lambda * state[ 1 ];
- state[ 0 ] = input[ n ];
- /* Output of allpass section */
- tmp1 = state[ 1 ] + lambda * ( state[ 2 ] - tmp2 );
- state[ 1 ] = tmp2;
- acc = coef[ 0 ] * tmp2;
- /* Loop over allpass sections */
- for( i = 2; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2 = state[ i ] + lambda * ( state[ i + 1 ] - tmp1 );
- state[ i ] = tmp1;
- acc += coef[ i - 1 ] * tmp1;
- /* Output of allpass section */
- tmp1 = state[ i + 1 ] + lambda * ( state[ i + 2 ] - tmp2 );
- state[ i + 1 ] = tmp2;
- acc += coef[ i ] * tmp2;
- }
- state[ order ] = tmp1;
- acc += coef[ order - 1 ] * tmp1;
- res[ n ] = input[ n ] - acc;
- }
-}
-
-/*
-* silk_prefilter. Main prefilter function
-*/
-void silk_prefilter_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- const silk_encoder_control_FLP *psEncCtrl, /* I Encoder control FLP */
- silk_float xw[], /* O Weighted signal */
- const silk_float x[] /* I Speech signal */
-)
-{
- silk_prefilter_state_FLP *P = &psEnc->sPrefilt;
- opus_int j, k, lag;
- silk_float HarmShapeGain, Tilt, LF_MA_shp, LF_AR_shp;
- silk_float B[ 2 ];
- const silk_float *AR1_shp;
- const silk_float *px;
- silk_float *pxw;
- silk_float HarmShapeFIR[ 3 ];
- silk_float st_res[ MAX_SUB_FRAME_LENGTH + MAX_LPC_ORDER ];
-
- /* Set up pointers */
- px = x;
- pxw = xw;
- lag = P->lagPrev;
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Update Variables that change per sub frame */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- lag = psEncCtrl->pitchL[ k ];
- }
-
- /* Noise shape parameters */
- HarmShapeGain = psEncCtrl->HarmShapeGain[ k ] * ( 1.0f - psEncCtrl->HarmBoost[ k ] );
- HarmShapeFIR[ 0 ] = 0.25f * HarmShapeGain;
- HarmShapeFIR[ 1 ] = 32767.0f / 65536.0f * HarmShapeGain;
- HarmShapeFIR[ 2 ] = 0.25f * HarmShapeGain;
- Tilt = psEncCtrl->Tilt[ k ];
- LF_MA_shp = psEncCtrl->LF_MA_shp[ k ];
- LF_AR_shp = psEncCtrl->LF_AR_shp[ k ];
- AR1_shp = &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ];
-
- /* Short term FIR filtering */
- silk_warped_LPC_analysis_filter_FLP( P->sAR_shp, st_res, AR1_shp, px,
- (silk_float)psEnc->sCmn.warping_Q16 / 65536.0f, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder );
-
- /* Reduce (mainly) low frequencies during harmonic emphasis */
- B[ 0 ] = psEncCtrl->GainsPre[ k ];
- B[ 1 ] = -psEncCtrl->GainsPre[ k ] *
- ( psEncCtrl->HarmBoost[ k ] * HarmShapeGain + INPUT_TILT + psEncCtrl->coding_quality * HIGH_RATE_INPUT_TILT );
- pxw[ 0 ] = B[ 0 ] * st_res[ 0 ] + B[ 1 ] * P->sHarmHP;
- for( j = 1; j < psEnc->sCmn.subfr_length; j++ ) {
- pxw[ j ] = B[ 0 ] * st_res[ j ] + B[ 1 ] * st_res[ j - 1 ];
- }
- P->sHarmHP = st_res[ psEnc->sCmn.subfr_length - 1 ];
-
- silk_prefilt_FLP( P, pxw, pxw, HarmShapeFIR, Tilt, LF_MA_shp, LF_AR_shp, lag, psEnc->sCmn.subfr_length );
-
- px += psEnc->sCmn.subfr_length;
- pxw += psEnc->sCmn.subfr_length;
- }
- P->lagPrev = psEncCtrl->pitchL[ psEnc->sCmn.nb_subfr - 1 ];
-}
-
-/*
-* Prefilter for finding Quantizer input signal
-*/
-static inline void silk_prefilt_FLP(
- silk_prefilter_state_FLP *P, /* I/O state */
- silk_float st_res[], /* I */
- silk_float xw[], /* O */
- silk_float *HarmShapeFIR, /* I */
- silk_float Tilt, /* I */
- silk_float LF_MA_shp, /* I */
- silk_float LF_AR_shp, /* I */
- opus_int lag, /* I */
- opus_int length /* I */
-)
-{
- opus_int i;
- opus_int idx, LTP_shp_buf_idx;
- silk_float n_Tilt, n_LF, n_LTP;
- silk_float sLF_AR_shp, sLF_MA_shp;
- silk_float *LTP_shp_buf;
-
- /* To speed up use temp variables instead of using the struct */
- LTP_shp_buf = P->sLTP_shp;
- LTP_shp_buf_idx = P->sLTP_shp_buf_idx;
- sLF_AR_shp = P->sLF_AR_shp;
- sLF_MA_shp = P->sLF_MA_shp;
-
- for( i = 0; i < length; i++ ) {
- if( lag > 0 ) {
- silk_assert( HARM_SHAPE_FIR_TAPS == 3 );
- idx = lag + LTP_shp_buf_idx;
- n_LTP = LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 - 1) & LTP_MASK ] * HarmShapeFIR[ 0 ];
- n_LTP += LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 ) & LTP_MASK ] * HarmShapeFIR[ 1 ];
- n_LTP += LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 + 1) & LTP_MASK ] * HarmShapeFIR[ 2 ];
- } else {
- n_LTP = 0;
- }
-
- n_Tilt = sLF_AR_shp * Tilt;
- n_LF = sLF_AR_shp * LF_AR_shp + sLF_MA_shp * LF_MA_shp;
-
- sLF_AR_shp = st_res[ i ] - n_Tilt;
- sLF_MA_shp = sLF_AR_shp - n_LF;
-
- LTP_shp_buf_idx = ( LTP_shp_buf_idx - 1 ) & LTP_MASK;
- LTP_shp_buf[ LTP_shp_buf_idx ] = sLF_MA_shp;
-
- xw[ i ] = sLF_MA_shp - n_LTP;
- }
- /* Copy temp variable back to state */
- P->sLF_AR_shp = sLF_AR_shp;
- P->sLF_MA_shp = sLF_MA_shp;
- P->sLTP_shp_buf_idx = LTP_shp_buf_idx;
-}
diff --git a/src/opus-1.0.2/silk/float/process_gains_FLP.c b/src/opus-1.0.2/silk/float/process_gains_FLP.c
deleted file mode 100644
index d572a4cd..00000000
--- a/src/opus-1.0.2/silk/float/process_gains_FLP.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-#include "tuning_parameters.h"
-
-/* Processing of gains */
-void silk_process_gains_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- silk_shape_state_FLP *psShapeSt = &psEnc->sShape;
- opus_int k;
- opus_int32 pGains_Q16[ MAX_NB_SUBFR ];
- silk_float s, InvMaxSqrVal, gain, quant_offset;
-
- /* Gain reduction when LTP coding gain is high */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- s = 1.0f - 0.5f * silk_sigmoid( 0.25f * ( psEncCtrl->LTPredCodGain - 12.0f ) );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains[ k ] *= s;
- }
- }
-
- /* Limit the quantized signal */
- InvMaxSqrVal = ( silk_float )( pow( 2.0f, 0.33f * ( 21.0f - psEnc->sCmn.SNR_dB_Q7 * ( 1 / 128.0f ) ) ) / psEnc->sCmn.subfr_length );
-
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Soft limit on ratio residual energy and squared gains */
- gain = psEncCtrl->Gains[ k ];
- gain = ( silk_float )sqrt( gain * gain + psEncCtrl->ResNrg[ k ] * InvMaxSqrVal );
- psEncCtrl->Gains[ k ] = silk_min_float( gain, 32767.0f );
- }
-
- /* Prepare gains for noise shaping quantization */
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- pGains_Q16[ k ] = (opus_int32)( psEncCtrl->Gains[ k ] * 65536.0f );
- }
-
- /* Save unquantized gains and gain Index */
- silk_memcpy( psEncCtrl->GainsUnq_Q16, pGains_Q16, psEnc->sCmn.nb_subfr * sizeof( opus_int32 ) );
- psEncCtrl->lastGainIndexPrev = psShapeSt->LastGainIndex;
-
- /* Quantize gains */
- silk_gains_quant( psEnc->sCmn.indices.GainsIndices, pGains_Q16,
- &psShapeSt->LastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /* Overwrite unquantized gains with quantized gains and convert back to Q0 from Q16 */
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains[ k ] = pGains_Q16[ k ] / 65536.0f;
- }
-
- /* Set quantizer offset for voiced signals. Larger offset when LTP coding gain is low or tilt is high (ie low-pass) */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- if( psEncCtrl->LTPredCodGain + psEnc->sCmn.input_tilt_Q15 * ( 1.0f / 32768.0f ) > 1.0f ) {
- psEnc->sCmn.indices.quantOffsetType = 0;
- } else {
- psEnc->sCmn.indices.quantOffsetType = 1;
- }
- }
-
- /* Quantizer boundary adjustment */
- quant_offset = silk_Quantization_Offsets_Q10[ psEnc->sCmn.indices.signalType >> 1 ][ psEnc->sCmn.indices.quantOffsetType ] / 1024.0f;
- psEncCtrl->Lambda = LAMBDA_OFFSET
- + LAMBDA_DELAYED_DECISIONS * psEnc->sCmn.nStatesDelayedDecision
- + LAMBDA_SPEECH_ACT * psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f )
- + LAMBDA_INPUT_QUALITY * psEncCtrl->input_quality
- + LAMBDA_CODING_QUALITY * psEncCtrl->coding_quality
- + LAMBDA_QUANT_OFFSET * quant_offset;
-
- silk_assert( psEncCtrl->Lambda > 0.0f );
- silk_assert( psEncCtrl->Lambda < 2.0f );
-}
diff --git a/src/opus-1.0.2/silk/float/regularize_correlations_FLP.c b/src/opus-1.0.2/silk/float/regularize_correlations_FLP.c
deleted file mode 100644
index f5684637..00000000
--- a/src/opus-1.0.2/silk/float/regularize_correlations_FLP.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-
-/* Add noise to matrix diagonal */
-void silk_regularize_correlations_FLP(
- silk_float *XX, /* I/O Correlation matrices */
- silk_float *xx, /* I/O Correlation values */
- const silk_float noise, /* I Noise energy to add */
- const opus_int D /* I Dimension of XX */
-)
-{
- opus_int i;
-
- for( i = 0; i < D; i++ ) {
- matrix_ptr( &XX[ 0 ], i, i, D ) += noise;
- }
- xx[ 0 ] += noise;
-}
diff --git a/src/opus-1.0.2/silk/float/residual_energy_FLP.c b/src/opus-1.0.2/silk/float/residual_energy_FLP.c
deleted file mode 100644
index e65457ab..00000000
--- a/src/opus-1.0.2/silk/float/residual_energy_FLP.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-
-#define MAX_ITERATIONS_RESIDUAL_NRG 10
-#define REGULARIZATION_FACTOR 1e-8f
-
-/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
-silk_float silk_residual_energy_covar_FLP( /* O Weighted residual energy */
- const silk_float *c, /* I Filter coefficients */
- silk_float *wXX, /* I/O Weighted correlation matrix, reg. out */
- const silk_float *wXx, /* I Weighted correlation vector */
- const silk_float wxx, /* I Weighted correlation value */
- const opus_int D /* I Dimension */
-)
-{
- opus_int i, j, k;
- silk_float tmp, nrg = 0.0f, regularization;
-
- /* Safety checks */
- silk_assert( D >= 0 );
-
- regularization = REGULARIZATION_FACTOR * ( wXX[ 0 ] + wXX[ D * D - 1 ] );
- for( k = 0; k < MAX_ITERATIONS_RESIDUAL_NRG; k++ ) {
- nrg = wxx;
-
- tmp = 0.0f;
- for( i = 0; i < D; i++ ) {
- tmp += wXx[ i ] * c[ i ];
- }
- nrg -= 2.0f * tmp;
-
- /* compute c' * wXX * c, assuming wXX is symmetric */
- for( i = 0; i < D; i++ ) {
- tmp = 0.0f;
- for( j = i + 1; j < D; j++ ) {
- tmp += matrix_c_ptr( wXX, i, j, D ) * c[ j ];
- }
- nrg += c[ i ] * ( 2.0f * tmp + matrix_c_ptr( wXX, i, i, D ) * c[ i ] );
- }
- if( nrg > 0 ) {
- break;
- } else {
- /* Add white noise */
- for( i = 0; i < D; i++ ) {
- matrix_c_ptr( wXX, i, i, D ) += regularization;
- }
- /* Increase noise for next run */
- regularization *= 2.0f;
- }
- }
- if( k == MAX_ITERATIONS_RESIDUAL_NRG ) {
- silk_assert( nrg == 0 );
- nrg = 1.0f;
- }
-
- return nrg;
-}
-
-/* Calculates residual energies of input subframes where all subframes have LPC_order */
-/* of preceding samples */
-void silk_residual_energy_FLP(
- silk_float nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */
- const silk_float x[], /* I Input signal */
- silk_float a[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */
- const silk_float gains[], /* I Quantization gains */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int LPC_order /* I LPC order */
-)
-{
- opus_int shift;
- silk_float *LPC_res_ptr, LPC_res[ ( MAX_FRAME_LENGTH + MAX_NB_SUBFR * MAX_LPC_ORDER ) / 2 ];
-
- LPC_res_ptr = LPC_res + LPC_order;
- shift = LPC_order + subfr_length;
-
- /* Filter input to create the LPC residual for each frame half, and measure subframe energies */
- silk_LPC_analysis_filter_FLP( LPC_res, a[ 0 ], x + 0 * shift, 2 * shift, LPC_order );
- nrgs[ 0 ] = ( silk_float )( gains[ 0 ] * gains[ 0 ] * silk_energy_FLP( LPC_res_ptr + 0 * shift, subfr_length ) );
- nrgs[ 1 ] = ( silk_float )( gains[ 1 ] * gains[ 1 ] * silk_energy_FLP( LPC_res_ptr + 1 * shift, subfr_length ) );
-
- if( nb_subfr == MAX_NB_SUBFR ) {
- silk_LPC_analysis_filter_FLP( LPC_res, a[ 1 ], x + 2 * shift, 2 * shift, LPC_order );
- nrgs[ 2 ] = ( silk_float )( gains[ 2 ] * gains[ 2 ] * silk_energy_FLP( LPC_res_ptr + 0 * shift, subfr_length ) );
- nrgs[ 3 ] = ( silk_float )( gains[ 3 ] * gains[ 3 ] * silk_energy_FLP( LPC_res_ptr + 1 * shift, subfr_length ) );
- }
-}
diff --git a/src/opus-1.0.2/silk/float/scale_copy_vector_FLP.c b/src/opus-1.0.2/silk/float/scale_copy_vector_FLP.c
deleted file mode 100644
index 988795a6..00000000
--- a/src/opus-1.0.2/silk/float/scale_copy_vector_FLP.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-
-/* copy and multiply a vector by a constant */
-void silk_scale_copy_vector_FLP(
- silk_float *data_out,
- const silk_float *data_in,
- silk_float gain,
- opus_int dataSize
-)
-{
- opus_int i, dataSize4;
-
- /* 4x unrolled loop */
- dataSize4 = dataSize & 0xFFFC;
- for( i = 0; i < dataSize4; i += 4 ) {
- data_out[ i + 0 ] = gain * data_in[ i + 0 ];
- data_out[ i + 1 ] = gain * data_in[ i + 1 ];
- data_out[ i + 2 ] = gain * data_in[ i + 2 ];
- data_out[ i + 3 ] = gain * data_in[ i + 3 ];
- }
-
- /* any remaining elements */
- for( ; i < dataSize; i++ ) {
- data_out[ i ] = gain * data_in[ i ];
- }
-}
diff --git a/src/opus-1.0.2/silk/float/scale_vector_FLP.c b/src/opus-1.0.2/silk/float/scale_vector_FLP.c
deleted file mode 100644
index 387eb4ba..00000000
--- a/src/opus-1.0.2/silk/float/scale_vector_FLP.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-
-/* multiply a vector by a constant */
-void silk_scale_vector_FLP(
- silk_float *data1,
- silk_float gain,
- opus_int dataSize
-)
-{
- opus_int i, dataSize4;
-
- /* 4x unrolled loop */
- dataSize4 = dataSize & 0xFFFC;
- for( i = 0; i < dataSize4; i += 4 ) {
- data1[ i + 0 ] *= gain;
- data1[ i + 1 ] *= gain;
- data1[ i + 2 ] *= gain;
- data1[ i + 3 ] *= gain;
- }
-
- /* any remaining elements */
- for( ; i < dataSize; i++ ) {
- data1[ i ] *= gain;
- }
-}
diff --git a/src/opus-1.0.2/silk/float/schur_FLP.c b/src/opus-1.0.2/silk/float/schur_FLP.c
deleted file mode 100644
index 90c3a18b..00000000
--- a/src/opus-1.0.2/silk/float/schur_FLP.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/***********************************************************************
-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 "SigProc_FLP.h"
-
-silk_float silk_schur_FLP( /* O returns residual energy */
- silk_float refl_coef[], /* O reflection coefficients (length order) */
- const silk_float auto_corr[], /* I autocorrelation sequence (length order+1) */
- opus_int order /* I order */
-)
-{
- opus_int k, n;
- silk_float C[ SILK_MAX_ORDER_LPC + 1 ][ 2 ];
- silk_float Ctmp1, Ctmp2, rc_tmp;
-
- silk_assert( order==6||order==8||order==10||order==12||order==14||order==16 );
-
- /* Copy correlations */
- for( k = 0; k < order+1; k++ ) {
- C[ k ][ 0 ] = C[ k ][ 1 ] = auto_corr[ k ];
- }
-
- for( k = 0; k < order; k++ ) {
- /* Get reflection coefficient */
- rc_tmp = -C[ k + 1 ][ 0 ] / silk_max_float( C[ 0 ][ 1 ], 1e-9f );
-
- /* Save the output */
- refl_coef[ k ] = rc_tmp;
-
- /* Update correlations */
- for( n = 0; n < order - k; n++ ) {
- Ctmp1 = C[ n + k + 1 ][ 0 ];
- Ctmp2 = C[ n ][ 1 ];
- C[ n + k + 1 ][ 0 ] = Ctmp1 + Ctmp2 * rc_tmp;
- C[ n ][ 1 ] = Ctmp2 + Ctmp1 * rc_tmp;
- }
- }
-
- /* Return residual energy */
- return C[ 0 ][ 1 ];
-}
-
diff --git a/src/opus-1.0.2/silk/float/solve_LS_FLP.c b/src/opus-1.0.2/silk/float/solve_LS_FLP.c
deleted file mode 100644
index a4bb0525..00000000
--- a/src/opus-1.0.2/silk/float/solve_LS_FLP.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-#include "tuning_parameters.h"
-
-/**********************************************************************
- * LDL Factorisation. Finds the upper triangular matrix L and the diagonal
- * Matrix D (only the diagonal elements returned in a vector)such that
- * the symmetric matric A is given by A = L*D*L'.
- **********************************************************************/
-static inline void silk_LDL_FLP(
- silk_float *A, /* I/O Pointer to Symetric Square Matrix */
- opus_int M, /* I Size of Matrix */
- silk_float *L, /* I/O Pointer to Square Upper triangular Matrix */
- silk_float *Dinv /* I/O Pointer to vector holding the inverse diagonal elements of D */
-);
-
-/**********************************************************************
- * Function to solve linear equation Ax = b, when A is a MxM lower
- * triangular matrix, with ones on the diagonal.
- **********************************************************************/
-static inline void silk_SolveWithLowerTriangularWdiagOnes_FLP(
- const silk_float *L, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const silk_float *b, /* I b Vector */
- silk_float *x /* O x Vector */
-);
-
-/**********************************************************************
- * Function to solve linear equation (A^T)x = b, when A is a MxM lower
- * triangular, with ones on the diagonal. (ie then A^T is upper triangular)
- **********************************************************************/
-static inline void silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP(
- const silk_float *L, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const silk_float *b, /* I b Vector */
- silk_float *x /* O x Vector */
-);
-
-/**********************************************************************
- * Function to solve linear equation Ax = b, when A is a MxM
- * symmetric square matrix - using LDL factorisation
- **********************************************************************/
-void silk_solve_LDL_FLP(
- silk_float *A, /* I/O Symmetric square matrix, out: reg. */
- const opus_int M, /* I Size of matrix */
- const silk_float *b, /* I Pointer to b vector */
- silk_float *x /* O Pointer to x solution vector */
-)
-{
- opus_int i;
- silk_float L[ MAX_MATRIX_SIZE ][ MAX_MATRIX_SIZE ];
- silk_float T[ MAX_MATRIX_SIZE ];
- silk_float Dinv[ MAX_MATRIX_SIZE ]; /* inverse diagonal elements of D*/
-
- silk_assert( M <= MAX_MATRIX_SIZE );
-
- /***************************************************
- Factorize A by LDL such that A = L*D*(L^T),
- where L is lower triangular with ones on diagonal
- ****************************************************/
- silk_LDL_FLP( A, M, &L[ 0 ][ 0 ], Dinv );
-
- /****************************************************
- * substitute D*(L^T) = T. ie:
- L*D*(L^T)*x = b => L*T = b <=> T = inv(L)*b
- ******************************************************/
- silk_SolveWithLowerTriangularWdiagOnes_FLP( &L[ 0 ][ 0 ], M, b, T );
-
- /****************************************************
- D*(L^T)*x = T <=> (L^T)*x = inv(D)*T, because D is
- diagonal just multiply with 1/d_i
- ****************************************************/
- for( i = 0; i < M; i++ ) {
- T[ i ] = T[ i ] * Dinv[ i ];
- }
- /****************************************************
- x = inv(L') * inv(D) * T
- *****************************************************/
- silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP( &L[ 0 ][ 0 ], M, T, x );
-}
-
-static inline void silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP(
- const silk_float *L, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const silk_float *b, /* I b Vector */
- silk_float *x /* O x Vector */
-)
-{
- opus_int i, j;
- silk_float temp;
- const silk_float *ptr1;
-
- for( i = M - 1; i >= 0; i-- ) {
- ptr1 = matrix_adr( L, 0, i, M );
- temp = 0;
- for( j = M - 1; j > i ; j-- ) {
- temp += ptr1[ j * M ] * x[ j ];
- }
- temp = b[ i ] - temp;
- x[ i ] = temp;
- }
-}
-
-static inline void silk_SolveWithLowerTriangularWdiagOnes_FLP(
- const silk_float *L, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const silk_float *b, /* I b Vector */
- silk_float *x /* O x Vector */
-)
-{
- opus_int i, j;
- silk_float temp;
- const silk_float *ptr1;
-
- for( i = 0; i < M; i++ ) {
- ptr1 = matrix_adr( L, i, 0, M );
- temp = 0;
- for( j = 0; j < i; j++ ) {
- temp += ptr1[ j ] * x[ j ];
- }
- temp = b[ i ] - temp;
- x[ i ] = temp;
- }
-}
-
-static inline void silk_LDL_FLP(
- silk_float *A, /* I/O Pointer to Symetric Square Matrix */
- opus_int M, /* I Size of Matrix */
- silk_float *L, /* I/O Pointer to Square Upper triangular Matrix */
- silk_float *Dinv /* I/O Pointer to vector holding the inverse diagonal elements of D */
-)
-{
- opus_int i, j, k, loop_count, err = 1;
- silk_float *ptr1, *ptr2;
- double temp, diag_min_value;
- silk_float v[ MAX_MATRIX_SIZE ], D[ MAX_MATRIX_SIZE ]; /* temp arrays*/
-
- silk_assert( M <= MAX_MATRIX_SIZE );
-
- diag_min_value = FIND_LTP_COND_FAC * 0.5f * ( A[ 0 ] + A[ M * M - 1 ] );
- for( loop_count = 0; loop_count < M && err == 1; loop_count++ ) {
- err = 0;
- for( j = 0; j < M; j++ ) {
- ptr1 = matrix_adr( L, j, 0, M );
- temp = matrix_ptr( A, j, j, M ); /* element in row j column j*/
- for( i = 0; i < j; i++ ) {
- v[ i ] = ptr1[ i ] * D[ i ];
- temp -= ptr1[ i ] * v[ i ];
- }
- if( temp < diag_min_value ) {
- /* Badly conditioned matrix: add white noise and run again */
- temp = ( loop_count + 1 ) * diag_min_value - temp;
- for( i = 0; i < M; i++ ) {
- matrix_ptr( A, i, i, M ) += ( silk_float )temp;
- }
- err = 1;
- break;
- }
- D[ j ] = ( silk_float )temp;
- Dinv[ j ] = ( silk_float )( 1.0f / temp );
- matrix_ptr( L, j, j, M ) = 1.0f;
-
- ptr1 = matrix_adr( A, j, 0, M );
- ptr2 = matrix_adr( L, j + 1, 0, M);
- for( i = j + 1; i < M; i++ ) {
- temp = 0.0;
- for( k = 0; k < j; k++ ) {
- temp += ptr2[ k ] * v[ k ];
- }
- matrix_ptr( L, i, j, M ) = ( silk_float )( ( ptr1[ i ] - temp ) * Dinv[ j ] );
- ptr2 += M; /* go to next column*/
- }
- }
- }
- silk_assert( err == 0 );
-}
-
diff --git a/src/opus-1.0.2/silk/float/sort_FLP.c b/src/opus-1.0.2/silk/float/sort_FLP.c
deleted file mode 100644
index e290c380..00000000
--- a/src/opus-1.0.2/silk/float/sort_FLP.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/***********************************************************************
-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
-
-/* Insertion sort (fast for already almost sorted arrays): */
-/* Best case: O(n) for an already sorted array */
-/* Worst case: O(n^2) for an inversely sorted array */
-
-#include "typedef.h"
-#include "SigProc_FLP.h"
-
-void silk_insertion_sort_decreasing_FLP(
- silk_float *a, /* I/O Unsorted / Sorted vector */
- opus_int *idx, /* O Index vector for the sorted elements */
- const opus_int L, /* I Vector length */
- const opus_int K /* I Number of correctly sorted positions */
-)
-{
- silk_float value;
- opus_int i, j;
-
- /* Safety checks */
- silk_assert( K > 0 );
- silk_assert( L > 0 );
- silk_assert( L >= K );
-
- /* Write start indices in index vector */
- for( i = 0; i < K; i++ ) {
- idx[ i ] = i;
- }
-
- /* Sort vector elements by value, decreasing order */
- for( i = 1; i < K; i++ ) {
- value = a[ i ];
- for( j = i - 1; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {
- a[ j + 1 ] = a[ j ]; /* Shift value */
- idx[ j + 1 ] = idx[ j ]; /* Shift index */
- }
- a[ j + 1 ] = value; /* Write value */
- idx[ j + 1 ] = i; /* Write index */
- }
-
- /* If less than L values are asked check the remaining values, */
- /* but only spend CPU to ensure that the K first values are correct */
- for( i = K; i < L; i++ ) {
- value = a[ i ];
- if( value > a[ K - 1 ] ) {
- for( j = K - 2; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {
- a[ j + 1 ] = a[ j ]; /* Shift value */
- idx[ j + 1 ] = idx[ j ]; /* Shift index */
- }
- a[ j + 1 ] = value; /* Write value */
- idx[ j + 1 ] = i; /* Write index */
- }
- }
-}
diff --git a/src/opus-1.0.2/silk/float/structs_FLP.h b/src/opus-1.0.2/silk/float/structs_FLP.h
deleted file mode 100644
index c71e7bc3..00000000
--- a/src/opus-1.0.2/silk/float/structs_FLP.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/***********************************************************************
-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.
-***********************************************************************/
-
-#ifndef SILK_STRUCTS_FLP_H
-#define SILK_STRUCTS_FLP_H
-
-#include "typedef.h"
-#include "main.h"
-#include "structs.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/********************************/
-/* Noise shaping analysis state */
-/********************************/
-typedef struct {
- opus_int8 LastGainIndex;
- silk_float HarmBoost_smth;
- silk_float HarmShapeGain_smth;
- silk_float Tilt_smth;
-} silk_shape_state_FLP;
-
-/********************************/
-/* Prefilter state */
-/********************************/
-typedef struct {
- silk_float sLTP_shp[ LTP_BUF_LENGTH ];
- silk_float sAR_shp[ MAX_SHAPE_LPC_ORDER + 1 ];
- opus_int sLTP_shp_buf_idx;
- silk_float sLF_AR_shp;
- silk_float sLF_MA_shp;
- silk_float sHarmHP;
- opus_int32 rand_seed;
- opus_int lagPrev;
-} silk_prefilter_state_FLP;
-
-/********************************/
-/* Encoder state FLP */
-/********************************/
-typedef struct {
- silk_encoder_state sCmn; /* Common struct, shared with fixed-point code */
- silk_shape_state_FLP sShape; /* Noise shaping state */
- silk_prefilter_state_FLP sPrefilt; /* Prefilter State */
-
- /* Buffer for find pitch and noise shape analysis */
- silk_float x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ];/* Buffer for find pitch and noise shape analysis */
- silk_float LTPCorr; /* Normalized correlation from pitch lag estimator */
-} silk_encoder_state_FLP;
-
-/************************/
-/* Encoder control FLP */
-/************************/
-typedef struct {
- /* Prediction and coding parameters */
- silk_float Gains[ MAX_NB_SUBFR ];
- silk_float PredCoef[ 2 ][ MAX_LPC_ORDER ]; /* holds interpolated and final coefficients */
- silk_float LTPCoef[LTP_ORDER * MAX_NB_SUBFR];
- silk_float LTP_scale;
- opus_int pitchL[ MAX_NB_SUBFR ];
-
- /* Noise shaping parameters */
- silk_float AR1[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
- silk_float AR2[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
- silk_float LF_MA_shp[ MAX_NB_SUBFR ];
- silk_float LF_AR_shp[ MAX_NB_SUBFR ];
- silk_float GainsPre[ MAX_NB_SUBFR ];
- silk_float HarmBoost[ MAX_NB_SUBFR ];
- silk_float Tilt[ MAX_NB_SUBFR ];
- silk_float HarmShapeGain[ MAX_NB_SUBFR ];
- silk_float Lambda;
- silk_float input_quality;
- silk_float coding_quality;
-
- /* Measures */
- silk_float sparseness;
- silk_float predGain;
- silk_float LTPredCodGain;
- silk_float ResNrg[ MAX_NB_SUBFR ]; /* Residual energy per subframe */
-
- /* Parameters for CBR mode */
- opus_int32 GainsUnq_Q16[ MAX_NB_SUBFR ];
- opus_int8 lastGainIndexPrev;
-} silk_encoder_control_FLP;
-
-/************************/
-/* Encoder Super Struct */
-/************************/
-typedef struct {
- silk_encoder_state_FLP state_Fxx[ ENCODER_NUM_CHANNELS ];
- stereo_enc_state sStereo;
- opus_int32 nBitsExceeded;
- opus_int nChannelsAPI;
- opus_int nChannelsInternal;
- opus_int nPrevChannelsInternal;
- opus_int timeSinceSwitchAllowed_ms;
- opus_int allowBandwidthSwitch;
- opus_int prev_decode_only_middle;
-} silk_encoder;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/src/opus-1.0.2/silk/float/warped_autocorrelation_FLP.c b/src/opus-1.0.2/silk/float/warped_autocorrelation_FLP.c
deleted file mode 100644
index e9ecc2a3..00000000
--- a/src/opus-1.0.2/silk/float/warped_autocorrelation_FLP.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-
-/* Autocorrelations for a warped frequency axis */
-void silk_warped_autocorrelation_FLP(
- silk_float *corr, /* O Result [order + 1] */
- const silk_float *input, /* I Input data to correlate */
- const silk_float warping, /* I Warping coefficient */
- const opus_int length, /* I Length of input */
- const opus_int order /* I Correlation order (even) */
-)
-{
- opus_int n, i;
- double tmp1, tmp2;
- double state[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
- double C[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
-
- /* Order must be even */
- silk_assert( ( order & 1 ) == 0 );
-
- /* Loop over samples */
- for( n = 0; n < length; n++ ) {
- tmp1 = input[ n ];
- /* Loop over allpass sections */
- for( i = 0; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2 = state[ i ] + warping * ( state[ i + 1 ] - tmp1 );
- state[ i ] = tmp1;
- C[ i ] += state[ 0 ] * tmp1;
- /* Output of allpass section */
- tmp1 = state[ i + 1 ] + warping * ( state[ i + 2 ] - tmp2 );
- state[ i + 1 ] = tmp2;
- C[ i + 1 ] += state[ 0 ] * tmp2;
- }
- state[ order ] = tmp1;
- C[ order ] += state[ 0 ] * tmp1;
- }
-
- /* Copy correlations in silk_float output format */
- for( i = 0; i < order + 1; i++ ) {
- corr[ i ] = ( silk_float )C[ i ];
- }
-}
diff --git a/src/opus-1.0.2/silk/float/wrappers_FLP.c b/src/opus-1.0.2/silk/float/wrappers_FLP.c
deleted file mode 100644
index 4259e90e..00000000
--- a/src/opus-1.0.2/silk/float/wrappers_FLP.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/***********************************************************************
-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 "main_FLP.h"
-
-/* Wrappers. Calls flp / fix code */
-
-/* Convert AR filter coefficients to NLSF parameters */
-void silk_A2NLSF_FLP(
- opus_int16 *NLSF_Q15, /* O NLSF vector [ LPC_order ] */
- const silk_float *pAR, /* I LPC coefficients [ LPC_order ] */
- const opus_int LPC_order /* I LPC order */
-)
-{
- opus_int i;
- opus_int32 a_fix_Q16[ MAX_LPC_ORDER ];
-
- for( i = 0; i < LPC_order; i++ ) {
- a_fix_Q16[ i ] = silk_float2int( pAR[ i ] * 65536.0f );
- }
-
- silk_A2NLSF( NLSF_Q15, a_fix_Q16, LPC_order );
-}
-
-/* Convert LSF parameters to AR prediction filter coefficients */
-void silk_NLSF2A_FLP(
- silk_float *pAR, /* O LPC coefficients [ LPC_order ] */
- const opus_int16 *NLSF_Q15, /* I NLSF vector [ LPC_order ] */
- const opus_int LPC_order /* I LPC order */
-)
-{
- opus_int i;
- opus_int16 a_fix_Q12[ MAX_LPC_ORDER ];
-
- silk_NLSF2A( a_fix_Q12, NLSF_Q15, LPC_order );
-
- for( i = 0; i < LPC_order; i++ ) {
- pAR[ i ] = ( silk_float )a_fix_Q12[ i ] * ( 1.0f / 4096.0f );
- }
-}
-
-/******************************************/
-/* Floating-point NLSF processing wrapper */
-/******************************************/
-void silk_process_NLSFs_FLP(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- silk_float PredCoef[ 2 ][ MAX_LPC_ORDER ], /* O Prediction coefficients */
- opus_int16 NLSF_Q15[ MAX_LPC_ORDER ], /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */
- const opus_int16 prev_NLSF_Q15[ MAX_LPC_ORDER ] /* I Previous Normalized LSFs (0 - (2^15-1)) */
-)
-{
- opus_int i, j;
- opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ];
-
- silk_process_NLSFs( psEncC, PredCoef_Q12, NLSF_Q15, prev_NLSF_Q15);
-
- for( j = 0; j < 2; j++ ) {
- for( i = 0; i < psEncC->predictLPCOrder; i++ ) {
- PredCoef[ j ][ i ] = ( silk_float )PredCoef_Q12[ j ][ i ] * ( 1.0f / 4096.0f );
- }
- }
-}
-
-/****************************************/
-/* Floating-point Silk NSQ wrapper */
-/****************************************/
-void silk_NSQ_wrapper_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- SideInfoIndices *psIndices, /* I/O Quantization indices */
- silk_nsq_state *psNSQ, /* I/O Noise Shaping Quantzation state */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const silk_float x[] /* I Prefiltered input signal */
-)
-{
- opus_int i, j;
- opus_int32 x_Q3[ MAX_FRAME_LENGTH ];
- opus_int32 Gains_Q16[ MAX_NB_SUBFR ];
- silk_DWORD_ALIGN opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ];
- opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ];
- opus_int LTP_scale_Q14;
-
- /* Noise shaping parameters */
- opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
- opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ]; /* Packs two int16 coefficients per int32 value */
- opus_int Lambda_Q10;
- opus_int Tilt_Q14[ MAX_NB_SUBFR ];
- opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ];
-
- /* Convert control struct to fix control struct */
- /* Noise shape parameters */
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- for( j = 0; j < psEnc->sCmn.shapingLPCOrder; j++ ) {
- AR2_Q13[ i * MAX_SHAPE_LPC_ORDER + j ] = silk_float2int( psEncCtrl->AR2[ i * MAX_SHAPE_LPC_ORDER + j ] * 8192.0f );
- }
- }
-
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- LF_shp_Q14[ i ] = silk_LSHIFT32( silk_float2int( psEncCtrl->LF_AR_shp[ i ] * 16384.0f ), 16 ) |
- (opus_uint16)silk_float2int( psEncCtrl->LF_MA_shp[ i ] * 16384.0f );
- Tilt_Q14[ i ] = (opus_int)silk_float2int( psEncCtrl->Tilt[ i ] * 16384.0f );
- HarmShapeGain_Q14[ i ] = (opus_int)silk_float2int( psEncCtrl->HarmShapeGain[ i ] * 16384.0f );
- }
- Lambda_Q10 = ( opus_int )silk_float2int( psEncCtrl->Lambda * 1024.0f );
-
- /* prediction and coding parameters */
- for( i = 0; i < psEnc->sCmn.nb_subfr * LTP_ORDER; i++ ) {
- LTPCoef_Q14[ i ] = (opus_int16)silk_float2int( psEncCtrl->LTPCoef[ i ] * 16384.0f );
- }
-
- for( j = 0; j < 2; j++ ) {
- for( i = 0; i < psEnc->sCmn.predictLPCOrder; i++ ) {
- PredCoef_Q12[ j ][ i ] = (opus_int16)silk_float2int( psEncCtrl->PredCoef[ j ][ i ] * 4096.0f );
- }
- }
-
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- Gains_Q16[ i ] = silk_float2int( psEncCtrl->Gains[ i ] * 65536.0f );
- silk_assert( Gains_Q16[ i ] > 0 );
- }
-
- if( psIndices->signalType == TYPE_VOICED ) {
- LTP_scale_Q14 = silk_LTPScales_table_Q14[ psIndices->LTP_scaleIndex ];
- } else {
- LTP_scale_Q14 = 0;
- }
-
- /* Convert input to fix */
- for( i = 0; i < psEnc->sCmn.frame_length; i++ ) {
- x_Q3[ i ] = silk_float2int( 8.0f * x[ i ] );
- }
-
- /* Call NSQ */
- if( psEnc->sCmn.nStatesDelayedDecision > 1 || psEnc->sCmn.warping_Q16 > 0 ) {
- silk_NSQ_del_dec( &psEnc->sCmn, psNSQ, psIndices, x_Q3, pulses, PredCoef_Q12[ 0 ], LTPCoef_Q14,
- AR2_Q13, HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, psEncCtrl->pitchL, Lambda_Q10, LTP_scale_Q14 );
- } else {
- silk_NSQ( &psEnc->sCmn, psNSQ, psIndices, x_Q3, pulses, PredCoef_Q12[ 0 ], LTPCoef_Q14,
- AR2_Q13, HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, psEncCtrl->pitchL, Lambda_Q10, LTP_scale_Q14 );
- }
-}
-
-/***********************************************/
-/* Floating-point Silk LTP quantiation wrapper */
-/***********************************************/
-void silk_quant_LTP_gains_FLP(
- silk_float B[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (Un-)quantized LTP gains */
- opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook index */
- opus_int8 *periodicity_index, /* O Periodicity index */
- const silk_float W[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* I Error weights */
- const opus_int mu_Q10, /* I Mu value (R/D tradeoff) */
- const opus_int lowComplexity, /* I Flag for low complexity */
- const opus_int nb_subfr /* I number of subframes */
-)
-{
- opus_int i;
- opus_int16 B_Q14[ MAX_NB_SUBFR * LTP_ORDER ];
- opus_int32 W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ];
-
- for( i = 0; i < nb_subfr * LTP_ORDER; i++ ) {
- B_Q14[ i ] = (opus_int16)silk_float2int( B[ i ] * 16384.0f );
- }
- for( i = 0; i < nb_subfr * LTP_ORDER * LTP_ORDER; i++ ) {
- W_Q18[ i ] = (opus_int32)silk_float2int( W[ i ] * 262144.0f );
- }
-
- silk_quant_LTP_gains( B_Q14, cbk_index, periodicity_index, W_Q18, mu_Q10, lowComplexity, nb_subfr );
-
- for( i = 0; i < nb_subfr * LTP_ORDER; i++ ) {
- B[ i ] = (silk_float)B_Q14[ i ] * ( 1.0f / 16384.0f );
- }
-}