1ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com/* 2a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com * Copyright 2012 The LibYuv Project Authors. All rights reserved. 3ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com * 4ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com * Use of this source code is governed by a BSD-style license 5ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com * that can be found in the LICENSE file in the root of the source 6ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com * tree. An additional intellectual property rights grant can be found 7cde587092fef0dbed2c35602f30b79e7b892e766fbarchard@google.com * in the file PATENTS. All contributing project authors may 8ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com * be found in the AUTHORS file in the root of the source tree. 9ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com */ 10ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 11ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com#include <stdlib.h> 123de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com#include <time.h> 13ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 14a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com#include "libyuv/cpu_id.h" 15810cd91079505f04cfec7481b51d04f08250d982fbarchard@google.com#include "libyuv/rotate.h" 16ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com#include "libyuv/row.h" 177781d943b039f9143ab41cdba01dba1e8929161bfbarchard@google.com#include "../unit_test/unit_test.h" 18c82af4a59ce299da67084916317266a33c2868e1frkoenig@google.com 191b06484b4aeb06ce45759ea9928fe84981680ac9mikhal@webrtc.orgnamespace libyuv { 20ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 21a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comstatic void I420TestRotate(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 if (src_width < 1) { 26a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_width = 1; 27ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com } 28a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com if (src_height < 1) { 29a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_height = 1; 30bd4fcb987773ae47b6b49ef4b657c054ea511bfffbarchard@google.com } 31a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com if (dst_width < 1) { 32a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_width = 1; 33e3230e4a93a86b0a1e98a3cf5782c97f13488b70fbarchard@google.com } 34a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com if (dst_height < 1) { 35a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_height = 1; 36bd4fcb987773ae47b6b49ef4b657c054ea511bfffbarchard@google.com } 37a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int src_i420_y_size = src_width * src_height; 38a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int src_i420_uv_size = ((src_width + 1) / 2) * ((src_height + 1) / 2); 39a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int src_i420_size = src_i420_y_size + src_i420_uv_size * 2; 40ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com align_buffer_64(src_i420, src_i420_size); 41a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com for (int i = 0; i < src_i420_size; ++i) { 42a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_i420[i] = random() & 0xff; 437781d943b039f9143ab41cdba01dba1e8929161bfbarchard@google.com } 44ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 45a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int dst_i420_y_size = dst_width * dst_height; 46a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int dst_i420_uv_size = ((dst_width + 1) / 2) * ((dst_height + 1) / 2); 47a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int dst_i420_size = dst_i420_y_size + dst_i420_uv_size * 2; 48ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com align_buffer_64(dst_i420_c, dst_i420_size); 49ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com align_buffer_64(dst_i420_opt, dst_i420_size); 50a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com memset(dst_i420_c, 2, dst_i420_size); 51a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com memset(dst_i420_opt, 3, dst_i420_size); 52bd4fcb987773ae47b6b49ef4b657c054ea511bfffbarchard@google.com 53a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com MaskCpuFlags(0); // Disable all CPU optimization. 54a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420Rotate(src_i420, src_width, 55a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_i420 + src_i420_y_size, (src_width + 1) / 2, 56a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_i420 + src_i420_y_size + src_i420_uv_size, (src_width + 1) / 2, 57a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_c, dst_width, 58a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_c + dst_i420_y_size, (dst_width + 1) / 2, 59a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_c + dst_i420_y_size + dst_i420_uv_size, 60a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com (dst_width + 1) / 2, 61a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_width, src_height, mode); 62bd4fcb987773ae47b6b49ef4b657c054ea511bfffbarchard@google.com 63a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com MaskCpuFlags(-1); // Enable all CPU optimization. 64a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com for (int i = 0; i < benchmark_iterations; ++i) { 65a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420Rotate(src_i420, src_width, 66a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_i420 + src_i420_y_size, (src_width + 1) / 2, 67a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_i420 + src_i420_y_size + src_i420_uv_size, 68a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com (src_width + 1) / 2, 69a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_opt, dst_width, 70a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_opt + dst_i420_y_size, (dst_width + 1) / 2, 71a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_opt + dst_i420_y_size + dst_i420_uv_size, 72a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com (dst_width + 1) / 2, 73a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_width, src_height, mode); 747781d943b039f9143ab41cdba01dba1e8929161bfbarchard@google.com } 753de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 76a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com // Rotation should be exact. 77a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com for (int i = 0; i < dst_i420_size; ++i) { 78a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com EXPECT_EQ(dst_i420_c[i], dst_i420_opt[i]); 79bd4fcb987773ae47b6b49ef4b657c054ea511bfffbarchard@google.com } 80bd4fcb987773ae47b6b49ef4b657c054ea511bfffbarchard@google.com 81ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com free_aligned_buffer_64(dst_i420_c); 82ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com free_aligned_buffer_64(dst_i420_opt); 83ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com free_aligned_buffer_64(src_i420); 843de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com} 853de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 86a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, I420Rotate0) { 87a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420TestRotate(benchmark_width_, benchmark_height_, 88a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_width_, benchmark_height_, 89a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate0, benchmark_iterations_); 90ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com} 91ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 92a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, I420Rotate90) { 93a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420TestRotate(benchmark_width_, benchmark_height_, 94a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_height_, benchmark_width_, 95a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate90, benchmark_iterations_); 96ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com} 97ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 98a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, I420Rotate180) { 99a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420TestRotate(benchmark_width_, benchmark_height_, 100a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_width_, benchmark_height_, 101a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate180, benchmark_iterations_); 102ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com} 103ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 104a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, I420Rotate270) { 105a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420TestRotate(benchmark_width_, benchmark_height_, 106a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_height_, benchmark_width_, 107a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate270, benchmark_iterations_); 108ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com} 109ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 110a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, I420Rotate0_Odd) { 111a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420TestRotate(benchmark_width_ - 3, benchmark_height_ - 1, 112a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_width_ - 3, benchmark_height_ - 1, 113a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate0, benchmark_iterations_); 114bd4fcb987773ae47b6b49ef4b657c054ea511bfffbarchard@google.com} 115ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 116a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, I420Rotate90_Odd) { 117a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420TestRotate(benchmark_width_ - 3, benchmark_height_ - 1, 118a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_height_ - 1, benchmark_width_ - 3, 119a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate90, benchmark_iterations_); 120ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com} 121ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 122a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, I420Rotate180_Odd) { 123a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420TestRotate(benchmark_width_ - 3, benchmark_height_ - 1, 124a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_width_ - 3, benchmark_height_ - 1, 125a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate180, benchmark_iterations_); 126ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com} 127ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 128a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, I420Rotate270_Odd) { 129a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com I420TestRotate(benchmark_width_ - 3, benchmark_height_ - 1, 130a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_height_ - 1, benchmark_width_ - 3, 131a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate270, benchmark_iterations_); 132ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com} 133ed6edcab8bb0ff24e774bc5aba50351b44776ddefrkoenig@google.com 134a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comstatic void NV12TestRotate(int src_width, int src_height, 135a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int dst_width, int dst_height, 136a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com libyuv::RotationMode mode, 137a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int benchmark_iterations) { 138a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com if (src_width < 1) { 139a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_width = 1; 1407781d943b039f9143ab41cdba01dba1e8929161bfbarchard@google.com } 141a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com if (src_height < 1) { 142a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_height = 1; 143bd4fcb987773ae47b6b49ef4b657c054ea511bfffbarchard@google.com } 144a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com if (dst_width < 1) { 145a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_width = 1; 1463de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com } 147a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com if (dst_height < 1) { 148a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_height = 1; 1493de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com } 150a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int src_nv12_y_size = src_width * src_height; 151a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int src_nv12_uv_size = ((src_width + 1) / 2) * ((src_height + 1) / 2) * 2; 152a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int src_nv12_size = src_nv12_y_size + src_nv12_uv_size; 153ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com align_buffer_64(src_nv12, src_nv12_size); 154a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com for (int i = 0; i < src_nv12_size; ++i) { 155a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_nv12[i] = random() & 0xff; 156e3230e4a93a86b0a1e98a3cf5782c97f13488b70fbarchard@google.com } 1573de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 158a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int dst_i420_y_size = dst_width * dst_height; 159a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int dst_i420_uv_size = ((dst_width + 1) / 2) * ((dst_height + 1) / 2); 160a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com int dst_i420_size = dst_i420_y_size + dst_i420_uv_size * 2; 161ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com align_buffer_64(dst_i420_c, dst_i420_size); 162ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com align_buffer_64(dst_i420_opt, dst_i420_size); 163a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com memset(dst_i420_c, 2, dst_i420_size); 164a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com memset(dst_i420_opt, 3, dst_i420_size); 1653de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 166a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com MaskCpuFlags(0); // Disable all CPU optimization. 167a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12ToI420Rotate(src_nv12, src_width, 168a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_nv12 + src_nv12_y_size, (src_width + 1) & ~1, 169a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_c, dst_width, 170a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_c + dst_i420_y_size, (dst_width + 1) / 2, 171a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_c + dst_i420_y_size + dst_i420_uv_size, 172a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com (dst_width + 1) / 2, 173a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_width, src_height, mode); 1743de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 175a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com MaskCpuFlags(-1); // Enable all CPU optimization. 176a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com for (int i = 0; i < benchmark_iterations; ++i) { 177a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12ToI420Rotate(src_nv12, src_width, 178a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_nv12 + src_nv12_y_size, (src_width + 1) & ~1, 179a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_opt, dst_width, 180a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_opt + dst_i420_y_size, (dst_width + 1) / 2, 181a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com dst_i420_opt + dst_i420_y_size + dst_i420_uv_size, 182a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com (dst_width + 1) / 2, 183a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com src_width, src_height, mode); 1843de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com } 1853de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 186a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com // Rotation should be exact. 187a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com for (int i = 0; i < dst_i420_size; ++i) { 188a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com EXPECT_EQ(dst_i420_c[i], dst_i420_opt[i]); 1893de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com } 1903de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 191ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com free_aligned_buffer_64(dst_i420_c); 192ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com free_aligned_buffer_64(dst_i420_opt); 193ae9a1388a71a3154ef7d6f753c8e568c97554fc0fbarchard@google.com free_aligned_buffer_64(src_nv12); 1943de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com} 1953de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 196a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, NV12Rotate0) { 197a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12TestRotate(benchmark_width_, benchmark_height_, 198a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_width_, benchmark_height_, 199a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate0, benchmark_iterations_); 2003de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com} 2013de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 202a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, NV12Rotate90) { 203a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12TestRotate(benchmark_width_, benchmark_height_, 204a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_height_, benchmark_width_, 205a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate90, benchmark_iterations_); 2063de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com} 2073de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 208a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, NV12Rotate180) { 209a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12TestRotate(benchmark_width_, benchmark_height_, 210a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_width_, benchmark_height_, 211a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate180, benchmark_iterations_); 2123de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com} 2133de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 214a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, NV12Rotate270) { 215a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12TestRotate(benchmark_width_, benchmark_height_, 216a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_height_, benchmark_width_, 217a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate270, benchmark_iterations_); 2183de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com} 2193de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 220a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, NV12Rotate0_Odd) { 221a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12TestRotate(benchmark_width_ - 3, benchmark_height_ - 1, 222a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_width_ - 3, benchmark_height_ - 1, 223a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate0, benchmark_iterations_); 2243de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com} 2253de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com 226a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, NV12Rotate90_Odd) { 227a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12TestRotate(benchmark_width_ - 3, benchmark_height_ - 1, 228a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_height_ - 1, benchmark_width_ - 3, 229a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate90, benchmark_iterations_); 2303de12ae1c6e162f469c1d384430e2bf8dea32f6ffrkoenig@google.com} 2311b06484b4aeb06ce45759ea9928fe84981680ac9mikhal@webrtc.org 232a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, NV12Rotate180_Odd) { 233a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12TestRotate(benchmark_width_ - 3, benchmark_height_ - 1, 234a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_width_ - 3, benchmark_height_ - 1, 235a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate180, benchmark_iterations_); 236a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com} 237c4163acb7b5aaea4a5be500c41cbc4af28125436fbarchard@google.com 238a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.comTEST_F(libyuvTest, NV12Rotate270_Odd) { 239a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com NV12TestRotate(benchmark_width_ - 3, benchmark_height_ - 1, 240a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com benchmark_height_ - 1, benchmark_width_ - 3, 241a14b5cdfb3f2238142884bc456f830a7ed69ecd2fbarchard@google.com kRotate270, benchmark_iterations_); 242c4163acb7b5aaea4a5be500c41cbc4af28125436fbarchard@google.com} 243de07146fa46d28bdd7f866791b8e764f3c03b849fbarchard@google.com 244c82af4a59ce299da67084916317266a33c2868e1frkoenig@google.com} // namespace libyuv 245