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

Side by Side Diff: content/renderer/media/media_stream_video_track_unittest.cc

Issue 155853002: Chrome MediaStream VideoTrack implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed whitespaces... Created 6 years, 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 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/strings/utf_string_conversions.h"
6 #include "content/renderer/media/media_stream_video_track.h"
7 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
8 #include "content/renderer/media/mock_media_stream_video_source.h"
9 #include "media/base/video_frame.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace content {
13
14 class MockVideoSink : public MediaStreamVideoSink {
15 public:
16 MockVideoSink()
17 : number_of_frames_(0), enabled_(true),
18 state_(blink::WebMediaStreamSource::ReadyStateLive) {
19 }
20
21 virtual void OnVideoFrame(
22 const scoped_refptr<media::VideoFrame>& frame) OVERRIDE {
23 ++number_of_frames_;
24 }
25
26 virtual void OnReadyStateChanged(
27 blink::WebMediaStreamSource::ReadyState state) OVERRIDE {
28 state_ = state;
29 }
30
31 virtual void OnEnabledChanged(bool enabled) OVERRIDE {
32 enabled_ = enabled;
33 }
34
35 int number_of_frames() const { return number_of_frames_; }
36 bool enabled() const { return enabled_; }
37 blink::WebMediaStreamSource::ReadyState state() const { return state_; }
38
39 private:
40 int number_of_frames_;
41 bool enabled_;
42 blink::WebMediaStreamSource::ReadyState state_;
43 };
44
45 class MediaStreamVideoTrackTest : public ::testing::Test {
46 public:
47 MediaStreamVideoTrackTest()
48 : mock_source_(new MockMediaStreamVideoSource(&factory_, false)) {
49 webkit_source_.initialize(base::UTF8ToUTF16("dummy_source_id"),
50 blink::WebMediaStreamSource::TypeVideo,
51 base::UTF8ToUTF16("dummy_source_name"));
52 webkit_source_.setExtraData(mock_source_);
53 }
54
55 protected:
56 // Create a track that's associated with |mock_source_|.
57 blink::WebMediaStreamTrack CreateTrack() {
58 blink::WebMediaConstraints constraints;
59 constraints.initialize();
60 bool enabled = true;
61 blink::WebMediaStreamTrack track =
62 MediaStreamVideoTrack::CreateVideoTrack(
63 mock_source_, constraints,
64 MediaStreamSource::ConstraintsCallback(), enabled, &factory_);
65 mock_source_->StartMockedSource();
66
67 return track;
68 }
69
70 MockMediaStreamVideoSource* mock_source() { return mock_source_; }
71
72 private:
73 MockMediaStreamDependencyFactory factory_;
74 blink::WebMediaStreamSource webkit_source_;
75 // |mock_source_| is owned by |webkit_source_|.
76 MockMediaStreamVideoSource* mock_source_;
77 };
78
79 TEST_F(MediaStreamVideoTrackTest, GetAdapter) {
80 blink::WebMediaStreamTrack track = CreateTrack();
81 MediaStreamVideoTrack* video_track =
82 MediaStreamVideoTrack::GetVideoTrack(track);
83 EXPECT_TRUE(video_track->GetVideoAdapter() != NULL);
84 }
85
86 TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
87 MockVideoSink sink;
88 blink::WebMediaStreamTrack track = CreateTrack();
89 MediaStreamVideoSink::AddToVideoTrack(&sink, track);
90
91 MediaStreamVideoTrack* video_track =
92 MediaStreamVideoTrack::GetVideoTrack(track);
93 scoped_refptr<media::VideoFrame> frame =
94 media::VideoFrame::CreateBlackFrame(
95 gfx::Size(MediaStreamVideoSource::kDefaultWidth,
96 MediaStreamVideoSource::kDefaultHeight));
97 video_track->OnVideoFrame(frame);
98 EXPECT_EQ(1, sink.number_of_frames());
99 video_track->OnVideoFrame(frame);
100 EXPECT_EQ(2, sink.number_of_frames());
101
102 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
103 video_track->OnVideoFrame(frame);
104 EXPECT_EQ(2, sink.number_of_frames());
105 }
106
107 TEST_F(MediaStreamVideoTrackTest, SetEnabled) {
108 MockVideoSink sink;
109 blink::WebMediaStreamTrack track = CreateTrack();
110 MediaStreamVideoSink::AddToVideoTrack(&sink, track);
111
112 MediaStreamVideoTrack* video_track =
113 MediaStreamVideoTrack::GetVideoTrack(track);
114 scoped_refptr<media::VideoFrame> frame =
115 media::VideoFrame::CreateBlackFrame(
116 gfx::Size(MediaStreamVideoSource::kDefaultWidth,
117 MediaStreamVideoSource::kDefaultHeight));
118 video_track->OnVideoFrame(frame);
119 EXPECT_EQ(1, sink.number_of_frames());
120
121 video_track->SetEnabled(false);
122 EXPECT_FALSE(sink.enabled());
123 video_track->OnVideoFrame(frame);
124 EXPECT_EQ(1, sink.number_of_frames());
125
126 video_track->SetEnabled(true);
127 EXPECT_TRUE(sink.enabled());
128 video_track->OnVideoFrame(frame);
129 EXPECT_EQ(2, sink.number_of_frames());
130 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
131 }
132
133 TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
134 MockVideoSink sink;
135 blink::WebMediaStreamTrack track = CreateTrack();
136 MediaStreamVideoSink::AddToVideoTrack(&sink, track);
137 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
138
139 mock_source()->StopSource();
140 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state());
141 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
142 }
143
144 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_video_track.cc ('k') | content/renderer/media/rtc_peer_connection_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698