|
1 /* Copyright (c) 2007-2008 CSIRO |
|
2 Copyright (c) 2007-2009 Xiph.Org Foundation |
|
3 Written by Jean-Marc Valin */ |
|
4 /** |
|
5 @file vq.h |
|
6 @brief Vector quantisation of the residual |
|
7 */ |
|
8 /* |
|
9 Redistribution and use in source and binary forms, with or without |
|
10 modification, are permitted provided that the following conditions |
|
11 are met: |
|
12 |
|
13 - Redistributions of source code must retain the above copyright |
|
14 notice, this list of conditions and the following disclaimer. |
|
15 |
|
16 - Redistributions in binary form must reproduce the above copyright |
|
17 notice, this list of conditions and the following disclaimer in the |
|
18 documentation and/or other materials provided with the distribution. |
|
19 |
|
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
21 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
22 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
23 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER |
|
24 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
|
25 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|
26 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
|
27 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
|
28 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
|
29 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
|
30 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
31 */ |
|
32 |
|
33 #ifndef VQ_H |
|
34 #define VQ_H |
|
35 |
|
36 #include "entenc.h" |
|
37 #include "entdec.h" |
|
38 #include "modes.h" |
|
39 |
|
40 /** Algebraic pulse-vector quantiser. The signal x is replaced by the sum of |
|
41 * the pitch and a combination of pulses such that its norm is still equal |
|
42 * to 1. This is the function that will typically require the most CPU. |
|
43 * @param X Residual signal to quantise/encode (returns quantised version) |
|
44 * @param N Number of samples to encode |
|
45 * @param K Number of pulses to use |
|
46 * @param enc Entropy encoder state |
|
47 * @ret A mask indicating which blocks in the band received pulses |
|
48 */ |
|
49 unsigned alg_quant(celt_norm *X, int N, int K, int spread, int B, |
|
50 ec_enc *enc |
|
51 #ifdef RESYNTH |
|
52 , opus_val16 gain |
|
53 #endif |
|
54 ); |
|
55 |
|
56 /** Algebraic pulse decoder |
|
57 * @param X Decoded normalised spectrum (returned) |
|
58 * @param N Number of samples to decode |
|
59 * @param K Number of pulses to use |
|
60 * @param dec Entropy decoder state |
|
61 * @ret A mask indicating which blocks in the band received pulses |
|
62 */ |
|
63 unsigned alg_unquant(celt_norm *X, int N, int K, int spread, int B, |
|
64 ec_dec *dec, opus_val16 gain); |
|
65 |
|
66 void renormalise_vector(celt_norm *X, int N, opus_val16 gain); |
|
67 |
|
68 int stereo_itheta(celt_norm *X, celt_norm *Y, int stereo, int N); |
|
69 |
|
70 #endif /* VQ_H */ |