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-07-08 21:13:58 +0300
commitbd55fc7348d2d0ca429c4560a564c4e3013b44dd (patch)
tree9feed4c5b05e0d4eff0f01f2e3368a72bdd50d7f
parentd40c3a3aaefbd6a437b038425966f75174a69b63 (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 671e8d21..49f9f5b5 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;
@@ -1477,7 +1479,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;
@@ -1485,7 +1487,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)