Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.xiph.org/xiph/opus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2016-06-01 03:49:41 +0300
committerJean-Marc Valin <jmvalin@jmvalin.ca>2016-06-01 03:49:41 +0300
commitdfa3d238c3ed15ac8217674979e1fcd3a847c591 (patch)
tree76b9d766d3ff544d2a00cef6a1a5bc806f252cd6
parent62e8a6e9fa900d7d45091282d3949b25b097017f (diff)
Fixing bandwidth selection hysteresis
Previously, the bandwidth detection could (e.g.) change the bandwidth from fullband to superwideband, and the hysteresis would then cause bandwidth to be stuck in superwideband.
-rw-r--r--src/opus_encoder.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index 70be249c..1e222e00 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -102,6 +102,8 @@ struct OpusEncoder {
int prev_channels;
int prev_framesize;
int bandwidth;
+ /* Bandwidth determined automatically from the rate (before any other adjustment) */
+ int auto_bandwidth;
int silk_bw_switch;
/* Sampling rate (at the API level) */
int first;
@@ -1468,7 +1470,7 @@ opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_
hysteresis = bandwidth_thresholds[2*(bandwidth-OPUS_BANDWIDTH_MEDIUMBAND)+1];
if (!st->first)
{
- if (st->bandwidth >= bandwidth)
+ if (st->auto_bandwidth >= bandwidth)
threshold -= hysteresis;
else
threshold += hysteresis;
@@ -1476,7 +1478,7 @@ opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_
if (equiv_rate >= threshold)
break;
} while (--bandwidth>OPUS_BANDWIDTH_NARROWBAND);
- st->bandwidth = bandwidth;
+ st->bandwidth = st->auto_bandwidth = bandwidth;
/* Prevents any transition to SWB/FB until the SILK layer has fully
switched to WB mode and turned the variable LP filter off */
if (!st->first && st->mode != MODE_CELT_ONLY && !st->silk_mode.inWBmodeWithoutVariableLP && st->bandwidth > OPUS_BANDWIDTH_WIDEBAND)