summaryrefslogtreecommitdiffstats
path: root/media/base/video_frame_impl_unittest.cc
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-23 22:34:24 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-23 22:34:24 +0000
commit34f993563386ad569f3674d157153e697e847e0a (patch)
treebb12aa46242ad8534f51387cca789375ba92f10f /media/base/video_frame_impl_unittest.cc
parent5ff5ee97910c9fb6909f4a3029427edd21366d9b (diff)
downloadchromium_src-34f993563386ad569f3674d157153e697e847e0a.zip
chromium_src-34f993563386ad569f3674d157153e697e847e0a.tar.gz
chromium_src-34f993563386ad569f3674d157153e697e847e0a.tar.bz2
Merged VideoSurface, VideoFrame and VideoFrameImpl in VideoFrame.
Patch by sergeyu@chromium.org BUG=28100 TEST=Ran media_unittests Review URL: http://codereview.chromium.org/1226001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42391 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/video_frame_impl_unittest.cc')
-rw-r--r--media/base/video_frame_impl_unittest.cc187
1 files changed, 0 insertions, 187 deletions
diff --git a/media/base/video_frame_impl_unittest.cc b/media/base/video_frame_impl_unittest.cc
deleted file mode 100644
index d50db36..0000000
--- a/media/base/video_frame_impl_unittest.cc
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "media/base/video_frame_impl.h"
-
-#include "base/format_macros.h"
-#include "base/string_util.h"
-#include "media/base/buffers.h"
-#include "media/base/mock_filters.h"
-#include "media/base/yuv_convert.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace media {
-
-// Helper function that initializes a YV12 frame with white and black scan
-// lines based on the |white_to_black| parameter. If 0, then the entire
-// frame will be black, if 1 then the entire frame will be white.
-void InitializeYV12Frame(VideoFrame* frame, double white_to_black) {
- VideoSurface surface;
- if (!frame->Lock(&surface)) {
- ADD_FAILURE();
- return;
- }
- EXPECT_EQ(VideoSurface::YV12, surface.format);
- size_t first_black_row = static_cast<size_t>(surface.height * white_to_black);
- uint8* y_plane = surface.data[VideoSurface::kYPlane];
- for (size_t row = 0; row < surface.height; ++row) {
- int color = (row < first_black_row) ? 0xFF : 0x00;
- memset(y_plane, color, surface.width);
- y_plane += surface.strides[VideoSurface::kYPlane];
- }
- uint8* u_plane = surface.data[VideoSurface::kUPlane];
- uint8* v_plane = surface.data[VideoSurface::kVPlane];
- for (size_t row = 0; row < surface.height; row += 2) {
- memset(u_plane, 0x80, surface.width / 2);
- memset(v_plane, 0x80, surface.width / 2);
- u_plane += surface.strides[VideoSurface::kUPlane];
- v_plane += surface.strides[VideoSurface::kVPlane];
- }
- frame->Unlock();
-}
-
-// Given a |yv12_frame| this method converts the YV12 frame to RGBA and
-// makes sure that all the pixels of the RBG frame equal |expect_rgb_color|.
-void ExpectFrameColor(media::VideoFrame* yv12_frame, uint32 expect_rgb_color) {
- // On linux and mac builds if you directly compare using EXPECT_EQ and use
- // the VideoSurface::kNumxxxPlanes constants, it generates an error when
- // linking. These are declared so that we can compare against locals.
- const size_t expect_yuv_planes = VideoSurface::kNumYUVPlanes;
- const size_t expect_rgb_planes = VideoSurface::kNumRGBPlanes;
-
- VideoSurface yuv_surface;
- ASSERT_TRUE(yv12_frame->Lock(&yuv_surface));
- ASSERT_EQ(VideoSurface::YV12, yuv_surface.format);
- ASSERT_EQ(expect_yuv_planes, yuv_surface.planes);
- ASSERT_EQ(yuv_surface.strides[VideoSurface::kUPlane],
- yuv_surface.strides[VideoSurface::kVPlane]);
-
- scoped_refptr<media::VideoFrame> rgb_frame;
- media::VideoFrameImpl::CreateFrame(VideoSurface::RGBA,
- yuv_surface.width,
- yuv_surface.height,
- yv12_frame->GetTimestamp(),
- yv12_frame->GetDuration(),
- &rgb_frame);
- media::VideoSurface rgb_surface;
- ASSERT_TRUE(rgb_frame->Lock(&rgb_surface));
- ASSERT_EQ(yuv_surface.width, rgb_surface.width);
- ASSERT_EQ(yuv_surface.height, rgb_surface.height);
- ASSERT_EQ(expect_rgb_planes, rgb_surface.planes);
-
- media::ConvertYUVToRGB32(yuv_surface.data[VideoSurface::kYPlane],
- yuv_surface.data[VideoSurface::kUPlane],
- yuv_surface.data[VideoSurface::kVPlane],
- rgb_surface.data[VideoSurface::kRGBPlane],
- rgb_surface.width,
- rgb_surface.height,
- yuv_surface.strides[VideoSurface::kYPlane],
- yuv_surface.strides[VideoSurface::kUPlane],
- rgb_surface.strides[VideoSurface::kRGBPlane],
- media::YV12);
-
- for (size_t row = 0; row < rgb_surface.height; ++row) {
- uint32* rgb_row_data = reinterpret_cast<uint32*>(
- rgb_surface.data[VideoSurface::kRGBPlane] +
- (rgb_surface.strides[VideoSurface::kRGBPlane] * row));
- for (size_t col = 0; col < rgb_surface.width; ++col) {
- SCOPED_TRACE(StringPrintf("Checking (%" PRIuS ", %" PRIuS ")", row, col));
- EXPECT_EQ(expect_rgb_color, rgb_row_data[col]);
- }
- }
- rgb_frame->Unlock();
- yv12_frame->Unlock();
-}
-
-TEST(VideoFrameImpl, CreateFrame) {
- const size_t kWidth = 64;
- const size_t kHeight = 48;
- const base::TimeDelta kTimestampA = base::TimeDelta::FromMicroseconds(1337);
- const base::TimeDelta kDurationA = base::TimeDelta::FromMicroseconds(1667);
- const base::TimeDelta kTimestampB = base::TimeDelta::FromMicroseconds(1234);
- const base::TimeDelta kDurationB = base::TimeDelta::FromMicroseconds(5678);
-
- // Create a YV12 Video Frame.
- scoped_refptr<media::VideoFrame> frame;
- VideoFrameImpl::CreateFrame(media::VideoSurface::YV12, kWidth, kHeight,
- kTimestampA, kDurationA, &frame);
- ASSERT_TRUE(frame);
-
- // Test StreamSample implementation.
- EXPECT_EQ(kTimestampA.InMicroseconds(),
- frame->GetTimestamp().InMicroseconds());
- EXPECT_EQ(kDurationA.InMicroseconds(), frame->GetDuration().InMicroseconds());
- EXPECT_FALSE(frame->IsEndOfStream());
- EXPECT_FALSE(frame->IsDiscontinuous());
- frame->SetTimestamp(kTimestampB);
- frame->SetDuration(kDurationB);
- EXPECT_EQ(kTimestampB.InMicroseconds(),
- frame->GetTimestamp().InMicroseconds());
- EXPECT_EQ(kDurationB.InMicroseconds(), frame->GetDuration().InMicroseconds());
- EXPECT_FALSE(frame->IsEndOfStream());
- frame->SetDiscontinuous(true);
- EXPECT_TRUE(frame->IsDiscontinuous());
- frame->SetDiscontinuous(false);
- EXPECT_FALSE(frame->IsDiscontinuous());
-
- // Test VideoFrame implementation.
- {
- SCOPED_TRACE("");
- InitializeYV12Frame(frame, 0.0f);
- ExpectFrameColor(frame, 0xFF000000);
- }
- {
- SCOPED_TRACE("");
- InitializeYV12Frame(frame, 1.0f);
- ExpectFrameColor(frame, 0xFFFFFFFF);
- }
-
- // Test an empty frame.
- VideoFrameImpl::CreateEmptyFrame(&frame);
- EXPECT_TRUE(frame->IsEndOfStream());
-}
-
-TEST(VideoFrameImpl, CreateBlackFrame) {
- const size_t kWidth = 2;
- const size_t kHeight = 2;
- const uint8 kExpectedYRow[] = { 0, 0 };
- const uint8 kExpectedUVRow[] = { 128 };
-
- scoped_refptr<media::VideoFrame> frame;
- VideoFrameImpl::CreateBlackFrame(kWidth, kHeight, &frame);
- ASSERT_TRUE(frame);
-
- // Test basic properties.
- EXPECT_EQ(0, frame->GetTimestamp().InMicroseconds());
- EXPECT_EQ(0, frame->GetDuration().InMicroseconds());
- EXPECT_FALSE(frame->IsEndOfStream());
-
- // Test surface properties.
- VideoSurface surface;
- EXPECT_TRUE(frame->Lock(&surface));
- EXPECT_EQ(VideoSurface::YV12, surface.format);
- EXPECT_EQ(kWidth, surface.width);
- EXPECT_EQ(kHeight, surface.height);
- EXPECT_EQ(3u, surface.planes);
-
- // Test surfaces themselves.
- for (size_t y = 0; y < surface.height; ++y) {
- EXPECT_EQ(0, memcmp(kExpectedYRow, surface.data[VideoSurface::kYPlane],
- arraysize(kExpectedYRow)));
- surface.data[VideoSurface::kYPlane] +=
- surface.strides[VideoSurface::kYPlane];
- }
- for (size_t y = 0; y < surface.height / 2; ++y) {
- EXPECT_EQ(0, memcmp(kExpectedUVRow, surface.data[VideoSurface::kUPlane],
- arraysize(kExpectedUVRow)));
- EXPECT_EQ(0, memcmp(kExpectedUVRow, surface.data[VideoSurface::kVPlane],
- arraysize(kExpectedUVRow)));
- surface.data[VideoSurface::kUPlane] +=
- surface.strides[VideoSurface::kUPlane];
- surface.data[VideoSurface::kVPlane] +=
- surface.strides[VideoSurface::kVPlane];
- }
-}
-
-} // namespace media