| Index: content/renderer/media/video_capture_impl_unittest.cc
|
| diff --git a/content/renderer/media/video_capture_impl_unittest.cc b/content/renderer/media/video_capture_impl_unittest.cc
|
| index fbe8f5c0a985bd5ca6ae360ca32a181a4b4fbde6..37c2c5055003709bfa63f863bc1b1bb255b0f9e6 100644
|
| --- a/content/renderer/media/video_capture_impl_unittest.cc
|
| +++ b/content/renderer/media/video_capture_impl_unittest.cc
|
| @@ -2,6 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/memory/shared_memory.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "content/child/child_process.h"
|
| #include "content/common/media/video_capture_messages.h"
|
| @@ -34,13 +35,33 @@ class MockVideoCaptureMessageFilter : public VideoCaptureMessageFilter {
|
| DISALLOW_COPY_AND_ASSIGN(MockVideoCaptureMessageFilter);
|
| };
|
|
|
| -class VideoCaptureImplTest : public ::testing::Test {
|
| +struct BufferReceivedTestArg {
|
| + BufferReceivedTestArg(media::VideoPixelFormat pixel_format,
|
| + const std::vector<gpu::MailboxHolder>& mailbox_holders)
|
| + : pixel_format(pixel_format), mailbox_holders(mailbox_holders) {}
|
| +
|
| + BufferReceivedTestArg(media::VideoPixelFormat pixel_format)
|
| + : pixel_format(pixel_format) {}
|
| +
|
| + media::VideoPixelFormat pixel_format;
|
| + std::vector<gpu::MailboxHolder> mailbox_holders;
|
| +};
|
| +
|
| +static const BufferReceivedTestArg kBufferFormats[] = {
|
| + BufferReceivedTestArg(media::PIXEL_FORMAT_I420),
|
| + BufferReceivedTestArg(
|
| + media::PIXEL_FORMAT_ARGB,
|
| + std::vector<gpu::MailboxHolder>(
|
| + 1, gpu::MailboxHolder(gpu::Mailbox::Generate(), 0, 0)))};
|
| +
|
| +class VideoCaptureImplTest :
|
| + public ::testing::TestWithParam<BufferReceivedTestArg> {
|
| public:
|
| class MockVideoCaptureImpl : public VideoCaptureImpl {
|
| public:
|
| MockVideoCaptureImpl(const media::VideoCaptureSessionId id,
|
| VideoCaptureMessageFilter* filter)
|
| - : VideoCaptureImpl(id, filter) {
|
| + : VideoCaptureImpl(id, filter), received_buffer_count_(0) {
|
| }
|
| ~MockVideoCaptureImpl() override {}
|
|
|
| @@ -72,7 +93,6 @@ class VideoCaptureImplTest : public ::testing::Test {
|
| const media::VideoCaptureParams& params) {
|
| // Do not call OnStateChanged(VIDEO_CAPTURE_STATE_STARTED) here, as this
|
| // does not accurately reflect the behavior of the VideoCaptureHost.
|
| - capture_params_ = params;
|
| }
|
|
|
| void DevicePauseCapture(int device_id) {}
|
| @@ -84,7 +104,9 @@ class VideoCaptureImplTest : public ::testing::Test {
|
| void DeviceReceiveEmptyBuffer(int device_id,
|
| int buffer_id,
|
| uint32 sync_point,
|
| - double consumer_resource_utilization) {}
|
| + double consumer_resource_utilization) {
|
| + received_buffer_count_++;
|
| + }
|
|
|
| void DeviceGetSupportedFormats(int device_id,
|
| media::VideoCaptureSessionId session_id) {
|
| @@ -102,12 +124,10 @@ class VideoCaptureImplTest : public ::testing::Test {
|
| OnStateChanged(state);
|
| }
|
|
|
| - const media::VideoCaptureParams& capture_params() const {
|
| - return capture_params_;
|
| - }
|
| + int received_buffer_count() const { return received_buffer_count_; }
|
|
|
| private:
|
| - media::VideoCaptureParams capture_params_;
|
| + int received_buffer_count_;
|
| };
|
|
|
| VideoCaptureImplTest() {
|
| @@ -154,6 +174,25 @@ class VideoCaptureImplTest : public ::testing::Test {
|
|
|
| void StopCapture() { video_capture_impl_->StopCapture(); }
|
|
|
| + void NewBuffer(int buffer_id, const base::SharedMemory& shm) {
|
| + video_capture_impl_->OnBufferCreated(
|
| + base::SharedMemory::DuplicateHandle(shm.handle()),
|
| + shm.mapped_size(), buffer_id);
|
| + }
|
| +
|
| + void BufferReceived(int buffer_id, const gfx::Size& size,
|
| + media::VideoPixelFormat pixel_format,
|
| + const std::vector<gpu::MailboxHolder>& mailbox_holders) {
|
| + video_capture_impl_->OnBufferReceived(
|
| + buffer_id, base::TimeTicks::Now(), base::DictionaryValue(),
|
| + pixel_format, media::VideoFrame::STORAGE_SHMEM, size,
|
| + gfx::Rect(size), mailbox_holders);
|
| + }
|
| +
|
| + void BufferDestroyed(int buffer_id) {
|
| + video_capture_impl_->OnBufferDestroyed(buffer_id);
|
| + }
|
| +
|
| void DeInit() {
|
| video_capture_impl_->DeInit();
|
| }
|
| @@ -228,6 +267,60 @@ TEST_F(VideoCaptureImplTest, GetDeviceFormatsInUse) {
|
| DeInit();
|
| }
|
|
|
| +TEST_P(VideoCaptureImplTest, BufferReceivedWithFormat) {
|
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(1);
|
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(1);
|
| + EXPECT_CALL(*this, OnFrameReady(_, _)).Times(1);
|
| +
|
| + const BufferReceivedTestArg& buffer_arg = GetParam();
|
| + const gfx::Size size(1280, 720);
|
| +
|
| + // Create a fake shared memory for buffer.
|
| + base::SharedMemory shm;
|
| + const size_t frame_size = media::VideoFrame::AllocationSize(
|
| + buffer_arg.pixel_format, size);
|
| + ASSERT_TRUE(shm.CreateAndMapAnonymous(frame_size));
|
| +
|
| + media::VideoCaptureParams params;
|
| + params.requested_format = media::VideoCaptureFormat(
|
| + size, 30, buffer_arg.pixel_format);
|
| +
|
| + Init();
|
| + StartCapture(params);
|
| + NewBuffer(0, shm);
|
| + BufferReceived(0, size, buffer_arg.pixel_format, buffer_arg.mailbox_holders);
|
| + StopCapture();
|
| + BufferDestroyed(0);
|
| + DeInit();
|
| +}
|
| +
|
| +INSTANTIATE_TEST_CASE_P(I420AndARGB,
|
| + VideoCaptureImplTest,
|
| + testing::ValuesIn(kBufferFormats));
|
| +
|
| +TEST_F(VideoCaptureImplTest, BufferReceivedAfterStop) {
|
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(1);
|
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(1);
|
| + EXPECT_CALL(*this, OnFrameReady(_, _)).Times(0);
|
| +
|
| + // Create a fake shared memory for buffer.
|
| + base::SharedMemory shm;
|
| + const size_t i420_frame_size = media::VideoFrame::AllocationSize(
|
| + media::PIXEL_FORMAT_I420, params_large_.requested_format.frame_size);
|
| + ASSERT_TRUE(shm.CreateAndMapAnonymous(i420_frame_size));
|
| +
|
| + Init();
|
| + StartCapture(params_large_);
|
| + NewBuffer(0, shm);
|
| + StopCapture();
|
| + BufferReceived(0, params_large_.requested_format.frame_size,
|
| + media::PIXEL_FORMAT_I420, std::vector<gpu::MailboxHolder>());
|
| + BufferDestroyed(0);
|
| + DeInit();
|
| +
|
| + EXPECT_EQ(this->video_capture_impl_->received_buffer_count(), 1);
|
| +}
|
| +
|
| TEST_F(VideoCaptureImplTest, EndedBeforeStop) {
|
| EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED));
|
| EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED));
|
|
|