]> granicus.if.org Git - libvpx/commitdiff
vp9: SVC: Skip NEWMV for small blocks for (0, 0) base_mv.
authorMarco <marpan@google.com>
Wed, 23 Aug 2017 20:01:57 +0000 (13:01 -0700)
committerMarco <marpan@google.com>
Wed, 23 Aug 2017 20:08:27 +0000 (13:08 -0700)
For SVC encoding:
average speedup ~1.5%, with small ~0.57 loss in avgPSNR metrics.

Change-Id: Icebce6f6ef4e819d7dfcf8db898c583167351de4

vp9/encoder/vp9_pickmode.c

index fdd31c7dc014e4e2adfe62dd4a6902ff13995faa..3340a09fb5e567ad30333da71454acd9ed774273 100644 (file)
@@ -1805,6 +1805,14 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
               (frame_mv[NEWMV][ref_frame].as_mv.col >> 3);
           cpi->fn_ptr[bsize].vf(x->plane[0].src.buf, x->plane[0].src.stride,
                                 pre_buf, pre_stride, &base_mv_sse);
+
+          // Exit NEWMV search if base_mv is (0,0) && bsize < BLOCK_16x16,
+          // for SVC encoding.
+          if (cpi->use_svc && cpi->svc.use_base_mv && bsize < BLOCK_16X16 &&
+              frame_mv[NEWMV][ref_frame].as_mv.row == 0 &&
+              frame_mv[NEWMV][ref_frame].as_mv.col == 0)
+            continue;
+
           // Exit NEWMV search if base_mv_sse is large.
           if (sf->base_mv_aggressive && base_mv_sse > (best_sse_sofar << scale))
             continue;