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

Side by Side Diff: source/libvpx/test/fdct4x4_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/encode_test_driver.cc ('k') | source/libvpx/test/fdct8x8_test.cc » ('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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 virtual void RunFwdTxfm(const int16_t *in, tran_low_t *out, int stride) = 0; 95 virtual void RunFwdTxfm(const int16_t *in, tran_low_t *out, int stride) = 0;
96 96
97 virtual void RunInvTxfm(const tran_low_t *out, uint8_t *dst, int stride) = 0; 97 virtual void RunInvTxfm(const tran_low_t *out, uint8_t *dst, int stride) = 0;
98 98
99 void RunAccuracyCheck(int limit) { 99 void RunAccuracyCheck(int limit) {
100 ACMRandom rnd(ACMRandom::DeterministicSeed()); 100 ACMRandom rnd(ACMRandom::DeterministicSeed());
101 uint32_t max_error = 0; 101 uint32_t max_error = 0;
102 int64_t total_error = 0; 102 int64_t total_error = 0;
103 const int count_test_block = 10000; 103 const int count_test_block = 10000;
104 for (int i = 0; i < count_test_block; ++i) { 104 for (int i = 0; i < count_test_block; ++i) {
105 DECLARE_ALIGNED_ARRAY(16, int16_t, test_input_block, kNumCoeffs); 105 DECLARE_ALIGNED(16, int16_t, test_input_block[kNumCoeffs]);
106 DECLARE_ALIGNED_ARRAY(16, tran_low_t, test_temp_block, kNumCoeffs); 106 DECLARE_ALIGNED(16, tran_low_t, test_temp_block[kNumCoeffs]);
107 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst, kNumCoeffs); 107 DECLARE_ALIGNED(16, uint8_t, dst[kNumCoeffs]);
108 DECLARE_ALIGNED_ARRAY(16, uint8_t, src, kNumCoeffs); 108 DECLARE_ALIGNED(16, uint8_t, src[kNumCoeffs]);
109 #if CONFIG_VP9_HIGHBITDEPTH 109 #if CONFIG_VP9_HIGHBITDEPTH
110 DECLARE_ALIGNED_ARRAY(16, uint16_t, dst16, kNumCoeffs); 110 DECLARE_ALIGNED(16, uint16_t, dst16[kNumCoeffs]);
111 DECLARE_ALIGNED_ARRAY(16, uint16_t, src16, kNumCoeffs); 111 DECLARE_ALIGNED(16, uint16_t, src16[kNumCoeffs]);
112 #endif 112 #endif
113 113
114 // Initialize a test block with input range [-255, 255]. 114 // Initialize a test block with input range [-255, 255].
115 for (int j = 0; j < kNumCoeffs; ++j) { 115 for (int j = 0; j < kNumCoeffs; ++j) {
116 if (bit_depth_ == VPX_BITS_8) { 116 if (bit_depth_ == VPX_BITS_8) {
117 src[j] = rnd.Rand8(); 117 src[j] = rnd.Rand8();
118 dst[j] = rnd.Rand8(); 118 dst[j] = rnd.Rand8();
119 test_input_block[j] = src[j] - dst[j]; 119 test_input_block[j] = src[j] - dst[j];
120 #if CONFIG_VP9_HIGHBITDEPTH 120 #if CONFIG_VP9_HIGHBITDEPTH
121 } else { 121 } else {
(...skipping 13 matching lines...) Expand all
135 ASM_REGISTER_STATE_CHECK(RunInvTxfm(test_temp_block, 135 ASM_REGISTER_STATE_CHECK(RunInvTxfm(test_temp_block,
136 CONVERT_TO_BYTEPTR(dst16), pitch_)); 136 CONVERT_TO_BYTEPTR(dst16), pitch_));
137 #endif 137 #endif
138 } 138 }
139 139
140 for (int j = 0; j < kNumCoeffs; ++j) { 140 for (int j = 0; j < kNumCoeffs; ++j) {
141 #if CONFIG_VP9_HIGHBITDEPTH 141 #if CONFIG_VP9_HIGHBITDEPTH
142 const uint32_t diff = 142 const uint32_t diff =
143 bit_depth_ == VPX_BITS_8 ? dst[j] - src[j] : dst16[j] - src16[j]; 143 bit_depth_ == VPX_BITS_8 ? dst[j] - src[j] : dst16[j] - src16[j];
144 #else 144 #else
145 ASSERT_EQ(VPX_BITS_8, bit_depth_);
145 const uint32_t diff = dst[j] - src[j]; 146 const uint32_t diff = dst[j] - src[j];
146 #endif 147 #endif
147 const uint32_t error = diff * diff; 148 const uint32_t error = diff * diff;
148 if (max_error < error) 149 if (max_error < error)
149 max_error = error; 150 max_error = error;
150 total_error += error; 151 total_error += error;
151 } 152 }
152 } 153 }
153 154
154 EXPECT_GE(static_cast<uint32_t>(limit), max_error) 155 EXPECT_GE(static_cast<uint32_t>(limit), max_error)
155 << "Error: 4x4 FHT/IHT has an individual round trip error > " 156 << "Error: 4x4 FHT/IHT has an individual round trip error > "
156 << limit; 157 << limit;
157 158
158 EXPECT_GE(count_test_block * limit, total_error) 159 EXPECT_GE(count_test_block * limit, total_error)
159 << "Error: 4x4 FHT/IHT has average round trip error > " << limit 160 << "Error: 4x4 FHT/IHT has average round trip error > " << limit
160 << " per block"; 161 << " per block";
161 } 162 }
162 163
163 void RunCoeffCheck() { 164 void RunCoeffCheck() {
164 ACMRandom rnd(ACMRandom::DeterministicSeed()); 165 ACMRandom rnd(ACMRandom::DeterministicSeed());
165 const int count_test_block = 5000; 166 const int count_test_block = 5000;
166 DECLARE_ALIGNED_ARRAY(16, int16_t, input_block, kNumCoeffs); 167 DECLARE_ALIGNED(16, int16_t, input_block[kNumCoeffs]);
167 DECLARE_ALIGNED_ARRAY(16, tran_low_t, output_ref_block, kNumCoeffs); 168 DECLARE_ALIGNED(16, tran_low_t, output_ref_block[kNumCoeffs]);
168 DECLARE_ALIGNED_ARRAY(16, tran_low_t, output_block, kNumCoeffs); 169 DECLARE_ALIGNED(16, tran_low_t, output_block[kNumCoeffs]);
169 170
170 for (int i = 0; i < count_test_block; ++i) { 171 for (int i = 0; i < count_test_block; ++i) {
171 // Initialize a test block with input range [-mask_, mask_]. 172 // Initialize a test block with input range [-mask_, mask_].
172 for (int j = 0; j < kNumCoeffs; ++j) 173 for (int j = 0; j < kNumCoeffs; ++j)
173 input_block[j] = (rnd.Rand16() & mask_) - (rnd.Rand16() & mask_); 174 input_block[j] = (rnd.Rand16() & mask_) - (rnd.Rand16() & mask_);
174 175
175 fwd_txfm_ref(input_block, output_ref_block, pitch_, tx_type_); 176 fwd_txfm_ref(input_block, output_ref_block, pitch_, tx_type_);
176 ASM_REGISTER_STATE_CHECK(RunFwdTxfm(input_block, output_block, pitch_)); 177 ASM_REGISTER_STATE_CHECK(RunFwdTxfm(input_block, output_block, pitch_));
177 178
178 // The minimum quant value is 4. 179 // The minimum quant value is 4.
179 for (int j = 0; j < kNumCoeffs; ++j) 180 for (int j = 0; j < kNumCoeffs; ++j)
180 EXPECT_EQ(output_block[j], output_ref_block[j]); 181 EXPECT_EQ(output_block[j], output_ref_block[j]);
181 } 182 }
182 } 183 }
183 184
184 void RunMemCheck() { 185 void RunMemCheck() {
185 ACMRandom rnd(ACMRandom::DeterministicSeed()); 186 ACMRandom rnd(ACMRandom::DeterministicSeed());
186 const int count_test_block = 5000; 187 const int count_test_block = 5000;
187 DECLARE_ALIGNED_ARRAY(16, int16_t, input_block, kNumCoeffs); 188 DECLARE_ALIGNED(16, int16_t, input_extreme_block[kNumCoeffs]);
188 DECLARE_ALIGNED_ARRAY(16, int16_t, input_extreme_block, kNumCoeffs); 189 DECLARE_ALIGNED(16, tran_low_t, output_ref_block[kNumCoeffs]);
189 DECLARE_ALIGNED_ARRAY(16, tran_low_t, output_ref_block, kNumCoeffs); 190 DECLARE_ALIGNED(16, tran_low_t, output_block[kNumCoeffs]);
190 DECLARE_ALIGNED_ARRAY(16, tran_low_t, output_block, kNumCoeffs);
191 191
192 for (int i = 0; i < count_test_block; ++i) { 192 for (int i = 0; i < count_test_block; ++i) {
193 // Initialize a test block with input range [-mask_, mask_]. 193 // Initialize a test block with input range [-mask_, mask_].
194 for (int j = 0; j < kNumCoeffs; ++j) { 194 for (int j = 0; j < kNumCoeffs; ++j) {
195 input_block[j] = (rnd.Rand16() & mask_) - (rnd.Rand16() & mask_);
196 input_extreme_block[j] = rnd.Rand8() % 2 ? mask_ : -mask_; 195 input_extreme_block[j] = rnd.Rand8() % 2 ? mask_ : -mask_;
197 } 196 }
198 if (i == 0) { 197 if (i == 0) {
199 for (int j = 0; j < kNumCoeffs; ++j) 198 for (int j = 0; j < kNumCoeffs; ++j)
200 input_extreme_block[j] = mask_; 199 input_extreme_block[j] = mask_;
201 } else if (i == 1) { 200 } else if (i == 1) {
202 for (int j = 0; j < kNumCoeffs; ++j) 201 for (int j = 0; j < kNumCoeffs; ++j)
203 input_extreme_block[j] = -mask_; 202 input_extreme_block[j] = -mask_;
204 } 203 }
205 204
206 fwd_txfm_ref(input_extreme_block, output_ref_block, pitch_, tx_type_); 205 fwd_txfm_ref(input_extreme_block, output_ref_block, pitch_, tx_type_);
207 ASM_REGISTER_STATE_CHECK(RunFwdTxfm(input_extreme_block, 206 ASM_REGISTER_STATE_CHECK(RunFwdTxfm(input_extreme_block,
208 output_block, pitch_)); 207 output_block, pitch_));
209 208
210 // The minimum quant value is 4. 209 // The minimum quant value is 4.
211 for (int j = 0; j < kNumCoeffs; ++j) { 210 for (int j = 0; j < kNumCoeffs; ++j) {
212 EXPECT_EQ(output_block[j], output_ref_block[j]); 211 EXPECT_EQ(output_block[j], output_ref_block[j]);
213 EXPECT_GE(4 * DCT_MAX_VALUE << (bit_depth_ - 8), abs(output_block[j])) 212 EXPECT_GE(4 * DCT_MAX_VALUE << (bit_depth_ - 8), abs(output_block[j]))
214 << "Error: 4x4 FDCT has coefficient larger than 4*DCT_MAX_VALUE"; 213 << "Error: 4x4 FDCT has coefficient larger than 4*DCT_MAX_VALUE";
215 } 214 }
216 } 215 }
217 } 216 }
218 217
219 void RunInvAccuracyCheck(int limit) { 218 void RunInvAccuracyCheck(int limit) {
220 ACMRandom rnd(ACMRandom::DeterministicSeed()); 219 ACMRandom rnd(ACMRandom::DeterministicSeed());
221 const int count_test_block = 1000; 220 const int count_test_block = 1000;
222 DECLARE_ALIGNED_ARRAY(16, int16_t, in, kNumCoeffs); 221 DECLARE_ALIGNED(16, int16_t, in[kNumCoeffs]);
223 DECLARE_ALIGNED_ARRAY(16, tran_low_t, coeff, kNumCoeffs); 222 DECLARE_ALIGNED(16, tran_low_t, coeff[kNumCoeffs]);
224 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst, kNumCoeffs); 223 DECLARE_ALIGNED(16, uint8_t, dst[kNumCoeffs]);
225 DECLARE_ALIGNED_ARRAY(16, uint8_t, src, kNumCoeffs); 224 DECLARE_ALIGNED(16, uint8_t, src[kNumCoeffs]);
226 #if CONFIG_VP9_HIGHBITDEPTH 225 #if CONFIG_VP9_HIGHBITDEPTH
227 DECLARE_ALIGNED_ARRAY(16, uint16_t, dst16, kNumCoeffs); 226 DECLARE_ALIGNED(16, uint16_t, dst16[kNumCoeffs]);
228 DECLARE_ALIGNED_ARRAY(16, uint16_t, src16, kNumCoeffs); 227 DECLARE_ALIGNED(16, uint16_t, src16[kNumCoeffs]);
229 #endif 228 #endif
230 229
231 for (int i = 0; i < count_test_block; ++i) { 230 for (int i = 0; i < count_test_block; ++i) {
232 // Initialize a test block with input range [-mask_, mask_]. 231 // Initialize a test block with input range [-mask_, mask_].
233 for (int j = 0; j < kNumCoeffs; ++j) { 232 for (int j = 0; j < kNumCoeffs; ++j) {
234 if (bit_depth_ == VPX_BITS_8) { 233 if (bit_depth_ == VPX_BITS_8) {
235 src[j] = rnd.Rand8(); 234 src[j] = rnd.Rand8();
236 dst[j] = rnd.Rand8(); 235 dst[j] = rnd.Rand8();
237 in[j] = src[j] - dst[j]; 236 in[j] = src[j] - dst[j];
238 #if CONFIG_VP9_HIGHBITDEPTH 237 #if CONFIG_VP9_HIGHBITDEPTH
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 make_tuple(&vp9_highbd_fht4x4_sse2, &iht4x4_12, 0, VPX_BITS_12), 529 make_tuple(&vp9_highbd_fht4x4_sse2, &iht4x4_12, 0, VPX_BITS_12),
531 make_tuple(&vp9_highbd_fht4x4_sse2, &iht4x4_12, 1, VPX_BITS_12), 530 make_tuple(&vp9_highbd_fht4x4_sse2, &iht4x4_12, 1, VPX_BITS_12),
532 make_tuple(&vp9_highbd_fht4x4_sse2, &iht4x4_12, 2, VPX_BITS_12), 531 make_tuple(&vp9_highbd_fht4x4_sse2, &iht4x4_12, 2, VPX_BITS_12),
533 make_tuple(&vp9_highbd_fht4x4_sse2, &iht4x4_12, 3, VPX_BITS_12), 532 make_tuple(&vp9_highbd_fht4x4_sse2, &iht4x4_12, 3, VPX_BITS_12),
534 make_tuple(&vp9_fht4x4_sse2, &vp9_iht4x4_16_add_c, 0, VPX_BITS_8), 533 make_tuple(&vp9_fht4x4_sse2, &vp9_iht4x4_16_add_c, 0, VPX_BITS_8),
535 make_tuple(&vp9_fht4x4_sse2, &vp9_iht4x4_16_add_c, 1, VPX_BITS_8), 534 make_tuple(&vp9_fht4x4_sse2, &vp9_iht4x4_16_add_c, 1, VPX_BITS_8),
536 make_tuple(&vp9_fht4x4_sse2, &vp9_iht4x4_16_add_c, 2, VPX_BITS_8), 535 make_tuple(&vp9_fht4x4_sse2, &vp9_iht4x4_16_add_c, 2, VPX_BITS_8),
537 make_tuple(&vp9_fht4x4_sse2, &vp9_iht4x4_16_add_c, 3, VPX_BITS_8))); 536 make_tuple(&vp9_fht4x4_sse2, &vp9_iht4x4_16_add_c, 3, VPX_BITS_8)));
538 #endif // HAVE_SSE2 && CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE 537 #endif // HAVE_SSE2 && CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
539 } // namespace 538 } // namespace
OLDNEW
« no previous file with comments | « source/libvpx/test/encode_test_driver.cc ('k') | source/libvpx/test/fdct8x8_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698