1d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com/*
2b0c97975894a5eebebf9d93147cdd941a3accb63fbarchard@google.com *  Copyright 2012 The LibYuv Project Authors. All rights reserved.
3d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com *
4d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com *  Use of this source code is governed by a BSD-style license
5d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com *  that can be found in the LICENSE file in the root of the source
6d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com *  tree. An additional intellectual property rights grant can be found
7cde587092fef0dbed2c35602f30b79e7b892e766fbarchard@google.com *  in the file PATENTS. All contributing project authors may
8d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com *  be found in the AUTHORS file in the root of the source tree.
9d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com */
10d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
11d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com#include <stdlib.h>
12d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com#include <time.h>
13d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
14d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com#include "libyuv/cpu_id.h"
15d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com#include "libyuv/rotate_argb.h"
16ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com#include "libyuv/row.h"
177781d943b039f9143ab41cdba01dba1e8929161bfbarchard@google.com#include "../unit_test/unit_test.h"
18d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
19d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.comnamespace libyuv {
20d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
21a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comvoid TestRotateBpp(int src_width, int src_height,
22a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                   int dst_width, int dst_height,
23a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                   libyuv::RotationMode mode,
24a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                   int benchmark_iterations,
25a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                   const int kBpp) {
26a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  if (src_width < 1) {
27a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    src_width = 1;
28a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  }
29a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  if (src_height < 1) {
30a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    src_height = 1;
31a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  }
32a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  if (dst_width < 1) {
33a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    dst_width = 1;
34a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  }
35a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  if (dst_height < 1) {
36a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    dst_height = 1;
37a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  }
38a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  int src_stride_argb = src_width * kBpp;
39a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  int src_argb_plane_size = src_stride_argb * src_height;
40ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com  align_buffer_64(src_argb, src_argb_plane_size);
41a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  for (int i = 0; i < src_argb_plane_size; ++i) {
42a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    src_argb[i] = random() & 0xff;
43d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com  }
44d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
45a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  int dst_stride_argb = dst_width * kBpp;
46a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  int dst_argb_plane_size = dst_stride_argb * dst_height;
47ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com  align_buffer_64(dst_argb_c, dst_argb_plane_size);
48ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com  align_buffer_64(dst_argb_opt, dst_argb_plane_size);
49d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com  memset(dst_argb_c, 2, dst_argb_plane_size);
50d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com  memset(dst_argb_opt, 3, dst_argb_plane_size);
51d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
52a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  if (kBpp == 1) {
53a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    MaskCpuFlags(0);  // Disable all CPU optimization.
54a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    RotatePlane(src_argb, src_stride_argb,
55a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                dst_argb_c, dst_stride_argb,
56a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                src_width, src_height, mode);
57a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
58a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    MaskCpuFlags(-1);  // Enable all CPU optimization.
59a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    for (int i = 0; i < benchmark_iterations; ++i) {
60a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com      RotatePlane(src_argb, src_stride_argb,
61a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  dst_argb_opt, dst_stride_argb,
62a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  src_width, src_height, mode);
63a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    }
64a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  } else if (kBpp == 4) {
65a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    MaskCpuFlags(0);  // Disable all CPU optimization.
66a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    ARGBRotate(src_argb, src_stride_argb,
67a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com               dst_argb_c, dst_stride_argb,
68d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com               src_width, src_height, mode);
69a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
70a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    MaskCpuFlags(-1);  // Enable all CPU optimization.
71a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    for (int i = 0; i < benchmark_iterations; ++i) {
72a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com      ARGBRotate(src_argb, src_stride_argb,
73a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 dst_argb_opt, dst_stride_argb,
74a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 src_width, src_height, mode);
75d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com    }
76d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com  }
77d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
78a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  // Rotation should be exact.
79a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  for (int i = 0; i < dst_argb_plane_size; ++i) {
80a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com    EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]);
81a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  }
82a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
83ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com  free_aligned_buffer_64(dst_argb_c);
84ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com  free_aligned_buffer_64(dst_argb_opt);
85ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com  free_aligned_buffer_64(src_argb);
86d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
87d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
88a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comstatic void ARGBTestRotate(int src_width, int src_height,
89a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                           int dst_width, int dst_height,
90a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                           libyuv::RotationMode mode,
91a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                           int benchmark_iterations) {
92a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotateBpp(src_width, src_height,
93a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                dst_width, dst_height,
94a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                mode, benchmark_iterations, 4);
95a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
96d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
97a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, ARGBRotate0) {
98a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  ARGBTestRotate(benchmark_width_, benchmark_height_,
99a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 benchmark_width_, benchmark_height_,
100a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 kRotate0, benchmark_iterations_);
101d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
102d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
103d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.comTEST_F(libyuvTest, ARGBRotate90) {
104a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  ARGBTestRotate(benchmark_width_, benchmark_height_,
105a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 benchmark_height_, benchmark_width_,
106a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 kRotate90, benchmark_iterations_);
107d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
108d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
109d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.comTEST_F(libyuvTest, ARGBRotate180) {
110a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  ARGBTestRotate(benchmark_width_, benchmark_height_,
111a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 benchmark_width_, benchmark_height_,
112a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 kRotate180, benchmark_iterations_);
113d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
114d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
115d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.comTEST_F(libyuvTest, ARGBRotate270) {
116a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  ARGBTestRotate(benchmark_width_, benchmark_height_,
117a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 benchmark_height_, benchmark_width_,
118a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 kRotate270, benchmark_iterations_);
119d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
120d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
121d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.comTEST_F(libyuvTest, ARGBRotate0_Odd) {
122a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  ARGBTestRotate(benchmark_width_ - 3, benchmark_height_ - 1,
123a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 benchmark_width_ - 3, benchmark_height_ - 1,
124a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 kRotate0, benchmark_iterations_);
125d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
126d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
127d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.comTEST_F(libyuvTest, ARGBRotate90_Odd) {
128a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  ARGBTestRotate(benchmark_width_ - 3, benchmark_height_ - 1,
129a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 benchmark_height_ - 1, benchmark_width_ - 3,
130a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 kRotate90, benchmark_iterations_);
131d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
132d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
133d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.comTEST_F(libyuvTest, ARGBRotate180_Odd) {
134a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  ARGBTestRotate(benchmark_width_ - 3, benchmark_height_ - 1,
135a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 benchmark_width_ - 3, benchmark_height_ - 1,
136a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 kRotate180, benchmark_iterations_);
137d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
138d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
139d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.comTEST_F(libyuvTest, ARGBRotate270_Odd) {
140a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  ARGBTestRotate(benchmark_width_ - 3, benchmark_height_ - 1,
141a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 benchmark_height_ - 1, benchmark_width_ - 3,
142a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                 kRotate270, benchmark_iterations_);
143a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
144a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
145a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comstatic void TestRotatePlane(int src_width, int src_height,
146a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                            int dst_width, int dst_height,
147a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                            libyuv::RotationMode mode,
148a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                            int benchmark_iterations) {
149a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotateBpp(src_width, src_height,
150a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                dst_width, dst_height,
151a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                mode, benchmark_iterations, 1);
152a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
153a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
154a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, RotatePlane0) {
155a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotatePlane(benchmark_width_, benchmark_height_,
156a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  benchmark_width_, benchmark_height_,
157a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  kRotate0, benchmark_iterations_);
158a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
159a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
160a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, RotatePlane90) {
161a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotatePlane(benchmark_width_, benchmark_height_,
162a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  benchmark_height_, benchmark_width_,
163a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  kRotate90, benchmark_iterations_);
164a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
165a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
166a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, RotatePlane180) {
167a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotatePlane(benchmark_width_, benchmark_height_,
168a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  benchmark_width_, benchmark_height_,
169a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  kRotate180, benchmark_iterations_);
170a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
171a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
172a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, RotatePlane270) {
173a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotatePlane(benchmark_width_, benchmark_height_,
174a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  benchmark_height_, benchmark_width_,
175a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  kRotate270, benchmark_iterations_);
176a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
177a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
178a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, RotatePlane0_Odd) {
179a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotatePlane(benchmark_width_ - 3, benchmark_height_ - 1,
180a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  benchmark_width_ - 3, benchmark_height_ - 1,
181a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  kRotate0, benchmark_iterations_);
182a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
183a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
184a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, RotatePlane90_Odd) {
185a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotatePlane(benchmark_width_ - 3, benchmark_height_ - 1,
186a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  benchmark_height_ - 1, benchmark_width_ - 3,
187a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  kRotate90, benchmark_iterations_);
188a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
189a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
190a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, RotatePlane180_Odd) {
191a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotatePlane(benchmark_width_ - 3, benchmark_height_ - 1,
192a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  benchmark_width_ - 3, benchmark_height_ - 1,
193a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  kRotate180, benchmark_iterations_);
194a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com}
195a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com
196a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, RotatePlane270_Odd) {
197a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com  TestRotatePlane(benchmark_width_ - 3, benchmark_height_ - 1,
198a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  benchmark_height_ - 1, benchmark_width_ - 3,
199a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com                  kRotate270, benchmark_iterations_);
200d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}
201d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com
202d51c342521b54a95e2599197aa007182171b51f0fbarchard@google.com}  // namespace libyuv
203