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:
@@ -174,4 +174,13 @@ if(VOICECAT_USE_VCPKG_DEPS)
|
||||
target_include_directories(test_reaper_timeout PRIVATE ${VC_TEST_INTERNAL_INCLUDES})
|
||||
add_test(NAME reaper_timeout COMMAND test_reaper_timeout)
|
||||
set_tests_properties(reaper_timeout PROPERTIES TIMEOUT 30)
|
||||
|
||||
# DRED toggle: per-channel dred flag round-trips through protocol; encoder initialises
|
||||
# with DRED; PCM injection through DRED-enabled encode path runs without crash.
|
||||
add_executable(test_dred_toggle test_dred_toggle.cpp)
|
||||
target_link_libraries(test_dred_toggle PRIVATE voicecat::server)
|
||||
target_compile_features(test_dred_toggle PRIVATE cxx_std_20)
|
||||
target_include_directories(test_dred_toggle PRIVATE ${VC_TEST_INTERNAL_INCLUDES})
|
||||
add_test(NAME dred_toggle COMMAND test_dred_toggle)
|
||||
set_tests_properties(dred_toggle PROPERTIES TIMEOUT 60)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user