diff options
author | Paul Wilkins <paulwilkins@google.com> | 2012-10-30 03:48:48 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2012-10-30 03:48:48 -0700 |
commit | 50f1eae5be8e8fbb22842370c9a175439ad53d1a (patch) | |
tree | 7540c52e3ce32c328e2fe50c5336c073fa731686 /vp8/encoder/variance_c.c | |
parent | d8bd0246dd403f65e94bc0dfbb2f0fc0e8ffcee8 (diff) | |
parent | cc9c637d0726fa9cb416f4ef4256e32d8e3c62a3 (diff) | |
download | libvpx-50f1eae5be8e8fbb22842370c9a175439ad53d1a.tar libvpx-50f1eae5be8e8fbb22842370c9a175439ad53d1a.tar.gz libvpx-50f1eae5be8e8fbb22842370c9a175439ad53d1a.tar.bz2 libvpx-50f1eae5be8e8fbb22842370c9a175439ad53d1a.zip |
Merge "Improves subpixel reference mv evaluation" into experimental
Diffstat (limited to 'vp8/encoder/variance_c.c')
-rw-r--r-- | vp8/encoder/variance_c.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/vp8/encoder/variance_c.c b/vp8/encoder/variance_c.c index cbe2a51d6..a66c80b80 100644 --- a/vp8/encoder/variance_c.c +++ b/vp8/encoder/variance_c.c @@ -508,3 +508,80 @@ unsigned int vp8_sub_pixel_variance8x16_c return vp8_variance8x16_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse); } +#if CONFIG_NEWBESTREFMV +unsigned int vp8_variance2x16_c( + const unsigned char *src_ptr, + const int source_stride, + const unsigned char *ref_ptr, + const int recon_stride, + unsigned int *sse) { + unsigned int var; + int avg; + + variance(src_ptr, source_stride, ref_ptr, recon_stride, 2, 16, &var, &avg); + *sse = var; + return (var - ((avg * avg) >> 5)); +} + +unsigned int vp8_variance16x2_c( + const unsigned char *src_ptr, + const int source_stride, + const unsigned char *ref_ptr, + const int recon_stride, + unsigned int *sse) { + unsigned int var; + int avg; + + variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 2, &var, &avg); + *sse = var; + return (var - ((avg * avg) >> 5)); +} + +unsigned int vp8_sub_pixel_variance16x2_c +( + const unsigned char *src_ptr, + const int src_pixels_per_line, + const int xoffset, + const int yoffset, + const unsigned char *dst_ptr, + const int dst_pixels_per_line, + unsigned int *sse +) { + unsigned short FData3[16 * 3]; // Temp data bufffer used in filtering + unsigned char temp2[20 * 16]; + const short *HFilter, *VFilter; + + HFilter = vp8_bilinear_filters[xoffset]; + VFilter = vp8_bilinear_filters[yoffset]; + + var_filter_block2d_bil_first_pass(src_ptr, FData3, + src_pixels_per_line, 1, 3, 16, HFilter); + var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 2, 16, VFilter); + + return vp8_variance16x2_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); +} + +unsigned int vp8_sub_pixel_variance2x16_c +( + const unsigned char *src_ptr, + const int src_pixels_per_line, + const int xoffset, + const int yoffset, + const unsigned char *dst_ptr, + const int dst_pixels_per_line, + unsigned int *sse +) { + unsigned short FData3[2 * 17]; // Temp data bufffer used in filtering + unsigned char temp2[2 * 16]; + const short *HFilter, *VFilter; + + HFilter = vp8_bilinear_filters[xoffset]; + VFilter = vp8_bilinear_filters[yoffset]; + + var_filter_block2d_bil_first_pass(src_ptr, FData3, + src_pixels_per_line, 1, 17, 2, HFilter); + var_filter_block2d_bil_second_pass(FData3, temp2, 2, 2, 16, 2, VFilter); + + return vp8_variance2x16_c(temp2, 2, dst_ptr, dst_pixels_per_line, sse); +} +#endif |