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

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: Fixed a comment. 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 |webkit_source_|.
57 blink::WebMediaStreamTrack CreateTrack() {
58 blink::WebMediaStreamTrack track;
59 track.initialize(base::UTF8ToUTF16("track_id"), webkit_source_);
60 track.setExtraData(new MediaStreamVideoTrack(mock_source_, &factory_));
61
62 MediaStreamVideoSource* source =
63 static_cast<MediaStreamVideoSource*>(track.source().extraData());
64 blink::WebMediaConstraints constraints;
65 constraints.initialize();
66 source->AddTrack(track,
67 constraints,
68 MediaStreamSource::ConstraintsCallback());
69 mock_source_->StartMockedSource();
70
71 return track;
72 }
73
74 MockMediaStreamVideoSource* mock_source() { return mock_source_; }
75
76 private:
77 MockMediaStreamDependencyFactory factory_;
78 blink::WebMediaStreamSource webkit_source_;
79 // |mock_source_| is owned by |webkit_source_|.
80 MockMediaStreamVideoSource* mock_source_;
81 };
82
83 TEST_F(MediaStreamVideoTrackTest, GetAdapter) {
84 blink::WebMediaStreamTrack track = CreateTrack();
85 MediaStreamVideoTrack* video_track =
86 MediaStreamVideoTrack::GetVideoTrack(track);
87 EXPECT_TRUE(video_track->GetVideoAdapter() != NULL);
88 }
89
90 TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
91 MockVideoSink sink;
92 blink::WebMediaStreamTrack track = CreateTrack();
93 MediaStreamVideoSink::AddToVideoTrack(&sink, track);
94
95 MediaStreamVideoTrack* video_track =
96 MediaStreamVideoTrack::GetVideoTrack(track);
97 scoped_refptr<media::VideoFrame> frame =
98 media::VideoFrame::CreateBlackFrame(
99 gfx::Size(MediaStreamVideoSource::kDefaultWidth,
100 MediaStreamVideoSource::kDefaultHeight));
101 video_track->OnVideoFrame(frame);
102 EXPECT_EQ(1, sink.number_of_frames());
103 video_track->OnVideoFrame(frame);
104 EXPECT_EQ(2, sink.number_of_frames());
105
106 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
107 video_track->OnVideoFrame(frame);
108 EXPECT_EQ(2, sink.number_of_frames());
109 }
110
111 TEST_F(MediaStreamVideoTrackTest, SetEnabled) {
112 MockVideoSink sink;
113 blink::WebMediaStreamTrack track = CreateTrack();
114 MediaStreamVideoSink::AddToVideoTrack(&sink, track);
115
116 MediaStreamVideoTrack* video_track =
117 MediaStreamVideoTrack::GetVideoTrack(track);
118 scoped_refptr<media::VideoFrame> frame =
119 media::VideoFrame::CreateBlackFrame(
120 gfx::Size(MediaStreamVideoSource::kDefaultWidth,
121 MediaStreamVideoSource::kDefaultHeight));
122 video_track->OnVideoFrame(frame);
123 EXPECT_EQ(1, sink.number_of_frames());
124
125 video_track->SetEnabled(false);
126 EXPECT_FALSE(sink.enabled());
127 video_track->OnVideoFrame(frame);
128 EXPECT_EQ(1, sink.number_of_frames());
129
130 video_track->SetEnabled(true);
131 EXPECT_TRUE(sink.enabled());
132 video_track->OnVideoFrame(frame);
133 EXPECT_EQ(2, sink.number_of_frames());
134 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
135 }
136
137 TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
138 MockVideoSink sink;
139 blink::WebMediaStreamTrack track = CreateTrack();
140 MediaStreamVideoSink::AddToVideoTrack(&sink, track);
141 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
142
143 mock_source()->StopSource();
144 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state());
145 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
146 }
147
148 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698