Commit graph

19 commits

Author SHA1 Message Date
Gregory Maxwell
52de536fed Correct encoder/decoder state mismatch and spurious state resetting in the encoder when side is reset.
Patch from Tim which corrects a glitch during mode switching tests.
2011-10-19 00:20:46 -04:00
Timothy B. Terriberry
6559d36a46 Remove redundant mid-only flag when side VAD flag is set.
If there is activity in a regular, side SILK frame, then it must
 be coded, so we don't need to send a mid-only flag.
2011-10-17 23:31:20 -04:00
Timothy B. Terriberry
1e03a6eb04 Fix side-channel index for VAD/LBRR flags.
Neither the encoder nor decoder were incrementing the side-channel
 index for a mid-only frame.
Unfortunately, they used that index to index the VAD flags and LBRR
 flags.
This made the VAD flags for the side channel particularly useless,
 as you couldn't tell which frame a flag belonged to without
 decoding most of the packet.
It also desynched the LBRR information, as look at the wrong LBRR
 flags to decide when it had to code a mid-only flag.
If some frames were skipped in the side channel, then the last few
 VAD flags and LBRR flags would be garbage, but still get encoded.

This patch fixes this by continuing to increment nFramesDecoded or
 nFramesEncoded, even when skipping a frame in the side channel.
This makes the side-channel VAD and LBRR flags correspond to the
 correct time periods for frames greater than 20 ms.
It also fixes a bug where if DTX was not used on the packet where
 the side channel got turned off, it would never get used again
 until the encoder attempted to encode something in the side
 channel again.
2011-10-17 16:03:41 -04:00
Timothy B. Terriberry
53cc1a033a Fix the side frame conditional coding rules.
b24e5746 introduced changes to LastGainIndex which broke
 conditional coding for side frames after a mid-only frame (i.e.,
 in a 60 ms frame where the side is coded, not coded, then coded
 again).
These rules were a mess in general, however, because the side
 channel state kept a different nFramesDecoded count from the mid
 channel state, and had no way to tell if the prior side frame was
 coded.

This patch attempts to rationalize them by moving the conditional
 coding decision up to the top level, where all this information is
 available.
The first coded side frame after an uncoded side frame now always
 uses independent coding.
If such a frame is also not the first side frame in an Opus frame,
 then it doesn't include an LTP scaling parameter (because the LTP
 state is well-defined).
2011-10-17 16:03:41 -04:00
Jean-Marc Valin
b24e574627 Misc bug fixes
- There was a bug where the decoder resampler was not properly initialized
when fs_kHz == API_fs_kHz. In that case the resampler would continue to
upsample, and the output was corrupt.

- The delay value in the decoder was taken from the state before it was
potentially updated. This caused the decoder to apply the new dalay value one
frame late

- The encoder and decoder states are now updated more consistently, when
the sampling rate changes (pesq liked these changes)

- Properly resetting the side channel encoder and decoder for the first
frame with side coding active again

- Faster updating the "ratio" value in the LR_to_MS() code for large
prediction values means that for certain extreme/artificial input
signals the output looks better
2011-10-11 21:09:14 -04:00
Koen Vos
a9b864b80a Cleaner way to take into account the prediction for stereo width 2011-10-09 20:27:13 -04:00
Koen Vos
42f1e3d6a7 Two minor SILK fixes
- increases the max pitch lag by 1 (the thing Tim pointed out).  this brings the decoder in sync with the old one
- avoids that the first stereo frame is collapsed to mono
2011-10-09 12:53:59 -04:00
Jean-Marc Valin
1f65994ef4 Avoids unnecessary collapse of the HF stereo image in hybrid mode.
SILK now reports an "effective width" that takes into account side prediction.
2011-10-09 01:05:25 -04:00
Jean-Marc Valin
d5c9263724 Fixes two encoder bugs causing glitches in stereo->mono switches
1) averaging the output of the left and right resampling states when
   switching to mono
2) averaging the the delay buffers from left and right when switching
2011-10-07 14:59:53 -04:00
Jean-Marc Valin
b5972388d7 Proper SILK delay compensation for resampling
Adds SILK delay compensation that depends on encode and decode sampling
rate, as well as SILK internal coding rate. This ensures that the SILK
part of Opus is always in sync with the CELT part no matter what the
sampling rates are. It also increases the resampling delay to 1.15 ms
(was previously 0.48 ms).
2011-10-07 11:46:01 -04:00
Koen Vos
8887566918 SILK update
Simplifies mono/stereo switching in SILK
Fixes a quantization mismatch between encoder and decoder
Constrains the pitch lags in the same way in the encoder and decoder
2011-10-06 13:38:26 -04:00
Jean-Marc Valin
32d5c2d6d4 Disabling LBRR for whever there's a change in bandwidth/channels/framesize 2011-10-04 20:20:13 -04:00
Jean-Marc Valin
1e0805d74f Delaying SILK stereo->mono transitions by two frames
Gets rid of some more glitches caused by the decoder resampler
2011-10-03 13:52:18 -04:00
Jean-Marc Valin
de3e16c858 Fixes stereo->mono switching bugs (encoder)
Delaying stereo->mono switching decisions so that SILK can do a smooth
downmix. Also, wrote proper float/fixed code for the hybrid variable
stereo collapse, including a smooth downmix for stereo<->mono switching
2011-10-03 00:39:29 -04:00
Jean-Marc Valin
c7ab61b3c6 Fixes a bug introduced while fixing the original 60-ms stereo bug 2011-09-28 16:24:01 -04:00
Jean-Marc Valin
e4de8a9c76 Fixes a bug that was falsely triggering DTX for 60 ms stereo
There's still a range coder mismatch on the first frame when using FEC.
2011-09-28 14:23:01 -04:00
Gregory Maxwell
7152a9aa9a Fix some GCC warings in the silk/ directory. 2011-09-27 21:33:14 -04:00
Jean-Marc Valin
9f90e57a9b Fixes a glitch in SILK mono->stereo switching
For these transitions, we now start the left and right resamplers
from the same state.
2011-09-27 14:10:23 -04:00
Jean-Marc Valin
1c2f5633d1 Removed all the silk_ prefixes in source file names (not symbols) 2011-09-16 01:16:53 -07:00
Renamed from silk/silk_enc_API.c (Browse further)