diff --git a/dnn/lpcnet_enc.c b/dnn/lpcnet_enc.c index acfaf6e048b3d64aa2b2668adeb17dc635eb9b86..76f9f776134803017053ad315d3d2b14317f0922 100644 --- a/dnn/lpcnet_enc.c +++ b/dnn/lpcnet_enc.c @@ -120,9 +120,9 @@ void compute_frame_features(LPCNetEncState *st, const float *in) { for (sub=0;sub<2;sub++) { int off = sub*FRAME_SIZE/2; double ener1; - celt_pitch_xcorr(&st->exc_buf[PITCH_MAX_PERIOD+off], st->exc_buf+off, xcorr, FRAME_SIZE/2, PITCH_MAX_PERIOD); - ener0 = celt_inner_prod(&st->exc_buf[PITCH_MAX_PERIOD+off], &st->exc_buf[PITCH_MAX_PERIOD+off], FRAME_SIZE/2); - ener1 = celt_inner_prod(&st->exc_buf[off], &st->exc_buf[off], FRAME_SIZE/2-1); + celt_pitch_xcorr(&st->exc_buf[PITCH_MAX_PERIOD+off], st->exc_buf+off, xcorr, FRAME_SIZE/2, PITCH_MAX_PERIOD, st->arch); + ener0 = celt_inner_prod_c(&st->exc_buf[PITCH_MAX_PERIOD+off], &st->exc_buf[PITCH_MAX_PERIOD+off], FRAME_SIZE/2); + ener1 = celt_inner_prod_c(&st->exc_buf[off], &st->exc_buf[off], FRAME_SIZE/2-1); st->frame_weight[2+2*st->pcount+sub] = ener0; /*printf("%f\n", st->frame_weight[2+2*st->pcount+sub]);*/ for (i=0;i<PITCH_MAX_PERIOD;i++) { diff --git a/dnn/lpcnet_private.h b/dnn/lpcnet_private.h index 3cead7a9b166109a97eed3f90685c64c06bdd091..753f6b016d525aa10d729aeb03ff553c1de7097d 100644 --- a/dnn/lpcnet_private.h +++ b/dnn/lpcnet_private.h @@ -20,6 +20,7 @@ struct LPCNetState { LPCNetModel model; + int arch; float sampling_logit_table[256]; kiss99_ctx rng; @@ -40,12 +41,8 @@ struct LPCNetState { float lpc[LPC_ORDER]; }; -struct LPCNetDecState { - LPCNetState lpcnet_state; - float vq_mem[NB_BANDS]; -}; - struct LPCNetEncState{ + int arch; float analysis_mem[OVERLAP_SIZE]; float mem_preemph; int pcount; @@ -72,6 +69,7 @@ struct LPCNetPLCState { PLCModel model; LPCNetState lpcnet; LPCNetEncState enc; + int arch; int enable_blending; #define LPCNET_PLC_RESET_START fec diff --git a/dnn/pitch.h b/dnn/pitch.h deleted file mode 100644 index 2784d5377eb2be19d526f1ce8ba56f5308e191c3..0000000000000000000000000000000000000000 --- a/dnn/pitch.h +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (c) 2007-2008 CSIRO - Copyright (c) 2007-2009 Xiph.Org Foundation - Written by Jean-Marc Valin */ -/** - @file pitch.h - @brief Pitch analysis - */ - -/* - 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. - - 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 PITCH_H -#define PITCH_H - -#include "arch.h" - -/* OPT: This is the kernel you really want to optimize. It gets used a lot - by the prefilter and by the PLC. */ -static OPUS_INLINE void xcorr_kernel(const opus_val16 * x, const opus_val16 * y, opus_val32 sum[4], int len) -{ - int j; - opus_val16 y_0, y_1, y_2, y_3; - celt_assert(len>=3); - y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */ - y_0=*y++; - y_1=*y++; - y_2=*y++; - for (j=0;j<len-3;j+=4) - { - opus_val16 tmp; - tmp = *x++; - y_3=*y++; - sum[0] = MAC16_16(sum[0],tmp,y_0); - sum[1] = MAC16_16(sum[1],tmp,y_1); - sum[2] = MAC16_16(sum[2],tmp,y_2); - sum[3] = MAC16_16(sum[3],tmp,y_3); - tmp=*x++; - y_0=*y++; - sum[0] = MAC16_16(sum[0],tmp,y_1); - sum[1] = MAC16_16(sum[1],tmp,y_2); - sum[2] = MAC16_16(sum[2],tmp,y_3); - sum[3] = MAC16_16(sum[3],tmp,y_0); - tmp=*x++; - y_1=*y++; - sum[0] = MAC16_16(sum[0],tmp,y_2); - sum[1] = MAC16_16(sum[1],tmp,y_3); - sum[2] = MAC16_16(sum[2],tmp,y_0); - sum[3] = MAC16_16(sum[3],tmp,y_1); - tmp=*x++; - y_2=*y++; - sum[0] = MAC16_16(sum[0],tmp,y_3); - sum[1] = MAC16_16(sum[1],tmp,y_0); - sum[2] = MAC16_16(sum[2],tmp,y_1); - sum[3] = MAC16_16(sum[3],tmp,y_2); - } - if (j++<len) - { - opus_val16 tmp = *x++; - y_3=*y++; - sum[0] = MAC16_16(sum[0],tmp,y_0); - sum[1] = MAC16_16(sum[1],tmp,y_1); - sum[2] = MAC16_16(sum[2],tmp,y_2); - sum[3] = MAC16_16(sum[3],tmp,y_3); - } - if (j++<len) - { - opus_val16 tmp=*x++; - y_0=*y++; - sum[0] = MAC16_16(sum[0],tmp,y_1); - sum[1] = MAC16_16(sum[1],tmp,y_2); - sum[2] = MAC16_16(sum[2],tmp,y_3); - sum[3] = MAC16_16(sum[3],tmp,y_0); - } - if (j<len) - { - opus_val16 tmp=*x++; - y_1=*y++; - sum[0] = MAC16_16(sum[0],tmp,y_2); - sum[1] = MAC16_16(sum[1],tmp,y_3); - sum[2] = MAC16_16(sum[2],tmp,y_0); - sum[3] = MAC16_16(sum[3],tmp,y_1); - } -} - -/*We make sure a C version is always available for cases where the overhead of - vectorization and passing around an arch flag aren't worth it.*/ -static OPUS_INLINE opus_val32 celt_inner_prod(const opus_val16 *x, - const opus_val16 *y, int N) -{ - int i; - opus_val32 xy=0; - for (i=0;i<N;i++) - xy = MAC16_16(xy, x[i], y[i]); - return xy; -} - -void celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y, - opus_val32 *xcorr, int len, int max_pitch); - -#endif diff --git a/lpcnet_headers.mk b/lpcnet_headers.mk index 4b0cb4cf31447bd001efc24a28d254ac6cf81550..dc44429f709c64b2811637991cd81122bab6e9a3 100644 --- a/lpcnet_headers.mk +++ b/lpcnet_headers.mk @@ -22,5 +22,4 @@ dnn/dred_rdovae_enc.h \ dnn/dred_rdovae_enc_data.h \ dnn/dred_rdovae_dec.h \ dnn/dred_rdovae_dec_data.h \ -dnn/dred_rdovae_stats_data.h \ -dnn/pitch.h +dnn/dred_rdovae_stats_data.h