Adds a range coder call to encode a single bit with arbitrary probability
This commit is contained in:
parent
c4ac57023c
commit
8035b6589d
4 changed files with 35 additions and 0 deletions
|
@ -111,3 +111,21 @@ ec_uint32 ec_dec_uint(ec_dec *_this,ec_uint32 _ft){
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The probability of having a "one" is given in 1/256 */
|
||||||
|
int ec_dec_bit_prob(ec_dec *_this,int _prob)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
int fl=0, fh=256-_prob;
|
||||||
|
val = ec_decode_bin(_this, 8);
|
||||||
|
if (val >= fh)
|
||||||
|
{
|
||||||
|
val = 1;
|
||||||
|
fl=fh;
|
||||||
|
fh=256;
|
||||||
|
} else {
|
||||||
|
val = 0;
|
||||||
|
}
|
||||||
|
ec_dec_update(_this,fl,fh,256);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
|
@ -111,6 +111,9 @@ ec_uint32 ec_dec_bits(ec_dec *_this,int _ftb);
|
||||||
Return: The decoded bits.*/
|
Return: The decoded bits.*/
|
||||||
ec_uint32 ec_dec_uint(ec_dec *_this,ec_uint32 _ft);
|
ec_uint32 ec_dec_uint(ec_dec *_this,ec_uint32 _ft);
|
||||||
|
|
||||||
|
/* Decode a bit that has a _prob/256 probability of being a one */
|
||||||
|
int ec_dec_bit_prob(ec_dec *_this,int _prob);
|
||||||
|
|
||||||
/*Returns the number of bits "used" by the decoded symbols so far.
|
/*Returns the number of bits "used" by the decoded symbols so far.
|
||||||
The actual number of bits may be larger, due to rounding to whole bytes, or
|
The actual number of bits may be larger, due to rounding to whole bytes, or
|
||||||
smaller, due to trailing zeros that were be stripped, so this is not an
|
smaller, due to trailing zeros that were be stripped, so this is not an
|
||||||
|
|
|
@ -101,3 +101,14 @@ void ec_enc_uint(ec_enc *_this,ec_uint32 _fl,ec_uint32 _ft){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The probability of having a "one" is given in 1/256 */
|
||||||
|
void ec_enc_bit_prob(ec_enc *_this,int val,int _prob)
|
||||||
|
{
|
||||||
|
int fl=0, fh=256-_prob;
|
||||||
|
if (val)
|
||||||
|
{
|
||||||
|
fl=fh;
|
||||||
|
fh=256;
|
||||||
|
}
|
||||||
|
ec_encode_bin(_this,fl,fh,8);
|
||||||
|
}
|
||||||
|
|
|
@ -91,6 +91,9 @@ void ec_enc_bits(ec_enc *_this,ec_uint32 _fl,int _ftb);
|
||||||
This must be at least one, and no more than 2**32-1.*/
|
This must be at least one, and no more than 2**32-1.*/
|
||||||
void ec_enc_uint(ec_enc *_this,ec_uint32 _fl,ec_uint32 _ft);
|
void ec_enc_uint(ec_enc *_this,ec_uint32 _fl,ec_uint32 _ft);
|
||||||
|
|
||||||
|
/* Encode a bit that has a _prob/256 probability of being a one */
|
||||||
|
void ec_enc_bit_prob(ec_enc *_this,int val,int _prob);
|
||||||
|
|
||||||
/*Returns the number of bits "used" by the encoded symbols so far.
|
/*Returns the number of bits "used" by the encoded symbols so far.
|
||||||
The actual number of bits may be larger, due to rounding to whole bytes, or
|
The actual number of bits may be larger, due to rounding to whole bytes, or
|
||||||
smaller, due to trailing zeros that can be stripped, so this is not an
|
smaller, due to trailing zeros that can be stripped, so this is not an
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue