ref: 998b540fe21335e7ea31bcdcfcfa1c3512ac8622
parent: 0e59dad0deeac1f17602d1edc8fb88f5f9604520
parent: a37ee9d2e8b9b7cf33455af60bcd9312dc898126
author: John Koleszar <jkoleszar@google.com>
date: Fri May 10 12:57:03 EDT 2013
Merge "Fix non-4:2:0 chroma MV calculation for SPLITMV" into experimental
--- a/vp9/common/vp9_reconinter.c
+++ b/vp9/common/vp9_reconinter.c
@@ -257,22 +257,19 @@
return (value < 0 ? value - 2 : value + 2) / 4;
}
-#define IDX1 2
-#define IDX2 3
-
-static int mi_mv_pred_row_q4(MACROBLOCKD *mb, int off, int idx) {
- const int temp = mb->mode_info_context->bmi[off + 0].as_mv[idx].as_mv.row +
- mb->mode_info_context->bmi[off + 1].as_mv[idx].as_mv.row +
- mb->mode_info_context->bmi[off + IDX1].as_mv[idx].as_mv.row +
- mb->mode_info_context->bmi[off + IDX2].as_mv[idx].as_mv.row;
+static int mi_mv_pred_row_q4(MACROBLOCKD *mb, int idx) {
+ const int temp = mb->mode_info_context->bmi[0].as_mv[idx].as_mv.row +
+ mb->mode_info_context->bmi[1].as_mv[idx].as_mv.row +
+ mb->mode_info_context->bmi[2].as_mv[idx].as_mv.row +
+ mb->mode_info_context->bmi[3].as_mv[idx].as_mv.row;
return round_mv_comp_q4(temp);
}
-static int mi_mv_pred_col_q4(MACROBLOCKD *mb, int off, int idx) {
- const int temp = mb->mode_info_context->bmi[off + 0].as_mv[idx].as_mv.col +
- mb->mode_info_context->bmi[off + 1].as_mv[idx].as_mv.col +
- mb->mode_info_context->bmi[off + IDX1].as_mv[idx].as_mv.col +
- mb->mode_info_context->bmi[off + IDX2].as_mv[idx].as_mv.col;
+static int mi_mv_pred_col_q4(MACROBLOCKD *mb, int idx) {
+ const int temp = mb->mode_info_context->bmi[0].as_mv[idx].as_mv.col +
+ mb->mode_info_context->bmi[1].as_mv[idx].as_mv.col +
+ mb->mode_info_context->bmi[2].as_mv[idx].as_mv.col +
+ mb->mode_info_context->bmi[3].as_mv[idx].as_mv.col;
return round_mv_comp_q4(temp);
}
@@ -351,9 +348,12 @@
if (plane == 0) {
mv = &xd->mode_info_context->bmi[block].as_mv[which_mv].as_mv;
} else {
- const int y_block = (block & 2) * 4 + (block & 1) * 2;
- split_chroma_mv.row = mi_mv_pred_row_q4(xd, y_block, which_mv);
- split_chroma_mv.col = mi_mv_pred_col_q4(xd, y_block, which_mv);
+ // TODO(jkoleszar): All chroma MVs in SPLITMV mode are taken as the
+ // same MV (the average of the 4 luma MVs) but we could do something
+ // smarter for non-4:2:0. Just punt for now, pending the changes to get
+ // rid of SPLITMV mode entirely.
+ split_chroma_mv.row = mi_mv_pred_row_q4(xd, which_mv);
+ split_chroma_mv.col = mi_mv_pred_col_q4(xd, which_mv);
mv = &split_chroma_mv;
}
} else {
--
⑨