| /* |
| * 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 <math.h> |
| #include <string.h> |
| |
| #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 |