OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The LibYuv Project Authors. All rights reserved. | 2 * Copyright 2012 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 |
11 #include <stdlib.h> | 11 #include <stdlib.h> |
12 | 12 |
13 #include "libyuv/cpu_id.h" | 13 #include "libyuv/cpu_id.h" |
14 #include "libyuv/rotate_argb.h" | 14 #include "libyuv/rotate_argb.h" |
15 #include "libyuv/row.h" | |
16 #include "../unit_test/unit_test.h" | 15 #include "../unit_test/unit_test.h" |
17 | 16 |
18 namespace libyuv { | 17 namespace libyuv { |
19 | 18 |
20 void TestRotateBpp(int src_width, int src_height, | 19 void TestRotateBpp(int src_width, int src_height, |
21 int dst_width, int dst_height, | 20 int dst_width, int dst_height, |
22 libyuv::RotationMode mode, | 21 libyuv::RotationMode mode, |
23 int benchmark_iterations, | 22 int benchmark_iterations, |
24 int disable_cpu_flags, | 23 int disable_cpu_flags, |
25 int benchmark_cpu_info, | 24 int benchmark_cpu_info, |
26 const int kBpp) { | 25 const int kBpp) { |
27 if (src_width < 1) { | 26 if (src_width < 1) { |
28 src_width = 1; | 27 src_width = 1; |
29 } | 28 } |
30 if (src_height < 1) { | 29 if (src_height < 1) { |
31 src_height = 1; | 30 src_height = 1; |
32 } | 31 } |
33 if (dst_width < 1) { | 32 if (dst_width < 1) { |
34 dst_width = 1; | 33 dst_width = 1; |
35 } | 34 } |
36 if (dst_height < 1) { | 35 if (dst_height < 1) { |
37 dst_height = 1; | 36 dst_height = 1; |
38 } | 37 } |
39 int src_stride_argb = src_width * kBpp; | 38 int src_stride_argb = src_width * kBpp; |
40 int src_argb_plane_size = src_stride_argb * abs(src_height); | 39 int src_argb_plane_size = src_stride_argb * abs(src_height); |
41 align_buffer_64(src_argb, src_argb_plane_size); | 40 align_buffer_page_end(src_argb, src_argb_plane_size); |
42 for (int i = 0; i < src_argb_plane_size; ++i) { | 41 for (int i = 0; i < src_argb_plane_size; ++i) { |
43 src_argb[i] = fastrand() & 0xff; | 42 src_argb[i] = fastrand() & 0xff; |
44 } | 43 } |
45 | 44 |
46 int dst_stride_argb = dst_width * kBpp; | 45 int dst_stride_argb = dst_width * kBpp; |
47 int dst_argb_plane_size = dst_stride_argb * dst_height; | 46 int dst_argb_plane_size = dst_stride_argb * dst_height; |
48 align_buffer_64(dst_argb_c, dst_argb_plane_size); | 47 align_buffer_page_end(dst_argb_c, dst_argb_plane_size); |
49 align_buffer_64(dst_argb_opt, dst_argb_plane_size); | 48 align_buffer_page_end(dst_argb_opt, dst_argb_plane_size); |
50 memset(dst_argb_c, 2, dst_argb_plane_size); | 49 memset(dst_argb_c, 2, dst_argb_plane_size); |
51 memset(dst_argb_opt, 3, dst_argb_plane_size); | 50 memset(dst_argb_opt, 3, dst_argb_plane_size); |
52 | 51 |
53 if (kBpp == 1) { | 52 if (kBpp == 1) { |
54 MaskCpuFlags(disable_cpu_flags); // Disable all CPU optimization. | 53 MaskCpuFlags(disable_cpu_flags); // Disable all CPU optimization. |
55 RotatePlane(src_argb, src_stride_argb, | 54 RotatePlane(src_argb, src_stride_argb, |
56 dst_argb_c, dst_stride_argb, | 55 dst_argb_c, dst_stride_argb, |
57 src_width, src_height, mode); | 56 src_width, src_height, mode); |
58 | 57 |
59 MaskCpuFlags(benchmark_cpu_info); // Enable all CPU optimization. | 58 MaskCpuFlags(benchmark_cpu_info); // Enable all CPU optimization. |
(...skipping 14 matching lines...) Expand all Loading... |
74 dst_argb_opt, dst_stride_argb, | 73 dst_argb_opt, dst_stride_argb, |
75 src_width, src_height, mode); | 74 src_width, src_height, mode); |
76 } | 75 } |
77 } | 76 } |
78 | 77 |
79 // Rotation should be exact. | 78 // Rotation should be exact. |
80 for (int i = 0; i < dst_argb_plane_size; ++i) { | 79 for (int i = 0; i < dst_argb_plane_size; ++i) { |
81 EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); | 80 EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); |
82 } | 81 } |
83 | 82 |
84 free_aligned_buffer_64(dst_argb_c); | 83 free_aligned_buffer_page_end(dst_argb_c); |
85 free_aligned_buffer_64(dst_argb_opt); | 84 free_aligned_buffer_page_end(dst_argb_opt); |
86 free_aligned_buffer_64(src_argb); | 85 free_aligned_buffer_page_end(src_argb); |
87 } | 86 } |
88 | 87 |
89 static void ARGBTestRotate(int src_width, int src_height, | 88 static void ARGBTestRotate(int src_width, int src_height, |
90 int dst_width, int dst_height, | 89 int dst_width, int dst_height, |
91 libyuv::RotationMode mode, | 90 libyuv::RotationMode mode, |
92 int benchmark_iterations, | 91 int benchmark_iterations, |
93 int disable_cpu_flags, | 92 int disable_cpu_flags, |
94 int benchmark_cpu_info) { | 93 int benchmark_cpu_info) { |
95 TestRotateBpp(src_width, src_height, | 94 TestRotateBpp(src_width, src_height, |
96 dst_width, dst_height, | 95 dst_width, dst_height, |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 } | 187 } |
189 | 188 |
190 TEST_F(LibYUVRotateTest, DISABLED_RotatePlane270_Odd) { | 189 TEST_F(LibYUVRotateTest, DISABLED_RotatePlane270_Odd) { |
191 TestRotatePlane(benchmark_width_ - 3, benchmark_height_ - 1, | 190 TestRotatePlane(benchmark_width_ - 3, benchmark_height_ - 1, |
192 benchmark_height_ - 1, benchmark_width_ - 3, | 191 benchmark_height_ - 1, benchmark_width_ - 3, |
193 kRotate270, benchmark_iterations_, | 192 kRotate270, benchmark_iterations_, |
194 disable_cpu_flags_, benchmark_cpu_info_); | 193 disable_cpu_flags_, benchmark_cpu_info_); |
195 } | 194 } |
196 | 195 |
197 } // namespace libyuv | 196 } // namespace libyuv |
OLD | NEW |