diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2023-09-16 07:59:57 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2023-09-21 01:04:08 +0300 |
commit | 52c15629eef8e1d913ce67c1b46f27301854b05d (patch) | |
tree | d323c2faec05ab851fdb0d6987b89a0a93aec599 /silk | |
parent | 71da9781eb82c9ec9f5edb88295f8fd8853df0bf (diff) |
Handle the case where the initial state didn't fit
Diffstat (limited to 'silk')
-rw-r--r-- | silk/dred_encoder.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/silk/dred_encoder.c b/silk/dred_encoder.c index 7b34cefe..41228334 100644 --- a/silk/dred_encoder.c +++ b/silk/dred_encoder.c @@ -238,6 +238,9 @@ int dred_encode_silk_frame(const DREDEnc *enc, unsigned char *buf, int max_chunk dead_zone + state_qoffset, r + state_qoffset, p0 + state_qoffset); + if (ec_tell(&ec_encoder) > 8*max_bytes) { + return 0; + } for (i = 0; i < IMIN(2*max_chunks, enc->latents_buffer_fill-enc->latent_offset-1); i += 2) { ec_enc ec_bak; @@ -256,6 +259,8 @@ int dred_encode_silk_frame(const DREDEnc *enc, unsigned char *buf, int max_chunk ); if (ec_tell(&ec_encoder) > 8*max_bytes) { ec_encoder = ec_bak; + /* If we haven't been able to code one chunk, give up on DRED completely. */ + if (i==0) return 0; break; } } |