summaryrefslogtreecommitdiffstats
path: root/content/renderer/media/media_stream_video_track_unittest.cc
diff options
context:
space:
mode:
authorperkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-09 12:49:17 +0000
committerperkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-09 12:49:17 +0000
commit16ce556666d0a2fa7095cb417287916e4d3d35fa (patch)
tree0f53958eccbd404573e0f0289ae9e28ee95afe33 /content/renderer/media/media_stream_video_track_unittest.cc
parent5526e7cd50cfd5ae27c822fd694ae742a975fda2 (diff)
downloadchromium_src-16ce556666d0a2fa7095cb417287916e4d3d35fa.zip
chromium_src-16ce556666d0a2fa7095cb417287916e4d3d35fa.tar.gz
chromium_src-16ce556666d0a2fa7095cb417287916e4d3d35fa.tar.bz2
MediaStream VideoTrack implementation.
This implementation only use Chrome video classes for local rendering. A libjingle representation is created once its connected to a PeerConnection. BUG=334241 Review URL: https://codereview.chromium.org/155853002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@255846 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/media/media_stream_video_track_unittest.cc')
-rw-r--r--content/renderer/media/media_stream_video_track_unittest.cc144
1 files changed, 144 insertions, 0 deletions
diff --git a/content/renderer/media/media_stream_video_track_unittest.cc b/content/renderer/media/media_stream_video_track_unittest.cc
new file mode 100644
index 0000000..242b9ce
--- /dev/null
+++ b/content/renderer/media/media_stream_video_track_unittest.cc
@@ -0,0 +1,144 @@
+// Copyright 2014 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 "base/strings/utf_string_conversions.h"
+#include "content/renderer/media/media_stream_video_track.h"
+#include "content/renderer/media/mock_media_stream_dependency_factory.h"
+#include "content/renderer/media/mock_media_stream_video_source.h"
+#include "media/base/video_frame.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+class MockVideoSink : public MediaStreamVideoSink {
+ public:
+ MockVideoSink()
+ : number_of_frames_(0), enabled_(true),
+ state_(blink::WebMediaStreamSource::ReadyStateLive) {
+ }
+
+ virtual void OnVideoFrame(
+ const scoped_refptr<media::VideoFrame>& frame) OVERRIDE {
+ ++number_of_frames_;
+ }
+
+ virtual void OnReadyStateChanged(
+ blink::WebMediaStreamSource::ReadyState state) OVERRIDE {
+ state_ = state;
+ }
+
+ virtual void OnEnabledChanged(bool enabled) OVERRIDE {
+ enabled_ = enabled;
+ }
+
+ int number_of_frames() const { return number_of_frames_; }
+ bool enabled() const { return enabled_; }
+ blink::WebMediaStreamSource::ReadyState state() const { return state_; }
+
+ private:
+ int number_of_frames_;
+ bool enabled_;
+ blink::WebMediaStreamSource::ReadyState state_;
+};
+
+class MediaStreamVideoTrackTest : public ::testing::Test {
+ public:
+ MediaStreamVideoTrackTest()
+ : mock_source_(new MockMediaStreamVideoSource(&factory_, false)) {
+ webkit_source_.initialize(base::UTF8ToUTF16("dummy_source_id"),
+ blink::WebMediaStreamSource::TypeVideo,
+ base::UTF8ToUTF16("dummy_source_name"));
+ webkit_source_.setExtraData(mock_source_);
+ }
+
+ protected:
+ // Create a track that's associated with |mock_source_|.
+ blink::WebMediaStreamTrack CreateTrack() {
+ blink::WebMediaConstraints constraints;
+ constraints.initialize();
+ bool enabled = true;
+ blink::WebMediaStreamTrack track =
+ MediaStreamVideoTrack::CreateVideoTrack(
+ mock_source_, constraints,
+ MediaStreamSource::ConstraintsCallback(), enabled, &factory_);
+ mock_source_->StartMockedSource();
+
+ return track;
+ }
+
+ MockMediaStreamVideoSource* mock_source() { return mock_source_; }
+
+ private:
+ MockMediaStreamDependencyFactory factory_;
+ blink::WebMediaStreamSource webkit_source_;
+ // |mock_source_| is owned by |webkit_source_|.
+ MockMediaStreamVideoSource* mock_source_;
+};
+
+TEST_F(MediaStreamVideoTrackTest, GetAdapter) {
+ blink::WebMediaStreamTrack track = CreateTrack();
+ MediaStreamVideoTrack* video_track =
+ MediaStreamVideoTrack::GetVideoTrack(track);
+ EXPECT_TRUE(video_track->GetVideoAdapter() != NULL);
+}
+
+TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
+ MockVideoSink sink;
+ blink::WebMediaStreamTrack track = CreateTrack();
+ MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+
+ MediaStreamVideoTrack* video_track =
+ MediaStreamVideoTrack::GetVideoTrack(track);
+ scoped_refptr<media::VideoFrame> frame =
+ media::VideoFrame::CreateBlackFrame(
+ gfx::Size(MediaStreamVideoSource::kDefaultWidth,
+ MediaStreamVideoSource::kDefaultHeight));
+ video_track->OnVideoFrame(frame);
+ EXPECT_EQ(1, sink.number_of_frames());
+ video_track->OnVideoFrame(frame);
+ EXPECT_EQ(2, sink.number_of_frames());
+
+ MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
+ video_track->OnVideoFrame(frame);
+ EXPECT_EQ(2, sink.number_of_frames());
+}
+
+TEST_F(MediaStreamVideoTrackTest, SetEnabled) {
+ MockVideoSink sink;
+ blink::WebMediaStreamTrack track = CreateTrack();
+ MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+
+ MediaStreamVideoTrack* video_track =
+ MediaStreamVideoTrack::GetVideoTrack(track);
+ scoped_refptr<media::VideoFrame> frame =
+ media::VideoFrame::CreateBlackFrame(
+ gfx::Size(MediaStreamVideoSource::kDefaultWidth,
+ MediaStreamVideoSource::kDefaultHeight));
+ video_track->OnVideoFrame(frame);
+ EXPECT_EQ(1, sink.number_of_frames());
+
+ video_track->SetEnabled(false);
+ EXPECT_FALSE(sink.enabled());
+ video_track->OnVideoFrame(frame);
+ EXPECT_EQ(1, sink.number_of_frames());
+
+ video_track->SetEnabled(true);
+ EXPECT_TRUE(sink.enabled());
+ video_track->OnVideoFrame(frame);
+ EXPECT_EQ(2, sink.number_of_frames());
+ MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
+}
+
+TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
+ MockVideoSink sink;
+ blink::WebMediaStreamTrack track = CreateTrack();
+ MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+ EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
+
+ mock_source()->StopSource();
+ EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state());
+ MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
+}
+
+} // namespace content