Add support for coding signs with 0 pulses.
authorTimothy B. Terriberry <tterribe@xiph.org>
Sat, 17 Sep 2011 19:44:19 +0000 (12:44 -0700)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Wed, 28 Sep 2011 00:28:31 +0000 (20:28 -0400)
commit748c960cf7ab61a92adc323fe5bbae03af9949f4
treef35748461ac7a2906a76e3195c9af129960c989d
parent9826ed99c36504ad466feeadacf5e2ced1518c4a
Add support for coding signs with 0 pulses.

The SILK bitstream allowed coding 0 pulses in a shell block, but a
 non-zero number of LSb's, meaning some excitation coefficients
 could be non-zero, but would not have a corresponding sign.
To fix this without breaking already-encoded bitstreams, this patch
 adds a set of sign PDFs for the 0 pulses case.

This is occasionally more efficient than the normal encoding if
 there are a large number of coefficients with positive signs,
 since these cost more than 1 bit when using the > 0 pulse PDFs.
It only saves 0.33 bits per second (on average: it does better at
 high rates), but that's probably enough to justify the two
 redundant ways of coding things (and it's too late now to remove
 the second one entirely, anyway).
This patch does not include the encoder modifications required to
 check if this coding method is more efficient and switch to it.
silk/code_signs.c
silk/decode_pulses.c
silk/tables.h
silk/tables_pulses_per_block.c