133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp/* 233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * Copyright 2011 The LibYuv Project Authors. All rights reserved. 333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * 433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * Use of this source code is governed by a BSD-style license 533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * that can be found in the LICENSE file in the root of the source 633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * tree. An additional intellectual property rights grant can be found 733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * in the file PATENTS. All contributing project authors may 833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * be found in the AUTHORS file in the root of the source tree. 933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp */ 1033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 1133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include <stdlib.h> 1233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include <time.h> 1333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 1433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include "libyuv/cpu_id.h" 1533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include "libyuv/scale_argb.h" 1633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include "../unit_test/unit_test.h" 1733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 1833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampnamespace libyuv { 1933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 2033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampstatic int ARGBTestFilter(int src_width, int src_height, 2133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_width, int dst_height, 2233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp FilterMode f, int benchmark_iterations) { 2333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int b = 128; 2433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_argb_plane_size = (src_width + b * 2) * (src_height + b * 2) * 4; 2533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_stride_argb = (b * 2 + src_width) * 4; 2633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 2733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp align_buffer_16(src_argb, src_argb_plane_size) 2833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp memset(src_argb, 1, src_argb_plane_size); 2933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 3033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_argb_plane_size = (dst_width + b * 2) * (dst_height + b * 2) * 4; 3133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_stride_argb = (b * 2 + dst_width) * 4; 3233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 3333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp srandom(time(NULL)); 3433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 3533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int i, j; 3633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (i = b; i < (src_height + b); ++i) { 3733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (j = b; j < (src_width + b) * 4; ++j) { 3833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp src_argb[(i * src_stride_argb) + j] = (random() & 0xff); 3933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 4033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 4133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 4233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp align_buffer_16(dst_argb_c, dst_argb_plane_size) 4333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp align_buffer_16(dst_argb_opt, dst_argb_plane_size) 4433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp memset(dst_argb_c, 2, dst_argb_plane_size); 4533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp memset(dst_argb_opt, 3, dst_argb_plane_size); 4633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 4733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp // Warm up both versions for consistent benchmarks. 4833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp MaskCpuFlags(0); // Disable all CPU optimization. 4933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp ARGBScale(src_argb + (src_stride_argb * b) + b * 4, src_stride_argb, 5033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp src_width, src_height, 5133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_argb_c + (dst_stride_argb * b) + b * 4, dst_stride_argb, 5233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, f); 5333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp MaskCpuFlags(-1); // Enable all CPU optimization. 5433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp ARGBScale(src_argb + (src_stride_argb * b) + b * 4, src_stride_argb, 5533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp src_width, src_height, 5633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_argb_opt + (dst_stride_argb * b) + b * 4, dst_stride_argb, 5733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, f); 5833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 5933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp MaskCpuFlags(0); // Disable all CPU optimization. 6033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp double c_time = get_time(); 6133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (i = 0; i < benchmark_iterations; ++i) { 6233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp ARGBScale(src_argb + (src_stride_argb * b) + b * 4, src_stride_argb, 6333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp src_width, src_height, 6433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_argb_c + (dst_stride_argb * b) + b * 4, dst_stride_argb, 6533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, f); 6633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 6733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp c_time = (get_time() - c_time) / benchmark_iterations; 6833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 6933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp MaskCpuFlags(-1); // Enable all CPU optimization. 7033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp double opt_time = get_time(); 7133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (i = 0; i < benchmark_iterations; ++i) { 7233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp ARGBScale(src_argb + (src_stride_argb * b) + b * 4, src_stride_argb, 7333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp src_width, src_height, 7433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_argb_opt + (dst_stride_argb * b) + b * 4, dst_stride_argb, 7533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, f); 7633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 7733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp opt_time = (get_time() - opt_time) / benchmark_iterations; 7833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 7933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp // Report performance of C vs OPT 8033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp printf("filter %d - %8d us C - %8d us OPT\n", 8133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp f, static_cast<int>(c_time*1e6), static_cast<int>(opt_time*1e6)); 8233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 8333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp // C version may be a little off from the optimized. Order of 8433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp // operations may introduce rounding somewhere. So do a difference 8533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp // of the buffers and look to see that the max difference isn't 8633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp // over 2. 8733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = 0; 8833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (i = b; i < (dst_height + b); ++i) { 8933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (j = b * 4; j < (dst_width + b) * 4; ++j) { 9033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int abs_diff = abs(dst_argb_c[(i * dst_stride_argb) + j] - 9133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_argb_opt[(i * dst_stride_argb) + j]); 9233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp if (abs_diff > max_diff) { 9333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp max_diff = abs_diff; 9433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 9533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 9633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 9733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 9833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp free_aligned_buffer_16(dst_argb_c) 9933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp free_aligned_buffer_16(dst_argb_opt) 10033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp free_aligned_buffer_16(src_argb) 10133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp return max_diff; 10233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 10333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 10433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleDownBy2) { 10533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_width = 1280; 10633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_height = 720; 10733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_width = src_width / 2; 10833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_height = src_height / 2; 10933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 11033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 11133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 11233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 11333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 11433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 11533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 11633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 11733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 11833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 11933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleDownBy4) { 12033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_width = 1280; 12133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_height = 720; 12233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_width = src_width / 4; 12333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_height = src_height / 4; 12433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 12533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 12633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 12733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 12833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 12933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 13033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 13133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 13233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 13333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 13433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleDownBy5) { 13533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_width = 1280; 13633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_height = 720; 13733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_width = src_width / 5; 13833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_height = src_height / 5; 13933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 14033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 14133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 14233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 14333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 14433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 14533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 14633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 14733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 14833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 14933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleDownBy8) { 15033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_width = 1280; 15133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_height = 720; 15233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_width = src_width / 8; 15333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_height = src_height / 8; 15433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 15533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 15633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 15733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 15833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 15933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 16033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 16133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 16233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 16333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 16433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleDownBy16) { 16533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_width = 1280; 16633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_height = 720; 16733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_width = src_width / 16; 16833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_height = src_height / 16; 16933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 17033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 17133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 17233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 17333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 17433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 17533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 17633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 17733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 17833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 17933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleDownBy34) { 18033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_width = 1280; 18133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int src_height = 720; 18233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_width = src_width * 3 / 4; 18333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const int dst_height = src_height * 3 / 4; 18433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 18533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 18633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 18733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 18833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 18933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 19033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 19133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 19233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 19333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 19433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleDownBy38) { 19533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_width = 1280; 19633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_height = 720; 19733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_width = src_width * 3 / 8; 19833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_height = src_height * 3 / 8; 19933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 20033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 20133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 20233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 20333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 20433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 20533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 20633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 20733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 20833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 20933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleTo1366) { 21033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_width = 1280; 21133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_height = 720; 21233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_width = 1366; 21333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_height = 768; 21433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 21533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 21633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 21733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 21833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 21933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 22033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 22133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 22233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 22333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 22433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleTo4074) { 22533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_width = 2880 * 2; 22633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_height = 1800; 22733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_width = 4074; 22833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_height = 1272; 22933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 23033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 23133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 23233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 23333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 23433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 23533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 23633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 23733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 23833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 23933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 24033cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampTEST_F(libyuvTest, ARGBScaleTo853) { 24133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_width = 1280; 24233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_height = 720; 24333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_width = 853; 24433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_height = 480; 24533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 24633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp for (int f = 0; f < 2; ++f) { 24733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int max_diff = ARGBTestFilter(src_width, src_height, 24833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp dst_width, dst_height, 24933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp static_cast<FilterMode>(f), 25033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp benchmark_iterations_); 25133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp EXPECT_LE(max_diff, 1); 25233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp } 25333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} 25433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 25533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} // namespace libyuv 256