making codec draft more compliant with IETF submission rules
[opus.git] / libcelt / entdec.h
1 /* (C) 2001-2008 Timothy B. Terriberry
2    (C) 2008 Jean-Marc Valin */
3 /*
4    Redistribution and use in source and binary forms, with or without
5    modification, are permitted provided that the following conditions
6    are met:
7
8    - Redistributions of source code must retain the above copyright
9    notice, this list of conditions and the following disclaimer.
10
11    - Redistributions in binary form must reproduce the above copyright
12    notice, this list of conditions and the following disclaimer in the
13    documentation and/or other materials provided with the distribution.
14
15    - Neither the name of the Xiph.org Foundation nor the names of its
16    contributors may be used to endorse or promote products derived from
17    this software without specific prior written permission.
18
19    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #if !defined(_entdec_H)
33 # define _entdec_H (1)
34 # include "entcode.h"
35
36
37
38 typedef struct ec_dec ec_dec;
39
40
41
42 /*The entropy decoder.*/
43 struct ec_dec{
44    /*The buffer to decode.*/
45    ec_byte_buffer *buf;
46    /*The remainder of a buffered input symbol.*/
47    int             rem;
48    /*The number of values in the current range.*/
49    ec_uint32       rng;
50    /*The difference between the input value and the lowest value in the current
51       range.*/
52    ec_uint32       dif;
53    /*Normalization factor.*/
54    ec_uint32       nrm;
55 };
56
57
58 /*Initializes the decoder.
59   _buf: The input buffer to use.
60   Return: 0 on success, or a negative value on error.*/
61 void ec_dec_init(ec_dec *_this,ec_byte_buffer *_buf);
62 /*Calculates the cumulative frequency for the next symbol.
63   This can then be fed into the probability model to determine what that
64    symbol is, and the additional frequency information required to advance to
65    the next symbol.
66   This function cannot be called more than once without a corresponding call to
67    ec_dec_update(), or decoding will not proceed correctly.
68   _ft: The total frequency of the symbols in the alphabet the next symbol was
69         encoded with.
70   Return: A cumulative frequency representing the encoded symbol.
71           If the cumulative frequency of all the symbols before the one that
72            was encoded was fl, and the cumulative frequency of all the symbols
73            up to and including the one encoded is fh, then the returned value
74            will fall in the range [fl,fh).*/
75 unsigned ec_decode(ec_dec *_this,unsigned _ft);
76 unsigned ec_decode_bin(ec_dec *_this,unsigned bits);
77 /*Advance the decoder past the next symbol using the frequency information the
78    symbol was encoded with.
79   Exactly one call to ec_decode() must have been made so that all necessary
80    intermediate calculations are performed.
81   _fl:  The cumulative frequency of all symbols that come before the symbol
82          decoded.
83   _fh:  The cumulative frequency of all symbols up to and including the symbol
84          decoded.
85         Together with _fl, this defines the range [_fl,_fh) in which the value
86          returned above must fall.
87   _ft:  The total frequency of the symbols in the alphabet the symbol decoded
88          was encoded in.
89         This must be the same as passed to the preceding call to ec_decode().*/
90 void ec_dec_update(ec_dec *_this,unsigned _fl,unsigned _fh,
91  unsigned _ft);
92 /*Extracts a sequence of raw bits from the stream.
93   The bits must have been encoded with ec_enc_bits().
94   No call to ec_dec_update() is necessary after this call.
95   _ftb: The number of bits to extract.
96         This must be at least one, and no more than 32.
97   Return: The decoded bits.*/
98 ec_uint32 ec_dec_bits(ec_dec *_this,int _ftb);
99 /*Extracts a sequence of raw bits from the stream.
100   The bits must have been encoded with ec_enc_bits64().
101   No call to ec_dec_update() is necessary after this call.
102   _ftb: The number of bits to extract.
103         This must be at least one, and no more than 64.
104   Return: The decoded bits.*/
105 ec_uint64 ec_dec_bits64(ec_dec *_this,int _ftb);
106 /*Extracts a raw unsigned integer with a non-power-of-2 range from the stream.
107   The bits must have been encoded with ec_enc_uint().
108   No call to ec_dec_update() is necessary after this call.
109   _ft: The number of integers that can be decoded (one more than the max).
110        This must be at least one, and no more than 2**32-1.
111   Return: The decoded bits.*/
112 ec_uint32 ec_dec_uint(ec_dec *_this,ec_uint32 _ft);
113 /*Extracts a raw unsigned integer with a non-power-of-2 range from the stream.
114   The bits must have been encoded with ec_enc_uint64().
115   No call to ec_dec_update() is necessary after this call.
116   _ft: The number of integers that can be decoded (one more than the max).
117        This must be at least one, and no more than 2**64-1.
118   Return: The decoded bits.*/
119 ec_uint64 ec_dec_uint64(ec_dec *_this,ec_uint64 _ft);
120
121 /*Returns the number of bits "used" by the decoded symbols so far.
122   The actual number of bits may be larger, due to rounding to whole bytes, or
123    smaller, due to trailing zeros that were be stripped, so this is not an
124    estimate of the true packet size.
125   This same number can be computed by the encoder, and is suitable for making
126    coding decisions.
127   _b: The number of extra bits of precision to include.
128       At most 16 will be accurate.
129   Return: The number of bits scaled by 2**_b.
130           This will always be slightly larger than the exact value (e.g., all
131            rounding error is in the positive direction).*/
132 long ec_dec_tell(ec_dec *_this,int _b);
133
134 #endif