diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2023-05-08 19:04:08 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2023-05-08 19:04:08 -0400 |
commit | 27d2731b045b88c82131076ff2a1145e175db918 (patch) | |
tree | b442d6a73b3175f3d82d86b05aed128787f89bc9 | |
parent | 4f206c7347937fe43e7f8f91616e1f35b83b7aa4 (diff) | |
download | opus-27d2731b045b88c82131076ff2a1145e175db918.tar.gz |
Properly check to see if there's room for DRED
-rw-r--r-- | silk/dred_config.h | 1 | ||||
-rw-r--r-- | src/opus_encoder.c | 10 |
2 files changed, 7 insertions, 4 deletions
diff --git a/silk/dred_config.h b/silk/dred_config.h index 6d7c95bf..34352536 100644 --- a/silk/dred_config.h +++ b/silk/dred_config.h @@ -26,6 +26,7 @@ */ #define DRED_VERSION 0 +#define DRED_MIN_BYTES 16 /* these are inpart duplicates to the values defined in dred_rdovae_constants.h */ #define DRED_NUM_FEATURES 20 diff --git a/src/opus_encoder.c b/src/opus_encoder.c index e05a65ab..c6675a61 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -2194,18 +2194,20 @@ opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_ opus_extension_data extension; unsigned char buf[DRED_MAX_DATA_SIZE]; int dred_chunks; - int dred_bytes; + int dred_bytes_left; DREDEnc *dred = &((silk_encoder*)silk_enc)->state_Fxx[0].sCmn.dred_encoder; dred_chunks = IMIN(st->dred_duration/4, DRED_NUM_REDUNDANCY_FRAMES/2); - dred_bytes = IMIN(DRED_MAX_DATA_SIZE, max_data_bytes-ret-2); + dred_bytes_left = IMIN(DRED_MAX_DATA_SIZE, max_data_bytes-ret-2); /* Check whether we actually have something to encode. */ - if (dred_chunks >= 1 && dred_bytes >= 5) { + if (dred_chunks >= 1 && dred_bytes_left >= DRED_MIN_BYTES+2) { + int dred_bytes; /* Add temporary extension type and version. These bytes will be removed once extension is finalized. */ buf[0] = 'D'; buf[1] = DRED_VERSION; - dred_bytes = dred_encode_silk_frame(dred, buf+2, dred_chunks, dred_bytes-2); + dred_bytes = dred_encode_silk_frame(dred, buf+2, dred_chunks, dred_bytes_left-2); dred_bytes += 2; + celt_assert(dred_bytes <= dred_bytes_left); extension.id = 127; extension.frame = 0; extension.data = buf; |