ref: 33698ee159ab6ab1de5ae86c62249d0c2ae4d8f7
parent: 9962bf3d941c68c2e167cb4f4fe79eb32f98f2a2
author: Felicia Lim <flim@google.com>
date: Wed Oct 26 12:48:38 EDT 2016
Update bandwidth and opusCanSwitch before generating SILK DTX ToC Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -2070,13 +2070,7 @@
RESTORE_STACK;
return OPUS_INTERNAL_ERROR;
}
- if (nBytes==0)
- {
- st->rangeFinal = 0;
- data[-1] = gen_toc(st->mode, st->Fs/frame_size, curr_bandwidth, st->stream_channels);
- RESTORE_STACK;
- return 1;
- }
+
/* Extract SILK internal bandwidth for signaling in first byte */
if( st->mode == MODE_SILK_ONLY ) {
if( st->silk_mode.internalSampleRate == 8000 ) {
@@ -2091,6 +2085,15 @@
}
st->silk_mode.opusCanSwitch = st->silk_mode.switchReady && !st->nonfinal_frame;
+
+ if (nBytes==0)
+ {
+ st->rangeFinal = 0;
+ data[-1] = gen_toc(st->mode, st->Fs/frame_size, curr_bandwidth, st->stream_channels);
+ RESTORE_STACK;
+ return 1;
+ }
+
/* FIXME: How do we allocate the redundancy for CBR? */
if (st->silk_mode.opusCanSwitch)
{
--- a/tests/test_opus_encode.c
+++ b/tests/test_opus_encode.c
@@ -236,12 +236,6 @@
int frame_size_enum = get_frame_size_enum(frame_size, sampling_rate);
force_channel = IMIN(force_channel, num_channels);
- /* Todo: remove when a fix is available for coding SILK in DTX mode for >60 ms.
- * Currently, SILK may internally adjust the bandwidth leading to mismatching
- * bandwidths within a packet. */
- if (frame_size_ms_x2 > 120)
- dtx = 0;
-
sprintf(debug_info,
"fuzz_encoder_settings: %d kHz, %d ch, application: %d, "
"%d bps, force ch: %d, vbr: %d, vbr constraint: %d, complexity: %d, "