| 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 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "vpx/vpx_integer.h" | 23 #include "vpx/vpx_integer.h" |
| 24 | 24 |
| 25 extern "C" { | 25 extern "C" { |
| 26 void vp9_idct4x4_16_add_c(const int16_t *input, uint8_t *output, int pitch); | 26 void vp9_idct4x4_16_add_c(const int16_t *input, uint8_t *output, int pitch); |
| 27 } | 27 } |
| 28 | 28 |
| 29 using libvpx_test::ACMRandom; | 29 using libvpx_test::ACMRandom; |
| 30 | 30 |
| 31 namespace { | 31 namespace { |
| 32 const int kNumCoeffs = 16; | 32 const int kNumCoeffs = 16; |
| 33 typedef void (*fdct_t)(const int16_t *in, int16_t *out, int stride); | 33 typedef void (*FdctFunc)(const int16_t *in, int16_t *out, int stride); |
| 34 typedef void (*idct_t)(const int16_t *in, uint8_t *out, int stride); | 34 typedef void (*IdctFunc)(const int16_t *in, uint8_t *out, int stride); |
| 35 typedef void (*fht_t) (const int16_t *in, int16_t *out, int stride, | 35 typedef void (*FhtFunc)(const int16_t *in, int16_t *out, int stride, |
| 36 int tx_type); | 36 int tx_type); |
| 37 typedef void (*iht_t) (const int16_t *in, uint8_t *out, int stride, | 37 typedef void (*IhtFunc)(const int16_t *in, uint8_t *out, int stride, |
| 38 int tx_type); | 38 int tx_type); |
| 39 | 39 |
| 40 typedef std::tr1::tuple<fdct_t, idct_t, int> dct_4x4_param_t; | 40 typedef std::tr1::tuple<FdctFunc, IdctFunc, int> Dct4x4Param; |
| 41 typedef std::tr1::tuple<fht_t, iht_t, int> ht_4x4_param_t; | 41 typedef std::tr1::tuple<FhtFunc, IhtFunc, int> Ht4x4Param; |
| 42 | 42 |
| 43 void fdct4x4_ref(const int16_t *in, int16_t *out, int stride, int tx_type) { | 43 void fdct4x4_ref(const int16_t *in, int16_t *out, int stride, int tx_type) { |
| 44 vp9_fdct4x4_c(in, out, stride); | 44 vp9_fdct4x4_c(in, out, stride); |
| 45 } | 45 } |
| 46 | 46 |
| 47 void fht4x4_ref(const int16_t *in, int16_t *out, int stride, int tx_type) { | 47 void fht4x4_ref(const int16_t *in, int16_t *out, int stride, int tx_type) { |
| 48 vp9_fht4x4_c(in, out, stride, tx_type); | 48 vp9_fht4x4_c(in, out, stride, tx_type); |
| 49 } | 49 } |
| 50 | 50 |
| 51 void fwht4x4_ref(const int16_t *in, int16_t *out, int stride, int tx_type) { | 51 void fwht4x4_ref(const int16_t *in, int16_t *out, int stride, int tx_type) { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 const uint32_t error = diff * diff; | 182 const uint32_t error = diff * diff; |
| 183 EXPECT_GE(static_cast<uint32_t>(limit), error) | 183 EXPECT_GE(static_cast<uint32_t>(limit), error) |
| 184 << "Error: 4x4 IDCT has error " << error | 184 << "Error: 4x4 IDCT has error " << error |
| 185 << " at index " << j; | 185 << " at index " << j; |
| 186 } | 186 } |
| 187 } | 187 } |
| 188 } | 188 } |
| 189 | 189 |
| 190 int pitch_; | 190 int pitch_; |
| 191 int tx_type_; | 191 int tx_type_; |
| 192 fht_t fwd_txfm_ref; | 192 FhtFunc fwd_txfm_ref; |
| 193 }; | 193 }; |
| 194 | 194 |
| 195 class Trans4x4DCT | 195 class Trans4x4DCT |
| 196 : public Trans4x4TestBase, | 196 : public Trans4x4TestBase, |
| 197 public ::testing::TestWithParam<dct_4x4_param_t> { | 197 public ::testing::TestWithParam<Dct4x4Param> { |
| 198 public: | 198 public: |
| 199 virtual ~Trans4x4DCT() {} | 199 virtual ~Trans4x4DCT() {} |
| 200 | 200 |
| 201 virtual void SetUp() { | 201 virtual void SetUp() { |
| 202 fwd_txfm_ = GET_PARAM(0); | 202 fwd_txfm_ = GET_PARAM(0); |
| 203 inv_txfm_ = GET_PARAM(1); | 203 inv_txfm_ = GET_PARAM(1); |
| 204 tx_type_ = GET_PARAM(2); | 204 tx_type_ = GET_PARAM(2); |
| 205 pitch_ = 4; | 205 pitch_ = 4; |
| 206 fwd_txfm_ref = fdct4x4_ref; | 206 fwd_txfm_ref = fdct4x4_ref; |
| 207 } | 207 } |
| 208 virtual void TearDown() { libvpx_test::ClearSystemState(); } | 208 virtual void TearDown() { libvpx_test::ClearSystemState(); } |
| 209 | 209 |
| 210 protected: | 210 protected: |
| 211 void RunFwdTxfm(const int16_t *in, int16_t *out, int stride) { | 211 void RunFwdTxfm(const int16_t *in, int16_t *out, int stride) { |
| 212 fwd_txfm_(in, out, stride); | 212 fwd_txfm_(in, out, stride); |
| 213 } | 213 } |
| 214 void RunInvTxfm(const int16_t *out, uint8_t *dst, int stride) { | 214 void RunInvTxfm(const int16_t *out, uint8_t *dst, int stride) { |
| 215 inv_txfm_(out, dst, stride); | 215 inv_txfm_(out, dst, stride); |
| 216 } | 216 } |
| 217 | 217 |
| 218 fdct_t fwd_txfm_; | 218 FdctFunc fwd_txfm_; |
| 219 idct_t inv_txfm_; | 219 IdctFunc inv_txfm_; |
| 220 }; | 220 }; |
| 221 | 221 |
| 222 TEST_P(Trans4x4DCT, AccuracyCheck) { | 222 TEST_P(Trans4x4DCT, AccuracyCheck) { |
| 223 RunAccuracyCheck(1); | 223 RunAccuracyCheck(1); |
| 224 } | 224 } |
| 225 | 225 |
| 226 TEST_P(Trans4x4DCT, CoeffCheck) { | 226 TEST_P(Trans4x4DCT, CoeffCheck) { |
| 227 RunCoeffCheck(); | 227 RunCoeffCheck(); |
| 228 } | 228 } |
| 229 | 229 |
| 230 TEST_P(Trans4x4DCT, MemCheck) { | 230 TEST_P(Trans4x4DCT, MemCheck) { |
| 231 RunMemCheck(); | 231 RunMemCheck(); |
| 232 } | 232 } |
| 233 | 233 |
| 234 TEST_P(Trans4x4DCT, InvAccuracyCheck) { | 234 TEST_P(Trans4x4DCT, InvAccuracyCheck) { |
| 235 RunInvAccuracyCheck(1); | 235 RunInvAccuracyCheck(1); |
| 236 } | 236 } |
| 237 | 237 |
| 238 class Trans4x4HT | 238 class Trans4x4HT |
| 239 : public Trans4x4TestBase, | 239 : public Trans4x4TestBase, |
| 240 public ::testing::TestWithParam<ht_4x4_param_t> { | 240 public ::testing::TestWithParam<Ht4x4Param> { |
| 241 public: | 241 public: |
| 242 virtual ~Trans4x4HT() {} | 242 virtual ~Trans4x4HT() {} |
| 243 | 243 |
| 244 virtual void SetUp() { | 244 virtual void SetUp() { |
| 245 fwd_txfm_ = GET_PARAM(0); | 245 fwd_txfm_ = GET_PARAM(0); |
| 246 inv_txfm_ = GET_PARAM(1); | 246 inv_txfm_ = GET_PARAM(1); |
| 247 tx_type_ = GET_PARAM(2); | 247 tx_type_ = GET_PARAM(2); |
| 248 pitch_ = 4; | 248 pitch_ = 4; |
| 249 fwd_txfm_ref = fht4x4_ref; | 249 fwd_txfm_ref = fht4x4_ref; |
| 250 } | 250 } |
| 251 virtual void TearDown() { libvpx_test::ClearSystemState(); } | 251 virtual void TearDown() { libvpx_test::ClearSystemState(); } |
| 252 | 252 |
| 253 protected: | 253 protected: |
| 254 void RunFwdTxfm(const int16_t *in, int16_t *out, int stride) { | 254 void RunFwdTxfm(const int16_t *in, int16_t *out, int stride) { |
| 255 fwd_txfm_(in, out, stride, tx_type_); | 255 fwd_txfm_(in, out, stride, tx_type_); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void RunInvTxfm(const int16_t *out, uint8_t *dst, int stride) { | 258 void RunInvTxfm(const int16_t *out, uint8_t *dst, int stride) { |
| 259 inv_txfm_(out, dst, stride, tx_type_); | 259 inv_txfm_(out, dst, stride, tx_type_); |
| 260 } | 260 } |
| 261 | 261 |
| 262 fht_t fwd_txfm_; | 262 FhtFunc fwd_txfm_; |
| 263 iht_t inv_txfm_; | 263 IhtFunc inv_txfm_; |
| 264 }; | 264 }; |
| 265 | 265 |
| 266 TEST_P(Trans4x4HT, AccuracyCheck) { | 266 TEST_P(Trans4x4HT, AccuracyCheck) { |
| 267 RunAccuracyCheck(1); | 267 RunAccuracyCheck(1); |
| 268 } | 268 } |
| 269 | 269 |
| 270 TEST_P(Trans4x4HT, CoeffCheck) { | 270 TEST_P(Trans4x4HT, CoeffCheck) { |
| 271 RunCoeffCheck(); | 271 RunCoeffCheck(); |
| 272 } | 272 } |
| 273 | 273 |
| 274 TEST_P(Trans4x4HT, MemCheck) { | 274 TEST_P(Trans4x4HT, MemCheck) { |
| 275 RunMemCheck(); | 275 RunMemCheck(); |
| 276 } | 276 } |
| 277 | 277 |
| 278 TEST_P(Trans4x4HT, InvAccuracyCheck) { | 278 TEST_P(Trans4x4HT, InvAccuracyCheck) { |
| 279 RunInvAccuracyCheck(1); | 279 RunInvAccuracyCheck(1); |
| 280 } | 280 } |
| 281 | 281 |
| 282 class Trans4x4WHT | 282 class Trans4x4WHT |
| 283 : public Trans4x4TestBase, | 283 : public Trans4x4TestBase, |
| 284 public ::testing::TestWithParam<dct_4x4_param_t> { | 284 public ::testing::TestWithParam<Dct4x4Param> { |
| 285 public: | 285 public: |
| 286 virtual ~Trans4x4WHT() {} | 286 virtual ~Trans4x4WHT() {} |
| 287 | 287 |
| 288 virtual void SetUp() { | 288 virtual void SetUp() { |
| 289 fwd_txfm_ = GET_PARAM(0); | 289 fwd_txfm_ = GET_PARAM(0); |
| 290 inv_txfm_ = GET_PARAM(1); | 290 inv_txfm_ = GET_PARAM(1); |
| 291 tx_type_ = GET_PARAM(2); | 291 tx_type_ = GET_PARAM(2); |
| 292 pitch_ = 4; | 292 pitch_ = 4; |
| 293 fwd_txfm_ref = fwht4x4_ref; | 293 fwd_txfm_ref = fwht4x4_ref; |
| 294 } | 294 } |
| 295 virtual void TearDown() { libvpx_test::ClearSystemState(); } | 295 virtual void TearDown() { libvpx_test::ClearSystemState(); } |
| 296 | 296 |
| 297 protected: | 297 protected: |
| 298 void RunFwdTxfm(const int16_t *in, int16_t *out, int stride) { | 298 void RunFwdTxfm(const int16_t *in, int16_t *out, int stride) { |
| 299 fwd_txfm_(in, out, stride); | 299 fwd_txfm_(in, out, stride); |
| 300 } | 300 } |
| 301 void RunInvTxfm(const int16_t *out, uint8_t *dst, int stride) { | 301 void RunInvTxfm(const int16_t *out, uint8_t *dst, int stride) { |
| 302 inv_txfm_(out, dst, stride); | 302 inv_txfm_(out, dst, stride); |
| 303 } | 303 } |
| 304 | 304 |
| 305 fdct_t fwd_txfm_; | 305 FdctFunc fwd_txfm_; |
| 306 idct_t inv_txfm_; | 306 IdctFunc inv_txfm_; |
| 307 }; | 307 }; |
| 308 | 308 |
| 309 TEST_P(Trans4x4WHT, AccuracyCheck) { | 309 TEST_P(Trans4x4WHT, AccuracyCheck) { |
| 310 RunAccuracyCheck(0); | 310 RunAccuracyCheck(0); |
| 311 } | 311 } |
| 312 | 312 |
| 313 TEST_P(Trans4x4WHT, CoeffCheck) { | 313 TEST_P(Trans4x4WHT, CoeffCheck) { |
| 314 RunCoeffCheck(); | 314 RunCoeffCheck(); |
| 315 } | 315 } |
| 316 | 316 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 INSTANTIATE_TEST_CASE_P( | 385 INSTANTIATE_TEST_CASE_P( |
| 386 AVX2, Trans4x4HT, | 386 AVX2, Trans4x4HT, |
| 387 ::testing::Values( | 387 ::testing::Values( |
| 388 make_tuple(&vp9_fht4x4_avx2, &vp9_iht4x4_16_add_c, 0), | 388 make_tuple(&vp9_fht4x4_avx2, &vp9_iht4x4_16_add_c, 0), |
| 389 make_tuple(&vp9_fht4x4_avx2, &vp9_iht4x4_16_add_c, 1), | 389 make_tuple(&vp9_fht4x4_avx2, &vp9_iht4x4_16_add_c, 1), |
| 390 make_tuple(&vp9_fht4x4_avx2, &vp9_iht4x4_16_add_c, 2), | 390 make_tuple(&vp9_fht4x4_avx2, &vp9_iht4x4_16_add_c, 2), |
| 391 make_tuple(&vp9_fht4x4_avx2, &vp9_iht4x4_16_add_c, 3))); | 391 make_tuple(&vp9_fht4x4_avx2, &vp9_iht4x4_16_add_c, 3))); |
| 392 #endif | 392 #endif |
| 393 | 393 |
| 394 } // namespace | 394 } // namespace |
| OLD | NEW |