VP8: unroll splitmv decoding tree
Much faster splitmv mode decoding. Originally committed as revision 24680 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
23117d69c1
commit
c5dec7f137
@ -673,20 +673,19 @@ int decode_splitmvs(VP8Context *s, VP56RangeCoder *c, VP8Macroblock *mb)
|
||||
|
||||
submv_prob = get_submv_prob(left, above);
|
||||
|
||||
switch (vp8_rac_get_tree(c, vp8_submv_ref_tree, submv_prob)) {
|
||||
case VP8_SUBMVMODE_NEW4X4:
|
||||
if (vp56_rac_get_prob_branchy(c, submv_prob[0])) {
|
||||
if (vp56_rac_get_prob_branchy(c, submv_prob[1])) {
|
||||
if (vp56_rac_get_prob_branchy(c, submv_prob[2])) {
|
||||
mb->bmv[n].y = mb->mv.y + read_mv_component(c, s->prob->mvc[0]);
|
||||
mb->bmv[n].x = mb->mv.x + read_mv_component(c, s->prob->mvc[1]);
|
||||
break;
|
||||
case VP8_SUBMVMODE_ZERO4X4:
|
||||
} else {
|
||||
AV_ZERO32(&mb->bmv[n]);
|
||||
break;
|
||||
case VP8_SUBMVMODE_LEFT4X4:
|
||||
AV_WN32A(&mb->bmv[n], left);
|
||||
break;
|
||||
case VP8_SUBMVMODE_TOP4X4:
|
||||
}
|
||||
} else {
|
||||
AV_WN32A(&mb->bmv[n], above);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
AV_WN32A(&mb->bmv[n], left);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,13 +55,6 @@ enum inter_mvmode {
|
||||
VP8_MVMODE_SPLIT
|
||||
};
|
||||
|
||||
enum inter_submvmode {
|
||||
VP8_SUBMVMODE_LEFT4X4,
|
||||
VP8_SUBMVMODE_TOP4X4,
|
||||
VP8_SUBMVMODE_ZERO4X4,
|
||||
VP8_SUBMVMODE_NEW4X4
|
||||
};
|
||||
|
||||
enum inter_splitmvmode {
|
||||
VP8_SPLITMVMODE_16x8 = 0, ///< 2 16x8 blocks (vertical)
|
||||
VP8_SPLITMVMODE_8x16, ///< 2 8x16 blocks (horizontal)
|
||||
@ -139,12 +132,6 @@ static const uint8_t vp8_submv_prob[5][3] = {
|
||||
{ 208, 1, 1 }
|
||||
};
|
||||
|
||||
static const int8_t vp8_submv_ref_tree[3][2] = {
|
||||
{ -VP8_SUBMVMODE_LEFT4X4, 1 }, // '0'
|
||||
{ -VP8_SUBMVMODE_TOP4X4, 2 }, // '10'
|
||||
{ -VP8_SUBMVMODE_ZERO4X4, -VP8_SUBMVMODE_NEW4X4 } // '110', '111'
|
||||
};
|
||||
|
||||
static const uint8_t vp8_pred16x16_prob_intra[4] = { 145, 156, 163, 128 };
|
||||
static const uint8_t vp8_pred16x16_prob_inter[4] = { 112, 86, 140, 37 };
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user