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

Side by Side Diff: chromecast/renderer/media/cma_renderer_unittest.cc

Issue 1137263002: Chromecast: adds CmaRenderer test coverage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 unified diff | Download patch
« no previous file with comments | « chromecast/media/cma/ipc/media_message_fifo.h ('k') | media/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/bind.h"
6 #include "base/macros.h"
7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/shared_memory.h"
10 #include "base/message_loop/message_loop.h"
11 #include "base/time/time.h"
12 #include "chromecast/common/media/cma_messages.h"
13 #include "chromecast/common/media/shared_memory_chunk.h"
14 #include "chromecast/media/cma/base/buffering_defs.h"
15 #include "chromecast/media/cma/filters/cma_renderer.h"
16 #include "chromecast/media/cma/ipc/media_memory_chunk.h"
17 #include "chromecast/media/cma/ipc/media_message_fifo.h"
18 #include "chromecast/media/cma/pipeline/media_pipeline.h"
19 #include "chromecast/renderer/media/cma_message_filter_proxy.h"
20 #include "chromecast/renderer/media/media_pipeline_proxy.h"
21 #include "ipc/ipc_test_sink.h"
22 #include "media/base/demuxer_stream_provider.h"
23 #include "media/base/fake_demuxer_stream.h"
24 #include "media/base/null_video_sink.h"
25 #include "testing/gmock/include/gmock/gmock.h"
26 #include "testing/gtest/include/gtest/gtest.h"
27
28 namespace chromecast {
29 namespace media {
30
31 namespace {
32
33 class FakeDemuxerStreamProvider : public ::media::DemuxerStreamProvider {
servolk 2015/05/14 20:54:15 Looks like this might be potentially useful for ot
gunsch 2015/05/14 22:01:15 Done. xhwang@, are you okay with this change?
34 public:
35 FakeDemuxerStreamProvider() : fake_stream_(1, 1, false) {}
36 ~FakeDemuxerStreamProvider() override {}
37
38 ::media::DemuxerStream* GetStream(
39 ::media::DemuxerStream::Type type) override {
40 // Note: FakeDemuxerStream only supports video
41 if (type == ::media::DemuxerStream::Type::AUDIO)
42 return nullptr;
43 return &fake_stream_;
44 }
45
46 private:
47 ::media::FakeDemuxerStream fake_stream_;
48
49 DISALLOW_COPY_AND_ASSIGN(FakeDemuxerStreamProvider);
50 };
51
52 class CmaRendererTest : public testing::Test {
53 public:
54 CmaRendererTest() {
55 null_sink_.reset(new ::media::NullVideoSink(
56 false,
57 base::TimeDelta::FromSecondsD(1.0 / 60),
58 base::Bind(&MockCB::OnFrameReceived, base::Unretained(&mock_)),
59 message_loop_.task_runner()));
60
61 cma_proxy_ = new CmaMessageFilterProxy(message_loop_.message_loop_proxy());
62 cma_proxy_->OnFilterAdded(&ipc_sink_);
63
64 renderer_.reset(new CmaRenderer(
65 scoped_ptr<MediaPipelineProxy>(
66 new MediaPipelineProxy(0, message_loop_.message_loop_proxy(),
67 LoadType::kLoadTypeMediaSource)),
68 null_sink_.get()));
69 }
70
71 ~CmaRendererTest() override {
72 cma_proxy_->OnFilterRemoved();
73 }
74
75 protected:
76 base::MessageLoop message_loop_;
77 FakeDemuxerStreamProvider demuxer_stream_provider_;
78 IPC::TestSink ipc_sink_;
79 scoped_refptr<CmaMessageFilterProxy> cma_proxy_;
80 scoped_ptr<CmaRenderer> renderer_;
81
82 class MockCB {
83 public:
84 MOCK_METHOD1(OnInitialized, void(::media::PipelineStatus));
85 MOCK_METHOD1(OnFrameReceived,
86 void(const scoped_refptr<::media::VideoFrame>&));
87 MOCK_METHOD1(OnStatistics, void(const ::media::PipelineStatistics&));
88 MOCK_METHOD1(OnBufferingState, void(::media::BufferingState));
89 MOCK_METHOD0(OnEnded, void());
90 MOCK_METHOD1(OnError, void(::media::PipelineStatus));
91 MOCK_METHOD0(OnWaitingForDecryptionKey, void());
92 };
93 MockCB mock_;
94
95 private:
96 scoped_ptr<::media::NullVideoSink> null_sink_;
97
98 DISALLOW_COPY_AND_ASSIGN(CmaRendererTest);
99 };
100
101 } // namespace
102
103 TEST_F(CmaRendererTest, TestInitialization) {
104 renderer_->Initialize(
105 &demuxer_stream_provider_,
106 base::Bind(&MockCB::OnInitialized, base::Unretained(&mock_)),
107 base::Bind(&MockCB::OnStatistics, base::Unretained(&mock_)),
108 base::Bind(&MockCB::OnBufferingState, base::Unretained(&mock_)),
109 base::Bind(&MockCB::OnEnded, base::Unretained(&mock_)),
110 base::Bind(&MockCB::OnError, base::Unretained(&mock_)),
111 base::Bind(&MockCB::OnWaitingForDecryptionKey, base::Unretained(&mock_)));
112 message_loop_.RunUntilIdle();
113
114 EXPECT_TRUE(ipc_sink_.GetUniqueMessageMatching(CmaHostMsg_CreateAvPipe::ID));
115 base::SharedMemory* shared_memory = new base::SharedMemory();
116 EXPECT_TRUE(shared_memory->CreateAndMapAnonymous(kAppVideoBufferSize));
117
118 // Renderer MediaMessageFifo instance expects the first bytes of the shared
119 // memory blob to describe how much space is available for writing.
120 *(static_cast<size_t*>(shared_memory->memory())) =
121 shared_memory->requested_size() - MediaMessageFifo::kDescriptorSize;
122
123 base::FileDescriptor foreign_socket_handle;
124 cma_proxy_->OnMessageReceived(CmaMsg_AvPipeCreated(
125 1, kVideoTrackId, true,
126 shared_memory->handle(), foreign_socket_handle));
127 message_loop_.RunUntilIdle();
128
129 EXPECT_FALSE(
130 ipc_sink_.GetUniqueMessageMatching(CmaHostMsg_AudioInitialize::ID));
131 EXPECT_TRUE(
132 ipc_sink_.GetUniqueMessageMatching(CmaHostMsg_VideoInitialize::ID));
133
134 EXPECT_CALL(mock_, OnInitialized(::media::PIPELINE_OK));
135 cma_proxy_->OnMessageReceived(
136 CmaMsg_TrackStateChanged(1, kVideoTrackId, ::media::PIPELINE_OK));
137 message_loop_.RunUntilIdle();
138 }
139
140
141 } // namespace media
142 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/media/cma/ipc/media_message_fifo.h ('k') | media/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698