diff options
author | Scott LaVarnway <slavarnway@google.com> | 2015-08-11 13:19:00 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-08-11 13:19:00 +0000 |
commit | 4ef08dcec82085b69e528812c5cdd334410b7bd4 (patch) | |
tree | 67498eb26520ffb4a00508d61fe5753238ba9d64 /vp9 | |
parent | b152472ba7164d6fbce6e2e7df2fcd0d9c57e665 (diff) | |
parent | 8f6b9431001b96fa9154271a13ea1d175ca2796f (diff) | |
download | libvpx-4ef08dcec82085b69e528812c5cdd334410b7bd4.tar libvpx-4ef08dcec82085b69e528812c5cdd334410b7bd4.tar.gz libvpx-4ef08dcec82085b69e528812c5cdd334410b7bd4.tar.bz2 libvpx-4ef08dcec82085b69e528812c5cdd334410b7bd4.zip |
Merge "VPX: Add rtcd support for scaling."
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/common/vp9_scale.c | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/vp9/common/vp9_scale.c b/vp9/common/vp9_scale.c index 8f5c72e7c..b763b925b 100644 --- a/vp9/common/vp9_scale.c +++ b/vp9/common/vp9_scale.c @@ -79,6 +79,7 @@ void vp9_setup_scale_factors_for_frame(struct scale_factors *sf, // applied in one direction only, and not at all for 0,0, seems to give the // best quality, but it may be worth trying an additional mode that does // do the filtering on full-pel. + if (sf->x_step_q4 == 16) { if (sf->y_step_q4 == 16) { // No scaling in either direction. @@ -90,35 +91,43 @@ void vp9_setup_scale_factors_for_frame(struct scale_factors *sf, sf->predict[1][0][1] = vpx_convolve8_avg_horiz; } else { // No scaling in x direction. Must always scale in the y direction. - sf->predict[0][0][0] = vpx_convolve8_vert; - sf->predict[0][0][1] = vpx_convolve8_avg_vert; - sf->predict[0][1][0] = vpx_convolve8_vert; - sf->predict[0][1][1] = vpx_convolve8_avg_vert; - sf->predict[1][0][0] = vpx_convolve8; - sf->predict[1][0][1] = vpx_convolve8_avg; + sf->predict[0][0][0] = vpx_scaled_vert; + sf->predict[0][0][1] = vpx_scaled_avg_vert; + sf->predict[0][1][0] = vpx_scaled_vert; + sf->predict[0][1][1] = vpx_scaled_avg_vert; + sf->predict[1][0][0] = vpx_scaled_2d; + sf->predict[1][0][1] = vpx_scaled_avg_2d; } } else { if (sf->y_step_q4 == 16) { // No scaling in the y direction. Must always scale in the x direction. - sf->predict[0][0][0] = vpx_convolve8_horiz; - sf->predict[0][0][1] = vpx_convolve8_avg_horiz; - sf->predict[0][1][0] = vpx_convolve8; - sf->predict[0][1][1] = vpx_convolve8_avg; - sf->predict[1][0][0] = vpx_convolve8_horiz; - sf->predict[1][0][1] = vpx_convolve8_avg_horiz; + sf->predict[0][0][0] = vpx_scaled_horiz; + sf->predict[0][0][1] = vpx_scaled_avg_horiz; + sf->predict[0][1][0] = vpx_scaled_2d; + sf->predict[0][1][1] = vpx_scaled_avg_2d; + sf->predict[1][0][0] = vpx_scaled_horiz; + sf->predict[1][0][1] = vpx_scaled_avg_horiz; } else { // Must always scale in both directions. - sf->predict[0][0][0] = vpx_convolve8; - sf->predict[0][0][1] = vpx_convolve8_avg; - sf->predict[0][1][0] = vpx_convolve8; - sf->predict[0][1][1] = vpx_convolve8_avg; - sf->predict[1][0][0] = vpx_convolve8; - sf->predict[1][0][1] = vpx_convolve8_avg; + sf->predict[0][0][0] = vpx_scaled_2d; + sf->predict[0][0][1] = vpx_scaled_avg_2d; + sf->predict[0][1][0] = vpx_scaled_2d; + sf->predict[0][1][1] = vpx_scaled_avg_2d; + sf->predict[1][0][0] = vpx_scaled_2d; + sf->predict[1][0][1] = vpx_scaled_avg_2d; } } + // 2D subpel motion always gets filtered in both directions - sf->predict[1][1][0] = vpx_convolve8; - sf->predict[1][1][1] = vpx_convolve8_avg; + + if ((sf->x_step_q4 != 16) || (sf->y_step_q4 != 16)) { + sf->predict[1][1][0] = vpx_scaled_2d; + sf->predict[1][1][1] = vpx_scaled_avg_2d; + } else { + sf->predict[1][1][0] = vpx_convolve8; + sf->predict[1][1][1] = vpx_convolve8_avg; + } + #if CONFIG_VP9_HIGHBITDEPTH if (use_highbd) { if (sf->x_step_q4 == 16) { |