Bit of cleaning up in the byte dumping part. Making use of any remaining bit(s)
[opus.git] / libentcode / probmod.h
1 #if !defined(_probmod_H)
2 # define _probmod_H (1)
3 # include "entcode.h"
4
5 typedef struct ec_probsamp     ec_probsamp;
6 typedef struct ec_probmod      ec_probmod;
7
8 /*A sample from a probability distribution.
9   This is the information needed to encode a symbol or update the decoder
10    state.*/
11 struct ec_probsamp{
12   /*The cumulative frequency of all symbols preceding this one in the
13      alphabet.*/
14   unsigned fl;
15   /*The frequency of the symbol coded.*/
16   unsigned fs;
17   /*The total frequency of all symbols in the alphabet.*/
18   unsigned ft;
19 };
20
21
22 /*A simple frequency-count probability model.*/
23 struct ec_probmod{
24   /*The number of symbols in this context.*/
25   int       sz;
26   /*The largest power of two less than or equal to sz.*/
27   int       split;
28   /*The amount by which to increment the frequency count of an observed
29      symbol.*/
30   unsigned  inc;
31   /*The current total frequency count.*/
32   unsigned  ft;
33   /*The maximum total frequency count allowed before the counts are rescaled.
34     Note that this should be larger than (inc+1>>1)+sz-1, since at most one
35      rescaling is done per decoded symbol.
36     Otherwise, this threshold might be exceeded.
37     This must be less than 2**23 for a range coder, and 2**31 for an
38      arithmetic coder.*/
39   unsigned  thresh;
40   /*The binary indexed tree used to keep track of the frequency counts.*/
41   unsigned *bitree;
42 };
43
44
45 /*Initializes a probability model of the given size.
46   The amount to increment and all frequency counts are initialized to 1.
47   The rescaling threshold is initialized to 2**23.
48   _sz: The number of symbols in this context.*/
49 void ec_probmod_init(ec_probmod *_this,unsigned _sz);
50 /*Initializes a probability model of the given size.
51   The amount to increment is initialized to 1.
52   The rescaling threshold is initialized to 2**23.
53   _sz:     The number of symbols in this context.
54   _counts: The initial frequency count of each symbol.*/
55 void ec_probmod_init_from_counts(ec_probmod *_this,unsigned _sz,
56  const unsigned *_counts);
57 /*Initializes a probability model of the given size.
58   _sz:     The number of symbols in this context.
59   _inc:    The amount by which to increment the frequency count of an observed
60             symbol.
61   _thresh: The maximum total frequency count allowed before the counts are
62             rescaled.
63            See above for restrictions on this value.
64   _counts: The initial frequency count of each symbol, or NULL to initialize
65             each frequency count to 1.*/
66 void ec_probmod_init_full(ec_probmod *_this,unsigned _sz,unsigned _inc,
67  unsigned _thresh,const unsigned *_counts);
68 /*Frees all memory used by this probability model.*/
69 void ec_probmod_clear(ec_probmod *_this);
70
71
72
73 #endif