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;
--
⑨