From e65c564c788de32eb19f2e98a979c463e7aca3d7 Mon Sep 17 00:00:00 2001
From: Dmitry Kovalev <dkovalev@google.com>
Date: Thu, 13 Mar 2014 13:55:33 -0700
Subject: [PATCH] Adding vp9_swap_mi_and_prev_mi() function.

Change-Id: I18b3939f0b51085cdd25c9182c3a9c7536ca7e3e
---
 vp9/common/vp9_alloccommon.c | 16 ++++++++++++++++
 vp9/common/vp9_alloccommon.h |  2 ++
 vp9/decoder/vp9_decoder.c    | 22 +++-------------------
 vp9/encoder/vp9_onyx_if.c    | 15 +--------------
 4 files changed, 22 insertions(+), 33 deletions(-)

diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c
index cddac0178e..920aefa791 100644
--- a/vp9/common/vp9_alloccommon.c
+++ b/vp9/common/vp9_alloccommon.c
@@ -224,3 +224,19 @@ void vp9_update_frame_size(VP9_COMMON *cm) {
   if (cm->last_frame_seg_map)
     vpx_memset(cm->last_frame_seg_map, 0, cm->mi_rows * cm->mi_cols);
 }
+
+void vp9_swap_mi_and_prev_mi(VP9_COMMON *cm) {
+  // Current mip will be the prev_mip for the next frame.
+  MODE_INFO *temp = cm->prev_mip;
+  MODE_INFO **temp2 = cm->prev_mi_grid_base;
+  cm->prev_mip = cm->mip;
+  cm->mip = temp;
+  cm->prev_mi_grid_base = cm->mi_grid_base;
+  cm->mi_grid_base = temp2;
+
+  // Update the upper left visible macroblock ptrs.
+  cm->mi = cm->mip + cm->mode_info_stride + 1;
+  cm->prev_mi = cm->prev_mip + cm->mode_info_stride + 1;
+  cm->mi_grid_visible = cm->mi_grid_base + cm->mode_info_stride + 1;
+  cm->prev_mi_grid_visible = cm->prev_mi_grid_base + cm->mode_info_stride + 1;
+}
diff --git a/vp9/common/vp9_alloccommon.h b/vp9/common/vp9_alloccommon.h
index 066c778c3c..fca6935414 100644
--- a/vp9/common/vp9_alloccommon.h
+++ b/vp9/common/vp9_alloccommon.h
@@ -31,6 +31,8 @@ void vp9_free_frame_buffers(VP9_COMMON *cm);
 
 void vp9_update_frame_size(VP9_COMMON *cm);
 
+void vp9_swap_mi_and_prev_mi(VP9_COMMON *cm);
+
 #ifdef __cplusplus
 }  // extern "C"
 #endif
diff --git a/vp9/decoder/vp9_decoder.c b/vp9/decoder/vp9_decoder.c
index a50f5be684..3aedbef37b 100644
--- a/vp9/decoder/vp9_decoder.c
+++ b/vp9/decoder/vp9_decoder.c
@@ -423,25 +423,9 @@ int vp9_receive_compressed_data(VP9D_COMP *pbi,
   if (!cm->show_existing_frame)
     cm->last_show_frame = cm->show_frame;
   if (cm->show_frame) {
-    if (!cm->show_existing_frame) {
-      // current mip will be the prev_mip for the next frame
-      MODE_INFO *temp = cm->prev_mip;
-      MODE_INFO **temp2 = cm->prev_mi_grid_base;
-      cm->prev_mip = cm->mip;
-      cm->mip = temp;
-      cm->prev_mi_grid_base = cm->mi_grid_base;
-      cm->mi_grid_base = temp2;
-
-      // update the upper left visible macroblock ptrs
-      cm->mi = cm->mip + cm->mode_info_stride + 1;
-      cm->prev_mi = cm->prev_mip + cm->mode_info_stride + 1;
-      cm->mi_grid_visible = cm->mi_grid_base + cm->mode_info_stride + 1;
-      cm->prev_mi_grid_visible = cm->prev_mi_grid_base +
-                                 cm->mode_info_stride + 1;
-
-      pbi->mb.mi_8x8 = cm->mi_grid_visible;
-      pbi->mb.mi_8x8[0] = cm->mi;
-    }
+    if (!cm->show_existing_frame)
+      vp9_swap_mi_and_prev_mi(cm);
+
     cm->current_video_frame++;
   }
 
diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c
index 10b44492ca..abe4965a00 100644
--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -3366,20 +3366,7 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
     cm->last_show_frame = cm->show_frame;
 
   if (cm->show_frame) {
-    // current mip will be the prev_mip for the next frame
-    MODE_INFO *temp = cm->prev_mip;
-    MODE_INFO **temp2 = cm->prev_mi_grid_base;
-    cm->prev_mip = cm->mip;
-    cm->mip = temp;
-    cm->prev_mi_grid_base = cm->mi_grid_base;
-    cm->mi_grid_base = temp2;
-
-    // update the upper left visible macroblock ptrs
-    cm->mi = cm->mip + cm->mode_info_stride + 1;
-    cm->mi_grid_visible = cm->mi_grid_base + cm->mode_info_stride + 1;
-
-    cpi->mb.e_mbd.mi_8x8 = cm->mi_grid_visible;
-    cpi->mb.e_mbd.mi_8x8[0] = cm->mi;
+    vp9_swap_mi_and_prev_mi(cm);
 
     // Don't increment frame counters if this was an altref buffer
     // update not a real frame
-- 
GitLab