Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(493)

Unified Diff: media/mojo/interfaces/video_frame_struct_traits_unittest.cc

Issue 2908303003: media: Create Mojo StructTraits for VideoFrame (Closed)
Patch Set: Remove death test. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/mojo/interfaces/video_frame_struct_traits_unittest.cc
diff --git a/media/mojo/interfaces/video_frame_struct_traits_unittest.cc b/media/mojo/interfaces/video_frame_struct_traits_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f0ff93b72851d5bf66da43d9a4dc9a3d9b2c7b24
--- /dev/null
+++ b/media/mojo/interfaces/video_frame_struct_traits_unittest.cc
@@ -0,0 +1,112 @@
+// Copyright 2017 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/mojo/interfaces/video_frame_struct_traits.h"
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/message_loop/message_loop.h"
+#include "gpu/command_buffer/common/mailbox.h"
+#include "gpu/command_buffer/common/mailbox_holder.h"
+#include "gpu/command_buffer/common/sync_token.h"
+#include "media/base/video_frame.h"
+#include "media/mojo/common/mojo_shared_buffer_video_frame.h"
+#include "media/mojo/interfaces/traits_test_service.mojom.h"
+#include "mojo/public/cpp/bindings/binding_set.h"
+#include "mojo/public/cpp/bindings/interface_request.h"
+#include "mojo/public/cpp/system/buffer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/size.h"
+
+namespace media {
+
+namespace {
+
+class VideoFrameStructTraitsTest : public testing::Test,
+ public media::mojom::TraitsTestService {
+ public:
+ VideoFrameStructTraitsTest() = default;
+
+ protected:
+ media::mojom::TraitsTestServicePtr GetTraitsTestProxy() {
+ media::mojom::TraitsTestServicePtr proxy;
+ traits_test_bindings_.AddBinding(this, mojo::MakeRequest(&proxy));
+ return proxy;
+ }
+
+ bool RoundTrip(scoped_refptr<VideoFrame>* frame) {
+ scoped_refptr<VideoFrame> input = std::move(*frame);
+ media::mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ return proxy->EchoVideoFrame(std::move(input), frame);
+ }
+
+ private:
+ void EchoVideoFrame(const scoped_refptr<VideoFrame>& f,
+ EchoVideoFrameCallback callback) override {
+ std::move(callback).Run(f);
+ }
+
+ base::MessageLoop loop_;
+ mojo::BindingSet<TraitsTestService> traits_test_bindings_;
+
+ DISALLOW_COPY_AND_ASSIGN(VideoFrameStructTraitsTest);
+};
+
+} // namespace
+
+TEST_F(VideoFrameStructTraitsTest, Null) {
+ scoped_refptr<VideoFrame> frame;
+
+ ASSERT_TRUE(RoundTrip(&frame));
+ EXPECT_FALSE(frame);
+}
+
+TEST_F(VideoFrameStructTraitsTest, EOS) {
+ scoped_refptr<VideoFrame> frame = VideoFrame::CreateEOSFrame();
+
+ ASSERT_TRUE(RoundTrip(&frame));
+ ASSERT_TRUE(frame);
+ EXPECT_TRUE(frame->metadata()->IsTrue(VideoFrameMetadata::END_OF_STREAM));
+}
+
+TEST_F(VideoFrameStructTraitsTest, MojoSharedBufferVideoFrame) {
+ scoped_refptr<VideoFrame> frame =
+ MojoSharedBufferVideoFrame::CreateDefaultI420(
+ gfx::Size(100, 100), base::TimeDelta::FromSeconds(100));
+
+ ASSERT_TRUE(RoundTrip(&frame));
+ ASSERT_TRUE(frame);
+ EXPECT_FALSE(frame->metadata()->IsTrue(VideoFrameMetadata::END_OF_STREAM));
+ EXPECT_EQ(frame->coded_size(), gfx::Size(100, 100));
+ EXPECT_EQ(frame->timestamp(), base::TimeDelta::FromSeconds(100));
+
+ ASSERT_EQ(frame->storage_type(), VideoFrame::STORAGE_MOJO_SHARED_BUFFER);
+ MojoSharedBufferVideoFrame* mojo_shared_buffer_frame =
+ static_cast<MojoSharedBufferVideoFrame*>(frame.get());
+ EXPECT_TRUE(mojo_shared_buffer_frame->Handle().is_valid());
+}
+
+TEST_F(VideoFrameStructTraitsTest, MailboxVideoFrame) {
+ gpu::Mailbox mailbox = gpu::Mailbox::Generate();
+ gpu::MailboxHolder mailbox_holder[VideoFrame::kMaxPlanes];
+ mailbox_holder[0] = gpu::MailboxHolder(mailbox, gpu::SyncToken(), 0);
+ scoped_refptr<VideoFrame> frame = VideoFrame::WrapNativeTextures(
+ PIXEL_FORMAT_ARGB, mailbox_holder, VideoFrame::ReleaseMailboxCB(),
+ gfx::Size(100, 100), gfx::Rect(10, 10, 80, 80), gfx::Size(200, 100),
+ base::TimeDelta::FromSeconds(100));
+
+ ASSERT_TRUE(RoundTrip(&frame));
+ ASSERT_TRUE(frame);
+ EXPECT_FALSE(frame->metadata()->IsTrue(VideoFrameMetadata::END_OF_STREAM));
+ EXPECT_EQ(frame->format(), PIXEL_FORMAT_ARGB);
+ EXPECT_EQ(frame->coded_size(), gfx::Size(100, 100));
+ EXPECT_EQ(frame->visible_rect(), gfx::Rect(10, 10, 80, 80));
+ EXPECT_EQ(frame->natural_size(), gfx::Size(200, 100));
+ EXPECT_EQ(frame->timestamp(), base::TimeDelta::FromSeconds(100));
+ ASSERT_TRUE(frame->HasTextures());
+ ASSERT_EQ(frame->mailbox_holder(0).mailbox, mailbox);
+}
+
+} // namespace media

Powered by Google App Engine
This is Rietveld 408576698