summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorScott LaVarnway <slavarnway@google.com>2015-08-03 09:43:34 -0700
committerScott LaVarnway <slavarnway@google.com>2015-08-03 09:43:34 -0700
commit8f6b9431001b96fa9154271a13ea1d175ca2796f (patch)
tree084ca837b308551a1df04b70ba25c0b3f87ca10a /vp9/common
parent0b0eba728d55425e4a0389ba5b942726fa8540f6 (diff)
downloadlibvpx-8f6b9431001b96fa9154271a13ea1d175ca2796f.tar
libvpx-8f6b9431001b96fa9154271a13ea1d175ca2796f.tar.gz
libvpx-8f6b9431001b96fa9154271a13ea1d175ca2796f.tar.bz2
libvpx-8f6b9431001b96fa9154271a13ea1d175ca2796f.zip
VPX: Add rtcd support for scaling.
Change-Id: If34bfb0d918967445aea7dc30cd7b55ebfedb1f2
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_scale.c49
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) {