Merge "Add 64x64 sub_pel_variance Neon function"

This commit is contained in:
Frank Galligan 2015-01-14 12:17:20 -08:00 committed by Gerrit Code Review
commit 68224a6e87
3 changed files with 24 additions and 2 deletions

View File

@ -1932,11 +1932,14 @@ const vp9_subpixvariance_fn_t subpel_variance16x16_neon =
vp9_sub_pixel_variance16x16_neon;
const vp9_subpixvariance_fn_t subpel_variance32x32_neon =
vp9_sub_pixel_variance32x32_neon;
const vp9_subpixvariance_fn_t subpel_variance64x64_neon =
vp9_sub_pixel_variance64x64_neon;
INSTANTIATE_TEST_CASE_P(
NEON, VP9SubpelVarianceTest,
::testing::Values(make_tuple(3, 3, subpel_variance8x8_neon, 0),
make_tuple(4, 4, subpel_variance16x16_neon, 0),
make_tuple(5, 5, subpel_variance32x32_neon, 0)));
make_tuple(5, 5, subpel_variance32x32_neon, 0),
make_tuple(6, 6, subpel_variance64x64_neon, 0)));
#endif // HAVE_NEON
#endif // CONFIG_VP9_ENCODER

View File

@ -837,7 +837,7 @@ add_proto qw/unsigned int vp9_variance4x4/, "const uint8_t *src_ptr, int source_
specialize qw/vp9_variance4x4/, "$sse2_x86inc";
add_proto qw/unsigned int vp9_sub_pixel_variance64x64/, "const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse";
specialize qw/vp9_sub_pixel_variance64x64 avx2/, "$sse2_x86inc", "$ssse3_x86inc";
specialize qw/vp9_sub_pixel_variance64x64 avx2 neon/, "$sse2_x86inc", "$ssse3_x86inc";
add_proto qw/unsigned int vp9_sub_pixel_avg_variance64x64/, "const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred";
specialize qw/vp9_sub_pixel_avg_variance64x64 avx2/, "$sse2_x86inc", "$ssse3_x86inc";

View File

@ -31,6 +31,7 @@ enum { kHeight32 = 32 };
enum { kHeight32PlusOne = 33 };
enum { kWidth64 = 64 };
enum { kHeight64 = 64 };
enum { kHeight64PlusOne = 65 };
enum { kPixelStepOne = 1 };
enum { kAlign16 = 16 };
@ -252,3 +253,21 @@ unsigned int vp9_sub_pixel_variance32x32_neon(const uint8_t *src,
kWidth32, BILINEAR_FILTERS_2TAP(yoffset));
return vp9_variance32x32_neon(temp2, kWidth32, dst, dst_stride, sse);
}
unsigned int vp9_sub_pixel_variance64x64_neon(const uint8_t *src,
int src_stride,
int xoffset,
int yoffset,
const uint8_t *dst,
int dst_stride,
unsigned int *sse) {
DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, temp2, kHeight64 * kWidth64);
DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, fdata3, kHeight64PlusOne * kWidth64);
var_filter_block2d_bil_w16(src, fdata3, src_stride, kPixelStepOne,
kHeight64PlusOne, kWidth64,
BILINEAR_FILTERS_2TAP(xoffset));
var_filter_block2d_bil_w16(fdata3, temp2, kWidth64, kWidth64, kHeight64,
kWidth64, BILINEAR_FILTERS_2TAP(yoffset));
return vp9_variance64x64_neon(temp2, kWidth64, dst, dst_stride, sse);
}