/* * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "webrtc/common_video/plane.h" #include #include #include "testing/gtest/include/gtest/gtest.h" namespace webrtc { TEST(TestPlane, CreateEmptyPlaneValues) { Plane plane; int size, stride; EXPECT_EQ(0, plane.allocated_size()); EXPECT_EQ(0, plane.stride()); EXPECT_TRUE(plane.IsZeroSize()); size = 0; stride = 20; EXPECT_EQ(-1, plane.CreateEmptyPlane(size, stride, 1)); EXPECT_EQ(-1, plane.CreateEmptyPlane(10, stride, size)); size = 20; stride = 0; EXPECT_EQ(-1, plane.CreateEmptyPlane(size, stride, size)); stride = 20; EXPECT_EQ(0, plane.CreateEmptyPlane(size, stride, size)); EXPECT_EQ(size, plane.allocated_size()); EXPECT_EQ(stride, plane.stride()); EXPECT_FALSE(plane.IsZeroSize()); } TEST(TestPlane, ResetSize) { Plane plane; EXPECT_TRUE(plane.IsZeroSize()); int allocated_size, plane_size, stride; EXPECT_EQ(0, plane.allocated_size()); allocated_size = 30; plane_size = 20; stride = 10; EXPECT_EQ(0, plane.CreateEmptyPlane(allocated_size, stride, plane_size)); EXPECT_EQ(allocated_size, plane.allocated_size()); EXPECT_FALSE(plane.IsZeroSize()); plane.ResetSize(); EXPECT_TRUE(plane.IsZeroSize()); } TEST(TestPlane, PlaneCopy) { Plane plane1, plane2; // Copy entire plane. plane1.CreateEmptyPlane(100, 10, 100); int size1 = plane1.allocated_size(); int size2 = 30; plane2.CreateEmptyPlane(50, 15, size2); int stride1 = plane1.stride(); int stride2 = plane2.stride(); plane1.Copy(plane2); // Smaller size - keep buffer size as is. EXPECT_EQ(size1, plane1.allocated_size()); EXPECT_EQ(stride2, plane1.stride()); plane2.Copy(plane1); // Verify increment of allocated size. EXPECT_EQ(plane1.allocated_size(), plane2.allocated_size()); EXPECT_EQ(stride2, plane2.stride()); // Copy buffer. uint8_t buffer1[100]; size1 = 80; memset(&buffer1, 0, size1); plane2.Copy(size1, stride1, buffer1); EXPECT_GE(plane2.allocated_size(), size1); EXPECT_EQ(0, memcmp(buffer1, plane2.buffer(), size1)); } TEST(TestPlane, PlaneSwap) { Plane plane1, plane2; int size1, size2, stride1, stride2; plane1.CreateEmptyPlane(100, 10, 100); plane2.CreateEmptyPlane(50, 15, 50); size1 = plane1.allocated_size(); stride1 = plane1.stride(); stride2 = plane2.stride(); size2 = plane2.allocated_size(); plane1.Swap(plane2); EXPECT_EQ(size1, plane2.allocated_size()); EXPECT_EQ(size2, plane1.allocated_size()); EXPECT_EQ(stride2, plane1.stride()); EXPECT_EQ(stride1, plane2.stride()); } } // namespace webrtc