Fix the side frame conditional coding rules.
authorTimothy B. Terriberry <tterribe@xiph.org>
Fri, 14 Oct 2011 20:38:24 +0000 (13:38 -0700)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Mon, 17 Oct 2011 20:03:41 +0000 (16:03 -0400)
commit53cc1a033a3183c9d137b03446db58d2e58c0e0a
tree24476c962dbb081126c89d6f26dd9d02f7bf88e7
parent7ef6c7c1b465df4ef3b4ece2ecbf9d35c625beb4
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).
18 files changed:
silk/dec_API.c
silk/decode_frame.c
silk/decode_indices.c
silk/decode_parameters.c
silk/define.h
silk/enc_API.c
silk/encode_indices.c
silk/fixed/LTP_scale_ctrl_FIX.c
silk/fixed/encode_frame_FIX.c
silk/fixed/find_pred_coefs_FIX.c
silk/fixed/main_FIX.h
silk/fixed/process_gains_FIX.c
silk/float/LTP_scale_ctrl_FLP.c
silk/float/encode_frame_FLP.c
silk/float/find_pred_coefs_FLP.c
silk/float/main_FLP.h
silk/float/process_gains_FLP.c
silk/main.h