feat: DRED (Deep REDundancy) per-channel toggle
Adds Opus 1.6 DRED support end-to-end: encoder embeds 20 ms of ML redundancy in every packet when enabled; decoder recovers lost frames from the next buffered packet's DRED extension rather than falling back to PLC comfort noise. Protocol: bool dred = 11 added to AudioConfig (backward-compatible, defaults false). C ABI: int dred added to vc_audio_config. Encoder: OPUS_SET_DRED_DURATION(2) when dred=true. Decoder: OpusDREDDecoder + per-stream OpusDRED scratch pre-allocated off the RT thread; JitterBuffer::try_copy_front_payload peeks at the next packet without popping on every PLC step; opus_decoder_dred_decode reconstructs the lost frame if DRED data is present, otherwise falls back to PLC. New test: test_dred_toggle (22/22 ctest green). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -221,6 +221,7 @@ typedef struct vc_audio_config {
|
||||
uint32_t expected_packet_loss; /* % 0..100 */
|
||||
int dtx; /* bool */
|
||||
uint32_t complexity; /* 0..10 */
|
||||
int dred; /* bool — Deep REDundancy (Opus 1.6), off by default */
|
||||
} vc_audio_config;
|
||||
|
||||
/* M5: permission bitset (mirrors protocol Permissions). */
|
||||
|
||||
Reference in New Issue
Block a user