shithub: opus

Download patch

ref: 183a820212381f6c447b5a7c9b92b34fa01c629b
parent: 9f36bfc9623d0af495913b073a0b5e9e627e3086
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Fri Feb 2 21:51:08 EST 2024

Refactoring: store all states

--- a/silk/dred_encoder.c
+++ b/silk/dred_encoder.c
@@ -95,6 +95,7 @@
     celt_assert(enc->loaded);
     /* shift latents buffer */
     OPUS_MOVE(enc->latents_buffer + DRED_LATENT_DIM, enc->latents_buffer, (DRED_MAX_FRAMES - 1) * DRED_LATENT_DIM);
+    OPUS_MOVE(enc->state_buffer + DRED_STATE_DIM, enc->state_buffer, (DRED_MAX_FRAMES - 1) * DRED_STATE_DIM);
 
     /* calculate LPCNet features */
     lpcnet_compute_single_frame_features_float(&enc->lpcnet_enc_state, enc->input_buffer, feature_buffer, arch);
@@ -212,7 +213,6 @@
             /* 15 ms (6*2.5 ms) is the ideal offset for DRED because it corresponds to our vocoder look-ahead. */
             if (enc->dred_offset < 6) {
                 enc->dred_offset += 8;
-                OPUS_COPY(enc->initial_state, enc->state_buffer, DRED_STATE_DIM);
             } else {
                 enc->latent_offset++;
             }
@@ -277,7 +277,7 @@
     state_qoffset = q0*DRED_STATE_DIM;
     dred_encode_latents(
         &ec_encoder,
-        enc->initial_state,
+        &enc->state_buffer[enc->latent_offset*DRED_STATE_DIM],
         dred_state_quant_scales_q8 + state_qoffset,
         dred_state_dead_zone_q8 + state_qoffset,
         dred_state_r_q8 + state_qoffset,
--- a/silk/dred_encoder.h
+++ b/silk/dred_encoder.h
@@ -53,8 +53,7 @@
     int latent_offset;
     float latents_buffer[DRED_MAX_FRAMES * DRED_LATENT_DIM];
     int latents_buffer_fill;
-    float state_buffer[DRED_STATE_DIM];
-    float initial_state[DRED_STATE_DIM];
+    float state_buffer[DRED_MAX_FRAMES * DRED_STATE_DIM];
     float resample_mem[RESAMPLING_ORDER + 1];
 } DREDEnc;
 
--