From: Ronald S. Bultje Date: Thu, 2 May 2013 20:55:08 +0000 (-0700) Subject: Cache splitmv motion vectors appropriately in decoder. X-Git-Tag: v1.3.0~1106^2~78^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=168d313888ed8f2e752b96b1adf5d2d83d15c056;p=libvpx Cache splitmv motion vectors appropriately in decoder. This fixes some problems in splitmv-related bitstream parsing in the sb8x8 experiment. Change-Id: Id168f9ec9c88626877d8f536e6f394b6f4f782e4 --- diff --git a/vp9/decoder/vp9_decodemv.c b/vp9/decoder/vp9_decodemv.c index 6c3aad5f4..e4159bbef 100644 --- a/vp9/decoder/vp9_decodemv.c +++ b/vp9/decoder/vp9_decodemv.c @@ -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 diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c index 197a49939..12efd2b04 100644 --- a/vp9/encoder/vp9_bitstream.c +++ b/vp9/encoder/vp9_bitstream.c @@ -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);