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