| 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 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 free_aligned_buffer_page_end(src_y_16) | 267 free_aligned_buffer_page_end(src_y_16) |
| 268 free_aligned_buffer_page_end(src_u_16) | 268 free_aligned_buffer_page_end(src_u_16) |
| 269 free_aligned_buffer_page_end(src_v_16) | 269 free_aligned_buffer_page_end(src_v_16) |
| 270 | 270 |
| 271 return max_diff; | 271 return max_diff; |
| 272 } | 272 } |
| 273 | 273 |
| 274 // The following adjustments in dimensions ensure the scale factor will be | 274 // The following adjustments in dimensions ensure the scale factor will be |
| 275 // exactly achieved. | 275 // exactly achieved. |
| 276 // 2 is chroma subsample | 276 // 2 is chroma subsample |
| 277 #define DX(x, nom, denom) ((int)(Abs(x) / nom / 2) * nom * 2) | 277 #define DX(x, nom, denom) static_cast<int>((Abs(x) / nom / 2) * nom * 2) |
| 278 #define SX(x, nom, denom) ((int)(x / nom / 2) * denom * 2) | 278 #define SX(x, nom, denom) static_cast<int>((x / nom / 2) * denom * 2) |
| 279 | 279 |
| 280 #define TEST_FACTOR1(name, filter, nom, denom, max_diff) \ | 280 #define TEST_FACTOR1(name, filter, nom, denom, max_diff) \ |
| 281 TEST_F(libyuvTest, ScaleDownBy##name##_##filter) { \ | 281 TEST_F(LibYUVScaleTest, ScaleDownBy##name##_##filter) { \ |
| 282 int diff = TestFilter(SX(benchmark_width_, nom, denom), \ | 282 int diff = TestFilter(SX(benchmark_width_, nom, denom), \ |
| 283 SX(benchmark_height_, nom, denom), \ | 283 SX(benchmark_height_, nom, denom), \ |
| 284 DX(benchmark_width_, nom, denom), \ | 284 DX(benchmark_width_, nom, denom), \ |
| 285 DX(benchmark_height_, nom, denom), \ | 285 DX(benchmark_height_, nom, denom), \ |
| 286 kFilter##filter, benchmark_iterations_, \ | 286 kFilter##filter, benchmark_iterations_, \ |
| 287 disable_cpu_flags_); \ | 287 disable_cpu_flags_); \ |
| 288 EXPECT_LE(diff, max_diff); \ | 288 EXPECT_LE(diff, max_diff); \ |
| 289 } \ | 289 } \ |
| 290 TEST_F(libyuvTest, DISABLED_ScaleDownBy##name##_##filter##_16) { \ | 290 TEST_F(LibYUVScaleTest, DISABLED_ScaleDownBy##name##_##filter##_16) { \ |
| 291 int diff = TestFilter_16(SX(benchmark_width_, nom, denom), \ | 291 int diff = TestFilter_16(SX(benchmark_width_, nom, denom), \ |
| 292 SX(benchmark_height_, nom, denom), \ | 292 SX(benchmark_height_, nom, denom), \ |
| 293 DX(benchmark_width_, nom, denom), \ | 293 DX(benchmark_width_, nom, denom), \ |
| 294 DX(benchmark_height_, nom, denom), \ | 294 DX(benchmark_height_, nom, denom), \ |
| 295 kFilter##filter, benchmark_iterations_); \ | 295 kFilter##filter, benchmark_iterations_); \ |
| 296 EXPECT_LE(diff, max_diff); \ | 296 EXPECT_LE(diff, max_diff); \ |
| 297 } | 297 } |
| 298 | 298 |
| 299 // Test a scale factor with all 4 filters. Expect unfiltered to be exact, but | 299 // Test a scale factor with all 4 filters. Expect unfiltered to be exact, but |
| 300 // filtering is different fixed point implementations for SSSE3, Neon and C. | 300 // filtering is different fixed point implementations for SSSE3, Neon and C. |
| 301 #define TEST_FACTOR(name, nom, denom) \ | 301 #define TEST_FACTOR(name, nom, denom) \ |
| 302 TEST_FACTOR1(name, None, nom, denom, 0) \ | 302 TEST_FACTOR1(name, None, nom, denom, 0) \ |
| 303 TEST_FACTOR1(name, Linear, nom, denom, 3) \ | 303 TEST_FACTOR1(name, Linear, nom, denom, 3) \ |
| 304 TEST_FACTOR1(name, Bilinear, nom, denom, 3) \ | 304 TEST_FACTOR1(name, Bilinear, nom, denom, 3) \ |
| 305 TEST_FACTOR1(name, Box, nom, denom, 3) | 305 TEST_FACTOR1(name, Box, nom, denom, 3) |
| 306 | 306 |
| 307 TEST_FACTOR(2, 1, 2) | 307 TEST_FACTOR(2, 1, 2) |
| 308 TEST_FACTOR(4, 1, 4) | 308 TEST_FACTOR(4, 1, 4) |
| 309 TEST_FACTOR(8, 1, 8) | 309 TEST_FACTOR(8, 1, 8) |
| 310 TEST_FACTOR(3by4, 3, 4) | 310 TEST_FACTOR(3by4, 3, 4) |
| 311 TEST_FACTOR(3by8, 3, 8) | 311 TEST_FACTOR(3by8, 3, 8) |
| 312 TEST_FACTOR(3, 1, 3) | 312 TEST_FACTOR(3, 1, 3) |
| 313 #undef TEST_FACTOR1 | 313 #undef TEST_FACTOR1 |
| 314 #undef TEST_FACTOR | 314 #undef TEST_FACTOR |
| 315 #undef SX | 315 #undef SX |
| 316 #undef DX | 316 #undef DX |
| 317 | 317 |
| 318 #define TEST_SCALETO1(name, width, height, filter, max_diff) \ | 318 #define TEST_SCALETO1(name, width, height, filter, max_diff) \ |
| 319 TEST_F(libyuvTest, name##To##width##x##height##_##filter) { \ | 319 TEST_F(LibYUVScaleTest, name##To##width##x##height##_##filter) { \ |
| 320 int diff = TestFilter(benchmark_width_, benchmark_height_, \ | 320 int diff = TestFilter(benchmark_width_, benchmark_height_, \ |
| 321 width, height, \ | 321 width, height, \ |
| 322 kFilter##filter, benchmark_iterations_, \ | 322 kFilter##filter, benchmark_iterations_, \ |
| 323 disable_cpu_flags_); \ | 323 disable_cpu_flags_); \ |
| 324 EXPECT_LE(diff, max_diff); \ | 324 EXPECT_LE(diff, max_diff); \ |
| 325 } \ | 325 } \ |
| 326 TEST_F(libyuvTest, name##From##width##x##height##_##filter) { \ | 326 TEST_F(LibYUVScaleTest, name##From##width##x##height##_##filter) { \ |
| 327 int diff = TestFilter(width, height, \ | 327 int diff = TestFilter(width, height, \ |
| 328 Abs(benchmark_width_), Abs(benchmark_height_), \ | 328 Abs(benchmark_width_), Abs(benchmark_height_), \ |
| 329 kFilter##filter, benchmark_iterations_, \ | 329 kFilter##filter, benchmark_iterations_, \ |
| 330 disable_cpu_flags_); \ | 330 disable_cpu_flags_); \ |
| 331 EXPECT_LE(diff, max_diff); \ | 331 EXPECT_LE(diff, max_diff); \ |
| 332 } \ | 332 } \ |
| 333 TEST_F(libyuvTest, \ | 333 TEST_F(LibYUVScaleTest, \ |
| 334 DISABLED_##name##To##width##x##height##_##filter##_16) { \ | 334 DISABLED_##name##To##width##x##height##_##filter##_16) { \ |
| 335 int diff = TestFilter_16(benchmark_width_, benchmark_height_, \ | 335 int diff = TestFilter_16(benchmark_width_, benchmark_height_, \ |
| 336 width, height, \ | 336 width, height, \ |
| 337 kFilter##filter, benchmark_iterations_); \ | 337 kFilter##filter, benchmark_iterations_); \ |
| 338 EXPECT_LE(diff, max_diff); \ | 338 EXPECT_LE(diff, max_diff); \ |
| 339 } \ | 339 } \ |
| 340 TEST_F(libyuvTest, \ | 340 TEST_F(LibYUVScaleTest, \ |
| 341 DISABLED_##name##From##width##x##height##_##filter##_16) { \ | 341 DISABLED_##name##From##width##x##height##_##filter##_16) { \ |
| 342 int diff = TestFilter_16(width, height, \ | 342 int diff = TestFilter_16(width, height, \ |
| 343 Abs(benchmark_width_), Abs(benchmark_height_), \ | 343 Abs(benchmark_width_), Abs(benchmark_height_), \ |
| 344 kFilter##filter, benchmark_iterations_); \ | 344 kFilter##filter, benchmark_iterations_); \ |
| 345 EXPECT_LE(diff, max_diff); \ | 345 EXPECT_LE(diff, max_diff); \ |
| 346 } | 346 } |
| 347 | 347 |
| 348 // Test scale to a specified size with all 4 filters. | 348 // Test scale to a specified size with all 4 filters. |
| 349 #define TEST_SCALETO(name, width, height) \ | 349 #define TEST_SCALETO(name, width, height) \ |
| 350 TEST_SCALETO1(name, width, height, None, 0) \ | 350 TEST_SCALETO1(name, width, height, None, 0) \ |
| 351 TEST_SCALETO1(name, width, height, Linear, 3) \ | 351 TEST_SCALETO1(name, width, height, Linear, 3) \ |
| 352 TEST_SCALETO1(name, width, height, Bilinear, 3) \ | 352 TEST_SCALETO1(name, width, height, Bilinear, 3) \ |
| 353 TEST_SCALETO1(name, width, height, Box, 3) | 353 TEST_SCALETO1(name, width, height, Box, 3) |
| 354 | 354 |
| 355 TEST_SCALETO(Scale, 1, 1) | 355 TEST_SCALETO(Scale, 1, 1) |
| 356 TEST_SCALETO(Scale, 320, 240) | 356 TEST_SCALETO(Scale, 320, 240) |
| 357 TEST_SCALETO(Scale, 352, 288) | 357 TEST_SCALETO(Scale, 352, 288) |
| 358 TEST_SCALETO(Scale, 569, 480) | 358 TEST_SCALETO(Scale, 569, 480) |
| 359 TEST_SCALETO(Scale, 640, 360) | 359 TEST_SCALETO(Scale, 640, 360) |
| 360 TEST_SCALETO(Scale, 1280, 720) | 360 TEST_SCALETO(Scale, 1280, 720) |
| 361 #undef TEST_SCALETO1 | 361 #undef TEST_SCALETO1 |
| 362 #undef TEST_SCALETO | 362 #undef TEST_SCALETO |
| 363 | 363 |
| 364 } // namespace libyuv | 364 } // namespace libyuv |
| OLD | NEW |