diff options
Diffstat (limited to 'silk')
-rw-r--r-- | silk/dred_coding.c | 6 | ||||
-rw-r--r-- | silk/dred_coding.h | 6 | ||||
-rw-r--r-- | silk/dred_encoder.c | 10 | ||||
-rw-r--r-- | silk/dred_encoder.h | 6 | ||||
-rw-r--r-- | silk/dred_entropy.c | 194 |
5 files changed, 14 insertions, 208 deletions
diff --git a/silk/dred_coding.c b/silk/dred_coding.c index 9b0381d2..e6f65f7f 100644 --- a/silk/dred_coding.c +++ b/silk/dred_coding.c @@ -25,13 +25,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <math.h> -#include <stdio.h> - #ifdef HAVE_CONFIG_H #include "config.h" #endif +#include <math.h> +#include <stdio.h> + #include "celt/entenc.h" #include "celt/vq.h" #include "celt/cwrs.h" diff --git a/silk/dred_coding.h b/silk/dred_coding.h index 9f8c9c63..a36f93d9 100644 --- a/silk/dred_coding.h +++ b/silk/dred_coding.h @@ -25,8 +25,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _DRED_CODING_H -#define _DRED_CODING_H +#ifndef DRED_CODING_H +#define DRED_CODING_H #include "opus_types.h" #include "entcode.h" @@ -39,4 +39,4 @@ void dred_decode_state(ec_enc *dec, float *x); void dred_decode_latents(ec_dec *dec, float *x, const opus_uint16 *scale, const opus_uint16 *r, const opus_uint16 *p0); -#endif
\ No newline at end of file +#endif diff --git a/silk/dred_encoder.c b/silk/dred_encoder.c index 5470b952..a77e273e 100644 --- a/silk/dred_encoder.c +++ b/silk/dred_encoder.c @@ -25,6 +25,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <string.h> #if 1 @@ -32,10 +36,6 @@ #include <math.h> #endif -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - #include "dred_encoder.h" #include "dred_coding.h" #include "celt/entenc.h" @@ -140,4 +140,4 @@ void dred_encode_silk_frame(DREDEnc *enc, const opus_int16 *silk_frame) dred_deinit_decoder(&dec); #endif -}
\ No newline at end of file +} diff --git a/silk/dred_encoder.h b/silk/dred_encoder.h index a8bb7cbf..e5f67c0e 100644 --- a/silk/dred_encoder.h +++ b/silk/dred_encoder.h @@ -25,8 +25,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _DRED_ENCODER_H -#define _DRED_ENCODER_H +#ifndef DRED_ENCODER_H +#define DRED_ENCODER_H #include "lpcnet.h" #include "dred_config.h" @@ -53,4 +53,4 @@ void dred_deinit_encoder(DREDEnc *enc); void dred_encode_silk_frame(DREDEnc *enc, const opus_int16 *silk_frame); -#endif
\ No newline at end of file +#endif diff --git a/silk/dred_entropy.c b/silk/dred_entropy.c deleted file mode 100644 index ac01f48b..00000000 --- a/silk/dred_entropy.c +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright (c) 2022 Amazon - Written by Jean-Marc Valin */ -/* - 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. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include <stdio.h> - -#include "celt/vq.h" -#include "celt/cwrs.h" - -#define LATENT_DIM 80 -#define PVQ_DIM 24 -#define PVQ_K 82 - -static void encode_pvq(const int *iy, int N, int K, ec_enc *enc) { - int fits; - celt_assert(N==24 || N==12 || N==6); - fits = (N==24 && K<=9) || (N==12 && K<=16) || (N==6); - /*printf("encode(%d,%d), fits=%d\n", N, K, fits);*/ - if (fits) encode_pulses(iy, N, K, enc); - else { - int N2 = N/2; - int K0=0; - int i; - for (i=0;i<N2;i++) K0 += abs(iy[i]); - /* FIXME: Don't use uniform probability for K0. */ - ec_enc_uint(enc, K0, K+1); - /*printf("K0 = %d\n", K0);*/ - encode_pvq(iy, N2, K0, enc); - encode_pvq(&iy[N2], N2, K-K0, enc); - } -} - -void dred_encode_state(ec_enc *enc, float *x) { - int k; - int iy[PVQ_DIM]; - op_pvq_search_c(x, iy, PVQ_K, PVQ_DIM, 0); - for (k=0;k<PVQ_DIM;k++) printf("%d ", iy[k]); - printf("\n"); - int tell1 = ec_tell(enc); - encode_pvq(iy, PVQ_DIM, PVQ_K, enc); - printf("tell: %d\n", ec_tell(enc)-tell1); -} - -void dred_encode_latents(ec_enc *enc, const float *x, const opus_int16 *scale, const opus_int16 *dzone, const opus_int16 *r, const opus_int16 *p0) { - int i; - float eps = .1f; - int tell1 = ec_tell(enc); - for (i=0;i<LATENT_DIM;i++) { - float delta; - float xq; - int q; - delta = dzone[i]*(1.f/1024.f); - xq = x[i]*scale[i]*(1.f/256.f); - xq = xq - delta*tanh(xq/(delta+eps)); - q = (int)floor(.5f+xq); - ec_laplace_encode_p0(enc, q, p0[i], r[i]); - } - printf("tell: %d\n", ec_tell(enc)-tell1); -} - - - -static void decode_pvq(int *iy, int N, int K, ec_dec *dec) { - int fits; - celt_assert(N==24 || N==12 || N==6); - fits = (N==24 && K<=9) || (N==12 && K<=16) || (N==6); - /*printf("encode(%d,%d), fits=%d\n", N, K, fits);*/ - if (fits) decode_pulses(iy, N, K, dec); - else { - int N2 = N/2; - int K0; - /* FIXME: Don't use uniform probability for K0. */ - K0 = ec_dec_uint(dec, K+1); - /*printf("K0 = %d\n", K0);*/ - decode_pvq(iy, N2, K0, dec); - decode_pvq(&iy[N2], N2, K-K0, dec); - } -} - -void dred_pvq_dec(ec_enc *dec, float *x) { - int k; - int iy[PVQ_DIM]; - int tell1 = ec_tell(dec); - decode_pvq(iy, PVQ_DIM, PVQ_K, dec); - /*printf("tell: %d\n", ec_tell(dec)-tell1);*/ - for (k=0;k<PVQ_DIM;k++) printf("%d ", iy[k]); - printf("\n"); - -} - -void dred_rdovae_dec(ec_dec *dec, float *x, const opus_int16 *scale, const opus_int16 *dzone, const opus_int16 *r, const opus_int16 *p0) { - int i; - int tell1 = ec_tell(dec); - for (i=0;i<LATENT_DIM;i++) { - float xq; - int q; - q = ec_laplace_decode_p0(dec, p0[i], r[i]); - x[i] = q*256.f/scale[i]; - } - printf("tell: %d\n", ec_tell(dec)-tell1); -} - -#if 0 -#include <stdlib.h> - -#define DATA_SIZE 10000 - -int main() -{ - ec_enc enc; - ec_dec dec; - int iter; - int bytes; - opus_int16 scale[LATENT_DIM]; - opus_int16 dzone[LATENT_DIM]; - opus_int16 r[LATENT_DIM]; - opus_int16 p0[LATENT_DIM]; - unsigned char *ptr; - int k; - - for (k=0;k<LATENT_DIM;k++) { - scale[k] = 256; - dzone[k] = 0; - r[k] = 12054; - p0[k] = 12893; - } - ptr = (unsigned char *)malloc(DATA_SIZE); - ec_enc_init(&enc,ptr,DATA_SIZE); - for (iter=0;iter<1;iter++) { - float x[PVQ_DIM]; - float sum=1e-30; - for (k=0;k<PVQ_DIM;k++) { - x[k] = log(1e-15+(float)rand()/RAND_MAX)-log(1e-15+(float)rand()/RAND_MAX); - sum += fabs(x[k]); - } - for (k=0;k<PVQ_DIM;k++) x[k] *= (1.f/sum); - /*for (k=0;k<PVQ_DIM;k++) printf("%f ", x[k]); - printf("\n");*/ - dred_encode_state(&enc, x); - } - for (iter=0;iter<1;iter++) { - float x[LATENT_DIM]; - for (k=0;k<LATENT_DIM;k++) { - x[k] = log(1e-15+(float)rand()/RAND_MAX)-log(1e-15+(float)rand()/RAND_MAX); - } - for (k=0;k<LATENT_DIM;k++) printf("%f ", x[k]); - printf("\n"); - dred_encode_latents(&enc, x, scale, dzone, r, p0); - } - bytes = (ec_tell(&enc)+7)/8; - ec_enc_shrink(&enc, bytes); - ec_enc_done(&enc); - - ec_dec_init(&dec,ec_get_buffer(&enc),bytes); - for (iter=0;iter<1;iter++) { - float x[PVQ_DIM]; - dred_pvq_dec(&dec, x); - } - for (iter=0;iter<1;iter++) { - float x[LATENT_DIM]; - dred_rdovae_dec(&dec, x, scale, dzone, r, p0); - for (k=0;k<LATENT_DIM;k++) printf("%f ", x[k]); - printf("\n"); - } -} -#endif |