summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@amazon.com>2022-12-21 17:40:25 -0500
committerJean-Marc Valin <jmvalin@amazon.com>2022-12-21 17:40:25 -0500
commit40f7ec5164e3285346b4cbc3988f0154a90bf6ae (patch)
tree75f68cf1ad1b0949e61deb4379a60ad4d8652edb
parent57812fa4c728eae3d4a4edc3532c1954fe83264b (diff)
downloadopus-40f7ec5164e3285346b4cbc3988f0154a90bf6ae.tar.gz
Making sure we don't bust the DRED buffer
-rw-r--r--silk/dred_encoder.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/silk/dred_encoder.c b/silk/dred_encoder.c
index 5ab56ed1..ca9b6f0d 100644
--- a/silk/dred_encoder.c
+++ b/silk/dred_encoder.c
@@ -92,6 +92,9 @@ int dred_encode_silk_frame(DREDEnc *enc, unsigned char *buf, int max_chunks, int
for (i = 0; i < IMIN(2*max_chunks, enc->latents_buffer_fill-1); i += 2)
{
+ ec_enc ec_bak;
+ ec_bak = ec_encoder;
+
q_level = (int) floor(0.5f + DRED_ENC_Q0 + 1.f * (DRED_ENC_Q1 - DRED_ENC_Q0) * i / (DRED_NUM_REDUNDANCY_FRAMES - 2));
offset = q_level * DRED_LATENT_DIM;
@@ -103,6 +106,10 @@ int dred_encode_silk_frame(DREDEnc *enc, unsigned char *buf, int max_chunks, int
r + offset,
p0 + offset
);
+ if (ec_tell(&ec_encoder) > 8*max_bytes) {
+ ec_encoder = ec_bak;
+ break;
+ }
}
ec_buffer_fill = (ec_tell(&ec_encoder)+7)/8;