| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include <cstdlib> | 11 #include <cstdlib> |
| 12 #include <new> | 12 #include <new> |
| 13 | 13 |
| 14 #include "test/acm_random.h" | 14 #include "test/acm_random.h" |
| 15 #include "test/clear_system_state.h" | 15 #include "test/clear_system_state.h" |
| 16 #include "test/register_state_check.h" | 16 #include "test/register_state_check.h" |
| 17 #include "third_party/googletest/src/include/gtest/gtest.h" | 17 #include "third_party/googletest/src/include/gtest/gtest.h" |
| 18 | 18 |
| 19 #include "./vpx_config.h" | 19 #include "./vpx_config.h" |
| 20 #include "vpx/vpx_codec.h" | 20 #include "vpx/vpx_codec.h" |
| 21 #include "vpx/vpx_integer.h" | 21 #include "vpx/vpx_integer.h" |
| 22 #include "vpx_mem/vpx_mem.h" | 22 #include "vpx_mem/vpx_mem.h" |
| 23 #if CONFIG_VP8_ENCODER | 23 #include "vpx_ports/mem.h" |
| 24 # include "./vp8_rtcd.h" | |
| 25 # include "vp8/common/variance.h" | |
| 26 #endif | |
| 27 #if CONFIG_VP9_ENCODER | 24 #if CONFIG_VP9_ENCODER |
| 28 # include "./vp9_rtcd.h" | 25 # include "./vp9_rtcd.h" |
| 29 # include "vp9/encoder/vp9_variance.h" | 26 # include "vp9/encoder/vp9_variance.h" |
| 30 #endif | 27 #endif // CONFIG_VP9_ENCODER |
| 28 #include "./vpx_dsp_rtcd.h" |
| 31 | 29 |
| 32 namespace { | 30 namespace { |
| 33 | 31 |
| 32 typedef unsigned int (*VarianceMxNFunc)(const uint8_t *a, int a_stride, |
| 33 const uint8_t *b, int b_stride, |
| 34 unsigned int *sse); |
| 35 typedef unsigned int (*Get4x4SseFunc)(const uint8_t *a, int a_stride, |
| 36 const uint8_t *b, int b_stride); |
| 37 |
| 38 |
| 34 using ::std::tr1::get; | 39 using ::std::tr1::get; |
| 35 using ::std::tr1::make_tuple; | 40 using ::std::tr1::make_tuple; |
| 36 using ::std::tr1::tuple; | 41 using ::std::tr1::tuple; |
| 37 using libvpx_test::ACMRandom; | 42 using libvpx_test::ACMRandom; |
| 38 | 43 |
| 44 // Truncate high bit depth results by downshifting (with rounding) by: |
| 45 // 2 * (bit_depth - 8) for sse |
| 46 // (bit_depth - 8) for se |
| 47 static void RoundHighBitDepth(int bit_depth, int64_t *se, uint64_t *sse) { |
| 48 switch (bit_depth) { |
| 49 case VPX_BITS_12: |
| 50 *sse = (*sse + 128) >> 8; |
| 51 *se = (*se + 8) >> 4; |
| 52 break; |
| 53 case VPX_BITS_10: |
| 54 *sse = (*sse + 8) >> 4; |
| 55 *se = (*se + 2) >> 2; |
| 56 break; |
| 57 case VPX_BITS_8: |
| 58 default: |
| 59 break; |
| 60 } |
| 61 } |
| 62 |
| 39 static unsigned int mb_ss_ref(const int16_t *src) { | 63 static unsigned int mb_ss_ref(const int16_t *src) { |
| 40 unsigned int res = 0; | 64 unsigned int res = 0; |
| 41 for (int i = 0; i < 256; ++i) { | 65 for (int i = 0; i < 256; ++i) { |
| 42 res += src[i] * src[i]; | 66 res += src[i] * src[i]; |
| 43 } | 67 } |
| 44 return res; | 68 return res; |
| 45 } | 69 } |
| 46 | 70 |
| 47 static unsigned int variance_ref(const uint8_t *src, const uint8_t *ref, | 71 static unsigned int variance_ref(const uint8_t *src, const uint8_t *ref, |
| 48 int l2w, int l2h, int src_stride_coeff, | 72 int l2w, int l2h, int src_stride_coeff, |
| 49 int ref_stride_coeff, uint32_t *sse_ptr, | 73 int ref_stride_coeff, uint32_t *sse_ptr, |
| 50 bool use_high_bit_depth_, | 74 bool use_high_bit_depth_, |
| 51 vpx_bit_depth_t bit_depth) { | 75 vpx_bit_depth_t bit_depth) { |
| 52 #if CONFIG_VP9_HIGHBITDEPTH | |
| 53 int64_t se = 0; | 76 int64_t se = 0; |
| 54 uint64_t sse = 0; | 77 uint64_t sse = 0; |
| 55 const int w = 1 << l2w; | 78 const int w = 1 << l2w; |
| 56 const int h = 1 << l2h; | 79 const int h = 1 << l2h; |
| 57 for (int y = 0; y < h; y++) { | 80 for (int y = 0; y < h; y++) { |
| 58 for (int x = 0; x < w; x++) { | 81 for (int x = 0; x < w; x++) { |
| 59 int diff; | 82 int diff; |
| 60 if (!use_high_bit_depth_) { | 83 if (!use_high_bit_depth_) { |
| 61 diff = ref[w * y * ref_stride_coeff + x] - | 84 diff = ref[w * y * ref_stride_coeff + x] - |
| 62 src[w * y * src_stride_coeff + x]; | 85 src[w * y * src_stride_coeff + x]; |
| 63 se += diff; | 86 se += diff; |
| 64 sse += diff * diff; | 87 sse += diff * diff; |
| 88 #if CONFIG_VP9_HIGHBITDEPTH |
| 65 } else { | 89 } else { |
| 66 diff = CONVERT_TO_SHORTPTR(ref)[w * y * ref_stride_coeff + x] - | 90 diff = CONVERT_TO_SHORTPTR(ref)[w * y * ref_stride_coeff + x] - |
| 67 CONVERT_TO_SHORTPTR(src)[w * y * src_stride_coeff + x]; | 91 CONVERT_TO_SHORTPTR(src)[w * y * src_stride_coeff + x]; |
| 68 se += diff; | 92 se += diff; |
| 69 sse += diff * diff; | 93 sse += diff * diff; |
| 94 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 70 } | 95 } |
| 71 } | 96 } |
| 72 } | 97 } |
| 73 if (bit_depth > VPX_BITS_8) { | 98 RoundHighBitDepth(bit_depth, &se, &sse); |
| 74 sse = ROUND_POWER_OF_TWO(sse, 2 * (bit_depth - 8)); | 99 *sse_ptr = (uint32_t) sse; |
| 75 se = ROUND_POWER_OF_TWO(se, bit_depth - 8); | 100 return (unsigned int) (sse - (((int64_t) se * se) >> (l2w + l2h))); |
| 76 } | |
| 77 #else | |
| 78 int se = 0; | |
| 79 unsigned int sse = 0; | |
| 80 const int w = 1 << l2w; | |
| 81 const int h = 1 << l2h; | |
| 82 for (int y = 0; y < h; y++) { | |
| 83 for (int x = 0; x < w; x++) { | |
| 84 int diff = ref[w * y * ref_stride_coeff + x] - | |
| 85 src[w * y * src_stride_coeff + x]; | |
| 86 se += diff; | |
| 87 sse += diff * diff; | |
| 88 } | |
| 89 } | |
| 90 #endif // CONFIG_VP9_HIGHBITDEPTH | |
| 91 *sse_ptr = sse; | |
| 92 return sse - (((int64_t) se * se) >> (l2w + l2h)); | |
| 93 } | 101 } |
| 94 | 102 |
| 95 static unsigned int subpel_variance_ref(const uint8_t *ref, const uint8_t *src, | 103 static unsigned int subpel_variance_ref(const uint8_t *ref, const uint8_t *src, |
| 96 int l2w, int l2h, int xoff, int yoff, | 104 int l2w, int l2h, int xoff, int yoff, |
| 97 unsigned int *sse_ptr, | 105 unsigned int *sse_ptr, |
| 98 bool use_high_bit_depth_, | 106 bool use_high_bit_depth_, |
| 99 vpx_bit_depth_t bit_depth) { | 107 vpx_bit_depth_t bit_depth) { |
| 100 #if CONFIG_VP9_HIGHBITDEPTH | |
| 101 int64_t se = 0; | 108 int64_t se = 0; |
| 102 uint64_t sse = 0; | 109 uint64_t sse = 0; |
| 103 const int w = 1 << l2w; | 110 const int w = 1 << l2w; |
| 104 const int h = 1 << l2h; | 111 const int h = 1 << l2h; |
| 105 for (int y = 0; y < h; y++) { | 112 for (int y = 0; y < h; y++) { |
| 106 for (int x = 0; x < w; x++) { | 113 for (int x = 0; x < w; x++) { |
| 107 // Bilinear interpolation at a 16th pel step. | 114 // Bilinear interpolation at a 16th pel step. |
| 108 if (!use_high_bit_depth_) { | 115 if (!use_high_bit_depth_) { |
| 109 const int a1 = ref[(w + 1) * (y + 0) + x + 0]; | 116 const int a1 = ref[(w + 1) * (y + 0) + x + 0]; |
| 110 const int a2 = ref[(w + 1) * (y + 0) + x + 1]; | 117 const int a2 = ref[(w + 1) * (y + 0) + x + 1]; |
| 111 const int b1 = ref[(w + 1) * (y + 1) + x + 0]; | 118 const int b1 = ref[(w + 1) * (y + 1) + x + 0]; |
| 112 const int b2 = ref[(w + 1) * (y + 1) + x + 1]; | 119 const int b2 = ref[(w + 1) * (y + 1) + x + 1]; |
| 113 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); | 120 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); |
| 114 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); | 121 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); |
| 115 const int r = a + (((b - a) * yoff + 8) >> 4); | 122 const int r = a + (((b - a) * yoff + 8) >> 4); |
| 116 const int diff = r - src[w * y + x]; | 123 const int diff = r - src[w * y + x]; |
| 117 se += diff; | 124 se += diff; |
| 118 sse += diff * diff; | 125 sse += diff * diff; |
| 126 #if CONFIG_VP9_HIGHBITDEPTH |
| 119 } else { | 127 } else { |
| 120 uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref); | 128 uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref); |
| 121 uint16_t *src16 = CONVERT_TO_SHORTPTR(src); | 129 uint16_t *src16 = CONVERT_TO_SHORTPTR(src); |
| 122 const int a1 = ref16[(w + 1) * (y + 0) + x + 0]; | 130 const int a1 = ref16[(w + 1) * (y + 0) + x + 0]; |
| 123 const int a2 = ref16[(w + 1) * (y + 0) + x + 1]; | 131 const int a2 = ref16[(w + 1) * (y + 0) + x + 1]; |
| 124 const int b1 = ref16[(w + 1) * (y + 1) + x + 0]; | 132 const int b1 = ref16[(w + 1) * (y + 1) + x + 0]; |
| 125 const int b2 = ref16[(w + 1) * (y + 1) + x + 1]; | 133 const int b2 = ref16[(w + 1) * (y + 1) + x + 1]; |
| 126 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); | 134 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); |
| 127 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); | 135 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); |
| 128 const int r = a + (((b - a) * yoff + 8) >> 4); | 136 const int r = a + (((b - a) * yoff + 8) >> 4); |
| 129 const int diff = r - src16[w * y + x]; | 137 const int diff = r - src16[w * y + x]; |
| 130 se += diff; | 138 se += diff; |
| 131 sse += diff * diff; | 139 sse += diff * diff; |
| 140 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 132 } | 141 } |
| 133 } | 142 } |
| 134 } | 143 } |
| 135 if (bit_depth > VPX_BITS_8) { | 144 RoundHighBitDepth(bit_depth, &se, &sse); |
| 136 sse = ROUND_POWER_OF_TWO(sse, 2 * (bit_depth - 8)); | 145 *sse_ptr = (unsigned int) sse; |
| 137 se = ROUND_POWER_OF_TWO(se, bit_depth - 8); | 146 return (unsigned int) (sse - (((int64_t) se * se) >> (l2w + l2h))); |
| 138 } | |
| 139 #else | |
| 140 int se = 0; | |
| 141 unsigned int sse = 0; | |
| 142 const int w = 1 << l2w; | |
| 143 const int h = 1 << l2h; | |
| 144 for (int y = 0; y < h; y++) { | |
| 145 for (int x = 0; x < w; x++) { | |
| 146 // Bilinear interpolation at a 16th pel step. | |
| 147 const int a1 = ref[(w + 1) * (y + 0) + x + 0]; | |
| 148 const int a2 = ref[(w + 1) * (y + 0) + x + 1]; | |
| 149 const int b1 = ref[(w + 1) * (y + 1) + x + 0]; | |
| 150 const int b2 = ref[(w + 1) * (y + 1) + x + 1]; | |
| 151 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); | |
| 152 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); | |
| 153 const int r = a + (((b - a) * yoff + 8) >> 4); | |
| 154 const int diff = r - src[w * y + x]; | |
| 155 se += diff; | |
| 156 sse += diff * diff; | |
| 157 } | |
| 158 } | |
| 159 #endif // CONFIG_VP9_HIGHBITDEPTH | |
| 160 *sse_ptr = sse; | |
| 161 return sse - (((int64_t) se * se) >> (l2w + l2h)); | |
| 162 } | 147 } |
| 163 | 148 |
| 164 typedef unsigned int (*SumOfSquaresFunction)(const int16_t *src); | 149 typedef unsigned int (*SumOfSquaresFunction)(const int16_t *src); |
| 165 | 150 |
| 166 class SumOfSquaresTest : public ::testing::TestWithParam<SumOfSquaresFunction> { | 151 class SumOfSquaresTest : public ::testing::TestWithParam<SumOfSquaresFunction> { |
| 167 public: | 152 public: |
| 168 SumOfSquaresTest() : func_(GetParam()) {} | 153 SumOfSquaresTest() : func_(GetParam()) {} |
| 169 | 154 |
| 170 virtual ~SumOfSquaresTest() { | 155 virtual ~SumOfSquaresTest() { |
| 171 libvpx_test::ClearSystemState(); | 156 libvpx_test::ClearSystemState(); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 bit_depth_ = static_cast<vpx_bit_depth_t>(get<3>(params)); | 206 bit_depth_ = static_cast<vpx_bit_depth_t>(get<3>(params)); |
| 222 use_high_bit_depth_ = true; | 207 use_high_bit_depth_ = true; |
| 223 } else { | 208 } else { |
| 224 bit_depth_ = VPX_BITS_8; | 209 bit_depth_ = VPX_BITS_8; |
| 225 use_high_bit_depth_ = false; | 210 use_high_bit_depth_ = false; |
| 226 } | 211 } |
| 227 mask_ = (1 << bit_depth_) - 1; | 212 mask_ = (1 << bit_depth_) - 1; |
| 228 | 213 |
| 229 rnd_.Reset(ACMRandom::DeterministicSeed()); | 214 rnd_.Reset(ACMRandom::DeterministicSeed()); |
| 230 block_size_ = width_ * height_; | 215 block_size_ = width_ * height_; |
| 231 #if CONFIG_VP9_HIGHBITDEPTH | |
| 232 if (!use_high_bit_depth_) { | 216 if (!use_high_bit_depth_) { |
| 233 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_ * 2)); | 217 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_ * 2)); |
| 234 ref_ = new uint8_t[block_size_ * 2]; | 218 ref_ = new uint8_t[block_size_ * 2]; |
| 219 #if CONFIG_VP9_HIGHBITDEPTH |
| 235 } else { | 220 } else { |
| 236 src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>( | 221 src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>( |
| 237 vpx_memalign(16, block_size_ * 2 * sizeof(uint16_t)))); | 222 vpx_memalign(16, block_size_ * 2 * sizeof(uint16_t)))); |
| 238 ref_ = CONVERT_TO_BYTEPTR(new uint16_t[block_size_ * 2]); | 223 ref_ = CONVERT_TO_BYTEPTR(new uint16_t[block_size_ * 2]); |
| 224 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 239 } | 225 } |
| 240 #else | |
| 241 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_ * 2)); | |
| 242 ref_ = new uint8_t[block_size_ * 2]; | |
| 243 #endif | |
| 244 ASSERT_TRUE(src_ != NULL); | 226 ASSERT_TRUE(src_ != NULL); |
| 245 ASSERT_TRUE(ref_ != NULL); | 227 ASSERT_TRUE(ref_ != NULL); |
| 246 } | 228 } |
| 247 | 229 |
| 248 virtual void TearDown() { | 230 virtual void TearDown() { |
| 249 #if CONFIG_VP9_HIGHBITDEPTH | |
| 250 if (!use_high_bit_depth_) { | 231 if (!use_high_bit_depth_) { |
| 251 vpx_free(src_); | 232 vpx_free(src_); |
| 252 delete[] ref_; | 233 delete[] ref_; |
| 234 #if CONFIG_VP9_HIGHBITDEPTH |
| 253 } else { | 235 } else { |
| 254 vpx_free(CONVERT_TO_SHORTPTR(src_)); | 236 vpx_free(CONVERT_TO_SHORTPTR(src_)); |
| 255 delete[] CONVERT_TO_SHORTPTR(ref_); | 237 delete[] CONVERT_TO_SHORTPTR(ref_); |
| 238 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 256 } | 239 } |
| 257 #else | |
| 258 vpx_free(src_); | |
| 259 delete[] ref_; | |
| 260 #endif | |
| 261 libvpx_test::ClearSystemState(); | 240 libvpx_test::ClearSystemState(); |
| 262 } | 241 } |
| 263 | 242 |
| 264 protected: | 243 protected: |
| 265 void ZeroTest(); | 244 void ZeroTest(); |
| 266 void RefTest(); | 245 void RefTest(); |
| 267 void RefStrideTest(); | 246 void RefStrideTest(); |
| 268 void OneQuarterTest(); | 247 void OneQuarterTest(); |
| 269 | 248 |
| 270 ACMRandom rnd_; | 249 ACMRandom rnd_; |
| 271 uint8_t *src_; | 250 uint8_t *src_; |
| 272 uint8_t *ref_; | 251 uint8_t *ref_; |
| 273 int width_, log2width_; | 252 int width_, log2width_; |
| 274 int height_, log2height_; | 253 int height_, log2height_; |
| 275 vpx_bit_depth_t bit_depth_; | 254 vpx_bit_depth_t bit_depth_; |
| 276 int mask_; | 255 int mask_; |
| 277 bool use_high_bit_depth_; | 256 bool use_high_bit_depth_; |
| 278 int block_size_; | 257 int block_size_; |
| 279 VarianceFunctionType variance_; | 258 VarianceFunctionType variance_; |
| 280 }; | 259 }; |
| 281 | 260 |
| 282 template<typename VarianceFunctionType> | 261 template<typename VarianceFunctionType> |
| 283 void VarianceTest<VarianceFunctionType>::ZeroTest() { | 262 void VarianceTest<VarianceFunctionType>::ZeroTest() { |
| 284 for (int i = 0; i <= 255; ++i) { | 263 for (int i = 0; i <= 255; ++i) { |
| 285 #if CONFIG_VP9_HIGHBITDEPTH | |
| 286 if (!use_high_bit_depth_) { | 264 if (!use_high_bit_depth_) { |
| 287 memset(src_, i, block_size_); | 265 memset(src_, i, block_size_); |
| 266 #if CONFIG_VP9_HIGHBITDEPTH |
| 288 } else { | 267 } else { |
| 289 vpx_memset16(CONVERT_TO_SHORTPTR(src_), i << (bit_depth_ - 8), | 268 vpx_memset16(CONVERT_TO_SHORTPTR(src_), i << (bit_depth_ - 8), |
| 290 block_size_); | 269 block_size_); |
| 270 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 291 } | 271 } |
| 292 #else | |
| 293 memset(src_, i, block_size_); | |
| 294 #endif | |
| 295 for (int j = 0; j <= 255; ++j) { | 272 for (int j = 0; j <= 255; ++j) { |
| 296 #if CONFIG_VP9_HIGHBITDEPTH | |
| 297 if (!use_high_bit_depth_) { | 273 if (!use_high_bit_depth_) { |
| 298 memset(ref_, j, block_size_); | 274 memset(ref_, j, block_size_); |
| 275 #if CONFIG_VP9_HIGHBITDEPTH |
| 299 } else { | 276 } else { |
| 300 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), j << (bit_depth_ - 8), | 277 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), j << (bit_depth_ - 8), |
| 301 block_size_); | 278 block_size_); |
| 279 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 302 } | 280 } |
| 303 #else | |
| 304 memset(ref_, j, block_size_); | |
| 305 #endif | |
| 306 unsigned int sse; | 281 unsigned int sse; |
| 307 unsigned int var; | 282 unsigned int var; |
| 308 ASM_REGISTER_STATE_CHECK( | 283 ASM_REGISTER_STATE_CHECK( |
| 309 var = variance_(src_, width_, ref_, width_, &sse)); | 284 var = variance_(src_, width_, ref_, width_, &sse)); |
| 310 EXPECT_EQ(0u, var) << "src values: " << i << " ref values: " << j; | 285 EXPECT_EQ(0u, var) << "src values: " << i << " ref values: " << j; |
| 311 } | 286 } |
| 312 } | 287 } |
| 313 } | 288 } |
| 314 | 289 |
| 315 template<typename VarianceFunctionType> | 290 template<typename VarianceFunctionType> |
| 316 void VarianceTest<VarianceFunctionType>::RefTest() { | 291 void VarianceTest<VarianceFunctionType>::RefTest() { |
| 317 for (int i = 0; i < 10; ++i) { | 292 for (int i = 0; i < 10; ++i) { |
| 318 for (int j = 0; j < block_size_; j++) { | 293 for (int j = 0; j < block_size_; j++) { |
| 319 #if CONFIG_VP9_HIGHBITDEPTH | |
| 320 if (!use_high_bit_depth_) { | 294 if (!use_high_bit_depth_) { |
| 321 src_[j] = rnd_.Rand8(); | 295 src_[j] = rnd_.Rand8(); |
| 322 ref_[j] = rnd_.Rand8(); | 296 ref_[j] = rnd_.Rand8(); |
| 297 #if CONFIG_VP9_HIGHBITDEPTH |
| 323 } else { | 298 } else { |
| 324 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() && mask_; | 299 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() && mask_; |
| 325 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() && mask_; | 300 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() && mask_; |
| 301 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 326 } | 302 } |
| 327 #else | |
| 328 src_[j] = rnd_.Rand8(); | |
| 329 ref_[j] = rnd_.Rand8(); | |
| 330 #endif | |
| 331 } | 303 } |
| 332 unsigned int sse1, sse2; | 304 unsigned int sse1, sse2; |
| 333 unsigned int var1; | 305 unsigned int var1; |
| 334 const int stride_coeff = 1; | 306 const int stride_coeff = 1; |
| 335 ASM_REGISTER_STATE_CHECK( | 307 ASM_REGISTER_STATE_CHECK( |
| 336 var1 = variance_(src_, width_, ref_, width_, &sse1)); | 308 var1 = variance_(src_, width_, ref_, width_, &sse1)); |
| 337 const unsigned int var2 = variance_ref(src_, ref_, log2width_, | 309 const unsigned int var2 = variance_ref(src_, ref_, log2width_, |
| 338 log2height_, stride_coeff, | 310 log2height_, stride_coeff, |
| 339 stride_coeff, &sse2, | 311 stride_coeff, &sse2, |
| 340 use_high_bit_depth_, bit_depth_); | 312 use_high_bit_depth_, bit_depth_); |
| 341 EXPECT_EQ(sse1, sse2); | 313 EXPECT_EQ(sse1, sse2); |
| 342 EXPECT_EQ(var1, var2); | 314 EXPECT_EQ(var1, var2); |
| 343 } | 315 } |
| 344 } | 316 } |
| 345 | 317 |
| 346 template<typename VarianceFunctionType> | 318 template<typename VarianceFunctionType> |
| 347 void VarianceTest<VarianceFunctionType>::RefStrideTest() { | 319 void VarianceTest<VarianceFunctionType>::RefStrideTest() { |
| 348 for (int i = 0; i < 10; ++i) { | 320 for (int i = 0; i < 10; ++i) { |
| 349 int ref_stride_coeff = i % 2; | 321 int ref_stride_coeff = i % 2; |
| 350 int src_stride_coeff = (i >> 1) % 2; | 322 int src_stride_coeff = (i >> 1) % 2; |
| 351 for (int j = 0; j < block_size_; j++) { | 323 for (int j = 0; j < block_size_; j++) { |
| 352 int ref_ind = (j / width_) * ref_stride_coeff * width_ + j % width_; | 324 int ref_ind = (j / width_) * ref_stride_coeff * width_ + j % width_; |
| 353 int src_ind = (j / width_) * src_stride_coeff * width_ + j % width_; | 325 int src_ind = (j / width_) * src_stride_coeff * width_ + j % width_; |
| 354 #if CONFIG_VP9_HIGHBITDEPTH | |
| 355 if (!use_high_bit_depth_) { | 326 if (!use_high_bit_depth_) { |
| 356 src_[src_ind] = rnd_.Rand8(); | 327 src_[src_ind] = rnd_.Rand8(); |
| 357 ref_[ref_ind] = rnd_.Rand8(); | 328 ref_[ref_ind] = rnd_.Rand8(); |
| 329 #if CONFIG_VP9_HIGHBITDEPTH |
| 358 } else { | 330 } else { |
| 359 CONVERT_TO_SHORTPTR(src_)[src_ind] = rnd_.Rand16() && mask_; | 331 CONVERT_TO_SHORTPTR(src_)[src_ind] = rnd_.Rand16() && mask_; |
| 360 CONVERT_TO_SHORTPTR(ref_)[ref_ind] = rnd_.Rand16() && mask_; | 332 CONVERT_TO_SHORTPTR(ref_)[ref_ind] = rnd_.Rand16() && mask_; |
| 333 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 361 } | 334 } |
| 362 #else | |
| 363 src_[src_ind] = rnd_.Rand8(); | |
| 364 ref_[ref_ind] = rnd_.Rand8(); | |
| 365 #endif | |
| 366 } | 335 } |
| 367 unsigned int sse1, sse2; | 336 unsigned int sse1, sse2; |
| 368 unsigned int var1; | 337 unsigned int var1; |
| 369 | 338 |
| 370 ASM_REGISTER_STATE_CHECK( | 339 ASM_REGISTER_STATE_CHECK( |
| 371 var1 = variance_(src_, width_ * src_stride_coeff, | 340 var1 = variance_(src_, width_ * src_stride_coeff, |
| 372 ref_, width_ * ref_stride_coeff, &sse1)); | 341 ref_, width_ * ref_stride_coeff, &sse1)); |
| 373 const unsigned int var2 = variance_ref(src_, ref_, log2width_, | 342 const unsigned int var2 = variance_ref(src_, ref_, log2width_, |
| 374 log2height_, src_stride_coeff, | 343 log2height_, src_stride_coeff, |
| 375 ref_stride_coeff, &sse2, | 344 ref_stride_coeff, &sse2, |
| 376 use_high_bit_depth_, bit_depth_); | 345 use_high_bit_depth_, bit_depth_); |
| 377 EXPECT_EQ(sse1, sse2); | 346 EXPECT_EQ(sse1, sse2); |
| 378 EXPECT_EQ(var1, var2); | 347 EXPECT_EQ(var1, var2); |
| 379 } | 348 } |
| 380 } | 349 } |
| 381 | 350 |
| 382 template<typename VarianceFunctionType> | 351 template<typename VarianceFunctionType> |
| 383 void VarianceTest<VarianceFunctionType>::OneQuarterTest() { | 352 void VarianceTest<VarianceFunctionType>::OneQuarterTest() { |
| 384 const int half = block_size_ / 2; | 353 const int half = block_size_ / 2; |
| 385 #if CONFIG_VP9_HIGHBITDEPTH | |
| 386 if (!use_high_bit_depth_) { | 354 if (!use_high_bit_depth_) { |
| 387 memset(src_, 255, block_size_); | 355 memset(src_, 255, block_size_); |
| 388 memset(ref_, 255, half); | 356 memset(ref_, 255, half); |
| 389 memset(ref_ + half, 0, half); | 357 memset(ref_ + half, 0, half); |
| 358 #if CONFIG_VP9_HIGHBITDEPTH |
| 390 } else { | 359 } else { |
| 391 vpx_memset16(CONVERT_TO_SHORTPTR(src_), 255 << (bit_depth_ - 8), | 360 vpx_memset16(CONVERT_TO_SHORTPTR(src_), 255 << (bit_depth_ - 8), |
| 392 block_size_); | 361 block_size_); |
| 393 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << (bit_depth_ - 8), half); | 362 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << (bit_depth_ - 8), half); |
| 394 vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half); | 363 vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half); |
| 364 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 395 } | 365 } |
| 396 #else | |
| 397 memset(src_, 255, block_size_); | |
| 398 memset(ref_, 255, half); | |
| 399 memset(ref_ + half, 0, half); | |
| 400 #endif | |
| 401 unsigned int sse; | 366 unsigned int sse; |
| 402 unsigned int var; | 367 unsigned int var; |
| 403 ASM_REGISTER_STATE_CHECK(var = variance_(src_, width_, ref_, width_, &sse)); | 368 ASM_REGISTER_STATE_CHECK(var = variance_(src_, width_, ref_, width_, &sse)); |
| 404 const unsigned int expected = block_size_ * 255 * 255 / 4; | 369 const unsigned int expected = block_size_ * 255 * 255 / 4; |
| 405 EXPECT_EQ(expected, var); | 370 EXPECT_EQ(expected, var); |
| 406 } | 371 } |
| 407 | 372 |
| 408 #if CONFIG_VP8_ENCODER | |
| 409 template<typename MseFunctionType> | 373 template<typename MseFunctionType> |
| 410 class MseTest | 374 class MseTest |
| 411 : public ::testing::TestWithParam<tuple<int, int, MseFunctionType> > { | 375 : public ::testing::TestWithParam<tuple<int, int, MseFunctionType> > { |
| 412 public: | 376 public: |
| 413 virtual void SetUp() { | 377 virtual void SetUp() { |
| 414 const tuple<int, int, MseFunctionType>& params = this->GetParam(); | 378 const tuple<int, int, MseFunctionType>& params = this->GetParam(); |
| 415 log2width_ = get<0>(params); | 379 log2width_ = get<0>(params); |
| 416 width_ = 1 << log2width_; | 380 width_ = 1 << log2width_; |
| 417 log2height_ = get<1>(params); | 381 log2height_ = get<1>(params); |
| 418 height_ = 1 << log2height_; | 382 height_ = 1 << log2height_; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 | 456 |
| 493 template<typename MseFunctionType> | 457 template<typename MseFunctionType> |
| 494 void MseTest<MseFunctionType>::MaxTest_sse() { | 458 void MseTest<MseFunctionType>::MaxTest_sse() { |
| 495 memset(src_, 255, block_size_); | 459 memset(src_, 255, block_size_); |
| 496 memset(ref_, 0, block_size_); | 460 memset(ref_, 0, block_size_); |
| 497 unsigned int var; | 461 unsigned int var; |
| 498 ASM_REGISTER_STATE_CHECK(var = mse_(src_, width_, ref_, width_)); | 462 ASM_REGISTER_STATE_CHECK(var = mse_(src_, width_, ref_, width_)); |
| 499 const unsigned int expected = block_size_ * 255 * 255; | 463 const unsigned int expected = block_size_ * 255 * 255; |
| 500 EXPECT_EQ(expected, var); | 464 EXPECT_EQ(expected, var); |
| 501 } | 465 } |
| 502 #endif | |
| 503 | 466 |
| 504 #if CONFIG_VP9_ENCODER | |
| 505 unsigned int subpel_avg_variance_ref(const uint8_t *ref, | 467 unsigned int subpel_avg_variance_ref(const uint8_t *ref, |
| 506 const uint8_t *src, | 468 const uint8_t *src, |
| 507 const uint8_t *second_pred, | 469 const uint8_t *second_pred, |
| 508 int l2w, int l2h, | 470 int l2w, int l2h, |
| 509 int xoff, int yoff, | 471 int xoff, int yoff, |
| 510 unsigned int *sse_ptr, | 472 unsigned int *sse_ptr, |
| 511 bool use_high_bit_depth, | 473 bool use_high_bit_depth, |
| 512 vpx_bit_depth_t bit_depth) { | 474 vpx_bit_depth_t bit_depth) { |
| 513 #if CONFIG_VP9_HIGHBITDEPTH | |
| 514 int64_t se = 0; | 475 int64_t se = 0; |
| 515 uint64_t sse = 0; | 476 uint64_t sse = 0; |
| 516 const int w = 1 << l2w; | 477 const int w = 1 << l2w; |
| 517 const int h = 1 << l2h; | 478 const int h = 1 << l2h; |
| 518 for (int y = 0; y < h; y++) { | 479 for (int y = 0; y < h; y++) { |
| 519 for (int x = 0; x < w; x++) { | 480 for (int x = 0; x < w; x++) { |
| 520 // bilinear interpolation at a 16th pel step | 481 // bilinear interpolation at a 16th pel step |
| 521 if (!use_high_bit_depth) { | 482 if (!use_high_bit_depth) { |
| 522 const int a1 = ref[(w + 1) * (y + 0) + x + 0]; | 483 const int a1 = ref[(w + 1) * (y + 0) + x + 0]; |
| 523 const int a2 = ref[(w + 1) * (y + 0) + x + 1]; | 484 const int a2 = ref[(w + 1) * (y + 0) + x + 1]; |
| 524 const int b1 = ref[(w + 1) * (y + 1) + x + 0]; | 485 const int b1 = ref[(w + 1) * (y + 1) + x + 0]; |
| 525 const int b2 = ref[(w + 1) * (y + 1) + x + 1]; | 486 const int b2 = ref[(w + 1) * (y + 1) + x + 1]; |
| 526 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); | 487 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); |
| 527 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); | 488 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); |
| 528 const int r = a + (((b - a) * yoff + 8) >> 4); | 489 const int r = a + (((b - a) * yoff + 8) >> 4); |
| 529 const int diff = ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x
]; | 490 const int diff = ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x
]; |
| 530 se += diff; | 491 se += diff; |
| 531 sse += diff * diff; | 492 sse += diff * diff; |
| 493 #if CONFIG_VP9_HIGHBITDEPTH |
| 532 } else { | 494 } else { |
| 533 uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref); | 495 uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref); |
| 534 uint16_t *src16 = CONVERT_TO_SHORTPTR(src); | 496 uint16_t *src16 = CONVERT_TO_SHORTPTR(src); |
| 535 uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred); | 497 uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred); |
| 536 const int a1 = ref16[(w + 1) * (y + 0) + x + 0]; | 498 const int a1 = ref16[(w + 1) * (y + 0) + x + 0]; |
| 537 const int a2 = ref16[(w + 1) * (y + 0) + x + 1]; | 499 const int a2 = ref16[(w + 1) * (y + 0) + x + 1]; |
| 538 const int b1 = ref16[(w + 1) * (y + 1) + x + 0]; | 500 const int b1 = ref16[(w + 1) * (y + 1) + x + 0]; |
| 539 const int b2 = ref16[(w + 1) * (y + 1) + x + 1]; | 501 const int b2 = ref16[(w + 1) * (y + 1) + x + 1]; |
| 540 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); | 502 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); |
| 541 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); | 503 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); |
| 542 const int r = a + (((b - a) * yoff + 8) >> 4); | 504 const int r = a + (((b - a) * yoff + 8) >> 4); |
| 543 const int diff = ((r + sec16[w * y + x] + 1) >> 1) - src16[w * y + x]; | 505 const int diff = ((r + sec16[w * y + x] + 1) >> 1) - src16[w * y + x]; |
| 544 se += diff; | 506 se += diff; |
| 545 sse += diff * diff; | 507 sse += diff * diff; |
| 508 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 546 } | 509 } |
| 547 } | 510 } |
| 548 } | 511 } |
| 549 if (bit_depth > 8) { | 512 RoundHighBitDepth(bit_depth, &se, &sse); |
| 550 sse = ROUND_POWER_OF_TWO(sse, 2*(bit_depth-8)); | 513 *sse_ptr = (unsigned int) sse; |
| 551 se = ROUND_POWER_OF_TWO(se, bit_depth-8); | 514 return (unsigned int) (sse - (((int64_t) se * se) >> (l2w + l2h))); |
| 552 } | |
| 553 #else | |
| 554 int se = 0; | |
| 555 unsigned int sse = 0; | |
| 556 const int w = 1 << l2w; | |
| 557 const int h = 1 << l2h; | |
| 558 for (int y = 0; y < h; y++) { | |
| 559 for (int x = 0; x < w; x++) { | |
| 560 // bilinear interpolation at a 16th pel step | |
| 561 const int a1 = ref[(w + 1) * (y + 0) + x + 0]; | |
| 562 const int a2 = ref[(w + 1) * (y + 0) + x + 1]; | |
| 563 const int b1 = ref[(w + 1) * (y + 1) + x + 0]; | |
| 564 const int b2 = ref[(w + 1) * (y + 1) + x + 1]; | |
| 565 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); | |
| 566 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); | |
| 567 const int r = a + (((b - a) * yoff + 8) >> 4); | |
| 568 const int diff = ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x]; | |
| 569 se += diff; | |
| 570 sse += diff * diff; | |
| 571 } | |
| 572 } | |
| 573 #endif // CONFIG_VP9_HIGHBITDEPTH | |
| 574 *sse_ptr = sse; | |
| 575 return sse - (((int64_t) se * se) >> (l2w + l2h)); | |
| 576 } | 515 } |
| 577 | 516 |
| 578 template<typename SubpelVarianceFunctionType> | 517 template<typename SubpelVarianceFunctionType> |
| 579 class SubpelVarianceTest | 518 class SubpelVarianceTest |
| 580 : public ::testing::TestWithParam<tuple<int, int, | 519 : public ::testing::TestWithParam<tuple<int, int, |
| 581 SubpelVarianceFunctionType, int> > { | 520 SubpelVarianceFunctionType, int> > { |
| 582 public: | 521 public: |
| 583 virtual void SetUp() { | 522 virtual void SetUp() { |
| 584 const tuple<int, int, SubpelVarianceFunctionType, int>& params = | 523 const tuple<int, int, SubpelVarianceFunctionType, int>& params = |
| 585 this->GetParam(); | 524 this->GetParam(); |
| 586 log2width_ = get<0>(params); | 525 log2width_ = get<0>(params); |
| 587 width_ = 1 << log2width_; | 526 width_ = 1 << log2width_; |
| 588 log2height_ = get<1>(params); | 527 log2height_ = get<1>(params); |
| 589 height_ = 1 << log2height_; | 528 height_ = 1 << log2height_; |
| 590 subpel_variance_ = get<2>(params); | 529 subpel_variance_ = get<2>(params); |
| 591 if (get<3>(params)) { | 530 if (get<3>(params)) { |
| 592 bit_depth_ = (vpx_bit_depth_t) get<3>(params); | 531 bit_depth_ = (vpx_bit_depth_t) get<3>(params); |
| 593 use_high_bit_depth_ = true; | 532 use_high_bit_depth_ = true; |
| 594 } else { | 533 } else { |
| 595 bit_depth_ = VPX_BITS_8; | 534 bit_depth_ = VPX_BITS_8; |
| 596 use_high_bit_depth_ = false; | 535 use_high_bit_depth_ = false; |
| 597 } | 536 } |
| 598 mask_ = (1 << bit_depth_)-1; | 537 mask_ = (1 << bit_depth_)-1; |
| 599 | 538 |
| 600 rnd_.Reset(ACMRandom::DeterministicSeed()); | 539 rnd_.Reset(ACMRandom::DeterministicSeed()); |
| 601 block_size_ = width_ * height_; | 540 block_size_ = width_ * height_; |
| 602 #if CONFIG_VP9_HIGHBITDEPTH | |
| 603 if (!use_high_bit_depth_) { | 541 if (!use_high_bit_depth_) { |
| 604 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); | 542 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); |
| 605 sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); | 543 sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); |
| 606 ref_ = new uint8_t[block_size_ + width_ + height_ + 1]; | 544 ref_ = new uint8_t[block_size_ + width_ + height_ + 1]; |
| 545 #if CONFIG_VP9_HIGHBITDEPTH |
| 607 } else { | 546 } else { |
| 608 src_ = CONVERT_TO_BYTEPTR( | 547 src_ = CONVERT_TO_BYTEPTR( |
| 609 reinterpret_cast<uint16_t *>( | 548 reinterpret_cast<uint16_t *>( |
| 610 vpx_memalign(16, block_size_*sizeof(uint16_t)))); | 549 vpx_memalign(16, block_size_*sizeof(uint16_t)))); |
| 611 sec_ = CONVERT_TO_BYTEPTR( | 550 sec_ = CONVERT_TO_BYTEPTR( |
| 612 reinterpret_cast<uint16_t *>( | 551 reinterpret_cast<uint16_t *>( |
| 613 vpx_memalign(16, block_size_*sizeof(uint16_t)))); | 552 vpx_memalign(16, block_size_*sizeof(uint16_t)))); |
| 614 ref_ = CONVERT_TO_BYTEPTR( | 553 ref_ = CONVERT_TO_BYTEPTR( |
| 615 new uint16_t[block_size_ + width_ + height_ + 1]); | 554 new uint16_t[block_size_ + width_ + height_ + 1]); |
| 555 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 616 } | 556 } |
| 617 #else | |
| 618 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); | |
| 619 sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); | |
| 620 ref_ = new uint8_t[block_size_ + width_ + height_ + 1]; | |
| 621 #endif // CONFIG_VP9_HIGHBITDEPTH | |
| 622 ASSERT_TRUE(src_ != NULL); | 557 ASSERT_TRUE(src_ != NULL); |
| 623 ASSERT_TRUE(sec_ != NULL); | 558 ASSERT_TRUE(sec_ != NULL); |
| 624 ASSERT_TRUE(ref_ != NULL); | 559 ASSERT_TRUE(ref_ != NULL); |
| 625 } | 560 } |
| 626 | 561 |
| 627 virtual void TearDown() { | 562 virtual void TearDown() { |
| 628 #if CONFIG_VP9_HIGHBITDEPTH | |
| 629 if (!use_high_bit_depth_) { | 563 if (!use_high_bit_depth_) { |
| 630 vpx_free(src_); | 564 vpx_free(src_); |
| 631 delete[] ref_; | 565 delete[] ref_; |
| 632 vpx_free(sec_); | 566 vpx_free(sec_); |
| 567 #if CONFIG_VP9_HIGHBITDEPTH |
| 633 } else { | 568 } else { |
| 634 vpx_free(CONVERT_TO_SHORTPTR(src_)); | 569 vpx_free(CONVERT_TO_SHORTPTR(src_)); |
| 635 delete[] CONVERT_TO_SHORTPTR(ref_); | 570 delete[] CONVERT_TO_SHORTPTR(ref_); |
| 636 vpx_free(CONVERT_TO_SHORTPTR(sec_)); | 571 vpx_free(CONVERT_TO_SHORTPTR(sec_)); |
| 572 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 637 } | 573 } |
| 638 #else | |
| 639 vpx_free(src_); | |
| 640 delete[] ref_; | |
| 641 vpx_free(sec_); | |
| 642 #endif | |
| 643 libvpx_test::ClearSystemState(); | 574 libvpx_test::ClearSystemState(); |
| 644 } | 575 } |
| 645 | 576 |
| 646 protected: | 577 protected: |
| 647 void RefTest(); | 578 void RefTest(); |
| 648 void ExtremeRefTest(); | 579 void ExtremeRefTest(); |
| 649 | 580 |
| 650 ACMRandom rnd_; | 581 ACMRandom rnd_; |
| 651 uint8_t *src_; | 582 uint8_t *src_; |
| 652 uint8_t *ref_; | 583 uint8_t *ref_; |
| 653 uint8_t *sec_; | 584 uint8_t *sec_; |
| 654 bool use_high_bit_depth_; | 585 bool use_high_bit_depth_; |
| 655 vpx_bit_depth_t bit_depth_; | 586 vpx_bit_depth_t bit_depth_; |
| 656 int width_, log2width_; | 587 int width_, log2width_; |
| 657 int height_, log2height_; | 588 int height_, log2height_; |
| 658 int block_size_, mask_; | 589 int block_size_, mask_; |
| 659 SubpelVarianceFunctionType subpel_variance_; | 590 SubpelVarianceFunctionType subpel_variance_; |
| 660 }; | 591 }; |
| 661 | 592 |
| 662 template<typename SubpelVarianceFunctionType> | 593 template<typename SubpelVarianceFunctionType> |
| 663 void SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() { | 594 void SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() { |
| 664 for (int x = 0; x < 16; ++x) { | 595 for (int x = 0; x < 16; ++x) { |
| 665 for (int y = 0; y < 16; ++y) { | 596 for (int y = 0; y < 16; ++y) { |
| 666 #if CONFIG_VP9_HIGHBITDEPTH | |
| 667 if (!use_high_bit_depth_) { | 597 if (!use_high_bit_depth_) { |
| 668 for (int j = 0; j < block_size_; j++) { | 598 for (int j = 0; j < block_size_; j++) { |
| 669 src_[j] = rnd_.Rand8(); | 599 src_[j] = rnd_.Rand8(); |
| 670 } | 600 } |
| 671 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { | 601 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { |
| 672 ref_[j] = rnd_.Rand8(); | 602 ref_[j] = rnd_.Rand8(); |
| 673 } | 603 } |
| 604 #if CONFIG_VP9_HIGHBITDEPTH |
| 674 } else { | 605 } else { |
| 675 for (int j = 0; j < block_size_; j++) { | 606 for (int j = 0; j < block_size_; j++) { |
| 676 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask_; | 607 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask_; |
| 677 } | 608 } |
| 678 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { | 609 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { |
| 679 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask_; | 610 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask_; |
| 680 } | 611 } |
| 612 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 681 } | 613 } |
| 682 #else | |
| 683 for (int j = 0; j < block_size_; j++) { | |
| 684 src_[j] = rnd_.Rand8(); | |
| 685 } | |
| 686 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { | |
| 687 ref_[j] = rnd_.Rand8(); | |
| 688 } | |
| 689 #endif // CONFIG_VP9_HIGHBITDEPTH | |
| 690 unsigned int sse1, sse2; | 614 unsigned int sse1, sse2; |
| 691 unsigned int var1; | 615 unsigned int var1; |
| 692 ASM_REGISTER_STATE_CHECK(var1 = subpel_variance_(ref_, width_ + 1, x, y, | 616 ASM_REGISTER_STATE_CHECK(var1 = subpel_variance_(ref_, width_ + 1, x, y, |
| 693 src_, width_, &sse1)); | 617 src_, width_, &sse1)); |
| 694 const unsigned int var2 = subpel_variance_ref(ref_, src_, log2width_, | 618 const unsigned int var2 = subpel_variance_ref(ref_, src_, log2width_, |
| 695 log2height_, x, y, &sse2, | 619 log2height_, x, y, &sse2, |
| 696 use_high_bit_depth_, | 620 use_high_bit_depth_, |
| 697 bit_depth_); | 621 bit_depth_); |
| 698 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; | 622 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; |
| 699 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; | 623 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; |
| 700 } | 624 } |
| 701 } | 625 } |
| 702 } | 626 } |
| 703 | 627 |
| 704 template<typename SubpelVarianceFunctionType> | 628 template<typename SubpelVarianceFunctionType> |
| 705 void SubpelVarianceTest<SubpelVarianceFunctionType>::ExtremeRefTest() { | 629 void SubpelVarianceTest<SubpelVarianceFunctionType>::ExtremeRefTest() { |
| 706 // Compare against reference. | 630 // Compare against reference. |
| 707 // Src: Set the first half of values to 0, the second half to the maximum. | 631 // Src: Set the first half of values to 0, the second half to the maximum. |
| 708 // Ref: Set the first half of values to the maximum, the second half to 0. | 632 // Ref: Set the first half of values to the maximum, the second half to 0. |
| 709 for (int x = 0; x < 16; ++x) { | 633 for (int x = 0; x < 16; ++x) { |
| 710 for (int y = 0; y < 16; ++y) { | 634 for (int y = 0; y < 16; ++y) { |
| 711 const int half = block_size_ / 2; | 635 const int half = block_size_ / 2; |
| 712 #if CONFIG_VP9_HIGHBITDEPTH | |
| 713 if (!use_high_bit_depth_) { | 636 if (!use_high_bit_depth_) { |
| 714 memset(src_, 0, half); | 637 memset(src_, 0, half); |
| 715 memset(src_ + half, 255, half); | 638 memset(src_ + half, 255, half); |
| 716 memset(ref_, 255, half); | 639 memset(ref_, 255, half); |
| 717 memset(ref_ + half, 0, half + width_ + height_ + 1); | 640 memset(ref_ + half, 0, half + width_ + height_ + 1); |
| 641 #if CONFIG_VP9_HIGHBITDEPTH |
| 718 } else { | 642 } else { |
| 719 vpx_memset16(CONVERT_TO_SHORTPTR(src_), mask_, half); | 643 vpx_memset16(CONVERT_TO_SHORTPTR(src_), mask_, half); |
| 720 vpx_memset16(CONVERT_TO_SHORTPTR(src_) + half, 0, half); | 644 vpx_memset16(CONVERT_TO_SHORTPTR(src_) + half, 0, half); |
| 721 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 0, half); | 645 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 0, half); |
| 722 vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, mask_, | 646 vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, mask_, |
| 723 half + width_ + height_ + 1); | 647 half + width_ + height_ + 1); |
| 648 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 724 } | 649 } |
| 725 #else | |
| 726 memset(src_, 0, half); | |
| 727 memset(src_ + half, 255, half); | |
| 728 memset(ref_, 255, half); | |
| 729 memset(ref_ + half, 0, half + width_ + height_ + 1); | |
| 730 #endif // CONFIG_VP9_HIGHBITDEPTH | |
| 731 unsigned int sse1, sse2; | 650 unsigned int sse1, sse2; |
| 732 unsigned int var1; | 651 unsigned int var1; |
| 733 ASM_REGISTER_STATE_CHECK( | 652 ASM_REGISTER_STATE_CHECK( |
| 734 var1 = subpel_variance_(ref_, width_ + 1, x, y, src_, width_, &sse1)); | 653 var1 = subpel_variance_(ref_, width_ + 1, x, y, src_, width_, &sse1)); |
| 735 const unsigned int var2 = | 654 const unsigned int var2 = |
| 736 subpel_variance_ref(ref_, src_, log2width_, log2height_, x, y, &sse2, | 655 subpel_variance_ref(ref_, src_, log2width_, log2height_, x, y, &sse2, |
| 737 use_high_bit_depth_, bit_depth_); | 656 use_high_bit_depth_, bit_depth_); |
| 738 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; | 657 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; |
| 739 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; | 658 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; |
| 740 } | 659 } |
| 741 } | 660 } |
| 742 } | 661 } |
| 743 | 662 |
| 663 #if CONFIG_VP9_ENCODER |
| 744 template<> | 664 template<> |
| 745 void SubpelVarianceTest<vp9_subp_avg_variance_fn_t>::RefTest() { | 665 void SubpelVarianceTest<vp9_subp_avg_variance_fn_t>::RefTest() { |
| 746 for (int x = 0; x < 16; ++x) { | 666 for (int x = 0; x < 16; ++x) { |
| 747 for (int y = 0; y < 16; ++y) { | 667 for (int y = 0; y < 16; ++y) { |
| 748 #if CONFIG_VP9_HIGHBITDEPTH | |
| 749 if (!use_high_bit_depth_) { | 668 if (!use_high_bit_depth_) { |
| 750 for (int j = 0; j < block_size_; j++) { | 669 for (int j = 0; j < block_size_; j++) { |
| 751 src_[j] = rnd_.Rand8(); | 670 src_[j] = rnd_.Rand8(); |
| 752 sec_[j] = rnd_.Rand8(); | 671 sec_[j] = rnd_.Rand8(); |
| 753 } | 672 } |
| 754 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { | 673 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { |
| 755 ref_[j] = rnd_.Rand8(); | 674 ref_[j] = rnd_.Rand8(); |
| 756 } | 675 } |
| 676 #if CONFIG_VP9_HIGHBITDEPTH |
| 757 } else { | 677 } else { |
| 758 for (int j = 0; j < block_size_; j++) { | 678 for (int j = 0; j < block_size_; j++) { |
| 759 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask_; | 679 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask_; |
| 760 CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask_; | 680 CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask_; |
| 761 } | 681 } |
| 762 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { | 682 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { |
| 763 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask_; | 683 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask_; |
| 764 } | 684 } |
| 685 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 765 } | 686 } |
| 766 #else | |
| 767 for (int j = 0; j < block_size_; j++) { | |
| 768 src_[j] = rnd_.Rand8(); | |
| 769 sec_[j] = rnd_.Rand8(); | |
| 770 } | |
| 771 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { | |
| 772 ref_[j] = rnd_.Rand8(); | |
| 773 } | |
| 774 #endif | |
| 775 unsigned int sse1, sse2; | 687 unsigned int sse1, sse2; |
| 776 unsigned int var1; | 688 unsigned int var1; |
| 777 ASM_REGISTER_STATE_CHECK( | 689 ASM_REGISTER_STATE_CHECK( |
| 778 var1 = subpel_variance_(ref_, width_ + 1, x, y, | 690 var1 = subpel_variance_(ref_, width_ + 1, x, y, |
| 779 src_, width_, &sse1, sec_)); | 691 src_, width_, &sse1, sec_)); |
| 780 const unsigned int var2 = subpel_avg_variance_ref(ref_, src_, sec_, | 692 const unsigned int var2 = subpel_avg_variance_ref(ref_, src_, sec_, |
| 781 log2width_, log2height_, | 693 log2width_, log2height_, |
| 782 x, y, &sse2, | 694 x, y, &sse2, |
| 783 use_high_bit_depth_, | 695 use_high_bit_depth_, |
| 784 bit_depth_); | 696 bit_depth_); |
| 785 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; | 697 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; |
| 786 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; | 698 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; |
| 787 } | 699 } |
| 788 } | 700 } |
| 789 } | 701 } |
| 790 | |
| 791 #endif // CONFIG_VP9_ENCODER | 702 #endif // CONFIG_VP9_ENCODER |
| 792 | 703 |
| 793 // ----------------------------------------------------------------------------- | 704 typedef MseTest<Get4x4SseFunc> VpxSseTest; |
| 794 // VP8 test cases. | 705 typedef MseTest<VarianceMxNFunc> VpxMseTest; |
| 795 | 706 typedef VarianceTest<VarianceMxNFunc> VpxVarianceTest; |
| 796 namespace vp8 { | 707 |
| 797 | 708 TEST_P(VpxSseTest, Ref_sse) { RefTest_sse(); } |
| 798 #if CONFIG_VP8_ENCODER | 709 TEST_P(VpxSseTest, Max_sse) { MaxTest_sse(); } |
| 799 typedef unsigned int (*vp8_sse_fn_t)(const unsigned char *src_ptr, | 710 TEST_P(VpxMseTest, Ref_mse) { RefTest_mse(); } |
| 800 int source_stride, const unsigned char *ref_ptr, int ref_stride); | 711 TEST_P(VpxMseTest, Max_mse) { MaxTest_mse(); } |
| 801 | 712 TEST_P(VpxVarianceTest, Zero) { ZeroTest(); } |
| 802 typedef MseTest<vp8_sse_fn_t> VP8SseTest; | 713 TEST_P(VpxVarianceTest, Ref) { RefTest(); } |
| 803 typedef MseTest<vp8_variance_fn_t> VP8MseTest; | 714 TEST_P(VpxVarianceTest, RefStride) { RefStrideTest(); } |
| 804 typedef VarianceTest<vp8_variance_fn_t> VP8VarianceTest; | 715 TEST_P(VpxVarianceTest, OneQuarter) { OneQuarterTest(); } |
| 805 | |
| 806 TEST_P(VP8SseTest, Ref_sse) { RefTest_sse(); } | |
| 807 TEST_P(VP8SseTest, Max_sse) { MaxTest_sse(); } | |
| 808 TEST_P(VP8MseTest, Ref_mse) { RefTest_mse(); } | |
| 809 TEST_P(VP8MseTest, Max_mse) { MaxTest_mse(); } | |
| 810 TEST_P(VP8VarianceTest, Zero) { ZeroTest(); } | |
| 811 TEST_P(VP8VarianceTest, Ref) { RefTest(); } | |
| 812 TEST_P(VP8VarianceTest, OneQuarter) { OneQuarterTest(); } | |
| 813 | |
| 814 const vp8_sse_fn_t get4x4sse_cs_c = vp8_get4x4sse_cs_c; | |
| 815 INSTANTIATE_TEST_CASE_P( | |
| 816 C, VP8SseTest, | |
| 817 ::testing::Values(make_tuple(2, 2, get4x4sse_cs_c))); | |
| 818 | |
| 819 const vp8_variance_fn_t mse16x16_c = vp8_mse16x16_c; | |
| 820 INSTANTIATE_TEST_CASE_P( | |
| 821 C, VP8MseTest, | |
| 822 ::testing::Values(make_tuple(4, 4, mse16x16_c))); | |
| 823 | |
| 824 const vp8_variance_fn_t variance4x4_c = vp8_variance4x4_c; | |
| 825 const vp8_variance_fn_t variance8x8_c = vp8_variance8x8_c; | |
| 826 const vp8_variance_fn_t variance8x16_c = vp8_variance8x16_c; | |
| 827 const vp8_variance_fn_t variance16x8_c = vp8_variance16x8_c; | |
| 828 const vp8_variance_fn_t variance16x16_c = vp8_variance16x16_c; | |
| 829 INSTANTIATE_TEST_CASE_P( | |
| 830 C, VP8VarianceTest, | |
| 831 ::testing::Values(make_tuple(2, 2, variance4x4_c, 0), | |
| 832 make_tuple(3, 3, variance8x8_c, 0), | |
| 833 make_tuple(3, 4, variance8x16_c, 0), | |
| 834 make_tuple(4, 3, variance16x8_c, 0), | |
| 835 make_tuple(4, 4, variance16x16_c, 0))); | |
| 836 | |
| 837 #if HAVE_NEON | |
| 838 const vp8_sse_fn_t get4x4sse_cs_neon = vp8_get4x4sse_cs_neon; | |
| 839 INSTANTIATE_TEST_CASE_P( | |
| 840 NEON, VP8SseTest, | |
| 841 ::testing::Values(make_tuple(2, 2, get4x4sse_cs_neon))); | |
| 842 | |
| 843 const vp8_variance_fn_t mse16x16_neon = vp8_mse16x16_neon; | |
| 844 INSTANTIATE_TEST_CASE_P( | |
| 845 NEON, VP8MseTest, | |
| 846 ::testing::Values(make_tuple(4, 4, mse16x16_neon))); | |
| 847 | |
| 848 const vp8_variance_fn_t variance8x8_neon = vp8_variance8x8_neon; | |
| 849 const vp8_variance_fn_t variance8x16_neon = vp8_variance8x16_neon; | |
| 850 const vp8_variance_fn_t variance16x8_neon = vp8_variance16x8_neon; | |
| 851 const vp8_variance_fn_t variance16x16_neon = vp8_variance16x16_neon; | |
| 852 INSTANTIATE_TEST_CASE_P( | |
| 853 NEON, VP8VarianceTest, | |
| 854 ::testing::Values(make_tuple(3, 3, variance8x8_neon, 0), | |
| 855 make_tuple(3, 4, variance8x16_neon, 0), | |
| 856 make_tuple(4, 3, variance16x8_neon, 0), | |
| 857 make_tuple(4, 4, variance16x16_neon, 0))); | |
| 858 #endif | |
| 859 | |
| 860 #if HAVE_MMX | |
| 861 const vp8_variance_fn_t variance4x4_mmx = vp8_variance4x4_mmx; | |
| 862 const vp8_variance_fn_t variance8x8_mmx = vp8_variance8x8_mmx; | |
| 863 const vp8_variance_fn_t variance8x16_mmx = vp8_variance8x16_mmx; | |
| 864 const vp8_variance_fn_t variance16x8_mmx = vp8_variance16x8_mmx; | |
| 865 const vp8_variance_fn_t variance16x16_mmx = vp8_variance16x16_mmx; | |
| 866 INSTANTIATE_TEST_CASE_P( | |
| 867 MMX, VP8VarianceTest, | |
| 868 ::testing::Values(make_tuple(2, 2, variance4x4_mmx, 0), | |
| 869 make_tuple(3, 3, variance8x8_mmx, 0), | |
| 870 make_tuple(3, 4, variance8x16_mmx, 0), | |
| 871 make_tuple(4, 3, variance16x8_mmx, 0), | |
| 872 make_tuple(4, 4, variance16x16_mmx, 0))); | |
| 873 #endif | |
| 874 | |
| 875 #if HAVE_SSE2 | |
| 876 const vp8_variance_fn_t variance4x4_wmt = vp8_variance4x4_wmt; | |
| 877 const vp8_variance_fn_t variance8x8_wmt = vp8_variance8x8_wmt; | |
| 878 const vp8_variance_fn_t variance8x16_wmt = vp8_variance8x16_wmt; | |
| 879 const vp8_variance_fn_t variance16x8_wmt = vp8_variance16x8_wmt; | |
| 880 const vp8_variance_fn_t variance16x16_wmt = vp8_variance16x16_wmt; | |
| 881 INSTANTIATE_TEST_CASE_P( | |
| 882 SSE2, VP8VarianceTest, | |
| 883 ::testing::Values(make_tuple(2, 2, variance4x4_wmt, 0), | |
| 884 make_tuple(3, 3, variance8x8_wmt, 0), | |
| 885 make_tuple(3, 4, variance8x16_wmt, 0), | |
| 886 make_tuple(4, 3, variance16x8_wmt, 0), | |
| 887 make_tuple(4, 4, variance16x16_wmt, 0))); | |
| 888 #endif | |
| 889 #endif // CONFIG_VP8_ENCODER | |
| 890 | |
| 891 } // namespace vp8 | |
| 892 | |
| 893 // ----------------------------------------------------------------------------- | |
| 894 // VP9 test cases. | |
| 895 | |
| 896 namespace vp9 { | |
| 897 | |
| 898 #if CONFIG_VP9_ENCODER | |
| 899 TEST_P(SumOfSquaresTest, Const) { ConstTest(); } | 716 TEST_P(SumOfSquaresTest, Const) { ConstTest(); } |
| 900 TEST_P(SumOfSquaresTest, Ref) { RefTest(); } | 717 TEST_P(SumOfSquaresTest, Ref) { RefTest(); } |
| 901 | 718 |
| 902 INSTANTIATE_TEST_CASE_P(C, SumOfSquaresTest, | 719 INSTANTIATE_TEST_CASE_P(C, SumOfSquaresTest, |
| 903 ::testing::Values(vp9_get_mb_ss_c)); | 720 ::testing::Values(vpx_get_mb_ss_c)); |
| 904 | 721 |
| 905 typedef VarianceTest<vp9_variance_fn_t> VP9VarianceTest; | 722 const Get4x4SseFunc get4x4sse_cs_c = vpx_get4x4sse_cs_c; |
| 723 INSTANTIATE_TEST_CASE_P(C, VpxSseTest, |
| 724 ::testing::Values(make_tuple(2, 2, get4x4sse_cs_c))); |
| 725 |
| 726 const VarianceMxNFunc mse16x16_c = vpx_mse16x16_c; |
| 727 const VarianceMxNFunc mse16x8_c = vpx_mse16x8_c; |
| 728 const VarianceMxNFunc mse8x16_c = vpx_mse8x16_c; |
| 729 const VarianceMxNFunc mse8x8_c = vpx_mse8x8_c; |
| 730 INSTANTIATE_TEST_CASE_P(C, VpxMseTest, |
| 731 ::testing::Values(make_tuple(4, 4, mse16x16_c), |
| 732 make_tuple(4, 3, mse16x8_c), |
| 733 make_tuple(3, 4, mse8x16_c), |
| 734 make_tuple(3, 3, mse8x8_c))); |
| 735 |
| 736 const VarianceMxNFunc variance64x64_c = vpx_variance64x64_c; |
| 737 const VarianceMxNFunc variance64x32_c = vpx_variance64x32_c; |
| 738 const VarianceMxNFunc variance32x64_c = vpx_variance32x64_c; |
| 739 const VarianceMxNFunc variance32x32_c = vpx_variance32x32_c; |
| 740 const VarianceMxNFunc variance32x16_c = vpx_variance32x16_c; |
| 741 const VarianceMxNFunc variance16x32_c = vpx_variance16x32_c; |
| 742 const VarianceMxNFunc variance16x16_c = vpx_variance16x16_c; |
| 743 const VarianceMxNFunc variance16x8_c = vpx_variance16x8_c; |
| 744 const VarianceMxNFunc variance8x16_c = vpx_variance8x16_c; |
| 745 const VarianceMxNFunc variance8x8_c = vpx_variance8x8_c; |
| 746 const VarianceMxNFunc variance8x4_c = vpx_variance8x4_c; |
| 747 const VarianceMxNFunc variance4x8_c = vpx_variance4x8_c; |
| 748 const VarianceMxNFunc variance4x4_c = vpx_variance4x4_c; |
| 749 |
| 750 INSTANTIATE_TEST_CASE_P( |
| 751 C, VpxVarianceTest, |
| 752 ::testing::Values(make_tuple(6, 6, variance64x64_c, 0), |
| 753 make_tuple(6, 5, variance64x32_c, 0), |
| 754 make_tuple(5, 6, variance32x64_c, 0), |
| 755 make_tuple(5, 5, variance32x32_c, 0), |
| 756 make_tuple(5, 4, variance32x16_c, 0), |
| 757 make_tuple(4, 5, variance16x32_c, 0), |
| 758 make_tuple(4, 4, variance16x16_c, 0), |
| 759 make_tuple(4, 3, variance16x8_c, 0), |
| 760 make_tuple(3, 4, variance8x16_c, 0), |
| 761 make_tuple(3, 3, variance8x8_c, 0), |
| 762 make_tuple(3, 2, variance8x4_c, 0), |
| 763 make_tuple(2, 3, variance4x8_c, 0), |
| 764 make_tuple(2, 2, variance4x4_c, 0))); |
| 765 |
| 766 #if CONFIG_VP9_HIGHBITDEPTH |
| 767 typedef MseTest<VarianceMxNFunc> VpxHBDMseTest; |
| 768 typedef VarianceTest<VarianceMxNFunc> VpxHBDVarianceTest; |
| 769 |
| 770 TEST_P(VpxHBDMseTest, Ref_mse) { RefTest_mse(); } |
| 771 TEST_P(VpxHBDMseTest, Max_mse) { MaxTest_mse(); } |
| 772 TEST_P(VpxHBDVarianceTest, Zero) { ZeroTest(); } |
| 773 TEST_P(VpxHBDVarianceTest, Ref) { RefTest(); } |
| 774 TEST_P(VpxHBDVarianceTest, RefStride) { RefStrideTest(); } |
| 775 TEST_P(VpxHBDVarianceTest, OneQuarter) { OneQuarterTest(); } |
| 776 |
| 777 /* TODO(debargha): This test does not support the highbd version |
| 778 const VarianceMxNFunc highbd_12_mse16x16_c = vpx_highbd_12_mse16x16_c; |
| 779 const VarianceMxNFunc highbd_12_mse16x8_c = vpx_highbd_12_mse16x8_c; |
| 780 const VarianceMxNFunc highbd_12_mse8x16_c = vpx_highbd_12_mse8x16_c; |
| 781 const VarianceMxNFunc highbd_12_mse8x8_c = vpx_highbd_12_mse8x8_c; |
| 782 |
| 783 const VarianceMxNFunc highbd_10_mse16x16_c = vpx_highbd_10_mse16x16_c; |
| 784 const VarianceMxNFunc highbd_10_mse16x8_c = vpx_highbd_10_mse16x8_c; |
| 785 const VarianceMxNFunc highbd_10_mse8x16_c = vpx_highbd_10_mse8x16_c; |
| 786 const VarianceMxNFunc highbd_10_mse8x8_c = vpx_highbd_10_mse8x8_c; |
| 787 |
| 788 const VarianceMxNFunc highbd_8_mse16x16_c = vpx_highbd_8_mse16x16_c; |
| 789 const VarianceMxNFunc highbd_8_mse16x8_c = vpx_highbd_8_mse16x8_c; |
| 790 const VarianceMxNFunc highbd_8_mse8x16_c = vpx_highbd_8_mse8x16_c; |
| 791 const VarianceMxNFunc highbd_8_mse8x8_c = vpx_highbd_8_mse8x8_c; |
| 792 |
| 793 INSTANTIATE_TEST_CASE_P( |
| 794 C, VpxHBDMseTest, ::testing::Values(make_tuple(4, 4, highbd_12_mse16x16_c), |
| 795 make_tuple(4, 4, highbd_12_mse16x8_c), |
| 796 make_tuple(4, 4, highbd_12_mse8x16_c), |
| 797 make_tuple(4, 4, highbd_12_mse8x8_c), |
| 798 make_tuple(4, 4, highbd_10_mse16x16_c), |
| 799 make_tuple(4, 4, highbd_10_mse16x8_c), |
| 800 make_tuple(4, 4, highbd_10_mse8x16_c), |
| 801 make_tuple(4, 4, highbd_10_mse8x8_c), |
| 802 make_tuple(4, 4, highbd_8_mse16x16_c), |
| 803 make_tuple(4, 4, highbd_8_mse16x8_c), |
| 804 make_tuple(4, 4, highbd_8_mse8x16_c), |
| 805 make_tuple(4, 4, highbd_8_mse8x8_c))); |
| 806 */ |
| 807 |
| 808 |
| 809 const VarianceMxNFunc highbd_12_variance64x64_c = vpx_highbd_12_variance64x64_c; |
| 810 const VarianceMxNFunc highbd_12_variance64x32_c = vpx_highbd_12_variance64x32_c; |
| 811 const VarianceMxNFunc highbd_12_variance32x64_c = vpx_highbd_12_variance32x64_c; |
| 812 const VarianceMxNFunc highbd_12_variance32x32_c = vpx_highbd_12_variance32x32_c; |
| 813 const VarianceMxNFunc highbd_12_variance32x16_c = vpx_highbd_12_variance32x16_c; |
| 814 const VarianceMxNFunc highbd_12_variance16x32_c = vpx_highbd_12_variance16x32_c; |
| 815 const VarianceMxNFunc highbd_12_variance16x16_c = vpx_highbd_12_variance16x16_c; |
| 816 const VarianceMxNFunc highbd_12_variance16x8_c = vpx_highbd_12_variance16x8_c; |
| 817 const VarianceMxNFunc highbd_12_variance8x16_c = vpx_highbd_12_variance8x16_c; |
| 818 const VarianceMxNFunc highbd_12_variance8x8_c = vpx_highbd_12_variance8x8_c; |
| 819 const VarianceMxNFunc highbd_12_variance8x4_c = vpx_highbd_12_variance8x4_c; |
| 820 const VarianceMxNFunc highbd_12_variance4x8_c = vpx_highbd_12_variance4x8_c; |
| 821 const VarianceMxNFunc highbd_12_variance4x4_c = vpx_highbd_12_variance4x4_c; |
| 822 |
| 823 const VarianceMxNFunc highbd_10_variance64x64_c = vpx_highbd_10_variance64x64_c; |
| 824 const VarianceMxNFunc highbd_10_variance64x32_c = vpx_highbd_10_variance64x32_c; |
| 825 const VarianceMxNFunc highbd_10_variance32x64_c = vpx_highbd_10_variance32x64_c; |
| 826 const VarianceMxNFunc highbd_10_variance32x32_c = vpx_highbd_10_variance32x32_c; |
| 827 const VarianceMxNFunc highbd_10_variance32x16_c = vpx_highbd_10_variance32x16_c; |
| 828 const VarianceMxNFunc highbd_10_variance16x32_c = vpx_highbd_10_variance16x32_c; |
| 829 const VarianceMxNFunc highbd_10_variance16x16_c = vpx_highbd_10_variance16x16_c; |
| 830 const VarianceMxNFunc highbd_10_variance16x8_c = vpx_highbd_10_variance16x8_c; |
| 831 const VarianceMxNFunc highbd_10_variance8x16_c = vpx_highbd_10_variance8x16_c; |
| 832 const VarianceMxNFunc highbd_10_variance8x8_c = vpx_highbd_10_variance8x8_c; |
| 833 const VarianceMxNFunc highbd_10_variance8x4_c = vpx_highbd_10_variance8x4_c; |
| 834 const VarianceMxNFunc highbd_10_variance4x8_c = vpx_highbd_10_variance4x8_c; |
| 835 const VarianceMxNFunc highbd_10_variance4x4_c = vpx_highbd_10_variance4x4_c; |
| 836 |
| 837 const VarianceMxNFunc highbd_8_variance64x64_c = vpx_highbd_8_variance64x64_c; |
| 838 const VarianceMxNFunc highbd_8_variance64x32_c = vpx_highbd_8_variance64x32_c; |
| 839 const VarianceMxNFunc highbd_8_variance32x64_c = vpx_highbd_8_variance32x64_c; |
| 840 const VarianceMxNFunc highbd_8_variance32x32_c = vpx_highbd_8_variance32x32_c; |
| 841 const VarianceMxNFunc highbd_8_variance32x16_c = vpx_highbd_8_variance32x16_c; |
| 842 const VarianceMxNFunc highbd_8_variance16x32_c = vpx_highbd_8_variance16x32_c; |
| 843 const VarianceMxNFunc highbd_8_variance16x16_c = vpx_highbd_8_variance16x16_c; |
| 844 const VarianceMxNFunc highbd_8_variance16x8_c = vpx_highbd_8_variance16x8_c; |
| 845 const VarianceMxNFunc highbd_8_variance8x16_c = vpx_highbd_8_variance8x16_c; |
| 846 const VarianceMxNFunc highbd_8_variance8x8_c = vpx_highbd_8_variance8x8_c; |
| 847 const VarianceMxNFunc highbd_8_variance8x4_c = vpx_highbd_8_variance8x4_c; |
| 848 const VarianceMxNFunc highbd_8_variance4x8_c = vpx_highbd_8_variance4x8_c; |
| 849 const VarianceMxNFunc highbd_8_variance4x4_c = vpx_highbd_8_variance4x4_c; |
| 850 INSTANTIATE_TEST_CASE_P( |
| 851 C, VpxHBDVarianceTest, |
| 852 ::testing::Values(make_tuple(6, 6, highbd_12_variance64x64_c, 12), |
| 853 make_tuple(6, 5, highbd_12_variance64x32_c, 12), |
| 854 make_tuple(5, 6, highbd_12_variance32x64_c, 12), |
| 855 make_tuple(5, 5, highbd_12_variance32x32_c, 12), |
| 856 make_tuple(5, 4, highbd_12_variance32x16_c, 12), |
| 857 make_tuple(4, 5, highbd_12_variance16x32_c, 12), |
| 858 make_tuple(4, 4, highbd_12_variance16x16_c, 12), |
| 859 make_tuple(4, 3, highbd_12_variance16x8_c, 12), |
| 860 make_tuple(3, 4, highbd_12_variance8x16_c, 12), |
| 861 make_tuple(3, 3, highbd_12_variance8x8_c, 12), |
| 862 make_tuple(3, 2, highbd_12_variance8x4_c, 12), |
| 863 make_tuple(2, 3, highbd_12_variance4x8_c, 12), |
| 864 make_tuple(2, 2, highbd_12_variance4x4_c, 12), |
| 865 make_tuple(6, 6, highbd_10_variance64x64_c, 10), |
| 866 make_tuple(6, 5, highbd_10_variance64x32_c, 10), |
| 867 make_tuple(5, 6, highbd_10_variance32x64_c, 10), |
| 868 make_tuple(5, 5, highbd_10_variance32x32_c, 10), |
| 869 make_tuple(5, 4, highbd_10_variance32x16_c, 10), |
| 870 make_tuple(4, 5, highbd_10_variance16x32_c, 10), |
| 871 make_tuple(4, 4, highbd_10_variance16x16_c, 10), |
| 872 make_tuple(4, 3, highbd_10_variance16x8_c, 10), |
| 873 make_tuple(3, 4, highbd_10_variance8x16_c, 10), |
| 874 make_tuple(3, 3, highbd_10_variance8x8_c, 10), |
| 875 make_tuple(3, 2, highbd_10_variance8x4_c, 10), |
| 876 make_tuple(2, 3, highbd_10_variance4x8_c, 10), |
| 877 make_tuple(2, 2, highbd_10_variance4x4_c, 10), |
| 878 make_tuple(6, 6, highbd_8_variance64x64_c, 8), |
| 879 make_tuple(6, 5, highbd_8_variance64x32_c, 8), |
| 880 make_tuple(5, 6, highbd_8_variance32x64_c, 8), |
| 881 make_tuple(5, 5, highbd_8_variance32x32_c, 8), |
| 882 make_tuple(5, 4, highbd_8_variance32x16_c, 8), |
| 883 make_tuple(4, 5, highbd_8_variance16x32_c, 8), |
| 884 make_tuple(4, 4, highbd_8_variance16x16_c, 8), |
| 885 make_tuple(4, 3, highbd_8_variance16x8_c, 8), |
| 886 make_tuple(3, 4, highbd_8_variance8x16_c, 8), |
| 887 make_tuple(3, 3, highbd_8_variance8x8_c, 8), |
| 888 make_tuple(3, 2, highbd_8_variance8x4_c, 8), |
| 889 make_tuple(2, 3, highbd_8_variance4x8_c, 8), |
| 890 make_tuple(2, 2, highbd_8_variance4x4_c, 8))); |
| 891 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 892 |
| 893 #if HAVE_MMX |
| 894 const VarianceMxNFunc mse16x16_mmx = vpx_mse16x16_mmx; |
| 895 INSTANTIATE_TEST_CASE_P(MMX, VpxMseTest, |
| 896 ::testing::Values(make_tuple(4, 4, mse16x16_mmx))); |
| 897 |
| 898 INSTANTIATE_TEST_CASE_P(MMX, SumOfSquaresTest, |
| 899 ::testing::Values(vpx_get_mb_ss_mmx)); |
| 900 |
| 901 const VarianceMxNFunc variance16x16_mmx = vpx_variance16x16_mmx; |
| 902 const VarianceMxNFunc variance16x8_mmx = vpx_variance16x8_mmx; |
| 903 const VarianceMxNFunc variance8x16_mmx = vpx_variance8x16_mmx; |
| 904 const VarianceMxNFunc variance8x8_mmx = vpx_variance8x8_mmx; |
| 905 const VarianceMxNFunc variance4x4_mmx = vpx_variance4x4_mmx; |
| 906 INSTANTIATE_TEST_CASE_P( |
| 907 MMX, VpxVarianceTest, |
| 908 ::testing::Values(make_tuple(4, 4, variance16x16_mmx, 0), |
| 909 make_tuple(4, 3, variance16x8_mmx, 0), |
| 910 make_tuple(3, 4, variance8x16_mmx, 0), |
| 911 make_tuple(3, 3, variance8x8_mmx, 0), |
| 912 make_tuple(2, 2, variance4x4_mmx, 0))); |
| 913 #endif // HAVE_MMX |
| 914 |
| 915 #if HAVE_SSE2 |
| 916 INSTANTIATE_TEST_CASE_P(SSE2, SumOfSquaresTest, |
| 917 ::testing::Values(vpx_get_mb_ss_sse2)); |
| 918 |
| 919 const VarianceMxNFunc mse16x16_sse2 = vpx_mse16x16_sse2; |
| 920 const VarianceMxNFunc mse16x8_sse2 = vpx_mse16x8_sse2; |
| 921 const VarianceMxNFunc mse8x16_sse2 = vpx_mse8x16_sse2; |
| 922 const VarianceMxNFunc mse8x8_sse2 = vpx_mse8x8_sse2; |
| 923 INSTANTIATE_TEST_CASE_P(SSE2, VpxMseTest, |
| 924 ::testing::Values(make_tuple(4, 4, mse16x16_sse2), |
| 925 make_tuple(4, 3, mse16x8_sse2), |
| 926 make_tuple(3, 4, mse8x16_sse2), |
| 927 make_tuple(3, 3, mse8x8_sse2))); |
| 928 |
| 929 const VarianceMxNFunc variance64x64_sse2 = vpx_variance64x64_sse2; |
| 930 const VarianceMxNFunc variance64x32_sse2 = vpx_variance64x32_sse2; |
| 931 const VarianceMxNFunc variance32x64_sse2 = vpx_variance32x64_sse2; |
| 932 const VarianceMxNFunc variance32x32_sse2 = vpx_variance32x32_sse2; |
| 933 const VarianceMxNFunc variance32x16_sse2 = vpx_variance32x16_sse2; |
| 934 const VarianceMxNFunc variance16x32_sse2 = vpx_variance16x32_sse2; |
| 935 const VarianceMxNFunc variance16x16_sse2 = vpx_variance16x16_sse2; |
| 936 const VarianceMxNFunc variance16x8_sse2 = vpx_variance16x8_sse2; |
| 937 const VarianceMxNFunc variance8x16_sse2 = vpx_variance8x16_sse2; |
| 938 const VarianceMxNFunc variance8x8_sse2 = vpx_variance8x8_sse2; |
| 939 const VarianceMxNFunc variance8x4_sse2 = vpx_variance8x4_sse2; |
| 940 const VarianceMxNFunc variance4x8_sse2 = vpx_variance4x8_sse2; |
| 941 const VarianceMxNFunc variance4x4_sse2 = vpx_variance4x4_sse2; |
| 942 INSTANTIATE_TEST_CASE_P( |
| 943 SSE2, VpxVarianceTest, |
| 944 ::testing::Values(make_tuple(6, 6, variance64x64_sse2, 0), |
| 945 make_tuple(6, 5, variance64x32_sse2, 0), |
| 946 make_tuple(5, 6, variance32x64_sse2, 0), |
| 947 make_tuple(5, 5, variance32x32_sse2, 0), |
| 948 make_tuple(5, 4, variance32x16_sse2, 0), |
| 949 make_tuple(4, 5, variance16x32_sse2, 0), |
| 950 make_tuple(4, 4, variance16x16_sse2, 0), |
| 951 make_tuple(4, 3, variance16x8_sse2, 0), |
| 952 make_tuple(3, 4, variance8x16_sse2, 0), |
| 953 make_tuple(3, 3, variance8x8_sse2, 0), |
| 954 make_tuple(3, 2, variance8x4_sse2, 0), |
| 955 make_tuple(2, 3, variance4x8_sse2, 0), |
| 956 make_tuple(2, 2, variance4x4_sse2, 0))); |
| 957 #if CONFIG_VP9_HIGHBITDEPTH |
| 958 /* TODO(debargha): This test does not support the highbd version |
| 959 const VarianceMxNFunc highbd_12_mse16x16_sse2 = vpx_highbd_12_mse16x16_sse2; |
| 960 const VarianceMxNFunc highbd_12_mse16x8_sse2 = vpx_highbd_12_mse16x8_sse2; |
| 961 const VarianceMxNFunc highbd_12_mse8x16_sse2 = vpx_highbd_12_mse8x16_sse2; |
| 962 const VarianceMxNFunc highbd_12_mse8x8_sse2 = vpx_highbd_12_mse8x8_sse2; |
| 963 |
| 964 const VarianceMxNFunc highbd_10_mse16x16_sse2 = vpx_highbd_10_mse16x16_sse2; |
| 965 const VarianceMxNFunc highbd_10_mse16x8_sse2 = vpx_highbd_10_mse16x8_sse2; |
| 966 const VarianceMxNFunc highbd_10_mse8x16_sse2 = vpx_highbd_10_mse8x16_sse2; |
| 967 const VarianceMxNFunc highbd_10_mse8x8_sse2 = vpx_highbd_10_mse8x8_sse2; |
| 968 |
| 969 const VarianceMxNFunc highbd_8_mse16x16_sse2 = vpx_highbd_8_mse16x16_sse2; |
| 970 const VarianceMxNFunc highbd_8_mse16x8_sse2 = vpx_highbd_8_mse16x8_sse2; |
| 971 const VarianceMxNFunc highbd_8_mse8x16_sse2 = vpx_highbd_8_mse8x16_sse2; |
| 972 const VarianceMxNFunc highbd_8_mse8x8_sse2 = vpx_highbd_8_mse8x8_sse2; |
| 973 |
| 974 INSTANTIATE_TEST_CASE_P( |
| 975 SSE2, VpxHBDMseTest, ::testing::Values(make_tuple(4, 4, highbd_12_mse16x16_s
se2), |
| 976 make_tuple(4, 3, highbd_12_mse16x8_ss
e2), |
| 977 make_tuple(3, 4, highbd_12_mse8x16_ss
e2), |
| 978 make_tuple(3, 3, highbd_12_mse8x8_sse
2), |
| 979 make_tuple(4, 4, highbd_10_mse16x16_s
se2), |
| 980 make_tuple(4, 3, highbd_10_mse16x8_ss
e2), |
| 981 make_tuple(3, 4, highbd_10_mse8x16_ss
e2), |
| 982 make_tuple(3, 3, highbd_10_mse8x8_sse
2), |
| 983 make_tuple(4, 4, highbd_8_mse16x16_ss
e2), |
| 984 make_tuple(4, 3, highbd_8_mse16x8_sse
2), |
| 985 make_tuple(3, 4, highbd_8_mse8x16_sse
2), |
| 986 make_tuple(3, 3, highbd_8_mse8x8_sse2
))); |
| 987 */ |
| 988 |
| 989 const VarianceMxNFunc highbd_12_variance64x64_sse2 = |
| 990 vpx_highbd_12_variance64x64_sse2; |
| 991 const VarianceMxNFunc highbd_12_variance64x32_sse2 = |
| 992 vpx_highbd_12_variance64x32_sse2; |
| 993 const VarianceMxNFunc highbd_12_variance32x64_sse2 = |
| 994 vpx_highbd_12_variance32x64_sse2; |
| 995 const VarianceMxNFunc highbd_12_variance32x32_sse2 = |
| 996 vpx_highbd_12_variance32x32_sse2; |
| 997 const VarianceMxNFunc highbd_12_variance32x16_sse2 = |
| 998 vpx_highbd_12_variance32x16_sse2; |
| 999 const VarianceMxNFunc highbd_12_variance16x32_sse2 = |
| 1000 vpx_highbd_12_variance16x32_sse2; |
| 1001 const VarianceMxNFunc highbd_12_variance16x16_sse2 = |
| 1002 vpx_highbd_12_variance16x16_sse2; |
| 1003 const VarianceMxNFunc highbd_12_variance16x8_sse2 = |
| 1004 vpx_highbd_12_variance16x8_sse2; |
| 1005 const VarianceMxNFunc highbd_12_variance8x16_sse2 = |
| 1006 vpx_highbd_12_variance8x16_sse2; |
| 1007 const VarianceMxNFunc highbd_12_variance8x8_sse2 = |
| 1008 vpx_highbd_12_variance8x8_sse2; |
| 1009 const VarianceMxNFunc highbd_10_variance64x64_sse2 = |
| 1010 vpx_highbd_10_variance64x64_sse2; |
| 1011 const VarianceMxNFunc highbd_10_variance64x32_sse2 = |
| 1012 vpx_highbd_10_variance64x32_sse2; |
| 1013 const VarianceMxNFunc highbd_10_variance32x64_sse2 = |
| 1014 vpx_highbd_10_variance32x64_sse2; |
| 1015 const VarianceMxNFunc highbd_10_variance32x32_sse2 = |
| 1016 vpx_highbd_10_variance32x32_sse2; |
| 1017 const VarianceMxNFunc highbd_10_variance32x16_sse2 = |
| 1018 vpx_highbd_10_variance32x16_sse2; |
| 1019 const VarianceMxNFunc highbd_10_variance16x32_sse2 = |
| 1020 vpx_highbd_10_variance16x32_sse2; |
| 1021 const VarianceMxNFunc highbd_10_variance16x16_sse2 = |
| 1022 vpx_highbd_10_variance16x16_sse2; |
| 1023 const VarianceMxNFunc highbd_10_variance16x8_sse2 = |
| 1024 vpx_highbd_10_variance16x8_sse2; |
| 1025 const VarianceMxNFunc highbd_10_variance8x16_sse2 = |
| 1026 vpx_highbd_10_variance8x16_sse2; |
| 1027 const VarianceMxNFunc highbd_10_variance8x8_sse2 = |
| 1028 vpx_highbd_10_variance8x8_sse2; |
| 1029 const VarianceMxNFunc highbd_8_variance64x64_sse2 = |
| 1030 vpx_highbd_8_variance64x64_sse2; |
| 1031 const VarianceMxNFunc highbd_8_variance64x32_sse2 = |
| 1032 vpx_highbd_8_variance64x32_sse2; |
| 1033 const VarianceMxNFunc highbd_8_variance32x64_sse2 = |
| 1034 vpx_highbd_8_variance32x64_sse2; |
| 1035 const VarianceMxNFunc highbd_8_variance32x32_sse2 = |
| 1036 vpx_highbd_8_variance32x32_sse2; |
| 1037 const VarianceMxNFunc highbd_8_variance32x16_sse2 = |
| 1038 vpx_highbd_8_variance32x16_sse2; |
| 1039 const VarianceMxNFunc highbd_8_variance16x32_sse2 = |
| 1040 vpx_highbd_8_variance16x32_sse2; |
| 1041 const VarianceMxNFunc highbd_8_variance16x16_sse2 = |
| 1042 vpx_highbd_8_variance16x16_sse2; |
| 1043 const VarianceMxNFunc highbd_8_variance16x8_sse2 = |
| 1044 vpx_highbd_8_variance16x8_sse2; |
| 1045 const VarianceMxNFunc highbd_8_variance8x16_sse2 = |
| 1046 vpx_highbd_8_variance8x16_sse2; |
| 1047 const VarianceMxNFunc highbd_8_variance8x8_sse2 = |
| 1048 vpx_highbd_8_variance8x8_sse2; |
| 1049 |
| 1050 INSTANTIATE_TEST_CASE_P( |
| 1051 SSE2, VpxHBDVarianceTest, |
| 1052 ::testing::Values(make_tuple(6, 6, highbd_12_variance64x64_sse2, 12), |
| 1053 make_tuple(6, 5, highbd_12_variance64x32_sse2, 12), |
| 1054 make_tuple(5, 6, highbd_12_variance32x64_sse2, 12), |
| 1055 make_tuple(5, 5, highbd_12_variance32x32_sse2, 12), |
| 1056 make_tuple(5, 4, highbd_12_variance32x16_sse2, 12), |
| 1057 make_tuple(4, 5, highbd_12_variance16x32_sse2, 12), |
| 1058 make_tuple(4, 4, highbd_12_variance16x16_sse2, 12), |
| 1059 make_tuple(4, 3, highbd_12_variance16x8_sse2, 12), |
| 1060 make_tuple(3, 4, highbd_12_variance8x16_sse2, 12), |
| 1061 make_tuple(3, 3, highbd_12_variance8x8_sse2, 12), |
| 1062 make_tuple(6, 6, highbd_10_variance64x64_sse2, 10), |
| 1063 make_tuple(6, 5, highbd_10_variance64x32_sse2, 10), |
| 1064 make_tuple(5, 6, highbd_10_variance32x64_sse2, 10), |
| 1065 make_tuple(5, 5, highbd_10_variance32x32_sse2, 10), |
| 1066 make_tuple(5, 4, highbd_10_variance32x16_sse2, 10), |
| 1067 make_tuple(4, 5, highbd_10_variance16x32_sse2, 10), |
| 1068 make_tuple(4, 4, highbd_10_variance16x16_sse2, 10), |
| 1069 make_tuple(4, 3, highbd_10_variance16x8_sse2, 10), |
| 1070 make_tuple(3, 4, highbd_10_variance8x16_sse2, 10), |
| 1071 make_tuple(3, 3, highbd_10_variance8x8_sse2, 10), |
| 1072 make_tuple(6, 6, highbd_8_variance64x64_sse2, 8), |
| 1073 make_tuple(6, 5, highbd_8_variance64x32_sse2, 8), |
| 1074 make_tuple(5, 6, highbd_8_variance32x64_sse2, 8), |
| 1075 make_tuple(5, 5, highbd_8_variance32x32_sse2, 8), |
| 1076 make_tuple(5, 4, highbd_8_variance32x16_sse2, 8), |
| 1077 make_tuple(4, 5, highbd_8_variance16x32_sse2, 8), |
| 1078 make_tuple(4, 4, highbd_8_variance16x16_sse2, 8), |
| 1079 make_tuple(4, 3, highbd_8_variance16x8_sse2, 8), |
| 1080 make_tuple(3, 4, highbd_8_variance8x16_sse2, 8), |
| 1081 make_tuple(3, 3, highbd_8_variance8x8_sse2, 8))); |
| 1082 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 1083 #endif // HAVE_SSE2 |
| 1084 |
| 1085 #if CONFIG_VP9_ENCODER |
| 906 typedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceTest; | 1086 typedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceTest; |
| 907 typedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t> VP9SubpelAvgVarianceTest; | 1087 typedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t> VP9SubpelAvgVarianceTest; |
| 908 | 1088 |
| 909 TEST_P(VP9VarianceTest, Zero) { ZeroTest(); } | |
| 910 TEST_P(VP9VarianceTest, Ref) { RefTest(); } | |
| 911 TEST_P(VP9VarianceTest, RefStride) { RefStrideTest(); } | |
| 912 TEST_P(VP9SubpelVarianceTest, Ref) { RefTest(); } | 1089 TEST_P(VP9SubpelVarianceTest, Ref) { RefTest(); } |
| 913 TEST_P(VP9SubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); } | 1090 TEST_P(VP9SubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); } |
| 914 TEST_P(VP9SubpelAvgVarianceTest, Ref) { RefTest(); } | 1091 TEST_P(VP9SubpelAvgVarianceTest, Ref) { RefTest(); } |
| 915 TEST_P(VP9VarianceTest, OneQuarter) { OneQuarterTest(); } | |
| 916 | 1092 |
| 917 #if CONFIG_VP9_HIGHBITDEPTH | 1093 #if CONFIG_VP9_HIGHBITDEPTH |
| 918 typedef VarianceTest<vp9_variance_fn_t> VP9VarianceHighTest; | |
| 919 typedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceHighTest; | 1094 typedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceHighTest; |
| 920 typedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t> | 1095 typedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t> |
| 921 VP9SubpelAvgVarianceHighTest; | 1096 VP9SubpelAvgVarianceHighTest; |
| 922 | 1097 |
| 923 TEST_P(VP9VarianceHighTest, Zero) { ZeroTest(); } | |
| 924 TEST_P(VP9VarianceHighTest, Ref) { RefTest(); } | |
| 925 TEST_P(VP9VarianceHighTest, RefStride) { RefStrideTest(); } | |
| 926 TEST_P(VP9SubpelVarianceHighTest, Ref) { RefTest(); } | 1098 TEST_P(VP9SubpelVarianceHighTest, Ref) { RefTest(); } |
| 927 TEST_P(VP9SubpelVarianceHighTest, ExtremeRef) { ExtremeRefTest(); } | 1099 TEST_P(VP9SubpelVarianceHighTest, ExtremeRef) { ExtremeRefTest(); } |
| 928 TEST_P(VP9SubpelAvgVarianceHighTest, Ref) { RefTest(); } | 1100 TEST_P(VP9SubpelAvgVarianceHighTest, Ref) { RefTest(); } |
| 929 TEST_P(VP9VarianceHighTest, OneQuarter) { OneQuarterTest(); } | |
| 930 #endif // CONFIG_VP9_HIGHBITDEPTH | 1101 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 931 | 1102 |
| 932 const vp9_variance_fn_t variance4x4_c = vp9_variance4x4_c; | |
| 933 const vp9_variance_fn_t variance4x8_c = vp9_variance4x8_c; | |
| 934 const vp9_variance_fn_t variance8x4_c = vp9_variance8x4_c; | |
| 935 const vp9_variance_fn_t variance8x8_c = vp9_variance8x8_c; | |
| 936 const vp9_variance_fn_t variance8x16_c = vp9_variance8x16_c; | |
| 937 const vp9_variance_fn_t variance16x8_c = vp9_variance16x8_c; | |
| 938 const vp9_variance_fn_t variance16x16_c = vp9_variance16x16_c; | |
| 939 const vp9_variance_fn_t variance16x32_c = vp9_variance16x32_c; | |
| 940 const vp9_variance_fn_t variance32x16_c = vp9_variance32x16_c; | |
| 941 const vp9_variance_fn_t variance32x32_c = vp9_variance32x32_c; | |
| 942 const vp9_variance_fn_t variance32x64_c = vp9_variance32x64_c; | |
| 943 const vp9_variance_fn_t variance64x32_c = vp9_variance64x32_c; | |
| 944 const vp9_variance_fn_t variance64x64_c = vp9_variance64x64_c; | |
| 945 INSTANTIATE_TEST_CASE_P( | |
| 946 C, VP9VarianceTest, | |
| 947 ::testing::Values(make_tuple(2, 2, variance4x4_c, 0), | |
| 948 make_tuple(2, 3, variance4x8_c, 0), | |
| 949 make_tuple(3, 2, variance8x4_c, 0), | |
| 950 make_tuple(3, 3, variance8x8_c, 0), | |
| 951 make_tuple(3, 4, variance8x16_c, 0), | |
| 952 make_tuple(4, 3, variance16x8_c, 0), | |
| 953 make_tuple(4, 4, variance16x16_c, 0), | |
| 954 make_tuple(4, 5, variance16x32_c, 0), | |
| 955 make_tuple(5, 4, variance32x16_c, 0), | |
| 956 make_tuple(5, 5, variance32x32_c, 0), | |
| 957 make_tuple(5, 6, variance32x64_c, 0), | |
| 958 make_tuple(6, 5, variance64x32_c, 0), | |
| 959 make_tuple(6, 6, variance64x64_c, 0))); | |
| 960 #if CONFIG_VP9_HIGHBITDEPTH | |
| 961 const vp9_variance_fn_t highbd_10_variance4x4_c = vp9_highbd_10_variance4x4_c; | |
| 962 const vp9_variance_fn_t highbd_10_variance4x8_c = vp9_highbd_10_variance4x8_c; | |
| 963 const vp9_variance_fn_t highbd_10_variance8x4_c = vp9_highbd_10_variance8x4_c; | |
| 964 const vp9_variance_fn_t highbd_10_variance8x8_c = vp9_highbd_10_variance8x8_c; | |
| 965 const vp9_variance_fn_t highbd_10_variance8x16_c = vp9_highbd_10_variance8x16_c; | |
| 966 const vp9_variance_fn_t highbd_10_variance16x8_c = vp9_highbd_10_variance16x8_c; | |
| 967 const vp9_variance_fn_t highbd_10_variance16x16_c = | |
| 968 vp9_highbd_10_variance16x16_c; | |
| 969 const vp9_variance_fn_t highbd_10_variance16x32_c = | |
| 970 vp9_highbd_10_variance16x32_c; | |
| 971 const vp9_variance_fn_t highbd_10_variance32x16_c = | |
| 972 vp9_highbd_10_variance32x16_c; | |
| 973 const vp9_variance_fn_t highbd_10_variance32x32_c = | |
| 974 vp9_highbd_10_variance32x32_c; | |
| 975 const vp9_variance_fn_t highbd_10_variance32x64_c = | |
| 976 vp9_highbd_10_variance32x64_c; | |
| 977 const vp9_variance_fn_t highbd_10_variance64x32_c = | |
| 978 vp9_highbd_10_variance64x32_c; | |
| 979 const vp9_variance_fn_t highbd_10_variance64x64_c = | |
| 980 vp9_highbd_10_variance64x64_c; | |
| 981 const vp9_variance_fn_t highbd_12_variance4x4_c = vp9_highbd_12_variance4x4_c; | |
| 982 const vp9_variance_fn_t highbd_12_variance4x8_c = vp9_highbd_12_variance4x8_c; | |
| 983 const vp9_variance_fn_t highbd_12_variance8x4_c = vp9_highbd_12_variance8x4_c; | |
| 984 const vp9_variance_fn_t highbd_12_variance8x8_c = vp9_highbd_12_variance8x8_c; | |
| 985 const vp9_variance_fn_t highbd_12_variance8x16_c = vp9_highbd_12_variance8x16_c; | |
| 986 const vp9_variance_fn_t highbd_12_variance16x8_c = vp9_highbd_12_variance16x8_c; | |
| 987 const vp9_variance_fn_t highbd_12_variance16x16_c = | |
| 988 vp9_highbd_12_variance16x16_c; | |
| 989 const vp9_variance_fn_t highbd_12_variance16x32_c = | |
| 990 vp9_highbd_12_variance16x32_c; | |
| 991 const vp9_variance_fn_t highbd_12_variance32x16_c = | |
| 992 vp9_highbd_12_variance32x16_c; | |
| 993 const vp9_variance_fn_t highbd_12_variance32x32_c = | |
| 994 vp9_highbd_12_variance32x32_c; | |
| 995 const vp9_variance_fn_t highbd_12_variance32x64_c = | |
| 996 vp9_highbd_12_variance32x64_c; | |
| 997 const vp9_variance_fn_t highbd_12_variance64x32_c = | |
| 998 vp9_highbd_12_variance64x32_c; | |
| 999 const vp9_variance_fn_t highbd_12_variance64x64_c = | |
| 1000 vp9_highbd_12_variance64x64_c; | |
| 1001 const vp9_variance_fn_t highbd_variance4x4_c = vp9_highbd_variance4x4_c; | |
| 1002 const vp9_variance_fn_t highbd_variance4x8_c = vp9_highbd_variance4x8_c; | |
| 1003 const vp9_variance_fn_t highbd_variance8x4_c = vp9_highbd_variance8x4_c; | |
| 1004 const vp9_variance_fn_t highbd_variance8x8_c = vp9_highbd_variance8x8_c; | |
| 1005 const vp9_variance_fn_t highbd_variance8x16_c = vp9_highbd_variance8x16_c; | |
| 1006 const vp9_variance_fn_t highbd_variance16x8_c = vp9_highbd_variance16x8_c; | |
| 1007 const vp9_variance_fn_t highbd_variance16x16_c = vp9_highbd_variance16x16_c; | |
| 1008 const vp9_variance_fn_t highbd_variance16x32_c = vp9_highbd_variance16x32_c; | |
| 1009 const vp9_variance_fn_t highbd_variance32x16_c = vp9_highbd_variance32x16_c; | |
| 1010 const vp9_variance_fn_t highbd_variance32x32_c = vp9_highbd_variance32x32_c; | |
| 1011 const vp9_variance_fn_t highbd_variance32x64_c = vp9_highbd_variance32x64_c; | |
| 1012 const vp9_variance_fn_t highbd_variance64x32_c = vp9_highbd_variance64x32_c; | |
| 1013 const vp9_variance_fn_t highbd_variance64x64_c = vp9_highbd_variance64x64_c; | |
| 1014 INSTANTIATE_TEST_CASE_P( | |
| 1015 C, VP9VarianceHighTest, | |
| 1016 ::testing::Values(make_tuple(2, 2, highbd_10_variance4x4_c, 10), | |
| 1017 make_tuple(2, 3, highbd_10_variance4x8_c, 10), | |
| 1018 make_tuple(3, 2, highbd_10_variance8x4_c, 10), | |
| 1019 make_tuple(3, 3, highbd_10_variance8x8_c, 10), | |
| 1020 make_tuple(3, 4, highbd_10_variance8x16_c, 10), | |
| 1021 make_tuple(4, 3, highbd_10_variance16x8_c, 10), | |
| 1022 make_tuple(4, 4, highbd_10_variance16x16_c, 10), | |
| 1023 make_tuple(4, 5, highbd_10_variance16x32_c, 10), | |
| 1024 make_tuple(5, 4, highbd_10_variance32x16_c, 10), | |
| 1025 make_tuple(5, 5, highbd_10_variance32x32_c, 10), | |
| 1026 make_tuple(5, 6, highbd_10_variance32x64_c, 10), | |
| 1027 make_tuple(6, 5, highbd_10_variance64x32_c, 10), | |
| 1028 make_tuple(6, 6, highbd_10_variance64x64_c, 10), | |
| 1029 make_tuple(2, 2, highbd_12_variance4x4_c, 12), | |
| 1030 make_tuple(2, 3, highbd_12_variance4x8_c, 12), | |
| 1031 make_tuple(3, 2, highbd_12_variance8x4_c, 12), | |
| 1032 make_tuple(3, 3, highbd_12_variance8x8_c, 12), | |
| 1033 make_tuple(3, 4, highbd_12_variance8x16_c, 12), | |
| 1034 make_tuple(4, 3, highbd_12_variance16x8_c, 12), | |
| 1035 make_tuple(4, 4, highbd_12_variance16x16_c, 12), | |
| 1036 make_tuple(4, 5, highbd_12_variance16x32_c, 12), | |
| 1037 make_tuple(5, 4, highbd_12_variance32x16_c, 12), | |
| 1038 make_tuple(5, 5, highbd_12_variance32x32_c, 12), | |
| 1039 make_tuple(5, 6, highbd_12_variance32x64_c, 12), | |
| 1040 make_tuple(6, 5, highbd_12_variance64x32_c, 12), | |
| 1041 make_tuple(6, 6, highbd_12_variance64x64_c, 12), | |
| 1042 make_tuple(2, 2, highbd_variance4x4_c, 8), | |
| 1043 make_tuple(2, 3, highbd_variance4x8_c, 8), | |
| 1044 make_tuple(3, 2, highbd_variance8x4_c, 8), | |
| 1045 make_tuple(3, 3, highbd_variance8x8_c, 8), | |
| 1046 make_tuple(3, 4, highbd_variance8x16_c, 8), | |
| 1047 make_tuple(4, 3, highbd_variance16x8_c, 8), | |
| 1048 make_tuple(4, 4, highbd_variance16x16_c, 8), | |
| 1049 make_tuple(4, 5, highbd_variance16x32_c, 8), | |
| 1050 make_tuple(5, 4, highbd_variance32x16_c, 8), | |
| 1051 make_tuple(5, 5, highbd_variance32x32_c, 8), | |
| 1052 make_tuple(5, 6, highbd_variance32x64_c, 8), | |
| 1053 make_tuple(6, 5, highbd_variance64x32_c, 8), | |
| 1054 make_tuple(6, 6, highbd_variance64x64_c, 8))); | |
| 1055 #endif // CONFIG_VP9_HIGHBITDEPTH | |
| 1056 const vp9_subpixvariance_fn_t subpel_variance4x4_c = | 1103 const vp9_subpixvariance_fn_t subpel_variance4x4_c = |
| 1057 vp9_sub_pixel_variance4x4_c; | 1104 vp9_sub_pixel_variance4x4_c; |
| 1058 const vp9_subpixvariance_fn_t subpel_variance4x8_c = | 1105 const vp9_subpixvariance_fn_t subpel_variance4x8_c = |
| 1059 vp9_sub_pixel_variance4x8_c; | 1106 vp9_sub_pixel_variance4x8_c; |
| 1060 const vp9_subpixvariance_fn_t subpel_variance8x4_c = | 1107 const vp9_subpixvariance_fn_t subpel_variance8x4_c = |
| 1061 vp9_sub_pixel_variance8x4_c; | 1108 vp9_sub_pixel_variance8x4_c; |
| 1062 const vp9_subpixvariance_fn_t subpel_variance8x8_c = | 1109 const vp9_subpixvariance_fn_t subpel_variance8x8_c = |
| 1063 vp9_sub_pixel_variance8x8_c; | 1110 vp9_sub_pixel_variance8x8_c; |
| 1064 const vp9_subpixvariance_fn_t subpel_variance8x16_c = | 1111 const vp9_subpixvariance_fn_t subpel_variance8x16_c = |
| 1065 vp9_sub_pixel_variance8x16_c; | 1112 vp9_sub_pixel_variance8x16_c; |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1369 make_tuple(3, 4, highbd_subpel_avg_variance8x16_c, 8), | 1416 make_tuple(3, 4, highbd_subpel_avg_variance8x16_c, 8), |
| 1370 make_tuple(4, 3, highbd_subpel_avg_variance16x8_c, 8), | 1417 make_tuple(4, 3, highbd_subpel_avg_variance16x8_c, 8), |
| 1371 make_tuple(4, 4, highbd_subpel_avg_variance16x16_c, 8), | 1418 make_tuple(4, 4, highbd_subpel_avg_variance16x16_c, 8), |
| 1372 make_tuple(4, 5, highbd_subpel_avg_variance16x32_c, 8), | 1419 make_tuple(4, 5, highbd_subpel_avg_variance16x32_c, 8), |
| 1373 make_tuple(5, 4, highbd_subpel_avg_variance32x16_c, 8), | 1420 make_tuple(5, 4, highbd_subpel_avg_variance32x16_c, 8), |
| 1374 make_tuple(5, 5, highbd_subpel_avg_variance32x32_c, 8), | 1421 make_tuple(5, 5, highbd_subpel_avg_variance32x32_c, 8), |
| 1375 make_tuple(5, 6, highbd_subpel_avg_variance32x64_c, 8), | 1422 make_tuple(5, 6, highbd_subpel_avg_variance32x64_c, 8), |
| 1376 make_tuple(6, 5, highbd_subpel_avg_variance64x32_c, 8), | 1423 make_tuple(6, 5, highbd_subpel_avg_variance64x32_c, 8), |
| 1377 make_tuple(6, 6, highbd_subpel_avg_variance64x64_c, 8))); | 1424 make_tuple(6, 6, highbd_subpel_avg_variance64x64_c, 8))); |
| 1378 #endif // CONFIG_VP9_HIGHBITDEPTH | 1425 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 1426 #endif // CONFIG_VP9_ENCODER |
| 1379 | 1427 |
| 1428 #if CONFIG_VP9_ENCODER |
| 1380 #if HAVE_SSE2 | 1429 #if HAVE_SSE2 |
| 1381 #if CONFIG_USE_X86INC | 1430 #if CONFIG_USE_X86INC |
| 1382 INSTANTIATE_TEST_CASE_P(SSE2, SumOfSquaresTest, | |
| 1383 ::testing::Values(vp9_get_mb_ss_sse2)); | |
| 1384 | |
| 1385 const vp9_variance_fn_t variance4x4_sse2 = vp9_variance4x4_sse2; | |
| 1386 const vp9_variance_fn_t variance4x8_sse2 = vp9_variance4x8_sse2; | |
| 1387 const vp9_variance_fn_t variance8x4_sse2 = vp9_variance8x4_sse2; | |
| 1388 const vp9_variance_fn_t variance8x8_sse2 = vp9_variance8x8_sse2; | |
| 1389 const vp9_variance_fn_t variance8x16_sse2 = vp9_variance8x16_sse2; | |
| 1390 const vp9_variance_fn_t variance16x8_sse2 = vp9_variance16x8_sse2; | |
| 1391 const vp9_variance_fn_t variance16x16_sse2 = vp9_variance16x16_sse2; | |
| 1392 const vp9_variance_fn_t variance16x32_sse2 = vp9_variance16x32_sse2; | |
| 1393 const vp9_variance_fn_t variance32x16_sse2 = vp9_variance32x16_sse2; | |
| 1394 const vp9_variance_fn_t variance32x32_sse2 = vp9_variance32x32_sse2; | |
| 1395 const vp9_variance_fn_t variance32x64_sse2 = vp9_variance32x64_sse2; | |
| 1396 const vp9_variance_fn_t variance64x32_sse2 = vp9_variance64x32_sse2; | |
| 1397 const vp9_variance_fn_t variance64x64_sse2 = vp9_variance64x64_sse2; | |
| 1398 INSTANTIATE_TEST_CASE_P( | |
| 1399 SSE2, VP9VarianceTest, | |
| 1400 ::testing::Values(make_tuple(2, 2, variance4x4_sse2, 0), | |
| 1401 make_tuple(2, 3, variance4x8_sse2, 0), | |
| 1402 make_tuple(3, 2, variance8x4_sse2, 0), | |
| 1403 make_tuple(3, 3, variance8x8_sse2, 0), | |
| 1404 make_tuple(3, 4, variance8x16_sse2, 0), | |
| 1405 make_tuple(4, 3, variance16x8_sse2, 0), | |
| 1406 make_tuple(4, 4, variance16x16_sse2, 0), | |
| 1407 make_tuple(4, 5, variance16x32_sse2, 0), | |
| 1408 make_tuple(5, 4, variance32x16_sse2, 0), | |
| 1409 make_tuple(5, 5, variance32x32_sse2, 0), | |
| 1410 make_tuple(5, 6, variance32x64_sse2, 0), | |
| 1411 make_tuple(6, 5, variance64x32_sse2, 0), | |
| 1412 make_tuple(6, 6, variance64x64_sse2, 0))); | |
| 1413 const vp9_subpixvariance_fn_t subpel_variance4x4_sse = | 1431 const vp9_subpixvariance_fn_t subpel_variance4x4_sse = |
| 1414 vp9_sub_pixel_variance4x4_sse; | 1432 vp9_sub_pixel_variance4x4_sse; |
| 1415 const vp9_subpixvariance_fn_t subpel_variance4x8_sse = | 1433 const vp9_subpixvariance_fn_t subpel_variance4x8_sse = |
| 1416 vp9_sub_pixel_variance4x8_sse; | 1434 vp9_sub_pixel_variance4x8_sse; |
| 1417 const vp9_subpixvariance_fn_t subpel_variance8x4_sse2 = | 1435 const vp9_subpixvariance_fn_t subpel_variance8x4_sse2 = |
| 1418 vp9_sub_pixel_variance8x4_sse2; | 1436 vp9_sub_pixel_variance8x4_sse2; |
| 1419 const vp9_subpixvariance_fn_t subpel_variance8x8_sse2 = | 1437 const vp9_subpixvariance_fn_t subpel_variance8x8_sse2 = |
| 1420 vp9_sub_pixel_variance8x8_sse2; | 1438 vp9_sub_pixel_variance8x8_sse2; |
| 1421 const vp9_subpixvariance_fn_t subpel_variance8x16_sse2 = | 1439 const vp9_subpixvariance_fn_t subpel_variance8x16_sse2 = |
| 1422 vp9_sub_pixel_variance8x16_sse2; | 1440 vp9_sub_pixel_variance8x16_sse2; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1486 make_tuple(3, 4, subpel_avg_variance8x16_sse2, 0), | 1504 make_tuple(3, 4, subpel_avg_variance8x16_sse2, 0), |
| 1487 make_tuple(4, 3, subpel_avg_variance16x8_sse2, 0), | 1505 make_tuple(4, 3, subpel_avg_variance16x8_sse2, 0), |
| 1488 make_tuple(4, 4, subpel_avg_variance16x16_sse2, 0), | 1506 make_tuple(4, 4, subpel_avg_variance16x16_sse2, 0), |
| 1489 make_tuple(4, 5, subpel_avg_variance16x32_sse2, 0), | 1507 make_tuple(4, 5, subpel_avg_variance16x32_sse2, 0), |
| 1490 make_tuple(5, 4, subpel_avg_variance32x16_sse2, 0), | 1508 make_tuple(5, 4, subpel_avg_variance32x16_sse2, 0), |
| 1491 make_tuple(5, 5, subpel_avg_variance32x32_sse2, 0), | 1509 make_tuple(5, 5, subpel_avg_variance32x32_sse2, 0), |
| 1492 make_tuple(5, 6, subpel_avg_variance32x64_sse2, 0), | 1510 make_tuple(5, 6, subpel_avg_variance32x64_sse2, 0), |
| 1493 make_tuple(6, 5, subpel_avg_variance64x32_sse2, 0), | 1511 make_tuple(6, 5, subpel_avg_variance64x32_sse2, 0), |
| 1494 make_tuple(6, 6, subpel_avg_variance64x64_sse2, 0))); | 1512 make_tuple(6, 6, subpel_avg_variance64x64_sse2, 0))); |
| 1495 #if CONFIG_VP9_HIGHBITDEPTH | 1513 #if CONFIG_VP9_HIGHBITDEPTH |
| 1496 const vp9_variance_fn_t highbd_variance8x8_sse2 = vp9_highbd_variance8x8_sse2; | |
| 1497 const vp9_variance_fn_t highbd_10_variance8x8_sse2 = | |
| 1498 vp9_highbd_10_variance8x8_sse2; | |
| 1499 const vp9_variance_fn_t highbd_12_variance8x8_sse2 = | |
| 1500 vp9_highbd_12_variance8x8_sse2; | |
| 1501 const vp9_variance_fn_t highbd_variance8x16_sse2 = vp9_highbd_variance8x16_sse2; | |
| 1502 const vp9_variance_fn_t highbd_10_variance8x16_sse2 = | |
| 1503 vp9_highbd_10_variance8x16_sse2; | |
| 1504 const vp9_variance_fn_t highbd_12_variance8x16_sse2 = | |
| 1505 vp9_highbd_12_variance8x16_sse2; | |
| 1506 const vp9_variance_fn_t highbd_variance16x8_sse2 = | |
| 1507 vp9_highbd_variance16x8_sse2; | |
| 1508 const vp9_variance_fn_t highbd_10_variance16x8_sse2 = | |
| 1509 vp9_highbd_10_variance16x8_sse2; | |
| 1510 const vp9_variance_fn_t highbd_12_variance16x8_sse2 = | |
| 1511 vp9_highbd_12_variance16x8_sse2; | |
| 1512 const vp9_variance_fn_t highbd_variance16x16_sse2 = | |
| 1513 vp9_highbd_variance16x16_sse2; | |
| 1514 const vp9_variance_fn_t highbd_10_variance16x16_sse2 = | |
| 1515 vp9_highbd_10_variance16x16_sse2; | |
| 1516 const vp9_variance_fn_t highbd_12_variance16x16_sse2 = | |
| 1517 vp9_highbd_12_variance16x16_sse2; | |
| 1518 const vp9_variance_fn_t highbd_variance16x32_sse2 = | |
| 1519 vp9_highbd_variance16x32_sse2; | |
| 1520 const vp9_variance_fn_t highbd_10_variance16x32_sse2 = | |
| 1521 vp9_highbd_10_variance16x32_sse2; | |
| 1522 const vp9_variance_fn_t highbd_12_variance16x32_sse2 = | |
| 1523 vp9_highbd_12_variance16x32_sse2; | |
| 1524 const vp9_variance_fn_t highbd_variance32x16_sse2 = | |
| 1525 vp9_highbd_variance32x16_sse2; | |
| 1526 const vp9_variance_fn_t highbd_10_variance32x16_sse2 = | |
| 1527 vp9_highbd_10_variance32x16_sse2; | |
| 1528 const vp9_variance_fn_t highbd_12_variance32x16_sse2 = | |
| 1529 vp9_highbd_12_variance32x16_sse2; | |
| 1530 const vp9_variance_fn_t highbd_variance32x32_sse2 = | |
| 1531 vp9_highbd_variance32x32_sse2; | |
| 1532 const vp9_variance_fn_t highbd_10_variance32x32_sse2 = | |
| 1533 vp9_highbd_10_variance32x32_sse2; | |
| 1534 const vp9_variance_fn_t highbd_12_variance32x32_sse2 = | |
| 1535 vp9_highbd_12_variance32x32_sse2; | |
| 1536 const vp9_variance_fn_t highbd_variance32x64_sse2 = | |
| 1537 vp9_highbd_variance32x64_sse2; | |
| 1538 const vp9_variance_fn_t highbd_10_variance32x64_sse2 = | |
| 1539 vp9_highbd_10_variance32x64_sse2; | |
| 1540 const vp9_variance_fn_t highbd_12_variance32x64_sse2 = | |
| 1541 vp9_highbd_12_variance32x64_sse2; | |
| 1542 const vp9_variance_fn_t highbd_variance64x32_sse2 = | |
| 1543 vp9_highbd_variance64x32_sse2; | |
| 1544 const vp9_variance_fn_t highbd_10_variance64x32_sse2 = | |
| 1545 vp9_highbd_10_variance64x32_sse2; | |
| 1546 const vp9_variance_fn_t highbd_12_variance64x32_sse2 = | |
| 1547 vp9_highbd_12_variance64x32_sse2; | |
| 1548 const vp9_variance_fn_t highbd_variance64x64_sse2 = | |
| 1549 vp9_highbd_variance64x64_sse2; | |
| 1550 const vp9_variance_fn_t highbd_10_variance64x64_sse2 = | |
| 1551 vp9_highbd_10_variance64x64_sse2; | |
| 1552 const vp9_variance_fn_t highbd_12_variance64x64_sse2 = | |
| 1553 vp9_highbd_12_variance64x64_sse2; | |
| 1554 INSTANTIATE_TEST_CASE_P( | |
| 1555 SSE2, VP9VarianceHighTest, | |
| 1556 ::testing::Values(make_tuple(3, 3, highbd_10_variance8x8_sse2, 10), | |
| 1557 make_tuple(3, 4, highbd_10_variance8x16_sse2, 10), | |
| 1558 make_tuple(4, 3, highbd_10_variance16x8_sse2, 10), | |
| 1559 make_tuple(4, 4, highbd_10_variance16x16_sse2, 10), | |
| 1560 make_tuple(4, 5, highbd_10_variance16x32_sse2, 10), | |
| 1561 make_tuple(5, 4, highbd_10_variance32x16_sse2, 10), | |
| 1562 make_tuple(5, 5, highbd_10_variance32x32_sse2, 10), | |
| 1563 make_tuple(5, 6, highbd_10_variance32x64_sse2, 10), | |
| 1564 make_tuple(6, 5, highbd_10_variance64x32_sse2, 10), | |
| 1565 make_tuple(6, 6, highbd_10_variance64x64_sse2, 10), | |
| 1566 make_tuple(3, 3, highbd_12_variance8x8_sse2, 12), | |
| 1567 make_tuple(3, 4, highbd_12_variance8x16_sse2, 12), | |
| 1568 make_tuple(4, 3, highbd_12_variance16x8_sse2, 12), | |
| 1569 make_tuple(4, 4, highbd_12_variance16x16_sse2, 12), | |
| 1570 make_tuple(4, 5, highbd_12_variance16x32_sse2, 12), | |
| 1571 make_tuple(5, 4, highbd_12_variance32x16_sse2, 12), | |
| 1572 make_tuple(5, 5, highbd_12_variance32x32_sse2, 12), | |
| 1573 make_tuple(5, 6, highbd_12_variance32x64_sse2, 12), | |
| 1574 make_tuple(6, 5, highbd_12_variance64x32_sse2, 12), | |
| 1575 make_tuple(6, 6, highbd_12_variance64x64_sse2, 12), | |
| 1576 make_tuple(3, 3, highbd_variance8x8_sse2, 8), | |
| 1577 make_tuple(3, 4, highbd_variance8x16_sse2, 8), | |
| 1578 make_tuple(4, 3, highbd_variance16x8_sse2, 8), | |
| 1579 make_tuple(4, 4, highbd_variance16x16_sse2, 8), | |
| 1580 make_tuple(4, 5, highbd_variance16x32_sse2, 8), | |
| 1581 make_tuple(5, 4, highbd_variance32x16_sse2, 8), | |
| 1582 make_tuple(5, 5, highbd_variance32x32_sse2, 8), | |
| 1583 make_tuple(5, 6, highbd_variance32x64_sse2, 8), | |
| 1584 make_tuple(6, 5, highbd_variance64x32_sse2, 8), | |
| 1585 make_tuple(6, 6, highbd_variance64x64_sse2, 8))); | |
| 1586 const vp9_subpixvariance_fn_t highbd_subpel_variance8x4_sse2 = | 1514 const vp9_subpixvariance_fn_t highbd_subpel_variance8x4_sse2 = |
| 1587 vp9_highbd_sub_pixel_variance8x4_sse2; | 1515 vp9_highbd_sub_pixel_variance8x4_sse2; |
| 1588 const vp9_subpixvariance_fn_t highbd_subpel_variance8x8_sse2 = | 1516 const vp9_subpixvariance_fn_t highbd_subpel_variance8x8_sse2 = |
| 1589 vp9_highbd_sub_pixel_variance8x8_sse2; | 1517 vp9_highbd_sub_pixel_variance8x8_sse2; |
| 1590 const vp9_subpixvariance_fn_t highbd_subpel_variance8x16_sse2 = | 1518 const vp9_subpixvariance_fn_t highbd_subpel_variance8x16_sse2 = |
| 1591 vp9_highbd_sub_pixel_variance8x16_sse2; | 1519 vp9_highbd_sub_pixel_variance8x16_sse2; |
| 1592 const vp9_subpixvariance_fn_t highbd_subpel_variance16x8_sse2 = | 1520 const vp9_subpixvariance_fn_t highbd_subpel_variance16x8_sse2 = |
| 1593 vp9_highbd_sub_pixel_variance16x8_sse2; | 1521 vp9_highbd_sub_pixel_variance16x8_sse2; |
| 1594 const vp9_subpixvariance_fn_t highbd_subpel_variance16x16_sse2 = | 1522 const vp9_subpixvariance_fn_t highbd_subpel_variance16x16_sse2 = |
| 1595 vp9_highbd_sub_pixel_variance16x16_sse2; | 1523 vp9_highbd_sub_pixel_variance16x16_sse2; |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1782 make_tuple(4, 4, highbd_subpel_avg_variance16x16_sse2, 8), | 1710 make_tuple(4, 4, highbd_subpel_avg_variance16x16_sse2, 8), |
| 1783 make_tuple(4, 5, highbd_subpel_avg_variance16x32_sse2, 8), | 1711 make_tuple(4, 5, highbd_subpel_avg_variance16x32_sse2, 8), |
| 1784 make_tuple(5, 4, highbd_subpel_avg_variance32x16_sse2, 8), | 1712 make_tuple(5, 4, highbd_subpel_avg_variance32x16_sse2, 8), |
| 1785 make_tuple(5, 5, highbd_subpel_avg_variance32x32_sse2, 8), | 1713 make_tuple(5, 5, highbd_subpel_avg_variance32x32_sse2, 8), |
| 1786 make_tuple(5, 6, highbd_subpel_avg_variance32x64_sse2, 8), | 1714 make_tuple(5, 6, highbd_subpel_avg_variance32x64_sse2, 8), |
| 1787 make_tuple(6, 5, highbd_subpel_avg_variance64x32_sse2, 8), | 1715 make_tuple(6, 5, highbd_subpel_avg_variance64x32_sse2, 8), |
| 1788 make_tuple(6, 6, highbd_subpel_avg_variance64x64_sse2, 8))); | 1716 make_tuple(6, 6, highbd_subpel_avg_variance64x64_sse2, 8))); |
| 1789 #endif // CONFIG_VP9_HIGHBITDEPTH | 1717 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 1790 #endif // CONFIG_USE_X86INC | 1718 #endif // CONFIG_USE_X86INC |
| 1791 #endif // HAVE_SSE2 | 1719 #endif // HAVE_SSE2 |
| 1720 #endif // CONFIG_VP9_ENCODER |
| 1721 |
| 1722 #if CONFIG_VP9_ENCODER |
| 1792 #if HAVE_SSSE3 | 1723 #if HAVE_SSSE3 |
| 1793 #if CONFIG_USE_X86INC | 1724 #if CONFIG_USE_X86INC |
| 1794 | 1725 |
| 1795 const vp9_subpixvariance_fn_t subpel_variance4x4_ssse3 = | 1726 const vp9_subpixvariance_fn_t subpel_variance4x4_ssse3 = |
| 1796 vp9_sub_pixel_variance4x4_ssse3; | 1727 vp9_sub_pixel_variance4x4_ssse3; |
| 1797 const vp9_subpixvariance_fn_t subpel_variance4x8_ssse3 = | 1728 const vp9_subpixvariance_fn_t subpel_variance4x8_ssse3 = |
| 1798 vp9_sub_pixel_variance4x8_ssse3; | 1729 vp9_sub_pixel_variance4x8_ssse3; |
| 1799 const vp9_subpixvariance_fn_t subpel_variance8x4_ssse3 = | 1730 const vp9_subpixvariance_fn_t subpel_variance8x4_ssse3 = |
| 1800 vp9_sub_pixel_variance8x4_ssse3; | 1731 vp9_sub_pixel_variance8x4_ssse3; |
| 1801 const vp9_subpixvariance_fn_t subpel_variance8x8_ssse3 = | 1732 const vp9_subpixvariance_fn_t subpel_variance8x8_ssse3 = |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1869 make_tuple(4, 3, subpel_avg_variance16x8_ssse3, 0), | 1800 make_tuple(4, 3, subpel_avg_variance16x8_ssse3, 0), |
| 1870 make_tuple(4, 4, subpel_avg_variance16x16_ssse3, 0), | 1801 make_tuple(4, 4, subpel_avg_variance16x16_ssse3, 0), |
| 1871 make_tuple(4, 5, subpel_avg_variance16x32_ssse3, 0), | 1802 make_tuple(4, 5, subpel_avg_variance16x32_ssse3, 0), |
| 1872 make_tuple(5, 4, subpel_avg_variance32x16_ssse3, 0), | 1803 make_tuple(5, 4, subpel_avg_variance32x16_ssse3, 0), |
| 1873 make_tuple(5, 5, subpel_avg_variance32x32_ssse3, 0), | 1804 make_tuple(5, 5, subpel_avg_variance32x32_ssse3, 0), |
| 1874 make_tuple(5, 6, subpel_avg_variance32x64_ssse3, 0), | 1805 make_tuple(5, 6, subpel_avg_variance32x64_ssse3, 0), |
| 1875 make_tuple(6, 5, subpel_avg_variance64x32_ssse3, 0), | 1806 make_tuple(6, 5, subpel_avg_variance64x32_ssse3, 0), |
| 1876 make_tuple(6, 6, subpel_avg_variance64x64_ssse3, 0))); | 1807 make_tuple(6, 6, subpel_avg_variance64x64_ssse3, 0))); |
| 1877 #endif // CONFIG_USE_X86INC | 1808 #endif // CONFIG_USE_X86INC |
| 1878 #endif // HAVE_SSSE3 | 1809 #endif // HAVE_SSSE3 |
| 1810 #endif // CONFIG_VP9_ENCODER |
| 1879 | 1811 |
| 1880 #if HAVE_AVX2 | 1812 #if HAVE_AVX2 |
| 1813 const VarianceMxNFunc mse16x16_avx2 = vpx_mse16x16_avx2; |
| 1814 INSTANTIATE_TEST_CASE_P(AVX2, VpxMseTest, |
| 1815 ::testing::Values(make_tuple(4, 4, mse16x16_avx2))); |
| 1881 | 1816 |
| 1882 const vp9_variance_fn_t variance16x16_avx2 = vp9_variance16x16_avx2; | 1817 const VarianceMxNFunc variance64x64_avx2 = vpx_variance64x64_avx2; |
| 1883 const vp9_variance_fn_t variance32x16_avx2 = vp9_variance32x16_avx2; | 1818 const VarianceMxNFunc variance64x32_avx2 = vpx_variance64x32_avx2; |
| 1884 const vp9_variance_fn_t variance32x32_avx2 = vp9_variance32x32_avx2; | 1819 const VarianceMxNFunc variance32x32_avx2 = vpx_variance32x32_avx2; |
| 1885 const vp9_variance_fn_t variance64x32_avx2 = vp9_variance64x32_avx2; | 1820 const VarianceMxNFunc variance32x16_avx2 = vpx_variance32x16_avx2; |
| 1886 const vp9_variance_fn_t variance64x64_avx2 = vp9_variance64x64_avx2; | 1821 const VarianceMxNFunc variance16x16_avx2 = vpx_variance16x16_avx2; |
| 1887 INSTANTIATE_TEST_CASE_P( | 1822 INSTANTIATE_TEST_CASE_P( |
| 1888 AVX2, VP9VarianceTest, | 1823 AVX2, VpxVarianceTest, |
| 1889 ::testing::Values(make_tuple(4, 4, variance16x16_avx2, 0), | 1824 ::testing::Values(make_tuple(6, 6, variance64x64_avx2, 0), |
| 1825 make_tuple(6, 5, variance64x32_avx2, 0), |
| 1826 make_tuple(5, 5, variance32x32_avx2, 0), |
| 1890 make_tuple(5, 4, variance32x16_avx2, 0), | 1827 make_tuple(5, 4, variance32x16_avx2, 0), |
| 1891 make_tuple(5, 5, variance32x32_avx2, 0), | 1828 make_tuple(4, 4, variance16x16_avx2, 0))); |
| 1892 make_tuple(6, 5, variance64x32_avx2, 0), | |
| 1893 make_tuple(6, 6, variance64x64_avx2, 0))); | |
| 1894 | 1829 |
| 1830 #if CONFIG_VP9_ENCODER |
| 1895 const vp9_subpixvariance_fn_t subpel_variance32x32_avx2 = | 1831 const vp9_subpixvariance_fn_t subpel_variance32x32_avx2 = |
| 1896 vp9_sub_pixel_variance32x32_avx2; | 1832 vp9_sub_pixel_variance32x32_avx2; |
| 1897 const vp9_subpixvariance_fn_t subpel_variance64x64_avx2 = | 1833 const vp9_subpixvariance_fn_t subpel_variance64x64_avx2 = |
| 1898 vp9_sub_pixel_variance64x64_avx2; | 1834 vp9_sub_pixel_variance64x64_avx2; |
| 1899 INSTANTIATE_TEST_CASE_P( | 1835 INSTANTIATE_TEST_CASE_P( |
| 1900 AVX2, VP9SubpelVarianceTest, | 1836 AVX2, VP9SubpelVarianceTest, |
| 1901 ::testing::Values(make_tuple(5, 5, subpel_variance32x32_avx2, 0), | 1837 ::testing::Values(make_tuple(5, 5, subpel_variance32x32_avx2, 0), |
| 1902 make_tuple(6, 6, subpel_variance64x64_avx2, 0))); | 1838 make_tuple(6, 6, subpel_variance64x64_avx2, 0))); |
| 1903 | 1839 |
| 1904 const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_avx2 = | 1840 const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_avx2 = |
| 1905 vp9_sub_pixel_avg_variance32x32_avx2; | 1841 vp9_sub_pixel_avg_variance32x32_avx2; |
| 1906 const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_avx2 = | 1842 const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_avx2 = |
| 1907 vp9_sub_pixel_avg_variance64x64_avx2; | 1843 vp9_sub_pixel_avg_variance64x64_avx2; |
| 1908 INSTANTIATE_TEST_CASE_P( | 1844 INSTANTIATE_TEST_CASE_P( |
| 1909 AVX2, VP9SubpelAvgVarianceTest, | 1845 AVX2, VP9SubpelAvgVarianceTest, |
| 1910 ::testing::Values(make_tuple(5, 5, subpel_avg_variance32x32_avx2, 0), | 1846 ::testing::Values(make_tuple(5, 5, subpel_avg_variance32x32_avx2, 0), |
| 1911 make_tuple(6, 6, subpel_avg_variance64x64_avx2, 0))); | 1847 make_tuple(6, 6, subpel_avg_variance64x64_avx2, 0))); |
| 1848 #endif // CONFIG_VP9_ENCODER |
| 1912 #endif // HAVE_AVX2 | 1849 #endif // HAVE_AVX2 |
| 1850 |
| 1913 #if HAVE_NEON | 1851 #if HAVE_NEON |
| 1914 const vp9_variance_fn_t variance8x8_neon = vp9_variance8x8_neon; | 1852 const Get4x4SseFunc get4x4sse_cs_neon = vpx_get4x4sse_cs_neon; |
| 1915 const vp9_variance_fn_t variance16x16_neon = vp9_variance16x16_neon; | 1853 INSTANTIATE_TEST_CASE_P(NEON, VpxSseTest, |
| 1916 const vp9_variance_fn_t variance32x32_neon = vp9_variance32x32_neon; | 1854 ::testing::Values(make_tuple(2, 2, get4x4sse_cs_neon))); |
| 1917 const vp9_variance_fn_t variance32x64_neon = vp9_variance32x64_neon; | 1855 |
| 1918 const vp9_variance_fn_t variance64x32_neon = vp9_variance64x32_neon; | 1856 const VarianceMxNFunc mse16x16_neon = vpx_mse16x16_neon; |
| 1919 const vp9_variance_fn_t variance64x64_neon = vp9_variance64x64_neon; | 1857 INSTANTIATE_TEST_CASE_P(NEON, VpxMseTest, |
| 1858 ::testing::Values(make_tuple(4, 4, mse16x16_neon))); |
| 1859 |
| 1860 const VarianceMxNFunc variance64x64_neon = vpx_variance64x64_neon; |
| 1861 const VarianceMxNFunc variance64x32_neon = vpx_variance64x32_neon; |
| 1862 const VarianceMxNFunc variance32x64_neon = vpx_variance32x64_neon; |
| 1863 const VarianceMxNFunc variance32x32_neon = vpx_variance32x32_neon; |
| 1864 const VarianceMxNFunc variance16x16_neon = vpx_variance16x16_neon; |
| 1865 const VarianceMxNFunc variance16x8_neon = vpx_variance16x8_neon; |
| 1866 const VarianceMxNFunc variance8x16_neon = vpx_variance8x16_neon; |
| 1867 const VarianceMxNFunc variance8x8_neon = vpx_variance8x8_neon; |
| 1920 INSTANTIATE_TEST_CASE_P( | 1868 INSTANTIATE_TEST_CASE_P( |
| 1921 NEON, VP9VarianceTest, | 1869 NEON, VpxVarianceTest, |
| 1922 ::testing::Values(make_tuple(3, 3, variance8x8_neon, 0), | 1870 ::testing::Values(make_tuple(6, 6, variance64x64_neon, 0), |
| 1871 make_tuple(6, 5, variance64x32_neon, 0), |
| 1872 make_tuple(5, 6, variance32x64_neon, 0), |
| 1873 make_tuple(5, 5, variance32x32_neon, 0), |
| 1923 make_tuple(4, 4, variance16x16_neon, 0), | 1874 make_tuple(4, 4, variance16x16_neon, 0), |
| 1924 make_tuple(5, 5, variance32x32_neon, 0), | 1875 make_tuple(4, 3, variance16x8_neon, 0), |
| 1925 make_tuple(5, 6, variance32x64_neon, 0), | 1876 make_tuple(3, 4, variance8x16_neon, 0), |
| 1926 make_tuple(6, 5, variance64x32_neon, 0), | 1877 make_tuple(3, 3, variance8x8_neon, 0))); |
| 1927 make_tuple(6, 6, variance64x64_neon, 0))); | |
| 1928 | 1878 |
| 1879 #if CONFIG_VP9_ENCODER |
| 1929 const vp9_subpixvariance_fn_t subpel_variance8x8_neon = | 1880 const vp9_subpixvariance_fn_t subpel_variance8x8_neon = |
| 1930 vp9_sub_pixel_variance8x8_neon; | 1881 vp9_sub_pixel_variance8x8_neon; |
| 1931 const vp9_subpixvariance_fn_t subpel_variance16x16_neon = | 1882 const vp9_subpixvariance_fn_t subpel_variance16x16_neon = |
| 1932 vp9_sub_pixel_variance16x16_neon; | 1883 vp9_sub_pixel_variance16x16_neon; |
| 1933 const vp9_subpixvariance_fn_t subpel_variance32x32_neon = | 1884 const vp9_subpixvariance_fn_t subpel_variance32x32_neon = |
| 1934 vp9_sub_pixel_variance32x32_neon; | 1885 vp9_sub_pixel_variance32x32_neon; |
| 1935 const vp9_subpixvariance_fn_t subpel_variance64x64_neon = | 1886 const vp9_subpixvariance_fn_t subpel_variance64x64_neon = |
| 1936 vp9_sub_pixel_variance64x64_neon; | 1887 vp9_sub_pixel_variance64x64_neon; |
| 1937 INSTANTIATE_TEST_CASE_P( | 1888 INSTANTIATE_TEST_CASE_P( |
| 1938 NEON, VP9SubpelVarianceTest, | 1889 NEON, VP9SubpelVarianceTest, |
| 1939 ::testing::Values(make_tuple(3, 3, subpel_variance8x8_neon, 0), | 1890 ::testing::Values(make_tuple(3, 3, subpel_variance8x8_neon, 0), |
| 1940 make_tuple(4, 4, subpel_variance16x16_neon, 0), | 1891 make_tuple(4, 4, subpel_variance16x16_neon, 0), |
| 1941 make_tuple(5, 5, subpel_variance32x32_neon, 0), | 1892 make_tuple(5, 5, subpel_variance32x32_neon, 0), |
| 1942 make_tuple(6, 6, subpel_variance64x64_neon, 0))); | 1893 make_tuple(6, 6, subpel_variance64x64_neon, 0))); |
| 1894 #endif // CONFIG_VP9_ENCODER |
| 1943 #endif // HAVE_NEON | 1895 #endif // HAVE_NEON |
| 1944 #endif // CONFIG_VP9_ENCODER | |
| 1945 | 1896 |
| 1946 } // namespace vp9 | 1897 #if HAVE_MEDIA |
| 1898 const VarianceMxNFunc mse16x16_media = vpx_mse16x16_media; |
| 1899 INSTANTIATE_TEST_CASE_P(MEDIA, VpxMseTest, |
| 1900 ::testing::Values(make_tuple(4, 4, mse16x16_media))); |
| 1901 |
| 1902 const VarianceMxNFunc variance16x16_media = vpx_variance16x16_media; |
| 1903 const VarianceMxNFunc variance8x8_media = vpx_variance8x8_media; |
| 1904 INSTANTIATE_TEST_CASE_P( |
| 1905 MEDIA, VpxVarianceTest, |
| 1906 ::testing::Values(make_tuple(4, 4, variance16x16_media, 0), |
| 1907 make_tuple(3, 3, variance8x8_media, 0))); |
| 1908 #endif // HAVE_MEDIA |
| 1947 } // namespace | 1909 } // namespace |
| OLD | NEW |