mirror of
https://github.com/xiph/opus.git
synced 2025-06-05 15:03:39 +00:00
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.
This commit is contained in:
parent
851f8033f6
commit
3ecd9c20cb
2 changed files with 10 additions and 1 deletions
|
@ -115,6 +115,9 @@ opus_int silk_control_audio_bandwidth(
|
|||
psEncC->sLP.mode = 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (psEncC->sLP.mode<0)
|
||||
psEncC->sLP.mode = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue