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

Side by Side Diff: content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc

Issue 201583003: Implement a source for remote video tracks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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/public/renderer/media_stream_video_sink.h"
7 #include "content/renderer/media/media_stream_video_track.h"
8 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
9 #include "content/renderer/media/webrtc/media_stream_remote_video_source.h"
10 #include "media/base/video_frame.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/libjingle/source/talk/media/webrtc/webrtcvideoframe.h"
13
14 namespace content {
15
16 class MockVideoSink : public MediaStreamVideoSink {
17 public:
18 MockVideoSink()
19 : number_of_frames_(0),
20 state_(blink::WebMediaStreamSource::ReadyStateLive) {
21 }
22
23 virtual void OnVideoFrame(
24 const scoped_refptr<media::VideoFrame>& frame) OVERRIDE {
25 ++number_of_frames_;
26 }
27
28 virtual void OnReadyStateChanged(
29 blink::WebMediaStreamSource::ReadyState state) OVERRIDE {
30 state_ = state;
31 }
32
33 int number_of_frames() const { return number_of_frames_; }
34 blink::WebMediaStreamSource::ReadyState state() const { return state_; }
35
36 private:
37 int number_of_frames_;
38 blink::WebMediaStreamSource::ReadyState state_;
39 };
40
41 class MediaStreamRemoteVideoSourceUnderTest
42 : public MediaStreamRemoteVideoSource {
43 public:
44 MediaStreamRemoteVideoSourceUnderTest(webrtc::VideoTrackInterface* track)
45 : MediaStreamRemoteVideoSource(track) {
46 }
47 using MediaStreamRemoteVideoSource::RenderFrame;
48 };
49
50 class MediaStreamRemoteVideoSourceTest
51 : public ::testing::Test {
52 public:
53 MediaStreamRemoteVideoSourceTest()
54 : mock_factory_(new MockMediaStreamDependencyFactory()),
55 webrtc_video_track_(
56 mock_factory_->CreateLocalVideoTrack(
57 "test",
58 (cricket::VideoCapturer*) NULL)),
Jói 2014/03/17 22:00:40 nit: static_cast
perkj_chrome 2014/03/19 16:34:48 Done.
59 remote_source_(
60 new MediaStreamRemoteVideoSourceUnderTest(webrtc_video_track_)),
61 number_of_successful_constraints_applied_(0),
62 number_of_failed_constraints_applied_(0) {
63 webkit_source_.initialize(base::UTF8ToUTF16("dummy_source_id"),
64 blink::WebMediaStreamSource::TypeVideo,
65 base::UTF8ToUTF16("dummy_source_name"));
66 webkit_source_.setExtraData(remote_source_);
67 }
68 virtual ~MediaStreamRemoteVideoSourceTest() {}
69
70 MediaStreamRemoteVideoSourceUnderTest* source() {
71 return remote_source_;
72 }
73
74 MediaStreamVideoTrack* CreateTrack() {
75 bool enabled = true;
76 blink::WebMediaConstraints constraints;
77 constraints.initialize();
78 MediaStreamDependencyFactory* factory = NULL;
79 return new MediaStreamVideoTrack(
80 source(),
81 constraints,
82 base::Bind(
83 &MediaStreamRemoteVideoSourceTest::OnConstraintsApplied,
84 base::Unretained(this)),
85 enabled, factory);
86 }
87
88 int NumberOfSuccessConstraintsCallbacks() const {
89 return number_of_successful_constraints_applied_;
90 }
91
92 int NumberOfFailedConstraintsCallbacks() const {
93 return number_of_failed_constraints_applied_;
94 }
95
96 void StopWebRtcTrack() {
97 static_cast<MockLocalVideoTrack*>(webrtc_video_track_.get())->set_state(
98 webrtc::MediaStreamTrackInterface::kEnded);
99 }
100
101 base::MessageLoop* message_loop() { return &message_loop_; }
102
103 const blink::WebMediaStreamSource& webkit_source() const {
104 return webkit_source_;
105 }
106
107 private:
108 void OnConstraintsApplied(MediaStreamSource* source, bool success) {
109 ASSERT_EQ(source, remote_source_);
110 if (success)
111 ++number_of_successful_constraints_applied_;
112 else
113 ++number_of_failed_constraints_applied_;
114 }
115
116 base::MessageLoop message_loop_;
117 scoped_ptr<MockMediaStreamDependencyFactory> mock_factory_;
118 scoped_refptr<webrtc::VideoTrackInterface> webrtc_video_track_;
119 // |remote_source_| is owned by |webkit_source_|.
120 MediaStreamRemoteVideoSourceUnderTest* remote_source_;
121 blink::WebMediaStreamSource webkit_source_;
122 int number_of_successful_constraints_applied_;
123 int number_of_failed_constraints_applied_;
124 };
125
126 TEST_F(MediaStreamRemoteVideoSourceTest, StartTrack) {
127 scoped_ptr<MediaStreamVideoTrack> track(CreateTrack());
128 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
129
130 MockVideoSink sink;
131 track->AddSink(&sink);
132
133 cricket::WebRtcVideoFrame webrtc_frame;
134 webrtc_frame.InitToBlack(320, 240, 1, 1, 0, 1);
135 source()->RenderFrame(&webrtc_frame);
136 message_loop()->RunUntilIdle();
137
138 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
139 EXPECT_EQ(1, sink.number_of_frames());
140 track->RemoveSink(&sink);
141 }
142
143 TEST_F(MediaStreamRemoteVideoSourceTest, RemoteTrackStop) {
144 scoped_ptr<MediaStreamVideoTrack> track(CreateTrack());
145
146 MockVideoSink sink;
147 track->AddSink(&sink);
148
149 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
150 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
151 webkit_source().readyState());
152 StopWebRtcTrack();
153 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
154 webkit_source().readyState());
155 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state());
156
157 track->RemoveSink(&sink);
158 }
159
160 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698