Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: source/libvpx/test/dct32x32_test.cc

Issue 1124333011: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: only update to last nights LKGR Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/libvpx/test/dct16x16_test.cc ('k') | source/libvpx/test/encode_test_driver.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 int mask_; 112 int mask_;
113 FwdTxfmFunc fwd_txfm_; 113 FwdTxfmFunc fwd_txfm_;
114 InvTxfmFunc inv_txfm_; 114 InvTxfmFunc inv_txfm_;
115 }; 115 };
116 116
117 TEST_P(Trans32x32Test, AccuracyCheck) { 117 TEST_P(Trans32x32Test, AccuracyCheck) {
118 ACMRandom rnd(ACMRandom::DeterministicSeed()); 118 ACMRandom rnd(ACMRandom::DeterministicSeed());
119 uint32_t max_error = 0; 119 uint32_t max_error = 0;
120 int64_t total_error = 0; 120 int64_t total_error = 0;
121 const int count_test_block = 10000; 121 const int count_test_block = 10000;
122 DECLARE_ALIGNED_ARRAY(16, int16_t, test_input_block, kNumCoeffs); 122 DECLARE_ALIGNED(16, int16_t, test_input_block[kNumCoeffs]);
123 DECLARE_ALIGNED_ARRAY(16, tran_low_t, test_temp_block, kNumCoeffs); 123 DECLARE_ALIGNED(16, tran_low_t, test_temp_block[kNumCoeffs]);
124 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst, kNumCoeffs); 124 DECLARE_ALIGNED(16, uint8_t, dst[kNumCoeffs]);
125 DECLARE_ALIGNED_ARRAY(16, uint8_t, src, kNumCoeffs); 125 DECLARE_ALIGNED(16, uint8_t, src[kNumCoeffs]);
126 #if CONFIG_VP9_HIGHBITDEPTH 126 #if CONFIG_VP9_HIGHBITDEPTH
127 DECLARE_ALIGNED_ARRAY(16, uint16_t, dst16, kNumCoeffs); 127 DECLARE_ALIGNED(16, uint16_t, dst16[kNumCoeffs]);
128 DECLARE_ALIGNED_ARRAY(16, uint16_t, src16, kNumCoeffs); 128 DECLARE_ALIGNED(16, uint16_t, src16[kNumCoeffs]);
129 #endif 129 #endif
130 130
131 for (int i = 0; i < count_test_block; ++i) { 131 for (int i = 0; i < count_test_block; ++i) {
132 // Initialize a test block with input range [-mask_, mask_]. 132 // Initialize a test block with input range [-mask_, mask_].
133 for (int j = 0; j < kNumCoeffs; ++j) { 133 for (int j = 0; j < kNumCoeffs; ++j) {
134 if (bit_depth_ == VPX_BITS_8) { 134 if (bit_depth_ == VPX_BITS_8) {
135 src[j] = rnd.Rand8(); 135 src[j] = rnd.Rand8();
136 dst[j] = rnd.Rand8(); 136 dst[j] = rnd.Rand8();
137 test_input_block[j] = src[j] - dst[j]; 137 test_input_block[j] = src[j] - dst[j];
138 #if CONFIG_VP9_HIGHBITDEPTH 138 #if CONFIG_VP9_HIGHBITDEPTH
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 << "Error: 32x32 FDCT/IDCT has an individual round-trip error > 1"; 177 << "Error: 32x32 FDCT/IDCT has an individual round-trip error > 1";
178 178
179 EXPECT_GE(count_test_block << 2 * (bit_depth_ - 8), total_error) 179 EXPECT_GE(count_test_block << 2 * (bit_depth_ - 8), total_error)
180 << "Error: 32x32 FDCT/IDCT has average round-trip error > 1 per block"; 180 << "Error: 32x32 FDCT/IDCT has average round-trip error > 1 per block";
181 } 181 }
182 182
183 TEST_P(Trans32x32Test, CoeffCheck) { 183 TEST_P(Trans32x32Test, CoeffCheck) {
184 ACMRandom rnd(ACMRandom::DeterministicSeed()); 184 ACMRandom rnd(ACMRandom::DeterministicSeed());
185 const int count_test_block = 1000; 185 const int count_test_block = 1000;
186 186
187 DECLARE_ALIGNED_ARRAY(16, int16_t, input_block, kNumCoeffs); 187 DECLARE_ALIGNED(16, int16_t, input_block[kNumCoeffs]);
188 DECLARE_ALIGNED_ARRAY(16, tran_low_t, output_ref_block, kNumCoeffs); 188 DECLARE_ALIGNED(16, tran_low_t, output_ref_block[kNumCoeffs]);
189 DECLARE_ALIGNED_ARRAY(16, tran_low_t, output_block, kNumCoeffs); 189 DECLARE_ALIGNED(16, tran_low_t, output_block[kNumCoeffs]);
190 190
191 for (int i = 0; i < count_test_block; ++i) { 191 for (int i = 0; i < count_test_block; ++i) {
192 for (int j = 0; j < kNumCoeffs; ++j) 192 for (int j = 0; j < kNumCoeffs; ++j)
193 input_block[j] = (rnd.Rand16() & mask_) - (rnd.Rand16() & mask_); 193 input_block[j] = (rnd.Rand16() & mask_) - (rnd.Rand16() & mask_);
194 194
195 const int stride = 32; 195 const int stride = 32;
196 vp9_fdct32x32_c(input_block, output_ref_block, stride); 196 vp9_fdct32x32_c(input_block, output_ref_block, stride);
197 ASM_REGISTER_STATE_CHECK(fwd_txfm_(input_block, output_block, stride)); 197 ASM_REGISTER_STATE_CHECK(fwd_txfm_(input_block, output_block, stride));
198 198
199 if (version_ == 0) { 199 if (version_ == 0) {
200 for (int j = 0; j < kNumCoeffs; ++j) 200 for (int j = 0; j < kNumCoeffs; ++j)
201 EXPECT_EQ(output_block[j], output_ref_block[j]) 201 EXPECT_EQ(output_block[j], output_ref_block[j])
202 << "Error: 32x32 FDCT versions have mismatched coefficients"; 202 << "Error: 32x32 FDCT versions have mismatched coefficients";
203 } else { 203 } else {
204 for (int j = 0; j < kNumCoeffs; ++j) 204 for (int j = 0; j < kNumCoeffs; ++j)
205 EXPECT_GE(6, abs(output_block[j] - output_ref_block[j])) 205 EXPECT_GE(6, abs(output_block[j] - output_ref_block[j]))
206 << "Error: 32x32 FDCT rd has mismatched coefficients"; 206 << "Error: 32x32 FDCT rd has mismatched coefficients";
207 } 207 }
208 } 208 }
209 } 209 }
210 210
211 TEST_P(Trans32x32Test, MemCheck) { 211 TEST_P(Trans32x32Test, MemCheck) {
212 ACMRandom rnd(ACMRandom::DeterministicSeed()); 212 ACMRandom rnd(ACMRandom::DeterministicSeed());
213 const int count_test_block = 2000; 213 const int count_test_block = 2000;
214 214
215 DECLARE_ALIGNED_ARRAY(16, int16_t, input_block, kNumCoeffs); 215 DECLARE_ALIGNED(16, int16_t, input_extreme_block[kNumCoeffs]);
216 DECLARE_ALIGNED_ARRAY(16, int16_t, input_extreme_block, kNumCoeffs); 216 DECLARE_ALIGNED(16, tran_low_t, output_ref_block[kNumCoeffs]);
217 DECLARE_ALIGNED_ARRAY(16, tran_low_t, output_ref_block, kNumCoeffs); 217 DECLARE_ALIGNED(16, tran_low_t, output_block[kNumCoeffs]);
218 DECLARE_ALIGNED_ARRAY(16, tran_low_t, output_block, kNumCoeffs);
219 218
220 for (int i = 0; i < count_test_block; ++i) { 219 for (int i = 0; i < count_test_block; ++i) {
221 // Initialize a test block with input range [-mask_, mask_]. 220 // Initialize a test block with input range [-mask_, mask_].
222 for (int j = 0; j < kNumCoeffs; ++j) { 221 for (int j = 0; j < kNumCoeffs; ++j) {
223 input_block[j] = (rnd.Rand16() & mask_) - (rnd.Rand16() & mask_);
224 input_extreme_block[j] = rnd.Rand8() & 1 ? mask_ : -mask_; 222 input_extreme_block[j] = rnd.Rand8() & 1 ? mask_ : -mask_;
225 } 223 }
226 if (i == 0) { 224 if (i == 0) {
227 for (int j = 0; j < kNumCoeffs; ++j) 225 for (int j = 0; j < kNumCoeffs; ++j)
228 input_extreme_block[j] = mask_; 226 input_extreme_block[j] = mask_;
229 } else if (i == 1) { 227 } else if (i == 1) {
230 for (int j = 0; j < kNumCoeffs; ++j) 228 for (int j = 0; j < kNumCoeffs; ++j)
231 input_extreme_block[j] = -mask_; 229 input_extreme_block[j] = -mask_;
232 } 230 }
233 231
(...skipping 16 matching lines...) Expand all
250 EXPECT_GE(4 * DCT_MAX_VALUE << (bit_depth_ - 8), abs(output_block[j])) 248 EXPECT_GE(4 * DCT_MAX_VALUE << (bit_depth_ - 8), abs(output_block[j]))
251 << "Error: 32x32 FDCT has coefficient larger than " 249 << "Error: 32x32 FDCT has coefficient larger than "
252 << "4*DCT_MAX_VALUE"; 250 << "4*DCT_MAX_VALUE";
253 } 251 }
254 } 252 }
255 } 253 }
256 254
257 TEST_P(Trans32x32Test, InverseAccuracy) { 255 TEST_P(Trans32x32Test, InverseAccuracy) {
258 ACMRandom rnd(ACMRandom::DeterministicSeed()); 256 ACMRandom rnd(ACMRandom::DeterministicSeed());
259 const int count_test_block = 1000; 257 const int count_test_block = 1000;
260 DECLARE_ALIGNED_ARRAY(16, int16_t, in, kNumCoeffs); 258 DECLARE_ALIGNED(16, int16_t, in[kNumCoeffs]);
261 DECLARE_ALIGNED_ARRAY(16, tran_low_t, coeff, kNumCoeffs); 259 DECLARE_ALIGNED(16, tran_low_t, coeff[kNumCoeffs]);
262 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst, kNumCoeffs); 260 DECLARE_ALIGNED(16, uint8_t, dst[kNumCoeffs]);
263 DECLARE_ALIGNED_ARRAY(16, uint8_t, src, kNumCoeffs); 261 DECLARE_ALIGNED(16, uint8_t, src[kNumCoeffs]);
264 #if CONFIG_VP9_HIGHBITDEPTH 262 #if CONFIG_VP9_HIGHBITDEPTH
265 DECLARE_ALIGNED_ARRAY(16, uint16_t, dst16, kNumCoeffs); 263 DECLARE_ALIGNED(16, uint16_t, dst16[kNumCoeffs]);
266 DECLARE_ALIGNED_ARRAY(16, uint16_t, src16, kNumCoeffs); 264 DECLARE_ALIGNED(16, uint16_t, src16[kNumCoeffs]);
267 #endif 265 #endif
268 266
269 for (int i = 0; i < count_test_block; ++i) { 267 for (int i = 0; i < count_test_block; ++i) {
270 double out_r[kNumCoeffs]; 268 double out_r[kNumCoeffs];
271 269
272 // Initialize a test block with input range [-255, 255] 270 // Initialize a test block with input range [-255, 255]
273 for (int j = 0; j < kNumCoeffs; ++j) { 271 for (int j = 0; j < kNumCoeffs; ++j) {
274 if (bit_depth_ == VPX_BITS_8) { 272 if (bit_depth_ == VPX_BITS_8) {
275 src[j] = rnd.Rand8(); 273 src[j] = rnd.Rand8();
276 dst[j] = rnd.Rand8(); 274 dst[j] = rnd.Rand8();
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 373
376 #if HAVE_AVX2 && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE 374 #if HAVE_AVX2 && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
377 INSTANTIATE_TEST_CASE_P( 375 INSTANTIATE_TEST_CASE_P(
378 AVX2, Trans32x32Test, 376 AVX2, Trans32x32Test,
379 ::testing::Values( 377 ::testing::Values(
380 make_tuple(&vp9_fdct32x32_avx2, 378 make_tuple(&vp9_fdct32x32_avx2,
381 &vp9_idct32x32_1024_add_sse2, 0, VPX_BITS_8), 379 &vp9_idct32x32_1024_add_sse2, 0, VPX_BITS_8),
382 make_tuple(&vp9_fdct32x32_rd_avx2, 380 make_tuple(&vp9_fdct32x32_rd_avx2,
383 &vp9_idct32x32_1024_add_sse2, 1, VPX_BITS_8))); 381 &vp9_idct32x32_1024_add_sse2, 1, VPX_BITS_8)));
384 #endif // HAVE_AVX2 && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE 382 #endif // HAVE_AVX2 && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
383
384 #if HAVE_MSA && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
385 INSTANTIATE_TEST_CASE_P(
386 MSA, Trans32x32Test,
387 ::testing::Values(
388 make_tuple(&vp9_fdct32x32_c,
389 &vp9_idct32x32_1024_add_msa, 0, VPX_BITS_8)));
390 #endif // HAVE_MSA && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
385 } // namespace 391 } // namespace
OLDNEW
« no previous file with comments | « source/libvpx/test/dct16x16_test.cc ('k') | source/libvpx/test/encode_test_driver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698