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>2013-02-19 09:42:15 +0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2013-02-19 09:42:15 +0400
commit3ecd9c20cbc77e83dfd83c3d2e8e0640a5b50bba (patch)
treebf6fcfd5e08a1e1b9704ad6c1fdb079dc2350642
parent851f8033f6d3754a76adca225f06f4c573ea2ac2 (diff)
Fixes two bandwidth decision issues
1) In cases where the SILK desired bandwidth went down, then quickly up, we count get stuck in a mode with the LP variation going the wrong way. 2) Bandwidth detection can no longer force SILK to go below wideband to avoid switches that require redundancy.
-rw-r--r--silk/control_audio_bandwidth.c3
-rw-r--r--src/opus_encoder.c8
2 files changed, 10 insertions, 1 deletions
diff --git a/silk/control_audio_bandwidth.c b/silk/control_audio_bandwidth.c
index b645dd57..ef02feda 100644
--- a/silk/control_audio_bandwidth.c
+++ b/silk/control_audio_bandwidth.c
@@ -115,6 +115,9 @@ opus_int silk_control_audio_bandwidth(
psEncC->sLP.mode = 1;
}
}
+ } else {
+ if (psEncC->sLP.mode<0)
+ psEncC->sLP.mode = 1;
}
}
}
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index ec7d6e7b..a4983291 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -858,9 +858,15 @@ opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_
if (st->Fs <= 8000 && st->bandwidth > OPUS_BANDWIDTH_NARROWBAND)
st->bandwidth = OPUS_BANDWIDTH_NARROWBAND;
#ifndef FIXED_POINT
+ /* Use detected bandwidth to reduce the encoded bandwidth. */
if (st->detected_bandwidth && st->user_bandwidth == OPUS_AUTO)
{
- st->bandwidth = IMIN(st->bandwidth, st->detected_bandwidth);
+ /* When operating in SILK/hybrid mode, we don't go below wideband to avoid
+ more complicated switches that require redundancy */
+ if (st->mode == MODE_CELT_ONLY)
+ st->bandwidth = IMIN(st->bandwidth, st->detected_bandwidth);
+ else
+ st->bandwidth = IMIN(st->bandwidth, IMAX(OPUS_BANDWIDTH_WIDEBAND, st->detected_bandwidth));
}
#endif
celt_encoder_ctl(celt_enc, OPUS_SET_LSB_DEPTH(lsb_depth));