| Index: content/browser/renderer_host/media/video_capture_controller_unittest.cc
|
| diff --git a/content/browser/renderer_host/media/video_capture_controller_unittest.cc b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
|
| index bc67fe4022f191109f847d34087683ceabc6acd9..530bf71d905d131c3ed7fd3d42417e087a3e2720 100644
|
| --- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc
|
| +++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
|
| @@ -18,6 +18,7 @@
|
| #include "content/common/media/media_stream_options.h"
|
| #include "media/video/capture/fake_video_capture_device.h"
|
| #include "media/video/capture/video_capture_device.h"
|
| +#include "media/video/video_encode_types.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -46,6 +47,12 @@ ACTION_P3(StopSession, controller, session_id, message_loop) {
|
| message_loop->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
|
| }
|
|
|
| +ACTION_P3(TryConfigureEncodedBitstream, controller, params, message_loop) {
|
| + message_loop->PostTask(FROM_HERE,
|
| + base::Bind(&VideoCaptureController::TryConfigureEncodedBitstream,
|
| + controller, params));
|
| +}
|
| +
|
| class MockVideoCaptureControllerEventHandler
|
| : public VideoCaptureControllerEventHandler {
|
| public:
|
| @@ -58,21 +65,19 @@ class MockVideoCaptureControllerEventHandler
|
| }
|
| virtual ~MockVideoCaptureControllerEventHandler() {}
|
|
|
| - MOCK_METHOD1(DoBufferCreated, void(const VideoCaptureControllerID&));
|
| MOCK_METHOD1(DoBufferReady, void(const VideoCaptureControllerID&));
|
| MOCK_METHOD1(DoFrameInfo, void(const VideoCaptureControllerID&));
|
| + MOCK_METHOD1(DoEncodedFrameInfo, void(const VideoCaptureControllerID&));
|
| + MOCK_METHOD1(DoBitstreamConfigChanged,
|
| + void(const VideoCaptureControllerID& id));
|
| MOCK_METHOD1(DoEnded, void(const VideoCaptureControllerID&));
|
|
|
| virtual void OnError(const VideoCaptureControllerID& id) OVERRIDE {}
|
| - virtual void OnBufferCreated(const VideoCaptureControllerID& id,
|
| - base::SharedMemoryHandle handle,
|
| - int length, int buffer_id) OVERRIDE {
|
| - EXPECT_EQ(id, controller_id_);
|
| - DoBufferCreated(id);
|
| - }
|
| virtual void OnBufferReady(const VideoCaptureControllerID& id,
|
| int buffer_id,
|
| - base::Time timestamp) OVERRIDE {
|
| + size_t size,
|
| + base::Time timestamp,
|
| + bool key_frame) OVERRIDE {
|
| EXPECT_EQ(id, controller_id_);
|
| DoBufferReady(id);
|
| message_loop_->PostTask(FROM_HERE,
|
| @@ -80,12 +85,26 @@ class MockVideoCaptureControllerEventHandler
|
| controller_, controller_id_, this, buffer_id));
|
| }
|
| virtual void OnFrameInfo(const VideoCaptureControllerID& id,
|
| - int width,
|
| - int height,
|
| - int frame_per_second) OVERRIDE {
|
| + const media::VideoCaptureParams& params,
|
| + const std::vector<base::SharedMemoryHandle>& buffers,
|
| + size_t buffer_size) OVERRIDE {
|
| EXPECT_EQ(id, controller_id_);
|
| DoFrameInfo(id);
|
| }
|
| + virtual void OnEncodedFrameInfo(
|
| + const VideoCaptureControllerID& id,
|
| + const media::VideoEncodingParameters& params,
|
| + const std::vector<base::SharedMemoryHandle>& buffers,
|
| + size_t buffer_size) OVERRIDE {
|
| + EXPECT_EQ(id, controller_id_);
|
| + DoEncodedFrameInfo(id);
|
| + }
|
| + virtual void OnBitstreamConfigChanged(
|
| + const VideoCaptureControllerID& id,
|
| + const media::RuntimeVideoEncodingParameters& params) OVERRIDE {
|
| + EXPECT_EQ(id, controller_id_);
|
| + DoBitstreamConfigChanged(id);
|
| + }
|
| virtual void OnEnded(const VideoCaptureControllerID& id) OVERRIDE {
|
| EXPECT_EQ(id, controller_id_);
|
| DoEnded(id);
|
| @@ -100,23 +119,31 @@ class MockVideoCaptureControllerEventHandler
|
| class MockVideoCaptureManager : public VideoCaptureManager {
|
| public:
|
| MockVideoCaptureManager()
|
| - : video_session_id_(kStartOpenSessionId) {}
|
| + : video_session_id_(kStartOpenSessionId),
|
| + encoded_capture_(false) {}
|
|
|
| void Init() {
|
| device_name_.unique_id = "/dev/video0";
|
| device_name_.device_name = "fake_device_0";
|
| -
|
| - video_capture_device_.reset(
|
| - media::FakeVideoCaptureDevice::Create(device_name_));
|
| - ASSERT_TRUE(video_capture_device_.get() != NULL);
|
| }
|
|
|
| MOCK_METHOD3(StartCapture, void(int, int,
|
| media::VideoCaptureDevice::EventHandler*));
|
| MOCK_METHOD1(StopCapture, void(const media::VideoCaptureSessionId&));
|
|
|
| - void Start(const media::VideoCaptureParams& capture_params,
|
| + // Stub MediaStreamProviderListener implementation
|
| + virtual void Opened(MediaStreamType, int) OVERRIDE {}
|
| + virtual void Closed(MediaStreamType, int) OVERRIDE {}
|
| + virtual void DevicesEnumerated(MediaStreamType,
|
| + const StreamDeviceInfoArray&) OVERRIDE {}
|
| + virtual void Error(MediaStreamType, int, MediaStreamProviderError) OVERRIDE {}
|
| +
|
| + virtual void Start(const media::VideoCaptureParams& capture_params,
|
| media::VideoCaptureDevice::EventHandler* vc_receiver) OVERRIDE {
|
| + video_capture_device_.reset(
|
| + media::FakeVideoCaptureDevice::Create(device_name_, encoded_capture_));
|
| + ASSERT_TRUE(video_capture_device_.get() != NULL);
|
| +
|
| StartCapture(capture_params.width, capture_params.height, vc_receiver);
|
| video_capture_device_->Allocate(capture_params.width, capture_params.height,
|
| capture_params.frame_per_second,
|
| @@ -124,16 +151,27 @@ class MockVideoCaptureManager : public VideoCaptureManager {
|
| video_capture_device_->Start();
|
| }
|
|
|
| - void Stop(const media::VideoCaptureSessionId& capture_session_id,
|
| - base::Closure stopped_cb) OVERRIDE {
|
| + virtual void Stop(const media::VideoCaptureSessionId& capture_session_id,
|
| + const base::Closure& stopped_cb) OVERRIDE {
|
| StopCapture(capture_session_id);
|
| video_capture_device_->Stop();
|
| video_capture_device_->DeAllocate();
|
| }
|
|
|
| + virtual void TryConfigureEncodedBitstream(
|
| + const media::VideoCaptureSessionId& session_id,
|
| + const media::RuntimeVideoEncodingParameters& params) OVERRIDE {
|
| + video_capture_device_->TryConfigureEncodedBitstream(params);
|
| + }
|
| +
|
| + void SetEncodedCapture(bool encoded_capture) {
|
| + encoded_capture_ = encoded_capture;
|
| + }
|
| +
|
| int video_session_id_;
|
| media::VideoCaptureDevice::Name device_name_;
|
| scoped_ptr<media::VideoCaptureDevice> video_capture_device_;
|
| + bool encoded_capture_;
|
|
|
| private:
|
| virtual ~MockVideoCaptureManager() {}
|
| @@ -191,9 +229,6 @@ TEST_F(VideoCaptureControllerTest, StartAndStop) {
|
| DoFrameInfo(controller_handler_->controller_id_))
|
| .Times(AtLeast(1));
|
| EXPECT_CALL(*controller_handler_,
|
| - DoBufferCreated(controller_handler_->controller_id_))
|
| - .Times(AtLeast(1));
|
| - EXPECT_CALL(*controller_handler_,
|
| DoBufferReady(controller_handler_->controller_id_))
|
| .Times(AtLeast(1))
|
| .WillOnce(StopCapture(controller_.get(),
|
| @@ -202,6 +237,14 @@ TEST_F(VideoCaptureControllerTest, StartAndStop) {
|
| message_loop_.get()));
|
| EXPECT_CALL(*vcm_.get(), StopCapture(vcm_->video_session_id_)).Times(1);
|
|
|
| + // The encoded bitstream functions should not get called.
|
| + EXPECT_CALL(*controller_handler_,
|
| + DoEncodedFrameInfo(controller_handler_->controller_id_))
|
| + .Times(0);
|
| + EXPECT_CALL(*controller_handler_,
|
| + DoBitstreamConfigChanged(controller_handler_->controller_id_))
|
| + .Times(0);
|
| +
|
| controller_->StartCapture(controller_handler_->controller_id_,
|
| controller_handler_.get(),
|
| controller_handler_->process_handle_,
|
| @@ -226,9 +269,6 @@ TEST_F(VideoCaptureControllerTest, StopSession) {
|
| DoFrameInfo(controller_handler_->controller_id_))
|
| .Times(AtLeast(1));
|
| EXPECT_CALL(*controller_handler_,
|
| - DoBufferCreated(controller_handler_->controller_id_))
|
| - .Times(AtLeast(1));
|
| - EXPECT_CALL(*controller_handler_,
|
| DoBufferReady(controller_handler_->controller_id_))
|
| .Times(AtLeast(1))
|
| .WillOnce(StopSession(controller_.get(),
|
| @@ -238,6 +278,14 @@ TEST_F(VideoCaptureControllerTest, StopSession) {
|
| DoEnded(controller_handler_->controller_id_))
|
| .Times(1);
|
|
|
| + // The encoded bitstream functions should not get called.
|
| + EXPECT_CALL(*controller_handler_,
|
| + DoEncodedFrameInfo(controller_handler_->controller_id_))
|
| + .Times(0);
|
| + EXPECT_CALL(*controller_handler_,
|
| + DoBitstreamConfigChanged(controller_handler_->controller_id_))
|
| + .Times(0);
|
| +
|
| controller_->StartCapture(controller_handler_->controller_id_,
|
| controller_handler_.get(),
|
| controller_handler_->process_handle_,
|
| @@ -258,4 +306,60 @@ TEST_F(VideoCaptureControllerTest, StopSession) {
|
| controller_handler_.get());
|
| }
|
|
|
| +// Check encoded capturing.
|
| +TEST_F(VideoCaptureControllerTest, EncodedCapture) {
|
| + vcm_->SetEncodedCapture(true);
|
| + media::VideoEncodingParameters encoding_params;
|
| + encoding_params.codec_name = std::string("VP8");
|
| + encoding_params.resolution.SetSize(640, 480);
|
| + encoding_params.frames_per_second = 30;
|
| + encoding_params.runtime_params.average_bitrate = 1024;
|
| + encoding_params.runtime_params.max_bitrate = 1024;
|
| +
|
| + media::RuntimeVideoEncodingParameters params;
|
| + params.average_bitrate = 1024;
|
| + params.max_bitrate = 1024;
|
| +
|
| + InSequence s;
|
| + EXPECT_CALL(*vcm_.get(),
|
| + StartCapture(encoding_params.resolution.width(),
|
| + encoding_params.resolution.height(),
|
| + controller_.get())).Times(1);
|
| + EXPECT_CALL(*controller_handler_,
|
| + DoEncodedFrameInfo(controller_handler_->controller_id_))
|
| + .Times(AtLeast(1));
|
| + EXPECT_CALL(*controller_handler_,
|
| + DoBufferReady(controller_handler_->controller_id_))
|
| + .Times(AtLeast(1))
|
| + .WillOnce(TryConfigureEncodedBitstream(controller_.get(),
|
| + params,
|
| + message_loop_.get()));
|
| +
|
| + EXPECT_CALL(*controller_handler_,
|
| + DoBitstreamConfigChanged(controller_handler_->controller_id_))
|
| + .Times(1)
|
| + .WillOnce(StopCapture(controller_.get(),
|
| + controller_handler_->controller_id_,
|
| + controller_handler_.get(),
|
| + message_loop_.get()));
|
| +
|
| + EXPECT_CALL(*vcm_.get(), StopCapture(vcm_->video_session_id_)).Times(1);
|
| +
|
| + // The unencoded bitstream functions should not get called.
|
| + EXPECT_CALL(*controller_handler_,
|
| + DoFrameInfo(controller_handler_->controller_id_))
|
| + .Times(0);
|
| +
|
| + media::VideoCaptureParams capture_params;
|
| + capture_params.session_id = vcm_->video_session_id_;
|
| + capture_params.width = encoding_params.resolution.width();
|
| + capture_params.height = encoding_params.resolution.height();
|
| + capture_params.frame_per_second = encoding_params.frames_per_second;
|
| + controller_->StartCapture(controller_handler_->controller_id_,
|
| + controller_handler_.get(),
|
| + controller_handler_->process_handle_,
|
| + capture_params);
|
| + message_loop_->Run();
|
| +}
|
| +
|
| } // namespace content
|
|
|