| 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 ad9ecd4cc53f8358d3c121055fc44d935bba7bd7..2e6299ac3229f5dcfb077e8041a6194b84815dd1 100644
|
| --- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc
|
| +++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
|
| @@ -12,7 +12,6 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/run_loop.h"
|
| -#include "base/thread_task_runner_handle.h"
|
| #include "content/browser/renderer_host/media/media_stream_provider.h"
|
| #include "content/browser/renderer_host/media/video_capture_controller.h"
|
| #include "content/browser/renderer_host/media/video_capture_controller_event_handler.h"
|
| @@ -123,7 +122,8 @@
|
| void SetUp() override {
|
| controller_.reset(new VideoCaptureController(kPoolSize));
|
| device_ = controller_->NewDeviceClient(
|
| - base::ThreadTaskRunnerHandle::Get());
|
| + base::MessageLoopProxy::current(),
|
| + controller_->GetVideoCaptureFormat());
|
| client_a_.reset(new MockVideoCaptureControllerEventHandler(
|
| controller_.get()));
|
| client_b_.reset(new MockVideoCaptureControllerEventHandler(
|
| @@ -132,14 +132,15 @@
|
|
|
| void TearDown() override { base::RunLoop().RunUntilIdle(); }
|
|
|
| - scoped_refptr<media::VideoFrame> WrapI420Buffer(gfx::Size dimensions,
|
| - uint8* data) {
|
| + scoped_refptr<media::VideoFrame> WrapI420Buffer(
|
| + const scoped_refptr<media::VideoCaptureDevice::Client::Buffer>& buffer,
|
| + gfx::Size dimensions) {
|
| return media::VideoFrame::WrapExternalPackedMemory(
|
| media::VideoFrame::I420,
|
| dimensions,
|
| gfx::Rect(dimensions),
|
| dimensions,
|
| - data,
|
| + reinterpret_cast<uint8*>(buffer->data()),
|
| media::VideoFrame::AllocationSize(media::VideoFrame::I420, dimensions),
|
| base::SharedMemory::NULLHandle(),
|
| 0,
|
| @@ -324,9 +325,9 @@
|
| // Now, simulate an incoming captured buffer from the capture device. As a
|
| // side effect this will cause the first buffer to be shared with clients.
|
| uint8 buffer_no = 1;
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer(
|
| - device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| - capture_resolution));
|
| + scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer;
|
| + buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| + capture_resolution);
|
| ASSERT_TRUE(buffer.get());
|
| memset(buffer->data(), buffer_no++, buffer->size());
|
| {
|
| @@ -344,10 +345,11 @@
|
| EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_2)).Times(1);
|
| EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2,_)).Times(1);
|
| }
|
| - scoped_refptr<media::VideoFrame> video_frame =
|
| - WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer->data()));
|
| - device_->OnIncomingCapturedVideoFrame(buffer.Pass(), video_frame,
|
| - base::TimeTicks());
|
| + device_->OnIncomingCapturedVideoFrame(
|
| + buffer,
|
| + WrapI420Buffer(buffer, capture_resolution),
|
| + base::TimeTicks());
|
| + buffer = NULL;
|
|
|
| base::RunLoop().RunUntilIdle();
|
| Mock::VerifyAndClearExpectations(client_a_.get());
|
| @@ -356,15 +358,15 @@
|
| // Second buffer which ought to use the same shared memory buffer. In this
|
| // case pretend that the Buffer pointer is held by the device for a long
|
| // delay. This shouldn't affect anything.
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer2 =
|
| - device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| - capture_resolution);
|
| - ASSERT_TRUE(buffer2.get());
|
| - memset(buffer2->data(), buffer_no++, buffer2->size());
|
| - video_frame =
|
| - WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer2->data()));
|
| - device_->OnIncomingCapturedVideoFrame(buffer2.Pass(), video_frame,
|
| - base::TimeTicks());
|
| + buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| + capture_resolution);
|
| + ASSERT_TRUE(buffer.get());
|
| + memset(buffer->data(), buffer_no++, buffer->size());
|
| + device_->OnIncomingCapturedVideoFrame(
|
| + buffer,
|
| + WrapI420Buffer(buffer, capture_resolution),
|
| + base::TimeTicks());
|
| + buffer = NULL;
|
|
|
| // The buffer should be delivered to the clients in any order.
|
| EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1,_)).Times(1);
|
| @@ -384,15 +386,15 @@
|
|
|
| // Third, fourth, and fifth buffers. Pretend they all arrive at the same time.
|
| for (int i = 0; i < kPoolSize; i++) {
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer =
|
| - device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| - capture_resolution);
|
| + buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| + capture_resolution);
|
| ASSERT_TRUE(buffer.get());
|
| memset(buffer->data(), buffer_no++, buffer->size());
|
| - video_frame =
|
| - WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer->data()));
|
| - device_->OnIncomingCapturedVideoFrame(buffer.Pass(), video_frame,
|
| - base::TimeTicks());
|
| + device_->OnIncomingCapturedVideoFrame(
|
| + buffer,
|
| + WrapI420Buffer(buffer, capture_resolution),
|
| + base::TimeTicks());
|
| + buffer = NULL;
|
| }
|
| // ReserveOutputBuffer ought to fail now, because the pool is depleted.
|
| ASSERT_FALSE(device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| @@ -421,31 +423,30 @@
|
| EXPECT_CALL(*client_b_, DoEnded(client_b_route_1)).Times(1);
|
| controller_->StopSession(300);
|
| // Queue up another buffer.
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer3 =
|
| - device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| - capture_resolution);
|
| - ASSERT_TRUE(buffer3.get());
|
| - memset(buffer3->data(), buffer_no++, buffer3->size());
|
| - video_frame =
|
| - WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer3->data()));
|
| - device_->OnIncomingCapturedVideoFrame(buffer3.Pass(), video_frame,
|
| - base::TimeTicks());
|
| -
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer4 =
|
| - device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| - capture_resolution);
|
| + buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| + capture_resolution);
|
| + ASSERT_TRUE(buffer.get());
|
| + memset(buffer->data(), buffer_no++, buffer->size());
|
| + device_->OnIncomingCapturedVideoFrame(
|
| + buffer,
|
| + WrapI420Buffer(buffer, capture_resolution),
|
| + base::TimeTicks());
|
| + buffer = NULL;
|
| + buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| + capture_resolution);
|
| {
|
| // Kill A2 via session close (posts a task to disconnect, but A2 must not
|
| // be sent either of these two buffers).
|
| EXPECT_CALL(*client_a_, DoEnded(client_a_route_2)).Times(1);
|
| controller_->StopSession(200);
|
| }
|
| - ASSERT_TRUE(buffer4.get());
|
| - memset(buffer4->data(), buffer_no++, buffer4->size());
|
| - video_frame =
|
| - WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer4->data()));
|
| - device_->OnIncomingCapturedVideoFrame(buffer4.Pass(), video_frame,
|
| - base::TimeTicks());
|
| + ASSERT_TRUE(buffer.get());
|
| + memset(buffer->data(), buffer_no++, buffer->size());
|
| + device_->OnIncomingCapturedVideoFrame(
|
| + buffer,
|
| + WrapI420Buffer(buffer, capture_resolution),
|
| + base::TimeTicks());
|
| + buffer = NULL;
|
| // B2 is the only client left, and is the only one that should
|
| // get the buffer.
|
| EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2,_)).Times(2);
|
| @@ -468,32 +469,32 @@
|
| }
|
|
|
| for (int i = 0; i < shm_buffers; ++i) {
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer =
|
| - device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| - capture_resolution);
|
| + buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| + capture_resolution);
|
| ASSERT_TRUE(buffer.get());
|
| - video_frame =
|
| - WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer->data()));
|
| - device_->OnIncomingCapturedVideoFrame(buffer.Pass(), video_frame,
|
| - base::TimeTicks());
|
| + device_->OnIncomingCapturedVideoFrame(
|
| + buffer,
|
| + WrapI420Buffer(buffer, capture_resolution),
|
| + base::TimeTicks());
|
| + buffer = NULL;
|
| }
|
| std::vector<uint32> mailbox_syncpoints(mailbox_buffers);
|
| std::vector<uint32> release_syncpoints(mailbox_buffers);
|
| for (int i = 0; i < mailbox_buffers; ++i) {
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer =
|
| - device_->ReserveOutputBuffer(media::PIXEL_FORMAT_TEXTURE,
|
| - capture_resolution);
|
| + buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_TEXTURE,
|
| + capture_resolution);
|
| ASSERT_TRUE(buffer.get());
|
| #if !defined(OS_ANDROID)
|
| mailbox_syncpoints[i] = gl_helper->InsertSyncPoint();
|
| #endif
|
| device_->OnIncomingCapturedVideoFrame(
|
| - buffer.Pass(),
|
| + buffer,
|
| WrapMailboxBuffer(make_scoped_ptr(new gpu::MailboxHolder(
|
| gpu::Mailbox(), 0, mailbox_syncpoints[i])),
|
| base::Bind(&CacheSyncPoint, &release_syncpoints[i]),
|
| capture_resolution),
|
| base::TimeTicks());
|
| + buffer = NULL;
|
| }
|
| // ReserveOutputBuffers ought to fail now regardless of buffer format, because
|
| // the pool is depleted.
|
| @@ -548,14 +549,16 @@
|
| base::RunLoop().RunUntilIdle();
|
| Mock::VerifyAndClearExpectations(client_b_.get());
|
|
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer(
|
| + scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer =
|
| device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420,
|
| - capture_resolution));
|
| + capture_resolution);
|
| ASSERT_TRUE(buffer.get());
|
| - scoped_refptr<media::VideoFrame> video_frame =
|
| - WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer->data()));
|
| - device_->OnIncomingCapturedVideoFrame(buffer.Pass(), video_frame,
|
| - base::TimeTicks());
|
| +
|
| + device_->OnIncomingCapturedVideoFrame(
|
| + buffer,
|
| + WrapI420Buffer(buffer, capture_resolution),
|
| + base::TimeTicks());
|
| + buffer = NULL;
|
|
|
| base::RunLoop().RunUntilIdle();
|
| }
|
| @@ -584,15 +587,16 @@
|
| Mock::VerifyAndClearExpectations(client_a_.get());
|
|
|
| const gfx::Size dims(320, 240);
|
| - scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer(
|
| - device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, dims));
|
| + scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer =
|
| + device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, dims);
|
| ASSERT_TRUE(buffer.get());
|
|
|
| - scoped_refptr<media::VideoFrame> video_frame =
|
| - WrapI420Buffer(dims, static_cast<uint8*>(buffer->data()));
|
| - device_->OnError("Test Error");
|
| - device_->OnIncomingCapturedVideoFrame(buffer.Pass(), video_frame,
|
| - base::TimeTicks());
|
| + device_->OnError("Test error");
|
| + device_->OnIncomingCapturedVideoFrame(
|
| + buffer,
|
| + WrapI420Buffer(buffer, dims),
|
| + base::TimeTicks());
|
| + buffer = NULL;
|
|
|
| EXPECT_CALL(*client_a_, DoError(route_id)).Times(1);
|
| base::RunLoop().RunUntilIdle();
|
|
|