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

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

Issue 341293003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « source/libvpx/test/fdct8x8_test.cc ('k') | source/libvpx/test/postproc.sh » ('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) 2013 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 10 matching lines...) Expand all
21 #include "./vp9_rtcd.h" 21 #include "./vp9_rtcd.h"
22 #include "vp9/common/vp9_blockd.h" 22 #include "vp9/common/vp9_blockd.h"
23 #include "vp9/common/vp9_scan.h" 23 #include "vp9/common/vp9_scan.h"
24 #include "vpx/vpx_integer.h" 24 #include "vpx/vpx_integer.h"
25 25
26 using libvpx_test::ACMRandom; 26 using libvpx_test::ACMRandom;
27 27
28 namespace { 28 namespace {
29 typedef void (*fwd_txfm_t)(const int16_t *in, int16_t *out, int stride); 29 typedef void (*fwd_txfm_t)(const int16_t *in, int16_t *out, int stride);
30 typedef void (*inv_txfm_t)(const int16_t *in, uint8_t *out, int stride); 30 typedef void (*inv_txfm_t)(const int16_t *in, uint8_t *out, int stride);
31 typedef std::tr1::tuple<inv_txfm_t, 31 typedef std::tr1::tuple<fwd_txfm_t,
32 inv_txfm_t,
32 inv_txfm_t, 33 inv_txfm_t,
33 TX_SIZE, int> partial_itxfm_param_t; 34 TX_SIZE, int> partial_itxfm_param_t;
34 const int kMaxNumCoeffs = 1024; 35 const int kMaxNumCoeffs = 1024;
35 class PartialIDctTest : public ::testing::TestWithParam<partial_itxfm_param_t> { 36 class PartialIDctTest : public ::testing::TestWithParam<partial_itxfm_param_t> {
36 public: 37 public:
37 virtual ~PartialIDctTest() {} 38 virtual ~PartialIDctTest() {}
38 virtual void SetUp() { 39 virtual void SetUp() {
39 full_itxfm_ = GET_PARAM(0); 40 ftxfm_ = GET_PARAM(0);
40 partial_itxfm_ = GET_PARAM(1); 41 full_itxfm_ = GET_PARAM(1);
41 tx_size_ = GET_PARAM(2); 42 partial_itxfm_ = GET_PARAM(2);
42 last_nonzero_ = GET_PARAM(3); 43 tx_size_ = GET_PARAM(3);
44 last_nonzero_ = GET_PARAM(4);
43 } 45 }
44 46
45 virtual void TearDown() { libvpx_test::ClearSystemState(); } 47 virtual void TearDown() { libvpx_test::ClearSystemState(); }
46 48
47 protected: 49 protected:
48 int last_nonzero_; 50 int last_nonzero_;
49 TX_SIZE tx_size_; 51 TX_SIZE tx_size_;
52 fwd_txfm_t ftxfm_;
50 inv_txfm_t full_itxfm_; 53 inv_txfm_t full_itxfm_;
51 inv_txfm_t partial_itxfm_; 54 inv_txfm_t partial_itxfm_;
52 }; 55 };
53 56
57 TEST_P(PartialIDctTest, RunQuantCheck) {
58 ACMRandom rnd(ACMRandom::DeterministicSeed());
59 int size;
60 switch (tx_size_) {
61 case TX_4X4:
62 size = 4;
63 break;
64 case TX_8X8:
65 size = 8;
66 break;
67 case TX_16X16:
68 size = 16;
69 break;
70 case TX_32X32:
71 size = 32;
72 break;
73 default:
74 FAIL() << "Wrong Size!";
75 break;
76 }
77 DECLARE_ALIGNED_ARRAY(16, int16_t, test_coef_block1, kMaxNumCoeffs);
78 DECLARE_ALIGNED_ARRAY(16, int16_t, test_coef_block2, kMaxNumCoeffs);
79 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst1, kMaxNumCoeffs);
80 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst2, kMaxNumCoeffs);
81
82 const int count_test_block = 1000;
83 const int block_size = size * size;
84
85 DECLARE_ALIGNED_ARRAY(16, int16_t, input_extreme_block, kMaxNumCoeffs);
86 DECLARE_ALIGNED_ARRAY(16, int16_t, output_ref_block, kMaxNumCoeffs);
87
88 int max_error = 0;
89 for (int i = 0; i < count_test_block; ++i) {
90 // clear out destination buffer
91 memset(dst1, 0, sizeof(*dst1) * block_size);
92 memset(dst2, 0, sizeof(*dst2) * block_size);
93 memset(test_coef_block1, 0, sizeof(*test_coef_block1) * block_size);
94 memset(test_coef_block2, 0, sizeof(*test_coef_block2) * block_size);
95
96 ACMRandom rnd(ACMRandom::DeterministicSeed());
97
98 for (int i = 0; i < count_test_block; ++i) {
99 // Initialize a test block with input range [-255, 255].
100 if (i == 0) {
101 for (int j = 0; j < block_size; ++j)
102 input_extreme_block[j] = 255;
103 } else if (i == 1) {
104 for (int j = 0; j < block_size; ++j)
105 input_extreme_block[j] = -255;
106 } else {
107 for (int j = 0; j < block_size; ++j) {
108 input_extreme_block[j] = rnd.Rand8() % 2 ? 255 : -255;
109 }
110 }
111
112 ftxfm_(input_extreme_block, output_ref_block, size);
113
114 // quantization with maximum allowed step sizes
115 test_coef_block1[0] = (output_ref_block[0] / 1336) * 1336;
116 for (int j = 1; j < last_nonzero_; ++j)
117 test_coef_block1[vp9_default_scan_orders[tx_size_].scan[j]]
118 = (output_ref_block[j] / 1828) * 1828;
119 }
120
121 REGISTER_STATE_CHECK(full_itxfm_(test_coef_block1, dst1, size));
122 REGISTER_STATE_CHECK(partial_itxfm_(test_coef_block1, dst2, size));
123
124 for (int j = 0; j < block_size; ++j) {
125 const int diff = dst1[j] - dst2[j];
126 const int error = diff * diff;
127 if (max_error < error)
128 max_error = error;
129 }
130 }
131
132 EXPECT_EQ(0, max_error)
133 << "Error: partial inverse transform produces different results";
134 }
135
54 TEST_P(PartialIDctTest, ResultsMatch) { 136 TEST_P(PartialIDctTest, ResultsMatch) {
55 ACMRandom rnd(ACMRandom::DeterministicSeed()); 137 ACMRandom rnd(ACMRandom::DeterministicSeed());
56 int size; 138 int size;
57 switch (tx_size_) { 139 switch (tx_size_) {
58 case TX_4X4: 140 case TX_4X4:
59 size = 4; 141 size = 4;
60 break; 142 break;
61 case TX_8X8: 143 case TX_8X8:
62 size = 8; 144 size = 8;
63 break; 145 break;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 } 194 }
113 195
114 EXPECT_EQ(0, max_error) 196 EXPECT_EQ(0, max_error)
115 << "Error: partial inverse transform produces different results"; 197 << "Error: partial inverse transform produces different results";
116 } 198 }
117 using std::tr1::make_tuple; 199 using std::tr1::make_tuple;
118 200
119 INSTANTIATE_TEST_CASE_P( 201 INSTANTIATE_TEST_CASE_P(
120 C, PartialIDctTest, 202 C, PartialIDctTest,
121 ::testing::Values( 203 ::testing::Values(
122 make_tuple(&vp9_idct32x32_1024_add_c, 204 make_tuple(&vp9_fdct32x32_c,
205 &vp9_idct32x32_1024_add_c,
123 &vp9_idct32x32_34_add_c, 206 &vp9_idct32x32_34_add_c,
124 TX_32X32, 34), 207 TX_32X32, 34),
125 make_tuple(&vp9_idct32x32_1024_add_c, 208 make_tuple(&vp9_fdct32x32_c,
209 &vp9_idct32x32_1024_add_c,
126 &vp9_idct32x32_1_add_c, 210 &vp9_idct32x32_1_add_c,
127 TX_32X32, 1), 211 TX_32X32, 1),
128 make_tuple(&vp9_idct16x16_256_add_c, 212 make_tuple(&vp9_fdct16x16_c,
213 &vp9_idct16x16_256_add_c,
129 &vp9_idct16x16_10_add_c, 214 &vp9_idct16x16_10_add_c,
130 TX_16X16, 10), 215 TX_16X16, 10),
131 make_tuple(&vp9_idct16x16_256_add_c, 216 make_tuple(&vp9_fdct16x16_c,
217 &vp9_idct16x16_256_add_c,
132 &vp9_idct16x16_1_add_c, 218 &vp9_idct16x16_1_add_c,
133 TX_16X16, 1), 219 TX_16X16, 1),
134 make_tuple(&vp9_idct8x8_64_add_c, 220 make_tuple(&vp9_fdct8x8_c,
221 &vp9_idct8x8_64_add_c,
135 &vp9_idct8x8_12_add_c, 222 &vp9_idct8x8_12_add_c,
136 TX_8X8, 12), 223 TX_8X8, 12),
137 make_tuple(&vp9_idct8x8_64_add_c, 224 make_tuple(&vp9_fdct8x8_c,
225 &vp9_idct8x8_64_add_c,
138 &vp9_idct8x8_1_add_c, 226 &vp9_idct8x8_1_add_c,
139 TX_8X8, 1), 227 TX_8X8, 1),
140 make_tuple(&vp9_idct4x4_16_add_c, 228 make_tuple(&vp9_fdct4x4_c,
229 &vp9_idct4x4_16_add_c,
141 &vp9_idct4x4_1_add_c, 230 &vp9_idct4x4_1_add_c,
142 TX_4X4, 1))); 231 TX_4X4, 1)));
143 #if HAVE_NEON_ASM 232 #if HAVE_NEON_ASM
144 INSTANTIATE_TEST_CASE_P( 233 INSTANTIATE_TEST_CASE_P(
145 NEON, PartialIDctTest, 234 NEON, PartialIDctTest,
146 ::testing::Values( 235 ::testing::Values(
147 make_tuple(&vp9_idct32x32_1024_add_c, 236 make_tuple(&vp9_fdct32x32_c,
237 &vp9_idct32x32_1024_add_c,
148 &vp9_idct32x32_1_add_neon, 238 &vp9_idct32x32_1_add_neon,
149 TX_32X32, 1), 239 TX_32X32, 1),
150 make_tuple(&vp9_idct16x16_256_add_c, 240 make_tuple(&vp9_fdct16x16_c,
241 &vp9_idct16x16_256_add_c,
151 &vp9_idct16x16_10_add_neon, 242 &vp9_idct16x16_10_add_neon,
152 TX_16X16, 10), 243 TX_16X16, 10),
153 make_tuple(&vp9_idct16x16_256_add_c, 244 make_tuple(&vp9_fdct16x16_c,
245 &vp9_idct16x16_256_add_c,
154 &vp9_idct16x16_1_add_neon, 246 &vp9_idct16x16_1_add_neon,
155 TX_16X16, 1), 247 TX_16X16, 1),
156 make_tuple(&vp9_idct8x8_64_add_c, 248 make_tuple(&vp9_fdct8x8_c,
249 &vp9_idct8x8_64_add_c,
157 &vp9_idct8x8_12_add_neon, 250 &vp9_idct8x8_12_add_neon,
158 TX_8X8, 12), 251 TX_8X8, 12),
159 make_tuple(&vp9_idct8x8_64_add_c, 252 make_tuple(&vp9_fdct8x8_c,
253 &vp9_idct8x8_64_add_c,
160 &vp9_idct8x8_1_add_neon, 254 &vp9_idct8x8_1_add_neon,
161 TX_8X8, 1), 255 TX_8X8, 1),
162 make_tuple(&vp9_idct4x4_16_add_c, 256 make_tuple(&vp9_fdct4x4_c,
257 &vp9_idct4x4_16_add_c,
163 &vp9_idct4x4_1_add_neon, 258 &vp9_idct4x4_1_add_neon,
164 TX_4X4, 1))); 259 TX_4X4, 1)));
165 #endif 260 #endif
166 261
167 #if HAVE_SSE2 262 #if HAVE_SSE2
168 INSTANTIATE_TEST_CASE_P( 263 INSTANTIATE_TEST_CASE_P(
169 SSE2, PartialIDctTest, 264 SSE2, PartialIDctTest,
170 ::testing::Values( 265 ::testing::Values(
171 make_tuple(&vp9_idct32x32_1024_add_c, 266 make_tuple(&vp9_fdct32x32_c,
267 &vp9_idct32x32_1024_add_c,
172 &vp9_idct32x32_34_add_sse2, 268 &vp9_idct32x32_34_add_sse2,
173 TX_32X32, 34), 269 TX_32X32, 34),
174 make_tuple(&vp9_idct32x32_1024_add_c, 270 make_tuple(&vp9_fdct32x32_c,
271 &vp9_idct32x32_1024_add_c,
175 &vp9_idct32x32_1_add_sse2, 272 &vp9_idct32x32_1_add_sse2,
176 TX_32X32, 1), 273 TX_32X32, 1),
177 make_tuple(&vp9_idct16x16_256_add_c, 274 make_tuple(&vp9_fdct16x16_c,
275 &vp9_idct16x16_256_add_c,
178 &vp9_idct16x16_10_add_sse2, 276 &vp9_idct16x16_10_add_sse2,
179 TX_16X16, 10), 277 TX_16X16, 10),
180 make_tuple(&vp9_idct16x16_256_add_c, 278 make_tuple(&vp9_fdct16x16_c,
279 &vp9_idct16x16_256_add_c,
181 &vp9_idct16x16_1_add_sse2, 280 &vp9_idct16x16_1_add_sse2,
182 TX_16X16, 1), 281 TX_16X16, 1),
183 make_tuple(&vp9_idct8x8_64_add_c, 282 make_tuple(&vp9_fdct8x8_c,
283 &vp9_idct8x8_64_add_c,
184 &vp9_idct8x8_12_add_sse2, 284 &vp9_idct8x8_12_add_sse2,
185 TX_8X8, 12), 285 TX_8X8, 12),
186 make_tuple(&vp9_idct8x8_64_add_c, 286 make_tuple(&vp9_fdct8x8_c,
287 &vp9_idct8x8_64_add_c,
187 &vp9_idct8x8_1_add_sse2, 288 &vp9_idct8x8_1_add_sse2,
188 TX_8X8, 1), 289 TX_8X8, 1),
189 make_tuple(&vp9_idct4x4_16_add_c, 290 make_tuple(&vp9_fdct4x4_c,
291 &vp9_idct4x4_16_add_c,
190 &vp9_idct4x4_1_add_sse2, 292 &vp9_idct4x4_1_add_sse2,
191 TX_4X4, 1))); 293 TX_4X4, 1)));
192 #endif 294 #endif
193 295
194 #if HAVE_SSSE3 && ARCH_X86_64 296 #if HAVE_SSSE3 && ARCH_X86_64
195 INSTANTIATE_TEST_CASE_P( 297 INSTANTIATE_TEST_CASE_P(
196 SSSE3, PartialIDctTest, 298 SSSE3_64, PartialIDctTest,
197 ::testing::Values( 299 ::testing::Values(
198 make_tuple(&vp9_idct8x8_64_add_c, 300 make_tuple(&vp9_fdct8x8_c,
301 &vp9_idct8x8_64_add_c,
199 &vp9_idct8x8_12_add_ssse3, 302 &vp9_idct8x8_12_add_ssse3,
200 TX_8X8, 12))); 303 TX_8X8, 12)));
201 #endif 304 #endif
305
306 #if HAVE_SSSE3
307 INSTANTIATE_TEST_CASE_P(
308 SSSE3, PartialIDctTest,
309 ::testing::Values(
310 make_tuple(&vp9_fdct16x16_c,
311 &vp9_idct16x16_256_add_c,
312 &vp9_idct16x16_10_add_ssse3,
313 TX_16X16, 10)));
314 #endif
202 } // namespace 315 } // namespace
OLDNEW
« no previous file with comments | « source/libvpx/test/fdct8x8_test.cc ('k') | source/libvpx/test/postproc.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698