diff options
author | Ronald S. Bultje <rbultje@google.com> | 2013-06-25 11:26:49 -0700 |
---|---|---|
committer | Ronald S. Bultje <rbultje@google.com> | 2013-06-25 12:57:28 -0700 |
commit | c24d922396f4dcd50216be3cdfd784ea31c47564 (patch) | |
tree | da9b0b652199acb1d99b7f28a752d2d76d24c998 /vp9/encoder/vp9_variance.h | |
parent | 9d95993115db450a3a9d4387d564ae191e19f90e (diff) | |
download | libvpx-c24d922396f4dcd50216be3cdfd784ea31c47564.tar libvpx-c24d922396f4dcd50216be3cdfd784ea31c47564.tar.gz libvpx-c24d922396f4dcd50216be3cdfd784ea31c47564.tar.bz2 libvpx-c24d922396f4dcd50216be3cdfd784ea31c47564.zip |
Add averaging-SAD functions for 8-point comp-inter motion search.
Makes first 50 frames of bus @ 1500kbps encode from 3min22.7 to 3min18.2,
i.e. 2.3% faster. In addition, use the sub_pixel_avg functions to calc
the variance of the averaging predictor. This is slightly suboptimal
because the function is subpixel-position-aware, but it will (at least
for the SSE2 version) not actually use a bilinear filter for a full-pixel
position, thus leading to approximately the same performance compared to
if we implemented an actual average-aware full-pixel variance function.
That gains another 0.3 seconds (i.e. encode time goes to 3min17.4), thus
leading to a total gain of 2.7%.
Change-Id: I3f059d2b04243921868cfed2568d4fa65d7b5acd
Diffstat (limited to 'vp9/encoder/vp9_variance.h')
-rw-r--r-- | vp9/encoder/vp9_variance.h | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/vp9/encoder/vp9_variance.h b/vp9/encoder/vp9_variance.h index 38808d7be..6e686d6f9 100644 --- a/vp9/encoder/vp9_variance.h +++ b/vp9/encoder/vp9_variance.h @@ -20,6 +20,13 @@ typedef unsigned int(*vp9_sad_fn_t)(const uint8_t *src_ptr, int ref_stride, unsigned int max_sad); +typedef unsigned int(*vp9_sad_avg_fn_t)(const uint8_t *src_ptr, + int source_stride, + const uint8_t *ref_ptr, + int ref_stride, + const uint8_t *second_pred, + unsigned int max_sad); + typedef void (*vp9_sad_multi_fn_t)(const uint8_t *src_ptr, int source_stride, const uint8_t *ref_ptr, @@ -74,20 +81,21 @@ typedef unsigned int (*vp9_get16x16prederror_fn_t)(const uint8_t *src_ptr, int ref_stride); typedef struct vp9_variance_vtable { - vp9_sad_fn_t sdf; - vp9_variance_fn_t vf; - vp9_subpixvariance_fn_t svf; - vp9_subp_avg_variance_fn_t svaf; - vp9_variance_fn_t svf_halfpix_h; - vp9_variance_fn_t svf_halfpix_v; - vp9_variance_fn_t svf_halfpix_hv; - vp9_sad_multi_fn_t sdx3f; - vp9_sad_multi1_fn_t sdx8f; - vp9_sad_multi_d_fn_t sdx4df; + vp9_sad_fn_t sdf; + vp9_sad_avg_fn_t sdaf; + vp9_variance_fn_t vf; + vp9_subpixvariance_fn_t svf; + vp9_subp_avg_variance_fn_t svaf; + vp9_variance_fn_t svf_halfpix_h; + vp9_variance_fn_t svf_halfpix_v; + vp9_variance_fn_t svf_halfpix_hv; + vp9_sad_multi_fn_t sdx3f; + vp9_sad_multi1_fn_t sdx8f; + vp9_sad_multi_d_fn_t sdx4df; } vp9_variance_fn_ptr_t; static void comp_avg_pred(uint8_t *comp_pred, const uint8_t *pred, int width, - int height, uint8_t *ref, int ref_stride) { + int height, const uint8_t *ref, int ref_stride) { int i, j; for (i = 0; i < height; i++) { |