VP5/6/8: tweak some arithcoder inlining
Always inline the arithmetic coder, except in the case of header-parsing stuff, in which case don't inline it at all to save code size. Originally committed as revision 24677 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -214,7 +214,7 @@ static av_always_inline unsigned int vp56_rac_renorm(VP56RangeCoder *c)
|
|||||||
|
|
||||||
#ifndef vp56_rac_get_prob
|
#ifndef vp56_rac_get_prob
|
||||||
#define vp56_rac_get_prob vp56_rac_get_prob
|
#define vp56_rac_get_prob vp56_rac_get_prob
|
||||||
static inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob)
|
static av_always_inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob)
|
||||||
{
|
{
|
||||||
unsigned int code_word = vp56_rac_renorm(c);
|
unsigned int code_word = vp56_rac_renorm(c);
|
||||||
unsigned int low = 1 + (((c->high - 1) * prob) >> 8);
|
unsigned int low = 1 + (((c->high - 1) * prob) >> 8);
|
||||||
@@ -246,7 +246,7 @@ static av_always_inline int vp56_rac_get_prob_branchy(VP56RangeCoder *c, int pro
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int vp56_rac_get(VP56RangeCoder *c)
|
static av_always_inline int vp56_rac_get(VP56RangeCoder *c)
|
||||||
{
|
{
|
||||||
unsigned int code_word = vp56_rac_renorm(c);
|
unsigned int code_word = vp56_rac_renorm(c);
|
||||||
/* equiprobable */
|
/* equiprobable */
|
||||||
@@ -265,12 +265,12 @@ static inline int vp56_rac_get(VP56RangeCoder *c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rounding is different than vp56_rac_get, is vp56_rac_get wrong?
|
// rounding is different than vp56_rac_get, is vp56_rac_get wrong?
|
||||||
static inline int vp8_rac_get(VP56RangeCoder *c)
|
static av_always_inline int vp8_rac_get(VP56RangeCoder *c)
|
||||||
{
|
{
|
||||||
return vp56_rac_get_prob(c, 128);
|
return vp56_rac_get_prob(c, 128);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int vp56_rac_gets(VP56RangeCoder *c, int bits)
|
static int vp56_rac_gets(VP56RangeCoder *c, int bits)
|
||||||
{
|
{
|
||||||
int value = 0;
|
int value = 0;
|
||||||
|
|
||||||
@@ -281,7 +281,7 @@ static inline int vp56_rac_gets(VP56RangeCoder *c, int bits)
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int vp8_rac_get_uint(VP56RangeCoder *c, int bits)
|
static int vp8_rac_get_uint(VP56RangeCoder *c, int bits)
|
||||||
{
|
{
|
||||||
int value = 0;
|
int value = 0;
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ static inline int vp8_rac_get_uint(VP56RangeCoder *c, int bits)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fixme: add 1 bit to all the calls to this?
|
// fixme: add 1 bit to all the calls to this?
|
||||||
static inline int vp8_rac_get_sint(VP56RangeCoder *c, int bits)
|
static int vp8_rac_get_sint(VP56RangeCoder *c, int bits)
|
||||||
{
|
{
|
||||||
int v;
|
int v;
|
||||||
|
|
||||||
@@ -309,19 +309,20 @@ static inline int vp8_rac_get_sint(VP56RangeCoder *c, int bits)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// P(7)
|
// P(7)
|
||||||
static inline int vp56_rac_gets_nn(VP56RangeCoder *c, int bits)
|
static int vp56_rac_gets_nn(VP56RangeCoder *c, int bits)
|
||||||
{
|
{
|
||||||
int v = vp56_rac_gets(c, 7) << 1;
|
int v = vp56_rac_gets(c, 7) << 1;
|
||||||
return v + !v;
|
return v + !v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int vp8_rac_get_nn(VP56RangeCoder *c)
|
static int vp8_rac_get_nn(VP56RangeCoder *c)
|
||||||
{
|
{
|
||||||
int v = vp8_rac_get_uint(c, 7) << 1;
|
int v = vp8_rac_get_uint(c, 7) << 1;
|
||||||
return v + !v;
|
return v + !v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int vp56_rac_get_tree(VP56RangeCoder *c,
|
static av_always_inline
|
||||||
|
int vp56_rac_get_tree(VP56RangeCoder *c,
|
||||||
const VP56Tree *tree,
|
const VP56Tree *tree,
|
||||||
const uint8_t *probs)
|
const uint8_t *probs)
|
||||||
{
|
{
|
||||||
@@ -339,7 +340,8 @@ static inline int vp56_rac_get_tree(VP56RangeCoder *c,
|
|||||||
* on a node other than the root node, needed for coeff decode where this is
|
* on a node other than the root node, needed for coeff decode where this is
|
||||||
* used to save a bit after a 0 token (by disallowing EOB to immediately follow.)
|
* used to save a bit after a 0 token (by disallowing EOB to immediately follow.)
|
||||||
*/
|
*/
|
||||||
static inline int vp8_rac_get_tree_with_offset(VP56RangeCoder *c, const int8_t (*tree)[2],
|
static av_always_inline
|
||||||
|
int vp8_rac_get_tree_with_offset(VP56RangeCoder *c, const int8_t (*tree)[2],
|
||||||
const uint8_t *probs, int i)
|
const uint8_t *probs, int i)
|
||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
@@ -351,14 +353,15 @@ static inline int vp8_rac_get_tree_with_offset(VP56RangeCoder *c, const int8_t (
|
|||||||
|
|
||||||
// how probabilities are associated with decisions is different I think
|
// how probabilities are associated with decisions is different I think
|
||||||
// well, the new scheme fits in the old but this way has one fewer branches per decision
|
// well, the new scheme fits in the old but this way has one fewer branches per decision
|
||||||
static inline int vp8_rac_get_tree(VP56RangeCoder *c, const int8_t (*tree)[2],
|
static av_always_inline
|
||||||
|
int vp8_rac_get_tree(VP56RangeCoder *c, const int8_t (*tree)[2],
|
||||||
const uint8_t *probs)
|
const uint8_t *probs)
|
||||||
{
|
{
|
||||||
return vp8_rac_get_tree_with_offset(c, tree, probs, 0);
|
return vp8_rac_get_tree_with_offset(c, tree, probs, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCTextra
|
// DCTextra
|
||||||
static inline int vp8_rac_get_coeff(VP56RangeCoder *c, const uint8_t *prob)
|
static av_always_inline int vp8_rac_get_coeff(VP56RangeCoder *c, const uint8_t *prob)
|
||||||
{
|
{
|
||||||
int v = 0;
|
int v = 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user