|
|
|
@ -471,7 +471,7 @@ void decode_mvs(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y) |
|
|
|
|
mb - 1 /* left */, |
|
|
|
|
mb + 1 /* top-left */ }; |
|
|
|
|
enum { CNT_ZERO, CNT_NEAREST, CNT_NEAR, CNT_SPLITMV }; |
|
|
|
|
enum { EDGE_TOP, EDGE_LEFT, EDGE_TOPLEFT }; |
|
|
|
|
enum { VP8_EDGE_TOP, VP8_EDGE_LEFT, VP8_EDGE_TOPLEFT }; |
|
|
|
|
int idx = CNT_ZERO; |
|
|
|
|
int cur_sign_bias = s->sign_bias[mb->ref_frame]; |
|
|
|
|
int8_t *sign_bias = s->sign_bias; |
|
|
|
@ -512,7 +512,7 @@ void decode_mvs(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y) |
|
|
|
|
mb->mode = VP8_MVMODE_MV; |
|
|
|
|
|
|
|
|
|
/* If we have three distinct MVs, merge first and last if they're the same */ |
|
|
|
|
if (cnt[CNT_SPLITMV] && AV_RN32A(&near_mv[1+EDGE_TOP]) == AV_RN32A(&near_mv[1+EDGE_TOPLEFT])) |
|
|
|
|
if (cnt[CNT_SPLITMV] && AV_RN32A(&near_mv[1 + VP8_EDGE_TOP]) == AV_RN32A(&near_mv[1 + VP8_EDGE_TOPLEFT])) |
|
|
|
|
cnt[CNT_NEAREST] += 1; |
|
|
|
|
|
|
|
|
|
/* Swap near and nearest if necessary */ |
|
|
|
@ -526,9 +526,9 @@ void decode_mvs(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y) |
|
|
|
|
|
|
|
|
|
/* Choose the best mv out of 0,0 and the nearest mv */ |
|
|
|
|
clamp_mv(s, &mb->mv, &near_mv[CNT_ZERO + (cnt[CNT_NEAREST] >= cnt[CNT_ZERO])]); |
|
|
|
|
cnt[CNT_SPLITMV] = ((mb_edge[EDGE_LEFT]->mode == VP8_MVMODE_SPLIT) + |
|
|
|
|
(mb_edge[EDGE_TOP]->mode == VP8_MVMODE_SPLIT)) * 2 + |
|
|
|
|
(mb_edge[EDGE_TOPLEFT]->mode == VP8_MVMODE_SPLIT); |
|
|
|
|
cnt[CNT_SPLITMV] = ((mb_edge[VP8_EDGE_LEFT]->mode == VP8_MVMODE_SPLIT) + |
|
|
|
|
(mb_edge[VP8_EDGE_TOP]->mode == VP8_MVMODE_SPLIT)) * 2 + |
|
|
|
|
(mb_edge[VP8_EDGE_TOPLEFT]->mode == VP8_MVMODE_SPLIT); |
|
|
|
|
|
|
|
|
|
if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_SPLITMV]][3])) { |
|
|
|
|
mb->mode = VP8_MVMODE_SPLIT; |
|
|
|
|