Commit graph

50 commits

Author SHA1 Message Date
Jean-Marc Valin
3806c1d738 Relicensing under the simplified (2-clause) BSD license
Got authorization from all copyright holders
2011-02-09 22:37:41 -05:00
Jean-Marc Valin
ad3d813f01 Stop uselessly calling haar1() when resynth=0
This was computing on uninitialized data (though the result was never
used)
2011-01-22 21:22:03 -05:00
Jean-Marc Valin
63fb61f176 Using previous range coder state for PRNG
This provides more entropy and allows some more flexibility on the
encoder side.
2011-01-20 23:29:05 -05:00
Timothy B. Terriberry
21af73eb21 Make collapse-detection bitexact.
Jean-Marc's original anti-collapse patch used a threshold on the
 content of a decoded band to determine whether or not it should
 be filled with random noise.
Since this is highly sensitive to the accuracy of the
 implementation, it could lead to significant decoder output
 differences even if decoding error up to that point was relatively
 small.

This patch detects collapsed bands from the output of the vector
 quantizer, using exact integer arithmetic.
It makes two simplifying assumptions:
 a) If either input to haar1() is non-zero during TF resolution
     adjustments, then the output will be non-zero.
 b) If the content of a block is non-zero in any of the bands that
     are used for folding, then the folded output will be non-zero.
b) in particular is likely to be false when SPREAD_NONE is used.
It also ignores the case where mid and side are orthogonal in
 stereo_merge, but this is relatively unlikely.
This misses just over 3% of the cases that Jean-Marc's anti-collapse
 detection strategy would catch, but does not mis-classify any (all
 detected collapses are true collapses).

This patch overloads the "fill" parameter to mark which blocks have
 non-zero content for folding.
As a consequence, if a set of blocks on one side of a split has
 collapsed, _no_ folding is done: the result would be zero anyway,
 except for short blocks with SPREAD_AGGRESSIVE that are split down
 to a single block, but a) that means a lot of bits were available
 so a collapse is unlikely and b) anti-collapse can fill the block
 anyway, if it's used.
This also means that if itheta==0 or itheta==16384, we no longer
 fold at all on that side (even with long blocks), since we'd be
 multiplying the result by zero anyway.
2011-01-19 19:43:08 -05:00
Jean-Marc Valin
9b4ed5e290 Implementing intensity stereo.
There's no explicit signaling for it yet.
2010-11-24 18:01:20 -05:00
Jean-Marc Valin
009978ee6c Moves the bit-side gain application to the quantizer 2010-09-13 11:05:08 -04:00
Jean-Marc Valin
eea914cb88 Simplifies vector renormalisation (and using it less) 2010-09-12 20:11:32 -04:00
Jean-Marc Valin
6f1cbca519 More cleanup 2010-07-24 22:06:29 -04:00
Jean-Marc Valin
f276b23415 Using random noise in upper bands when signal is "normal" 2010-07-24 17:13:17 -04:00
Jean-Marc Valin
525d7cfdc4 Support for adjusting the end band 2010-07-13 18:18:23 -04:00
Jean-Marc Valin
2123f358b1 Cleaning up the folding code.
Folding now moved to alg_quant() and alg_unquant(). No more funny short block
alignment checks because bands now have to be aligned.
2010-05-09 19:45:31 -04:00
Jean-Marc Valin
65ee67ac55 Making the band definition the same at all frame sizes. 2010-04-26 07:08:44 -04:00
Jean-Marc Valin
b8ba70c99b Disabling resynthesis when not needed (need to remove folding for this to work) 2010-04-18 22:10:24 -04:00
Jean-Marc Valin
3a0bc3d95c Allowing CELT to skip the low frequencies 2010-02-25 22:46:55 -05:00
Jean-Marc Valin
234969c903 Removed the _t from all the celt*_t types to avoid clashing with POSIX 2009-10-17 22:12:42 -04:00
Jean-Marc Valin
8b2ff0da5a Updated copyright notices 2009-10-17 21:40:10 -04:00
Jean-Marc Valin
d5e5436e07 Fix for folding_decision() in stereo mode and more cleaning up of the code
now that we no longer do normalized pitch
2009-09-30 20:50:41 -04:00
Jean-Marc Valin
095c1782c5 Removed code that is no longer necessary with denorm pitch and spreading 2009-09-17 22:38:34 -04:00
Jean-Marc Valin
3aa3afe74f Only calling intra_fold() when there's no pulse allocated 2009-09-11 20:28:29 -04:00
Jean-Marc Valin
a7750b90cc Re-introducing the successive rotations as a way to control low-bitrate
tonal artefacts. This replaces folding for all cases where we have at least
one pulse.
2009-08-29 22:52:03 +01:00
Jean-Marc Valin
798ab38b27 Using normalised M/S stereo data for folding and use separate folding gains
for M and S.
2009-07-12 20:41:29 -04:00
Jean-Marc Valin
ca53b7c919 Squashed commit of the following:
commit ea807b68678dd76175def2c5eb006c6bdb16679e
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Wed Mar 25 23:24:41 2009 -0400

    cleanup before merge

commit 73ad1a0202641be6a23903e464ece21fe332a131
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Sat Mar 21 00:02:16 2009 -0400

    Some tuning of the new stereo

commit c05057eb57a7723045214a2f830fd561388ae48a
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Sun Mar 15 19:56:11 2009 -0400

    fixed-point: atan2() converted

commit a8476cf8be55b0612d42df98d9807ca1335adfe3
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Sat Mar 14 23:10:04 2009 -0400

    fixed-point: Getting the new stereo code working in fixed-point (still more
    work left)

commit 70a452761a5ce15700664e7167886dce5914cbd0
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Mon Mar 2 23:36:25 2009 -0500

    Coding left and right independently for lower bands

commit 4efd1e6385c7d036749080265a8d26668312b91b
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Sun Mar 1 23:56:46 2009 -0500

    Removed the sqrt(C) from the normalisation, which simplifies a lot of things.

commit a4f3c5c60bc396bf644afa49b49e6b24ccf144f8
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Fri Feb 20 20:49:38 2009 -0500

    Better point stereo calculation when we don't encode the side anyway

commit f08525de4739f4017d19ec2e2022883deda8f826
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Thu Feb 19 19:43:09 2009 -0500

    Apparently, Timothy's calculations for fine energy allocation also apply
    to the quantisation of theta.

commit 6548cffc9d3f996b8a8dbfab982f0da0bc6c2dc2
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Thu Feb 19 07:35:24 2009 -0500

    Better handling of the "theta bits" and disabling the orthogonalize()

commit 7aa82c694967afa85dd30be8cc670663f98829fe
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Wed Feb 18 08:01:07 2009 -0500

    tuning the new stereo

commit c2b780a773de66fd9613c7cd54c09b705fe9ce45
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Sun Feb 15 22:24:52 2009 -0500

    The new stereo coupling actually decodes properly now.

commit 85513c203d773bebcf0a6055f953170d563d890c
Author: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date:   Sun Feb 15 21:31:16 2009 -0500

    First attempt at a new "constrained" MS stereo scheme
2009-03-26 20:23:14 -04:00
Jean-Marc Valin
6cde5dd24c alg_quant() now handles the sign of X[] separately from the quantisation
process
2008-12-04 21:21:41 -05:00
Jean-Marc Valin
896471dc3d Disabling the folding sign bit 2008-11-06 21:55:41 -05:00
Jean-Marc Valin
1d27ef8b2c Re-implemented renormalise_bands() based on renormalise_vector(). 2008-07-20 23:30:29 -04:00
Jean-Marc Valin
df38f2bf01 Re-enabling folding/intra for transients 2008-07-20 20:36:54 -04:00
Jean-Marc Valin
9a8bac019c Using only a sign for the intra prediction instead of using up to 5 bits for
an offset.
2008-05-05 12:02:14 +10:00
Jean-Marc Valin
ba11d78372 Passing the mode to the intra prediction functions so the single-channel case
can be optimised
2008-04-21 21:59:37 +10:00
Jean-Marc Valin
8c4877bd52 Bit better indexing in intra_prediction() 2008-04-21 12:15:16 +10:00
Jean-Marc Valin
35a1f88e81 optimisation: The "simple" Rxy/sqrt(Ryy) case in alg_quant no longer requires
a division
2008-03-26 10:34:23 +11:00
Jean-Marc Valin
bd718ba577 Removed the "pitch compression" in the residual quantisation. Also, removed
the more complex "n-best search" and replaced it with a greedy search
2008-03-25 14:15:41 +11:00
Jean-Marc Valin
312132780e A bunch of const qualifyers and a few comments 2008-03-03 16:52:54 +11:00
Jean-Marc Valin
9d8d9b3f37 fixed-point: compression factor (alpha) now a 16-bit value (still internally
converted to float though)
2008-02-27 16:17:39 +11:00
Jean-Marc Valin
5f09ea5659 celt_mask_t for masking curves 2008-02-26 16:43:04 +11:00
Jean-Marc Valin
2fa8affdc5 fixed-point: celt_norm_t now a 16-bit value. 2008-02-26 12:21:58 +11:00
Jean-Marc Valin
18ddc02afd Separating types for normalised vs. denormalised data paths 2008-02-22 14:24:50 +11:00
Jean-Marc Valin
276de7211d Mode doc 2008-02-20 17:45:51 +11:00
Jean-Marc Valin
879fbfd528 Updated Doxygen comments, removed an incorrectly placed LGPL header (we own
copyright, so it's fine!)
2008-02-20 17:17:13 +11:00
Jean-Marc Valin
0df0eb4c67 doing the folding properly. 2008-02-13 16:00:10 +11:00
Jean-Marc Valin
0e20ca0969 Enabling "plain folding" in case we don't even have enough bits for intra-frame
prediction
2008-02-11 15:33:53 +11:00
Jean-Marc Valin
26c9e1452a Comments/cleanup, no code change 2007-12-31 21:27:54 +11:00
Jean-Marc Valin
0d227d86e5 Got the intra-band prediction/copy to work correctly with
pulse spreading (and to work at all).
2007-12-31 16:12:12 +11:00
Jean-Marc Valin
46014ca49a Propagating perceptual weighting around (not used yet). 2007-12-14 13:47:04 +11:00
Jean-Marc Valin
4a897680e3 Working on some stability issues (appears to be solved by making the pitch
projection less aggressive). Also, fixed a 64-bit overflow in the stereo mode
and added a "band rotation" function.
2007-12-12 00:45:15 +11:00
Jean-Marc Valin
6e9058adb9 Nearly working cheating decoder. 2007-12-07 14:59:06 +11:00
Jean-Marc Valin
fc08d0a6d6 Algebraic codebook decoding (not tested yet) 2007-12-07 13:26:15 +11:00
Jean-Marc Valin
9cace64e5f Fixed codebook entirely quantised 2007-12-06 17:44:09 +11:00
Jean-Marc Valin
29ccab8aac Some work on index packing 2007-12-06 15:39:38 +11:00
Jean-Marc Valin
4841a0a02b Intra-frame prediction 2007-12-03 13:54:30 +11:00
Jean-Marc Valin
41af421540 Oops, forgot to add the Ghost/ceft vq files 2007-11-30 18:35:37 +11:00