summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@amazon.com>2022-12-20 23:28:22 -0500
committerJean-Marc Valin <jmvalin@amazon.com>2022-12-20 23:28:22 -0500
commitdf7e01521363893fc3e83330c424c5d74443a563 (patch)
treede365e31188aa76721ba02be7383e9aabf536ed3 /src
parent032d047ae912c9350f5d0cd04903af6830d2fb4d (diff)
downloadopus-df7e01521363893fc3e83330c424c5d74443a563.tar.gz
Splitting up DRED encoding
Diffstat (limited to 'src')
-rw-r--r--src/opus_encoder.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index 4354a249..47a4d6eb 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -2181,8 +2181,16 @@ opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_
ret += 1+redundancy_bytes;
#ifdef ENABLE_NEURAL_FEC
if (1) {
+ opus_extension_data extension;
+ unsigned char buf[DRED_MAX_DATA_SIZE];
+ int dred_bytes;
DREDEnc *dred = &((silk_encoder*)silk_enc)->state_Fxx[0].sCmn.dred_encoder;
- opus_extension_data extension = {127, 0, dred->ec_buffer, dred->ec_buffer_fill};
+ dred_bytes = IMIN(DRED_MAX_DATA_SIZE, max_data_bytes-ret-2);
+ dred_bytes = dred_encode_silk_frame(dred, buf, DRED_NUM_REDUNDANCY_FRAMES/2, dred_bytes);
+ extension.id = 127;
+ extension.frame = 0;
+ extension.data = buf;
+ extension.len = dred_bytes;
ret = opus_packet_pad_impl(data, ret, max_data_bytes, !st->use_vbr, &extension, 1);
if (ret < 0)
{