OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. | 2 * Copyright 2011 The LibYuv 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 TESTPLANARTOP(I422, 2, 1, I420, 2, 2) | 167 TESTPLANARTOP(I422, 2, 1, I420, 2, 2) |
168 TESTPLANARTOP(I444, 1, 1, I420, 2, 2) | 168 TESTPLANARTOP(I444, 1, 1, I420, 2, 2) |
169 TESTPLANARTOP(I411, 4, 1, I420, 2, 2) | 169 TESTPLANARTOP(I411, 4, 1, I420, 2, 2) |
170 TESTPLANARTOP(I420, 2, 2, I422, 2, 1) | 170 TESTPLANARTOP(I420, 2, 2, I422, 2, 1) |
171 TESTPLANARTOP(I420, 2, 2, I444, 1, 1) | 171 TESTPLANARTOP(I420, 2, 2, I444, 1, 1) |
172 TESTPLANARTOP(I420, 2, 2, I411, 4, 1) | 172 TESTPLANARTOP(I420, 2, 2, I411, 4, 1) |
173 TESTPLANARTOP(I420, 2, 2, I420Mirror, 2, 2) | 173 TESTPLANARTOP(I420, 2, 2, I420Mirror, 2, 2) |
174 TESTPLANARTOP(I422, 2, 1, I422, 2, 1) | 174 TESTPLANARTOP(I422, 2, 1, I422, 2, 1) |
175 TESTPLANARTOP(I444, 1, 1, I444, 1, 1) | 175 TESTPLANARTOP(I444, 1, 1, I444, 1, 1) |
176 | 176 |
177 | |
178 | |
179 // Test Android 420 to I420 | 177 // Test Android 420 to I420 |
180 | 178 #define TESTAPLANARTOPI(SRC_FMT_PLANAR, PIXEL_STRIDE, \ |
181 #define TESTAPLANARTOPI(SRC_FMT_PLANAR, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ | 179 SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ |
182 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, W1280, N, NEG, OFF) \ | 180 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, W1280, N, NEG, OFF, \ |
183 TEST_F(LibYUVConvertTest, SRC_FMT_PLANAR##To##FMT_PLANAR##N) { \ | 181 PN, OFF_U, OFF_V) \ |
| 182 TEST_F(LibYUVConvertTest, SRC_FMT_PLANAR##To##FMT_PLANAR##_##PN##N) {\ |
184 const int kWidth = ((W1280) > 0) ? (W1280) : 1; \ | 183 const int kWidth = ((W1280) > 0) ? (W1280) : 1; \ |
185 const int kHeight = benchmark_height_; \ | 184 const int kHeight = benchmark_height_; \ |
| 185 const int kSizeUV = SUBSAMPLE(kWidth, SRC_SUBSAMP_X) * \ |
| 186 SUBSAMPLE(kHeight, SRC_SUBSAMP_Y); \ |
186 align_buffer_page_end(src_y, kWidth * kHeight + OFF); \ | 187 align_buffer_page_end(src_y, kWidth * kHeight + OFF); \ |
187 align_buffer_page_end(src_u, \ | 188 align_buffer_page_end(src_uv, kSizeUV * ((PIXEL_STRIDE == 3) ? 3 : 2) + OFF);\ |
188 SUBSAMPLE(kWidth, SRC_SUBSAMP_X) * \ | |
189 SUBSAMPLE(kHeight, SRC_SUBSAMP_Y) + OFF); \ | |
190 align_buffer_page_end(src_v, \ | |
191 SUBSAMPLE(kWidth, SRC_SUBSAMP_X) * \ | |
192 SUBSAMPLE(kHeight, SRC_SUBSAMP_Y) + OFF); \ | |
193 align_buffer_page_end(dst_y_c, kWidth * kHeight); \ | 189 align_buffer_page_end(dst_y_c, kWidth * kHeight); \ |
194 align_buffer_page_end(dst_u_c, \ | 190 align_buffer_page_end(dst_u_c, \ |
195 SUBSAMPLE(kWidth, SUBSAMP_X) * \ | 191 SUBSAMPLE(kWidth, SUBSAMP_X) * \ |
196 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ | 192 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ |
197 align_buffer_page_end(dst_v_c, \ | 193 align_buffer_page_end(dst_v_c, \ |
198 SUBSAMPLE(kWidth, SUBSAMP_X) * \ | 194 SUBSAMPLE(kWidth, SUBSAMP_X) * \ |
199 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ | 195 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ |
200 align_buffer_page_end(dst_y_opt, kWidth * kHeight); \ | 196 align_buffer_page_end(dst_y_opt, kWidth * kHeight); \ |
201 align_buffer_page_end(dst_u_opt, \ | 197 align_buffer_page_end(dst_u_opt, \ |
202 SUBSAMPLE(kWidth, SUBSAMP_X) * \ | 198 SUBSAMPLE(kWidth, SUBSAMP_X) * \ |
203 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ | 199 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ |
204 align_buffer_page_end(dst_v_opt, \ | 200 align_buffer_page_end(dst_v_opt, \ |
205 SUBSAMPLE(kWidth, SUBSAMP_X) * \ | 201 SUBSAMPLE(kWidth, SUBSAMP_X) * \ |
206 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ | 202 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ |
| 203 uint8* src_u = src_uv + OFF_U; \ |
| 204 uint8* src_v = src_uv + (PIXEL_STRIDE == 1 ? kSizeUV : OFF_V); \ |
| 205 int src_stride_uv = SUBSAMPLE(kWidth, SUBSAMP_X) * PIXEL_STRIDE; \ |
207 for (int i = 0; i < kHeight; ++i) \ | 206 for (int i = 0; i < kHeight; ++i) \ |
208 for (int j = 0; j < kWidth; ++j) \ | 207 for (int j = 0; j < kWidth; ++j) \ |
209 src_y[i * kWidth + j + OFF] = (fastrand() & 0xff); \ | 208 src_y[i * kWidth + j + OFF] = (fastrand() & 0xff); \ |
210 for (int i = 0; i < SUBSAMPLE(kHeight, SRC_SUBSAMP_Y); ++i) { \ | 209 for (int i = 0; i < SUBSAMPLE(kHeight, SRC_SUBSAMP_Y); ++i) { \ |
211 for (int j = 0; j < SUBSAMPLE(kWidth, SRC_SUBSAMP_X); ++j) { \ | 210 for (int j = 0; j < SUBSAMPLE(kWidth, SRC_SUBSAMP_X); ++j) { \ |
212 src_u[(i * SUBSAMPLE(kWidth, SRC_SUBSAMP_X)) + j + OFF] = \ | 211 src_u[(i * src_stride_uv) + j * PIXEL_STRIDE + OFF] = \ |
213 (fastrand() & 0xff); \ | 212 (fastrand() & 0xff); \ |
214 src_v[(i * SUBSAMPLE(kWidth, SRC_SUBSAMP_X)) + j + OFF] = \ | 213 src_v[(i * src_stride_uv) + j * PIXEL_STRIDE + OFF] = \ |
215 (fastrand() & 0xff); \ | 214 (fastrand() & 0xff); \ |
216 } \ | 215 } \ |
217 } \ | 216 } \ |
218 memset(dst_y_c, 1, kWidth * kHeight); \ | 217 memset(dst_y_c, 1, kWidth * kHeight); \ |
219 memset(dst_u_c, 2, SUBSAMPLE(kWidth, SUBSAMP_X) * \ | 218 memset(dst_u_c, 2, SUBSAMPLE(kWidth, SUBSAMP_X) * \ |
220 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ | 219 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ |
221 memset(dst_v_c, 3, SUBSAMPLE(kWidth, SUBSAMP_X) * \ | 220 memset(dst_v_c, 3, SUBSAMPLE(kWidth, SUBSAMP_X) * \ |
222 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ | 221 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ |
223 memset(dst_y_opt, 101, kWidth * kHeight); \ | 222 memset(dst_y_opt, 101, kWidth * kHeight); \ |
224 memset(dst_u_opt, 102, SUBSAMPLE(kWidth, SUBSAMP_X) * \ | 223 memset(dst_u_opt, 102, SUBSAMPLE(kWidth, SUBSAMP_X) * \ |
225 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ | 224 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ |
226 memset(dst_v_opt, 103, SUBSAMPLE(kWidth, SUBSAMP_X) * \ | 225 memset(dst_v_opt, 103, SUBSAMPLE(kWidth, SUBSAMP_X) * \ |
227 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ | 226 SUBSAMPLE(kHeight, SUBSAMP_Y)); \ |
228 MaskCpuFlags(disable_cpu_flags_); \ | 227 MaskCpuFlags(disable_cpu_flags_); \ |
229 SRC_FMT_PLANAR##To##FMT_PLANAR(src_y + OFF, kWidth, \ | 228 SRC_FMT_PLANAR##To##FMT_PLANAR(src_y + OFF, kWidth, \ |
230 src_u + OFF, \ | 229 src_u + OFF, \ |
231 SUBSAMPLE(kWidth, SRC_SUBSAMP_X), \ | 230 SUBSAMPLE(kWidth, SRC_SUBSAMP_X), \ |
232 src_v + OFF, \ | 231 src_v + OFF, \ |
233 SUBSAMPLE(kWidth, SRC_SUBSAMP_X), \ | 232 SUBSAMPLE(kWidth, SRC_SUBSAMP_X), \ |
234 1, \ | 233 PIXEL_STRIDE, \ |
235 dst_y_c, kWidth, \ | 234 dst_y_c, kWidth, \ |
236 dst_u_c, SUBSAMPLE(kWidth, SUBSAMP_X), \ | 235 dst_u_c, SUBSAMPLE(kWidth, SUBSAMP_X), \ |
237 dst_v_c, SUBSAMPLE(kWidth, SUBSAMP_X), \ | 236 dst_v_c, SUBSAMPLE(kWidth, SUBSAMP_X), \ |
238 kWidth, NEG kHeight); \ | 237 kWidth, NEG kHeight); \ |
239 MaskCpuFlags(benchmark_cpu_info_); \ | 238 MaskCpuFlags(benchmark_cpu_info_); \ |
240 for (int i = 0; i < benchmark_iterations_; ++i) { \ | 239 for (int i = 0; i < benchmark_iterations_; ++i) { \ |
241 SRC_FMT_PLANAR##To##FMT_PLANAR(src_y + OFF, kWidth, \ | 240 SRC_FMT_PLANAR##To##FMT_PLANAR(src_y + OFF, kWidth, \ |
242 src_u + OFF, \ | 241 src_u + OFF, \ |
243 SUBSAMPLE(kWidth, SRC_SUBSAMP_X), \ | 242 SUBSAMPLE(kWidth, SRC_SUBSAMP_X), \ |
244 src_v + OFF, \ | 243 src_v + OFF, \ |
245 SUBSAMPLE(kWidth, SRC_SUBSAMP_X), \ | 244 SUBSAMPLE(kWidth, SRC_SUBSAMP_X), \ |
246 1, \ | 245 PIXEL_STRIDE, \ |
247 dst_y_opt, kWidth, \ | 246 dst_y_opt, kWidth, \ |
248 dst_u_opt, SUBSAMPLE(kWidth, SUBSAMP_X), \ | 247 dst_u_opt, SUBSAMPLE(kWidth, SUBSAMP_X), \ |
249 dst_v_opt, SUBSAMPLE(kWidth, SUBSAMP_X), \ | 248 dst_v_opt, SUBSAMPLE(kWidth, SUBSAMP_X), \ |
250 kWidth, NEG kHeight); \ | 249 kWidth, NEG kHeight); \ |
251 } \ | 250 } \ |
252 int max_diff = 0; \ | 251 int max_diff = 0; \ |
253 for (int i = 0; i < kHeight; ++i) { \ | 252 for (int i = 0; i < kHeight; ++i) { \ |
254 for (int j = 0; j < kWidth; ++j) { \ | 253 for (int j = 0; j < kWidth; ++j) { \ |
255 int abs_diff = \ | 254 int abs_diff = \ |
256 abs(static_cast<int>(dst_y_c[i * kWidth + j]) - \ | 255 abs(static_cast<int>(dst_y_c[i * kWidth + j]) - \ |
(...skipping 30 matching lines...) Expand all Loading... |
287 } \ | 286 } \ |
288 } \ | 287 } \ |
289 EXPECT_LE(max_diff, 3); \ | 288 EXPECT_LE(max_diff, 3); \ |
290 free_aligned_buffer_page_end(dst_y_c); \ | 289 free_aligned_buffer_page_end(dst_y_c); \ |
291 free_aligned_buffer_page_end(dst_u_c); \ | 290 free_aligned_buffer_page_end(dst_u_c); \ |
292 free_aligned_buffer_page_end(dst_v_c); \ | 291 free_aligned_buffer_page_end(dst_v_c); \ |
293 free_aligned_buffer_page_end(dst_y_opt); \ | 292 free_aligned_buffer_page_end(dst_y_opt); \ |
294 free_aligned_buffer_page_end(dst_u_opt); \ | 293 free_aligned_buffer_page_end(dst_u_opt); \ |
295 free_aligned_buffer_page_end(dst_v_opt); \ | 294 free_aligned_buffer_page_end(dst_v_opt); \ |
296 free_aligned_buffer_page_end(src_y); \ | 295 free_aligned_buffer_page_end(src_y); \ |
297 free_aligned_buffer_page_end(src_u); \ | 296 free_aligned_buffer_page_end(src_uv); \ |
298 free_aligned_buffer_page_end(src_v); \ | |
299 } | 297 } |
300 | 298 |
301 #define TESTAPLANARTOP(SRC_FMT_PLANAR, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ | 299 #define TESTAPLANARTOP(SRC_FMT_PLANAR, PN, PIXEL_STRIDE, OFF_U, OFF_V, \ |
| 300 SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ |
302 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y) \ | 301 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y) \ |
303 TESTAPLANARTOPI(SRC_FMT_PLANAR, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ | 302 TESTAPLANARTOPI(SRC_FMT_PLANAR, PIXEL_STRIDE, SRC_SUBSAMP_X, \ |
304 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \ | 303 SRC_SUBSAMP_Y, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \ |
305 benchmark_width_ - 4, _Any, +, 0) \ | 304 benchmark_width_ - 4, _Any, +, 0, PN, OFF_U, OFF_V) \ |
306 TESTAPLANARTOPI(SRC_FMT_PLANAR, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ | 305 TESTAPLANARTOPI(SRC_FMT_PLANAR, PIXEL_STRIDE, SRC_SUBSAMP_X, \ |
307 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \ | 306 SRC_SUBSAMP_Y, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \ |
308 benchmark_width_, _Unaligned, +, 1) \ | 307 benchmark_width_, _Unaligned, +, 1, PN, OFF_U, OFF_V) \ |
309 TESTAPLANARTOPI(SRC_FMT_PLANAR, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ | 308 TESTAPLANARTOPI(SRC_FMT_PLANAR, PIXEL_STRIDE, SRC_SUBSAMP_X, \ |
310 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \ | 309 SRC_SUBSAMP_Y, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \ |
311 benchmark_width_, _Invert, -, 0) \ | 310 benchmark_width_, _Invert, -, 0, PN, OFF_U, OFF_V) \ |
312 TESTAPLANARTOPI(SRC_FMT_PLANAR, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ | 311 TESTAPLANARTOPI(SRC_FMT_PLANAR, PIXEL_STRIDE, SRC_SUBSAMP_X, \ |
313 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \ | 312 SRC_SUBSAMP_Y, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \ |
314 benchmark_width_, _Opt, +, 0) | 313 benchmark_width_, _Opt, +, 0, PN, OFF_U, OFF_V) |
315 | 314 |
316 TESTAPLANARTOP(Android420, 2, 2, I420, 2, 2) | 315 TESTAPLANARTOP(Android420, I420, 1, 0, 0, 2, 2, I420, 2, 2) |
317 | 316 TESTAPLANARTOP(Android420, NV12, 2, 0, 1, 2, 2, I420, 2, 2) |
| 317 TESTAPLANARTOP(Android420, NV21, 2, 1, 0, 2, 2, I420, 2, 2) |
| 318 TESTAPLANARTOP(Android420, YUV3, 3, 0, 1, 2, 2, I420, 2, 2) |
318 | 319 |
319 #define TESTPLANARTOBPI(SRC_FMT_PLANAR, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ | 320 #define TESTPLANARTOBPI(SRC_FMT_PLANAR, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \ |
320 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, W1280, N, NEG, OFF) \ | 321 FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, W1280, N, NEG, OFF) \ |
321 TEST_F(LibYUVConvertTest, SRC_FMT_PLANAR##To##FMT_PLANAR##N) { \ | 322 TEST_F(LibYUVConvertTest, SRC_FMT_PLANAR##To##FMT_PLANAR##N) { \ |
322 const int kWidth = ((W1280) > 0) ? (W1280) : 1; \ | 323 const int kWidth = ((W1280) > 0) ? (W1280) : 1; \ |
323 const int kHeight = benchmark_height_; \ | 324 const int kHeight = benchmark_height_; \ |
324 align_buffer_page_end(src_y, kWidth * kHeight + OFF); \ | 325 align_buffer_page_end(src_y, kWidth * kHeight + OFF); \ |
325 align_buffer_page_end(src_u, \ | 326 align_buffer_page_end(src_u, \ |
326 SUBSAMPLE(kWidth, SRC_SUBSAMP_X) * \ | 327 SUBSAMPLE(kWidth, SRC_SUBSAMP_X) * \ |
327 SUBSAMPLE(kHeight, SRC_SUBSAMP_Y) + OFF); \ | 328 SUBSAMPLE(kHeight, SRC_SUBSAMP_Y) + OFF); \ |
(...skipping 1666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1994 benchmark_width_, _Invert, -, 0, FMT_C, BPP_C, 0) \ | 1995 benchmark_width_, _Invert, -, 0, FMT_C, BPP_C, 0) \ |
1995 TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \ | 1996 TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \ |
1996 benchmark_width_, _Opt, +, 0, FMT_C, BPP_C, 0) \ | 1997 benchmark_width_, _Opt, +, 0, FMT_C, BPP_C, 0) \ |
1997 TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \ | 1998 TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \ |
1998 benchmark_width_, _Premult, +, 0, FMT_C, BPP_C, 1) | 1999 benchmark_width_, _Premult, +, 0, FMT_C, BPP_C, 1) |
1999 | 2000 |
2000 TESTQPLANARTOE(I420Alpha, 2, 2, ARGB, 1, 4, ABGR, 4) | 2001 TESTQPLANARTOE(I420Alpha, 2, 2, ARGB, 1, 4, ABGR, 4) |
2001 TESTQPLANARTOE(I420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4) | 2002 TESTQPLANARTOE(I420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4) |
2002 | 2003 |
2003 } // namespace libyuv | 2004 } // namespace libyuv |
OLD | NEW |