| Index: talk/app/webrtc/videosource_unittest.cc
|
| diff --git a/talk/app/webrtc/videosource_unittest.cc b/talk/app/webrtc/videosource_unittest.cc
|
| deleted file mode 100644
|
| index bb911270008e025626cc7024b68ffd6a000650ee..0000000000000000000000000000000000000000
|
| --- a/talk/app/webrtc/videosource_unittest.cc
|
| +++ /dev/null
|
| @@ -1,546 +0,0 @@
|
| -/*
|
| - * libjingle
|
| - * Copyright 2012 Google Inc.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions are met:
|
| - *
|
| - * 1. Redistributions of source code must retain the above copyright notice,
|
| - * this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright notice,
|
| - * this list of conditions and the following disclaimer in the documentation
|
| - * and/or other materials provided with the distribution.
|
| - * 3. The name of the author may not be used to endorse or promote products
|
| - * derived from this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
| - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
| - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
| - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
| - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
| - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
| - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "talk/app/webrtc/remotevideocapturer.h"
|
| -#include "talk/app/webrtc/test/fakeconstraints.h"
|
| -#include "talk/app/webrtc/videosource.h"
|
| -#include "talk/session/media/channelmanager.h"
|
| -#include "webrtc/base/gunit.h"
|
| -#include "webrtc/media/base/fakemediaengine.h"
|
| -#include "webrtc/media/base/fakevideocapturer.h"
|
| -#include "webrtc/media/base/fakevideorenderer.h"
|
| -#include "webrtc/media/webrtc/webrtcvideoframe.h"
|
| -
|
| -using webrtc::FakeConstraints;
|
| -using webrtc::VideoSource;
|
| -using webrtc::MediaConstraintsInterface;
|
| -using webrtc::MediaSourceInterface;
|
| -using webrtc::ObserverInterface;
|
| -using webrtc::VideoSourceInterface;
|
| -
|
| -namespace {
|
| -
|
| -// Max wait time for a test.
|
| -const int kMaxWaitMs = 100;
|
| -
|
| -} // anonymous namespace
|
| -
|
| -
|
| -// TestVideoCapturer extends cricket::FakeVideoCapturer so it can be used for
|
| -// testing without known camera formats.
|
| -// It keeps its own lists of cricket::VideoFormats for the unit tests in this
|
| -// file.
|
| -class TestVideoCapturer : public cricket::FakeVideoCapturer {
|
| - public:
|
| - TestVideoCapturer() : test_without_formats_(false) {
|
| - std::vector<cricket::VideoFormat> formats;
|
| - formats.push_back(cricket::VideoFormat(1280, 720,
|
| - cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420));
|
| - formats.push_back(cricket::VideoFormat(640, 480,
|
| - cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420));
|
| - formats.push_back(cricket::VideoFormat(640, 400,
|
| - cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420));
|
| - formats.push_back(cricket::VideoFormat(320, 240,
|
| - cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420));
|
| - formats.push_back(cricket::VideoFormat(352, 288,
|
| - cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420));
|
| - ResetSupportedFormats(formats);
|
| - }
|
| -
|
| - // This function is used for resetting the supported capture formats and
|
| - // simulating a cricket::VideoCapturer implementation that don't support
|
| - // capture format enumeration. This is used to simulate the current
|
| - // Chrome implementation.
|
| - void TestWithoutCameraFormats() {
|
| - test_without_formats_ = true;
|
| - std::vector<cricket::VideoFormat> formats;
|
| - ResetSupportedFormats(formats);
|
| - }
|
| -
|
| - virtual cricket::CaptureState Start(
|
| - const cricket::VideoFormat& capture_format) {
|
| - if (test_without_formats_) {
|
| - std::vector<cricket::VideoFormat> formats;
|
| - formats.push_back(capture_format);
|
| - ResetSupportedFormats(formats);
|
| - }
|
| - return FakeVideoCapturer::Start(capture_format);
|
| - }
|
| -
|
| - virtual bool GetBestCaptureFormat(const cricket::VideoFormat& desired,
|
| - cricket::VideoFormat* best_format) {
|
| - if (test_without_formats_) {
|
| - *best_format = desired;
|
| - return true;
|
| - }
|
| - return FakeVideoCapturer::GetBestCaptureFormat(desired,
|
| - best_format);
|
| - }
|
| -
|
| - private:
|
| - bool test_without_formats_;
|
| -};
|
| -
|
| -class StateObserver : public ObserverInterface {
|
| - public:
|
| - explicit StateObserver(VideoSourceInterface* source)
|
| - : state_(source->state()),
|
| - source_(source) {
|
| - }
|
| - virtual void OnChanged() {
|
| - state_ = source_->state();
|
| - }
|
| - MediaSourceInterface::SourceState state() const { return state_; }
|
| -
|
| - private:
|
| - MediaSourceInterface::SourceState state_;
|
| - rtc::scoped_refptr<VideoSourceInterface> source_;
|
| -};
|
| -
|
| -class VideoSourceTest : public testing::Test {
|
| - protected:
|
| - VideoSourceTest()
|
| - : capturer_cleanup_(new TestVideoCapturer()),
|
| - capturer_(capturer_cleanup_.get()),
|
| - channel_manager_(new cricket::ChannelManager(
|
| - new cricket::FakeMediaEngine(), rtc::Thread::Current())) {
|
| - }
|
| -
|
| - void SetUp() {
|
| - ASSERT_TRUE(channel_manager_->Init());
|
| - }
|
| -
|
| - void CreateVideoSource() {
|
| - CreateVideoSource(NULL);
|
| - }
|
| -
|
| - void CreateVideoSource(
|
| - const webrtc::MediaConstraintsInterface* constraints) {
|
| - // VideoSource take ownership of |capturer_|
|
| - source_ =
|
| - VideoSource::Create(channel_manager_.get(), capturer_cleanup_.release(),
|
| - constraints, false);
|
| -
|
| - ASSERT_TRUE(source_.get() != NULL);
|
| - EXPECT_EQ(capturer_, source_->GetVideoCapturer());
|
| -
|
| - state_observer_.reset(new StateObserver(source_));
|
| - source_->RegisterObserver(state_observer_.get());
|
| - source_->AddSink(&renderer_);
|
| - }
|
| -
|
| - rtc::scoped_ptr<TestVideoCapturer> capturer_cleanup_;
|
| - TestVideoCapturer* capturer_;
|
| - cricket::FakeVideoRenderer renderer_;
|
| - rtc::scoped_ptr<cricket::ChannelManager> channel_manager_;
|
| - rtc::scoped_ptr<StateObserver> state_observer_;
|
| - rtc::scoped_refptr<VideoSource> source_;
|
| -};
|
| -
|
| -
|
| -// Test that a VideoSource transition to kLive state when the capture
|
| -// device have started and kEnded if it is stopped.
|
| -// It also test that an output can receive video frames.
|
| -TEST_F(VideoSourceTest, CapturerStartStop) {
|
| - // Initialize without constraints.
|
| - CreateVideoSource();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -
|
| - ASSERT_TRUE(capturer_->CaptureFrame());
|
| - EXPECT_EQ(1, renderer_.num_rendered_frames());
|
| -
|
| - capturer_->Stop();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -}
|
| -
|
| -// Test that a VideoSource can be stopped and restarted.
|
| -TEST_F(VideoSourceTest, StopRestart) {
|
| - // Initialize without constraints.
|
| - CreateVideoSource();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -
|
| - ASSERT_TRUE(capturer_->CaptureFrame());
|
| - EXPECT_EQ(1, renderer_.num_rendered_frames());
|
| -
|
| - source_->Stop();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -
|
| - source_->Restart();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -
|
| - ASSERT_TRUE(capturer_->CaptureFrame());
|
| - EXPECT_EQ(2, renderer_.num_rendered_frames());
|
| -
|
| - source_->Stop();
|
| -}
|
| -
|
| -// Test start stop with a remote VideoSource - the video source that has a
|
| -// RemoteVideoCapturer and takes video frames from FrameInput.
|
| -TEST_F(VideoSourceTest, StartStopRemote) {
|
| - source_ = VideoSource::Create(channel_manager_.get(),
|
| - new webrtc::RemoteVideoCapturer(), NULL, true);
|
| -
|
| - ASSERT_TRUE(source_.get() != NULL);
|
| - EXPECT_TRUE(NULL != source_->GetVideoCapturer());
|
| -
|
| - state_observer_.reset(new StateObserver(source_));
|
| - source_->RegisterObserver(state_observer_.get());
|
| - source_->AddSink(&renderer_);
|
| -
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -
|
| - source_->GetVideoCapturer()->Stop();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -}
|
| -
|
| -// Test that a VideoSource transition to kEnded if the capture device
|
| -// fails.
|
| -TEST_F(VideoSourceTest, CameraFailed) {
|
| - CreateVideoSource();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -
|
| - capturer_->SignalStateChange(capturer_, cricket::CS_FAILED);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -}
|
| -
|
| -// Test that the capture output is CIF if we set max constraints to CIF.
|
| -// and the capture device support CIF.
|
| -TEST_F(VideoSourceTest, MandatoryConstraintCif5Fps) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxWidth, 352);
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxHeight, 288);
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxFrameRate, 5);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - EXPECT_EQ(352, format->width);
|
| - EXPECT_EQ(288, format->height);
|
| - EXPECT_EQ(30, format->framerate());
|
| -}
|
| -
|
| -// Test that the capture output is 720P if the camera support it and the
|
| -// optional constraint is set to 720P.
|
| -TEST_F(VideoSourceTest, MandatoryMinVgaOptional720P) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMinWidth, 640);
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMinHeight, 480);
|
| - constraints.AddOptional(MediaConstraintsInterface::kMinWidth, 1280);
|
| - constraints.AddOptional(MediaConstraintsInterface::kMinAspectRatio,
|
| - 1280.0 / 720);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - EXPECT_EQ(1280, format->width);
|
| - EXPECT_EQ(720, format->height);
|
| - EXPECT_EQ(30, format->framerate());
|
| -}
|
| -
|
| -// Test that the capture output have aspect ratio 4:3 if a mandatory constraint
|
| -// require it even if an optional constraint request a higher resolution
|
| -// that don't have this aspect ratio.
|
| -TEST_F(VideoSourceTest, MandatoryAspectRatio4To3) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMinWidth, 640);
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMinHeight, 480);
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxAspectRatio,
|
| - 640.0 / 480);
|
| - constraints.AddOptional(MediaConstraintsInterface::kMinWidth, 1280);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - EXPECT_EQ(640, format->width);
|
| - EXPECT_EQ(480, format->height);
|
| - EXPECT_EQ(30, format->framerate());
|
| -}
|
| -
|
| -
|
| -// Test that the source state transition to kEnded if the mandatory aspect ratio
|
| -// is set higher than supported.
|
| -TEST_F(VideoSourceTest, MandatoryAspectRatioTooHigh) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMinAspectRatio, 2);
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -}
|
| -
|
| -// Test that the source ignores an optional aspect ratio that is higher than
|
| -// supported.
|
| -TEST_F(VideoSourceTest, OptionalAspectRatioTooHigh) {
|
| - FakeConstraints constraints;
|
| - constraints.AddOptional(MediaConstraintsInterface::kMinAspectRatio, 2);
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - double aspect_ratio = static_cast<double>(format->width) / format->height;
|
| - EXPECT_LT(aspect_ratio, 2);
|
| -}
|
| -
|
| -// Test that the source starts video with the default resolution if the
|
| -// camera doesn't support capability enumeration and there are no constraints.
|
| -TEST_F(VideoSourceTest, NoCameraCapability) {
|
| - capturer_->TestWithoutCameraFormats();
|
| -
|
| - CreateVideoSource();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - EXPECT_EQ(640, format->width);
|
| - EXPECT_EQ(480, format->height);
|
| - EXPECT_EQ(30, format->framerate());
|
| -}
|
| -
|
| -// Test that the source can start the video and get the requested aspect ratio
|
| -// if the camera doesn't support capability enumeration and the aspect ratio is
|
| -// set.
|
| -TEST_F(VideoSourceTest, NoCameraCapability16To9Ratio) {
|
| - capturer_->TestWithoutCameraFormats();
|
| -
|
| - FakeConstraints constraints;
|
| - double requested_aspect_ratio = 640.0 / 360;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMinWidth, 640);
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMinAspectRatio,
|
| - requested_aspect_ratio);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - double aspect_ratio = static_cast<double>(format->width) / format->height;
|
| - EXPECT_LE(requested_aspect_ratio, aspect_ratio);
|
| -}
|
| -
|
| -// Test that the source state transitions to kEnded if an unknown mandatory
|
| -// constraint is found.
|
| -TEST_F(VideoSourceTest, InvalidMandatoryConstraint) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory("weird key", 640);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -}
|
| -
|
| -// Test that the source ignores an unknown optional constraint.
|
| -TEST_F(VideoSourceTest, InvalidOptionalConstraint) {
|
| - FakeConstraints constraints;
|
| - constraints.AddOptional("weird key", 640);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, SetValidOptionValues) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kNoiseReduction, "false");
|
| -
|
| - CreateVideoSource(&constraints);
|
| -
|
| - EXPECT_EQ(rtc::Optional<bool>(false),
|
| - source_->options()->video_noise_reduction);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, OptionNotSet) {
|
| - FakeConstraints constraints;
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ(rtc::Optional<bool>(), source_->options()->video_noise_reduction);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, MandatoryOptionOverridesOptional) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(
|
| - MediaConstraintsInterface::kNoiseReduction, true);
|
| - constraints.AddOptional(
|
| - MediaConstraintsInterface::kNoiseReduction, false);
|
| -
|
| - CreateVideoSource(&constraints);
|
| -
|
| - EXPECT_EQ(rtc::Optional<bool>(true),
|
| - source_->options()->video_noise_reduction);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, InvalidOptionKeyOptional) {
|
| - FakeConstraints constraints;
|
| - constraints.AddOptional(
|
| - MediaConstraintsInterface::kNoiseReduction, false);
|
| - constraints.AddOptional("invalidKey", false);
|
| -
|
| - CreateVideoSource(&constraints);
|
| -
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - EXPECT_EQ(rtc::Optional<bool>(false),
|
| - source_->options()->video_noise_reduction);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, InvalidOptionKeyMandatory) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(
|
| - MediaConstraintsInterface::kNoiseReduction, false);
|
| - constraints.AddMandatory("invalidKey", false);
|
| -
|
| - CreateVideoSource(&constraints);
|
| -
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - EXPECT_EQ(rtc::Optional<bool>(), source_->options()->video_noise_reduction);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, InvalidOptionValueOptional) {
|
| - FakeConstraints constraints;
|
| - constraints.AddOptional(
|
| - MediaConstraintsInterface::kNoiseReduction, "not a boolean");
|
| -
|
| - CreateVideoSource(&constraints);
|
| -
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - EXPECT_EQ(rtc::Optional<bool>(), source_->options()->video_noise_reduction);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, InvalidOptionValueMandatory) {
|
| - FakeConstraints constraints;
|
| - // Optional constraints should be ignored if the mandatory constraints fail.
|
| - constraints.AddOptional(
|
| - MediaConstraintsInterface::kNoiseReduction, "false");
|
| - // Values are case-sensitive and must be all lower-case.
|
| - constraints.AddMandatory(
|
| - MediaConstraintsInterface::kNoiseReduction, "True");
|
| -
|
| - CreateVideoSource(&constraints);
|
| -
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - EXPECT_EQ(rtc::Optional<bool>(), source_->options()->video_noise_reduction);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, MixedOptionsAndConstraints) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxWidth, 352);
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxHeight, 288);
|
| - constraints.AddOptional(MediaConstraintsInterface::kMaxFrameRate, 5);
|
| -
|
| - constraints.AddMandatory(
|
| - MediaConstraintsInterface::kNoiseReduction, false);
|
| - constraints.AddOptional(
|
| - MediaConstraintsInterface::kNoiseReduction, true);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - EXPECT_EQ(352, format->width);
|
| - EXPECT_EQ(288, format->height);
|
| - EXPECT_EQ(30, format->framerate());
|
| -
|
| - EXPECT_EQ(rtc::Optional<bool>(false),
|
| - source_->options()->video_noise_reduction);
|
| -}
|
| -
|
| -// Tests that the source starts video with the default resolution for
|
| -// screencast if no constraint is set.
|
| -TEST_F(VideoSourceTest, ScreencastResolutionNoConstraint) {
|
| - capturer_->TestWithoutCameraFormats();
|
| - capturer_->SetScreencast(true);
|
| -
|
| - CreateVideoSource();
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - EXPECT_EQ(640, format->width);
|
| - EXPECT_EQ(480, format->height);
|
| - EXPECT_EQ(30, format->framerate());
|
| -}
|
| -
|
| -// Tests that the source starts video with the max width and height set by
|
| -// constraints for screencast.
|
| -TEST_F(VideoSourceTest, ScreencastResolutionWithConstraint) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxWidth, 480);
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxHeight, 270);
|
| -
|
| - capturer_->TestWithoutCameraFormats();
|
| - capturer_->SetScreencast(true);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - EXPECT_EQ(480, format->width);
|
| - EXPECT_EQ(270, format->height);
|
| - EXPECT_EQ(30, format->framerate());
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, MandatorySubOneFpsConstraints) {
|
| - FakeConstraints constraints;
|
| - constraints.AddMandatory(MediaConstraintsInterface::kMaxFrameRate, 0.5);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kEnded, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - ASSERT_TRUE(capturer_->GetCaptureFormat() == NULL);
|
| -}
|
| -
|
| -TEST_F(VideoSourceTest, OptionalSubOneFpsConstraints) {
|
| - FakeConstraints constraints;
|
| - constraints.AddOptional(MediaConstraintsInterface::kMaxFrameRate, 0.5);
|
| -
|
| - CreateVideoSource(&constraints);
|
| - EXPECT_EQ_WAIT(MediaSourceInterface::kLive, state_observer_->state(),
|
| - kMaxWaitMs);
|
| - const cricket::VideoFormat* format = capturer_->GetCaptureFormat();
|
| - ASSERT_TRUE(format != NULL);
|
| - EXPECT_EQ(30, format->framerate());
|
| -}
|
|
|