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