[opus] [PATCH 12/15] Replace call of celt_inner_prod_c() (step 1)

Linfeng Zhang linfengz at google.com
Tue Sep 13 00:17:59 UTC 2016


I'm attaching the previous 11 NEON optimization patches in a zip file,
which is the same as the one I sent on September 6th in reply to thread
"[PATCH 9/9] Optimize silk_inner_prod_aligned_scale() for ARM NEON".

Thanks,
Linfeng

On Mon, Sep 12, 2016 at 5:03 PM, Linfeng Zhang <linfengz at google.com> wrote:

> Should call celt_inner_prod().
> ---
>  celt/bands.c                   | 7 ++++---
>  celt/bands.h                   | 2 +-
>  celt/celt_encoder.c            | 6 +++---
>  celt/pitch.c                   | 2 +-
>  src/opus_multistream_encoder.c | 2 +-
>  5 files changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/celt/bands.c b/celt/bands.c
> index bbe8a4c..1ab24aa 100644
> --- a/celt/bands.c
> +++ b/celt/bands.c
> @@ -92,10 +92,11 @@ static int bitexact_log2tan(int isin,int icos)
>
>  #ifdef FIXED_POINT
>  /* Compute the amplitude (sqrt energy) in each of the bands */
> -void compute_band_energies(const CELTMode *m, const celt_sig *X,
> celt_ener *bandE, int end, int C, int LM)
> +void compute_band_energies(const CELTMode *m, const celt_sig *X,
> celt_ener *bandE, int end, int C, int LM, int arch)
>  {
>     int i, c, N;
>     const opus_int16 *eBands = m->eBands;
> +   (void)arch;
>     N = m->shortMdctSize<<LM;
>     c=0; do {
>        for (i=0;i<end;i++)
> @@ -155,7 +156,7 @@ void normalise_bands(const CELTMode *m, const celt_sig
> * OPUS_RESTRICT freq, cel
>
>  #else /* FIXED_POINT */
>  /* Compute the amplitude (sqrt energy) in each of the bands */
> -void compute_band_energies(const CELTMode *m, const celt_sig *X,
> celt_ener *bandE, int end, int C, int LM)
> +void compute_band_energies(const CELTMode *m, const celt_sig *X,
> celt_ener *bandE, int end, int C, int LM, int arch)
>  {
>     int i, c, N;
>     const opus_int16 *eBands = m->eBands;
> @@ -164,7 +165,7 @@ void compute_band_energies(const CELTMode *m, const
> celt_sig *X, celt_ener *band
>        for (i=0;i<end;i++)
>        {
>           opus_val32 sum;
> -         sum = 1e-27f + celt_inner_prod_c(&X[c*N+(eBands[i]<<LM)],
> &X[c*N+(eBands[i]<<LM)], (eBands[i+1]-eBands[i])<<LM);
> +         sum = 1e-27f + celt_inner_prod(&X[c*N+(eBands[i]<<LM)],
> &X[c*N+(eBands[i]<<LM)], (eBands[i+1]-eBands[i])<<LM, arch);
>           bandE[i+c*m->nbEBands] = celt_sqrt(sum);
>           /*printf ("%f ", bandE[i+c*m->nbEBands]);*/
>        }
> diff --git a/celt/bands.h b/celt/bands.h
> index c040c7f..61ae0cd 100644
> --- a/celt/bands.h
> +++ b/celt/bands.h
> @@ -41,7 +41,7 @@
>   * @param X Spectrum
>   * @param bandE Square root of the energy for each band (returned)
>   */
> -void compute_band_energies(const CELTMode *m, const celt_sig *X,
> celt_ener *bandE, int end, int C, int LM);
> +void compute_band_energies(const CELTMode *m, const celt_sig *X,
> celt_ener *bandE, int end, int C, int LM, int arch);
>
>  /*void compute_noise_energies(const CELTMode *m, const celt_sig *X, const
> opus_val16 *tonality, celt_ener *bandE);*/
>
> diff --git a/celt/celt_encoder.c b/celt/celt_encoder.c
> index 5be7610..8af61d5 100644
> --- a/celt/celt_encoder.c
> +++ b/celt/celt_encoder.c
> @@ -1606,7 +1606,7 @@ int celt_encode_with_ec(CELTEncoder * OPUS_RESTRICT
> st, const opus_val16 * pcm,
>     if (secondMdct)
>     {
>        compute_mdcts(mode, 0, in, freq, C, CC, LM, st->upsample, st->arch);
> -      compute_band_energies(mode, freq, bandE, effEnd, C, LM);
> +      compute_band_energies(mode, freq, bandE, effEnd, C, LM, st->arch);
>        amp2Log2(mode, effEnd, end, bandE, bandLogE2, C);
>        for (i=0;i<C*nbEBands;i++)
>           bandLogE2[i] += HALF16(SHL16(LM, DB_SHIFT));
> @@ -1615,7 +1615,7 @@ int celt_encode_with_ec(CELTEncoder * OPUS_RESTRICT
> st, const opus_val16 * pcm,
>     compute_mdcts(mode, shortBlocks, in, freq, C, CC, LM, st->upsample,
> st->arch);
>     if (CC==2&&C==1)
>        tf_chan = 0;
> -   compute_band_energies(mode, freq, bandE, effEnd, C, LM);
> +   compute_band_energies(mode, freq, bandE, effEnd, C, LM, st->arch);
>
>     if (st->lfe)
>     {
> @@ -1739,7 +1739,7 @@ int celt_encode_with_ec(CELTEncoder * OPUS_RESTRICT
> st, const opus_val16 * pcm,
>           isTransient = 1;
>           shortBlocks = M;
>           compute_mdcts(mode, shortBlocks, in, freq, C, CC, LM,
> st->upsample, st->arch);
> -         compute_band_energies(mode, freq, bandE, effEnd, C, LM);
> +         compute_band_energies(mode, freq, bandE, effEnd, C, LM,
> st->arch);
>           amp2Log2(mode, effEnd, end, bandE, bandLogE, C);
>           /* Compensate for the scaling of short vs long mdcts */
>           for (i=0;i<C*nbEBands;i++)
> diff --git a/celt/pitch.c b/celt/pitch.c
> index bf46e7d..f944a33 100644
> --- a/celt/pitch.c
> +++ b/celt/pitch.c
> @@ -378,7 +378,7 @@ void pitch_search(const opus_val16 * OPUS_RESTRICT
> x_lp, opus_val16 * OPUS_RESTR
>        for (j=0;j<len>>1;j++)
>           sum += SHR32(MULT16_16(x_lp[j],y[i+j]), shift);
>  #else
> -      sum = celt_inner_prod_c(x_lp, y+i, len>>1);
> +      sum = celt_inner_prod(x_lp, y+i, len>>1, arch);
>  #endif
>        xcorr[i] = MAX32(-1, sum);
>  #ifdef FIXED_POINT
> diff --git a/src/opus_multistream_encoder.c b/src/opus_multistream_
> encoder.c
> index c07132f..6ecea5d 100644
> --- a/src/opus_multistream_encoder.c
> +++ b/src/opus_multistream_encoder.c
> @@ -295,7 +295,7 @@ void surround_analysis(const CELTMode *celt_mode,
> const void *pcm, opus_val16 *b
>              freq[i] = 0;
>        }
>
> -      compute_band_energies(celt_mode, freq, bandE, 21, 1, LM);
> +      compute_band_energies(celt_mode, freq, bandE, 21, 1, LM, arch);
>        amp2Log2(celt_mode, 21, 21, bandE, bandLogE+21*c, 1);
>        /* Apply spreading function with -6 dB/band going up and -12
> dB/band going down. */
>        for (i=1;i<21;i++)
> --
> 2.8.0.rc3.226.g39d4020
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xiph.org/pipermail/opus/attachments/20160912/0434e43f/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: opus-NEON-11-patches.zip
Type: application/zip
Size: 71375 bytes
Desc: not available
URL: <http://lists.xiph.org/pipermail/opus/attachments/20160912/0434e43f/attachment-0001.zip>


More information about the opus mailing list