entdec.h 6.29 KB
Newer Older
Jean-Marc Valin's avatar
Jean-Marc Valin committed
1
2
/* Copyright (c) 2001-2008 Timothy B. Terriberry
   Copyright (c) 2008-2009 Xiph.Org Foundation */
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   are met:

   - Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.

   - Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

   - Neither the name of the Xiph.org Foundation nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

32
33
#if !defined(_entdec_H)
# define _entdec_H (1)
34
# include <limits.h>
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# include "entcode.h"



typedef struct ec_dec ec_dec;



/*The entropy decoder.*/
struct ec_dec{
   /*The buffer to decode.*/
   ec_byte_buffer *buf;
   /*The remainder of a buffered input symbol.*/
   int             rem;
   /*The number of values in the current range.*/
   ec_uint32       rng;
51
52
   /*The difference between the top of the current range and the input value,
      minus one.*/
53
54
55
   ec_uint32       dif;
   /*Normalization factor.*/
   ec_uint32       nrm;
56
57
58
59
60
61
62
   /*Bits that were written at the end.*/
   ec_window       end_window;
   /*Number of valid bits in end_window.*/
   int             nend_bits;
   /*The total number of whole bits read.*/
   int             nbits_total;
   /*Nonzero if an error occurred.*/
63
   int             error;
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
};


/*Initializes the decoder.
  _buf: The input buffer to use.
  Return: 0 on success, or a negative value on error.*/
void ec_dec_init(ec_dec *_this,ec_byte_buffer *_buf);
/*Calculates the cumulative frequency for the next symbol.
  This can then be fed into the probability model to determine what that
   symbol is, and the additional frequency information required to advance to
   the next symbol.
  This function cannot be called more than once without a corresponding call to
   ec_dec_update(), or decoding will not proceed correctly.
  _ft: The total frequency of the symbols in the alphabet the next symbol was
        encoded with.
  Return: A cumulative frequency representing the encoded symbol.
          If the cumulative frequency of all the symbols before the one that
           was encoded was fl, and the cumulative frequency of all the symbols
           up to and including the one encoded is fh, then the returned value
           will fall in the range [fl,fh).*/
unsigned ec_decode(ec_dec *_this,unsigned _ft);
85
86
unsigned ec_decode_bin(ec_dec *_this,unsigned _bits);

87
88
89
90
91
92
93
/*Advance the decoder past the next symbol using the frequency information the
   symbol was encoded with.
  Exactly one call to ec_decode() must have been made so that all necessary
   intermediate calculations are performed.
  _fl:  The cumulative frequency of all symbols that come before the symbol
         decoded.
  _fh:  The cumulative frequency of all symbols up to and including the symbol
94
         decoded.
95
96
97
98
99
100
101
102
103
104
105
        Together with _fl, this defines the range [_fl,_fh) in which the value
         returned above must fall.
  _ft:  The total frequency of the symbols in the alphabet the symbol decoded
         was encoded in.
        This must be the same as passed to the preceding call to ec_decode().*/
void ec_dec_update(ec_dec *_this,unsigned _fl,unsigned _fh,
 unsigned _ft);
/*Extracts a sequence of raw bits from the stream.
  The bits must have been encoded with ec_enc_bits().
  No call to ec_dec_update() is necessary after this call.
  _ftb: The number of bits to extract.
106
        This must be between 0 and 25, inclusive.
107
  Return: The decoded bits.*/
108
ec_uint32 ec_dec_bits(ec_dec *_this,unsigned _ftb);
109
110
111
112
113
114
115
/*Extracts a raw unsigned integer with a non-power-of-2 range from the stream.
  The bits must have been encoded with ec_enc_uint().
  No call to ec_dec_update() is necessary after this call.
  _ft: The number of integers that can be decoded (one more than the max).
       This must be at least one, and no more than 2**32-1.
  Return: The decoded bits.*/
ec_uint32 ec_dec_uint(ec_dec *_this,ec_uint32 _ft);
116
117
118
119
120
121
122
123
124
/*Decodes a symbol given its CDF.
  No call to ec_dec_update() is necessary after this call.
  _cdf: The CDF, such that symbol s falls in the range [_cdf[s],_cdf[s+1]).
        The first value must be 0, the last value must be (1<<_ftb), and the
         values must be monotonicly non-decreasing.
  _ftb: The number of bits of precision in the cumulative distribution.
  Return: The decoded symbol s, which must have been encoded with
   ec_encode_bin(enc,_cdf[s],_cdf[s+1],_ftb).*/
int ec_dec_cdf(ec_dec *_this,const int *_cdf,unsigned _ftb);
125

126
127
/* Decode a bit that has a _prob/65536 probability of being a one */
int ec_dec_bit_prob(ec_dec *_this,unsigned _prob);
128

129
130
131
/* Decode a bit that has a 1/(1<<_logp) probability of being a one */
int ec_dec_bit_logp(ec_dec *_this,unsigned _logp);

132
/*Returns the number of bits "used" by the encoded symbols so far.
133
134
135
136
137
138
139
  This same number can be computed by the encoder, and is suitable for making
   coding decisions.
  _b: The number of extra bits of precision to include.
      At most 16 will be accurate.
  Return: The number of bits scaled by 2**_b.
          This will always be slightly larger than the exact value (e.g., all
           rounding error is in the positive direction).*/
140
ec_uint32 ec_dec_tell(ec_dec *_this,int _b);
141

142
/*Return: A nonzero value if any error has been detected during decoding.*/
143
144
int ec_dec_get_error(ec_dec *_this);

145
#endif