diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h index 84403ae15f904a948fef305100be45d85bee489b..b7fadcd3bdffea8381a69e8657273668f4409529 100644 --- a/vp9/common/vp9_blockd.h +++ b/vp9/common/vp9_blockd.h @@ -204,7 +204,6 @@ typedef struct RefBuffer { typedef struct macroblockd { struct macroblockd_plane plane[MAX_MB_PLANE]; - MODE_INFO *last_mi; int mode_info_stride; // A NULL indicates that the 8x8 is not part of the image diff --git a/vp9/common/vp9_mvref_common.c b/vp9/common/vp9_mvref_common.c index d179f428916bb9185d98de2d734eebb14d3c0f44..9f2c2dfacb179ad153fa49025d261f38633f30e9 100644 --- a/vp9/common/vp9_mvref_common.c +++ b/vp9/common/vp9_mvref_common.c @@ -188,12 +188,13 @@ static INLINE int is_inside(const TileInfo *const tile, // to try and find candidate reference vectors. static void find_mv_refs_idx(const VP9_COMMON *cm, const MACROBLOCKD *xd, const TileInfo *const tile, - MODE_INFO *mi, const MODE_INFO *prev_mi, - MV_REFERENCE_FRAME ref_frame, + MODE_INFO *mi, MV_REFERENCE_FRAME ref_frame, int_mv *mv_ref_list, int block, int mi_row, int mi_col) { const int *ref_sign_bias = cm->ref_frame_sign_bias; int i, refmv_count = 0; + const MODE_INFO *prev_mi = cm->coding_use_prev_mi && cm->prev_mi ? + xd->prev_mi_8x8[0] : NULL; const POSITION *const mv_ref_search = mv_ref_blocks[mi->mbmi.sb_type]; const MB_MODE_INFO *const prev_mbmi = cm->coding_use_prev_mi && prev_mi ? &prev_mi->mbmi : NULL; @@ -282,11 +283,10 @@ static void find_mv_refs_idx(const VP9_COMMON *cm, const MACROBLOCKD *xd, void vp9_find_mv_refs(const VP9_COMMON *cm, const MACROBLOCKD *xd, const TileInfo *const tile, - MODE_INFO *mi, const MODE_INFO *prev_mi, - MV_REFERENCE_FRAME ref_frame, + MODE_INFO *mi, MV_REFERENCE_FRAME ref_frame, int_mv *mv_ref_list, int mi_row, int mi_col) { - find_mv_refs_idx(cm, xd, tile, mi, prev_mi, ref_frame, mv_ref_list, -1, + find_mv_refs_idx(cm, xd, tile, mi, ref_frame, mv_ref_list, -1, mi_row, mi_col); } @@ -324,8 +324,8 @@ void vp9_append_sub8x8_mvs_for_idx(VP9_COMMON *cm, MACROBLOCKD *xd, assert(MAX_MV_REF_CANDIDATES == 2); - find_mv_refs_idx(cm, xd, tile, mi, xd->last_mi, mi->mbmi.ref_frame[ref], - mv_list, block, mi_row, mi_col); + find_mv_refs_idx(cm, xd, tile, mi, mi->mbmi.ref_frame[ref], mv_list, block, + mi_row, mi_col); near->as_int = 0; switch (block) { diff --git a/vp9/common/vp9_mvref_common.h b/vp9/common/vp9_mvref_common.h index 04cb000ef2aa87bdbd013b7a76309193d624c860..903ac02bb659c4cabe323ec31ac3ee33a98d7595 100644 --- a/vp9/common/vp9_mvref_common.h +++ b/vp9/common/vp9_mvref_common.h @@ -31,10 +31,8 @@ static INLINE void clamp_mv2(MV *mv, const MACROBLOCKD *xd) { void vp9_find_mv_refs(const VP9_COMMON *cm, const MACROBLOCKD *xd, const TileInfo *const tile, - MODE_INFO *mi, const MODE_INFO *prev_mi, - MV_REFERENCE_FRAME ref_frame, - int_mv *mv_ref_list, - int mi_row, int mi_col); + MODE_INFO *mi, MV_REFERENCE_FRAME ref_frame, + int_mv *mv_ref_list, int mi_row, int mi_col); // check a list of motion vectors by sad score using a number rows of pixels // above and a number cols of pixels in the left to select the one with best diff --git a/vp9/decoder/vp9_decodeframe.c b/vp9/decoder/vp9_decodeframe.c index 1e203b19f2a5cb6be64d32794940b2adaf2d4b63..27652b61eab5cdf2b02d40af28f5ac4a852db275 100644 --- a/vp9/decoder/vp9_decodeframe.c +++ b/vp9/decoder/vp9_decodeframe.c @@ -346,10 +346,6 @@ static void set_offsets(VP9_COMMON *const cm, MACROBLOCKD *const xd, xd->mi_8x8 = cm->mi_grid_visible + offset; xd->prev_mi_8x8 = cm->prev_mi_grid_visible + offset; - - xd->last_mi = cm->coding_use_prev_mi && cm->prev_mi ? - xd->prev_mi_8x8[0] : NULL; - xd->mi_8x8[0] = xd->mi_stream + offset - tile_offset; xd->mi_8x8[0]->mbmi.sb_type = bsize; for (y = 0; y < y_mis; ++y) diff --git a/vp9/decoder/vp9_decodemv.c b/vp9/decoder/vp9_decodemv.c index 799a82af0dd51af2bf272e109fa57c6f5067bb81..82f74ae0fd3e694652b6c900fd490ecbc5d97ab7 100644 --- a/vp9/decoder/vp9_decodemv.c +++ b/vp9/decoder/vp9_decodemv.c @@ -432,7 +432,7 @@ static void read_inter_block_mode_info(VP9_COMMON *const cm, for (ref = 0; ref < 1 + is_compound; ++ref) { const MV_REFERENCE_FRAME frame = mbmi->ref_frame[ref]; - vp9_find_mv_refs(cm, xd, tile, mi, xd->last_mi, frame, mbmi->ref_mvs[frame], + vp9_find_mv_refs(cm, xd, tile, mi, frame, mbmi->ref_mvs[frame], mi_row, mi_col); } diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 10162096abf18461eff2ba9e1061be202905e96e..165c3908f1a03d17fcda5062b87ba516a67abb90 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -593,9 +593,6 @@ static void set_offsets(VP9_COMP *cpi, const TileInfo *const tile, xd->mi_8x8 = cm->mi_grid_visible + idx_str; xd->prev_mi_8x8 = cm->prev_mi_grid_visible + idx_str; - - xd->last_mi = cm->prev_mi ? xd->prev_mi_8x8[0] : NULL; - xd->mi_8x8[0] = cm->mi + idx_str; mbmi = &xd->mi_8x8[0]->mbmi; @@ -2396,8 +2393,6 @@ static void encode_frame_internal(VP9_COMP *cpi) { // required for vp9_frame_init_quantizer xd->mi_8x8[0] = cm->mi; - xd->last_mi = cm->prev_mi; - vp9_zero(cm->counts.mv); vp9_zero(cpi->coef_counts); vp9_zero(cm->counts.eob_branch); diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index 0542a344744ce11887c4589aa327235ab8900844..99a357980b0c6c49a0ed66b7965ee4b12362f78d 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -2332,8 +2332,7 @@ void vp9_setup_buffer_inter(VP9_COMP *cpi, MACROBLOCK *x, setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col, sf, sf); // Gets an initial list of candidate vectors from neighbours and orders them - vp9_find_mv_refs(cm, xd, tile, mi, xd->last_mi, ref_frame, candidates, - mi_row, mi_col); + vp9_find_mv_refs(cm, xd, tile, mi, ref_frame, candidates, mi_row, mi_col); // Candidate refinement carried out at encoder and decoder vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates,