Cache splitmv motion vectors appropriately in decoder.
authorRonald S. Bultje <rbultje@google.com>
Thu, 2 May 2013 20:55:08 +0000 (13:55 -0700)
committerRonald S. Bultje <rbultje@google.com>
Thu, 2 May 2013 20:55:35 +0000 (13:55 -0700)
This fixes some problems in splitmv-related bitstream parsing in the
sb8x8 experiment.

Change-Id: Id168f9ec9c88626877d8f536e6f394b6f4f782e4

vp9/decoder/vp9_decodemv.c
vp9/encoder/vp9_bitstream.c

index 6c3aad5..e4159bb 100644 (file)
@@ -692,7 +692,12 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
       if (vp9_segfeature_active(xd, mbmi->segment_id, SEG_LVL_SKIP)) {
         mbmi->mode = ZEROMV;
       } else {
-        mbmi->mode = mbmi->sb_type > BLOCK_SIZE_MB16X16 ?
+        mbmi->mode =
+#if CONFIG_SB8X8
+                     mbmi->sb_type > BLOCK_SIZE_SB8X8 ?
+#else
+                     mbmi->sb_type > BLOCK_SIZE_MB16X16 ?
+#endif
                                      read_sb_mv_ref(r, mv_ref_p)
                                    : read_mv_ref(r, mv_ref_p);
         vp9_accum_mv_refs(cm, mbmi->mode, mbmi->mb_mode_context[ref_frame]);
@@ -882,7 +887,11 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
           }
           */
 
-#if !CONFIG_SB8X8
+#if CONFIG_SB8X8
+          mi->bmi[j].as_mv[0].as_int = blockmv.as_int;
+          if (mbmi->second_ref_frame > 0)
+            mi->bmi[j].as_mv[1].as_int = secondmv.as_int;
+#else
           {
             /* Fill (uniform) modes, mvs of jth subset.
              Must do it here because ensuing subsets can
index 197a499..12efd2b 100644 (file)
@@ -765,7 +765,12 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m,
 
     // If segment skip is not enabled code the mode.
     if (!vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) {
-      if (mi->sb_type > BLOCK_SIZE_MB16X16) {
+#if CONFIG_SB8X8
+      if (mi->sb_type > BLOCK_SIZE_SB8X8)
+#else
+      if (mi->sb_type > BLOCK_SIZE_MB16X16)
+#endif
+      {
         write_sb_mv_ref(bc, mode, mv_ref_p);
       } else {
         write_mv_ref(bc, mode, mv_ref_p);