Commit 6fa47a5f authored by Deb Mukherjee's avatar Deb Mukherjee

Adds support for enhanced interpolation for subpel motion

using an 8-tap filter.

The results with 3 different 8-tap filters on the derf set are in:
http://www.corp.google.com/~debargha/vp8_results/enhinterp.html
The one that gives the most gain achieves an overall gain of about
0.6%. The results for a set of 12 hd (720p) videos are in:
http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd.html
with max gain of 0.55% with the same filter. The best filter apparently
achieves the best trade-off between pass band ripple and stop band
attenuation.

Change-Id: I919e28ae245c0493147fa0864f8c9d048a9dd530
parent 5a5d24ee
......@@ -227,6 +227,7 @@ EXPERIMENT_LIST="
uvintra
newnear
newlpf
enhanced_interp
"
CONFIG_LIST="
external_build
......
This diff is collapsed.
......@@ -8,15 +8,17 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef FILTER_H
#define FILTER_H
#include "vpx_config.h"
#include "vpx_scale/yv12config.h"
#define BLOCK_HEIGHT_WIDTH 4
#define VP8_FILTER_WEIGHT 128
#define VP8_FILTER_SHIFT 7
extern const short vp8_bilinear_filters[8][2];
extern const short vp8_sub_pel_filters[8][6];
extern const short vp8_sub_pel_filters[8][INTERP_EXTEND*2];
#endif //FILTER_H
......@@ -335,8 +335,8 @@ static void update_mbgraph_frame_stats
// Set up limit values for motion vectors to prevent them extending outside the UMV borders
arf_top_mv.as_int = 0;
gld_top_mv.as_int = 0;
x->mv_row_min = -(VP8BORDERINPIXELS - 19);
x->mv_row_max = (cm->mb_rows - 1) * 16 + VP8BORDERINPIXELS - 19;
x->mv_row_min = -(VP8BORDERINPIXELS - 16 - INTERP_EXTEND);
x->mv_row_max = (cm->mb_rows - 1) * 16 + VP8BORDERINPIXELS - 16 - INTERP_EXTEND;
xd->up_available = 0;
xd->dst.y_stride = buf->y_stride;
xd->pre.y_stride = buf->y_stride;
......@@ -353,8 +353,8 @@ static void update_mbgraph_frame_stats
// Set up limit values for motion vectors to prevent them extending outside the UMV borders
arf_left_mv.as_int = arf_top_mv.as_int;
gld_left_mv.as_int = gld_top_mv.as_int;
x->mv_col_min = -(VP8BORDERINPIXELS - 19);
x->mv_col_max = (cm->mb_cols - 1) * 16 + VP8BORDERINPIXELS - 19;
x->mv_col_min = -(VP8BORDERINPIXELS - 16 - INTERP_EXTEND);
x->mv_col_max = (cm->mb_cols - 1) * 16 + VP8BORDERINPIXELS - 16 - INTERP_EXTEND;
xd->left_available = 0;
for (mb_col = 0; mb_col < cm->mb_cols; mb_col++)
......
......@@ -268,6 +268,7 @@ void vp8_initialize()
{
static int init_done = 0;
if (!init_done)
{
vp8_scale_machine_specific_config();
......
......@@ -17,7 +17,14 @@ extern "C"
#endif
#define VP7BORDERINPIXELS 48
#if CONFIG_ENHANCED_INTERP
#define VP8BORDERINPIXELS 64
#define INTERP_EXTEND 4
#else
#define VP8BORDERINPIXELS 32
#define INTERP_EXTEND 3
#endif
/*************************************
For INT_YUV:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment