diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2011-08-26 13:01:42 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2011-08-26 13:01:42 -0400 |
commit | 073c4e14727fffdff30fccbd1753aca1d14861ba (patch) | |
tree | 9ccc2518018513986383177eb570426d18333ad1 | |
parent | 641bd4e4cf1f453fe7e6614b4a130572b703d301 (diff) | |
download | opus-073c4e14727fffdff30fccbd1753aca1d14861ba.tar.gz |
More precise CELT/SILK delay compensation to reduce mode switching glitches
-rw-r--r-- | src/opus_encoder.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/opus_encoder.c b/src/opus_encoder.c index 2eec5f8c..4186e32b 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -181,8 +181,15 @@ OpusEncoder *opus_encoder_init(OpusEncoder* st, int Fs, int channels, int applic st->encoder_buffer = st->Fs/100; st->delay_compensation = st->Fs/400; - if (st->Fs > 16000) - st->delay_compensation += 10; + /* This part is meant to compensate for the resampler delay as a function + of the API sampling rate */ + if (st->Fs == 48000) + st->delay_compensation += 23; + else if (st->Fs == 24000) + st->delay_compensation += 15; + else + st->delay_compensation += 2; + return st; failure: |