| 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 89ac62c2841691d78e05611d9954f598ad51c94f..e362b84d1f55bdaad570470033e6cdf270a80105 100644
|
| --- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc
|
| +++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
|
| @@ -242,13 +242,14 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
|
| base::kNullProcessHandle, session_200);
|
| ASSERT_EQ(3, controller_->GetClientCount());
|
|
|
| - // Now, simulate an incoming captured frame from the capture device. As a side
|
| - // effect this will cause the first buffer to be shared with clients.
|
| - uint8 frame_no = 1;
|
| - scoped_refptr<media::VideoFrame> frame;
|
| - frame = device_->ReserveOutputBuffer(capture_resolution);
|
| - ASSERT_TRUE(frame);
|
| - media::FillYUV(frame, frame_no++, 0x22, 0x44);
|
| + // 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;
|
| + buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420,
|
| + capture_resolution).Pass();
|
| + ASSERT_TRUE(buffer);
|
| + memset(buffer->data(), buffer_no++, buffer->size());
|
| {
|
| InSequence s;
|
| EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_1)).Times(1);
|
| @@ -264,20 +265,22 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
|
| EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_2)).Times(1);
|
| EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2)).Times(1);
|
| }
|
| - device_->OnIncomingCapturedVideoFrame(frame, base::Time());
|
| - frame = NULL;
|
| + device_->OnIncomingCapturedBuffer(
|
| + buffer.Pass(), media::VideoFrame::I420, capture_resolution, base::Time());
|
|
|
| base::RunLoop().RunUntilIdle();
|
| Mock::VerifyAndClearExpectations(client_a_.get());
|
| Mock::VerifyAndClearExpectations(client_b_.get());
|
|
|
| - // Second frame which ought to use the same shared memory buffer. In this case
|
| - // pretend that the VideoFrame pointer is held by the device for a long delay.
|
| - // This shouldn't affect anything.
|
| - frame = device_->ReserveOutputBuffer(capture_resolution);
|
| - ASSERT_TRUE(frame);
|
| - media::FillYUV(frame, frame_no++, 0x22, 0x44);
|
| - device_->OnIncomingCapturedVideoFrame(frame, base::Time());
|
| + // 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.
|
| + buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420,
|
| + capture_resolution).Pass();
|
| + ASSERT_TRUE(buffer);
|
| + memset(buffer->data(), buffer_no++, buffer->size());
|
| + device_->OnIncomingCapturedBuffer(
|
| + buffer.Pass(), media::VideoFrame::I420, capture_resolution, base::Time());
|
|
|
| // The buffer should be delivered to the clients in any order.
|
| EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1)).Times(1);
|
| @@ -286,24 +289,26 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
|
| base::RunLoop().RunUntilIdle();
|
| Mock::VerifyAndClearExpectations(client_a_.get());
|
| Mock::VerifyAndClearExpectations(client_b_.get());
|
| - frame = NULL;
|
|
|
| - // Add a fourth client now that some frames have come through.
|
| + // Add a fourth client now that some buffers have come through.
|
| controller_->AddClient(client_b_route_2, client_b_.get(),
|
| base::kNullProcessHandle, session_1);
|
| Mock::VerifyAndClearExpectations(client_b_.get());
|
|
|
| - // Third, fourth, and fifth frames. Pretend they all arrive at the same time.
|
| + // Third, fourth, and fifth buffers. Pretend they all arrive at the same time.
|
| for (int i = 0; i < kPoolSize; i++) {
|
| - frame = device_->ReserveOutputBuffer(capture_resolution);
|
| - ASSERT_TRUE(frame);
|
| - ASSERT_EQ(media::VideoFrame::I420, frame->format());
|
| - media::FillYUV(frame, frame_no++, 0x22, 0x44);
|
| - device_->OnIncomingCapturedVideoFrame(frame, base::Time());
|
| -
|
| + buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420,
|
| + capture_resolution).Pass();
|
| + ASSERT_TRUE(buffer);
|
| + memset(buffer->data(), buffer_no++, buffer->size());
|
| + device_->OnIncomingCapturedBuffer(buffer.Pass(),
|
| + media::VideoFrame::I420,
|
| + capture_resolution,
|
| + base::Time());
|
| }
|
| // ReserveOutputBuffer ought to fail now, because the pool is depleted.
|
| - ASSERT_FALSE(device_->ReserveOutputBuffer(capture_resolution));
|
| + ASSERT_FALSE(device_->ReserveOutputBuffer(media::VideoFrame::I420,
|
| + capture_resolution));
|
|
|
| // The new client needs to be told of 3 buffers; the old clients only 2.
|
| EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_2)).Times(kPoolSize);
|
| @@ -321,29 +326,33 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
|
| Mock::VerifyAndClearExpectations(client_a_.get());
|
| Mock::VerifyAndClearExpectations(client_b_.get());
|
|
|
| - // Now test the interaction of client shutdown and frame delivery.
|
| + // Now test the interaction of client shutdown and buffer delivery.
|
| // Kill A1 via renderer disconnect (synchronous).
|
| controller_->RemoveClient(client_a_route_1, client_a_.get());
|
| // Kill B1 via session close (posts a task to disconnect).
|
| EXPECT_CALL(*client_b_, DoEnded(client_b_route_1)).Times(1);
|
| controller_->StopSession(300);
|
| - // Queue up another frame.
|
| - frame = device_->ReserveOutputBuffer(capture_resolution);
|
| - ASSERT_TRUE(frame);
|
| - media::FillYUV(frame, frame_no++, 0x22, 0x44);
|
| - device_->OnIncomingCapturedVideoFrame(frame, base::Time());
|
| - frame = device_->ReserveOutputBuffer(capture_resolution);
|
| + // Queue up another buffer.
|
| + buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420,
|
| + capture_resolution).Pass();
|
| + ASSERT_TRUE(buffer);
|
| + memset(buffer->data(), buffer_no++, buffer->size());
|
| + device_->OnIncomingCapturedBuffer(
|
| + buffer.Pass(), media::VideoFrame::I420, capture_resolution, base::Time());
|
| + buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420,
|
| + capture_resolution).Pass();
|
| {
|
| // Kill A2 via session close (posts a task to disconnect, but A2 must not
|
| - // be sent either of these two frames)..
|
| + // be sent either of these two buffers).
|
| EXPECT_CALL(*client_a_, DoEnded(client_a_route_2)).Times(1);
|
| controller_->StopSession(200);
|
| }
|
| - ASSERT_TRUE(frame);
|
| - media::FillYUV(frame, frame_no++, 0x22, 0x44);
|
| - device_->OnIncomingCapturedVideoFrame(frame, base::Time());
|
| + ASSERT_TRUE(buffer);
|
| + memset(buffer->data(), buffer_no++, buffer->size());
|
| + device_->OnIncomingCapturedBuffer(
|
| + buffer.Pass(), media::VideoFrame::I420, capture_resolution, base::Time());
|
| // B2 is the only client left, and is the only one that should
|
| - // get the frame.
|
| + // get the buffer.
|
| EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2)).Times(2);
|
| base::RunLoop().RunUntilIdle();
|
| Mock::VerifyAndClearExpectations(client_a_.get());
|
| @@ -409,19 +418,21 @@ TEST_F(VideoCaptureControllerTest, ErrorAfterDeviceCreation) {
|
| 10, 10, 25, media::PIXEL_FORMAT_ARGB,
|
| media::ConstantResolutionVideoCaptureDevice);
|
|
|
| - // Start the device. Then, before the first frame, signal an error and deliver
|
| - // the frame. The error should be propagated to clients; the frame should not
|
| - // be.
|
| + // Start the device. Then, before the first buffer, signal an error and
|
| + // deliver the buffer. The error should be propagated to clients; the buffer
|
| + // should not be.
|
| base::RunLoop().RunUntilIdle();
|
| Mock::VerifyAndClearExpectations(client_a_.get());
|
|
|
| - scoped_refptr<media::VideoFrame> frame =
|
| - device_->ReserveOutputBuffer(gfx::Size(320, 240));
|
| - ASSERT_TRUE(frame);
|
| + const gfx::Size dims(320, 240);
|
| + scoped_ptr<media::VideoCaptureDevice::Client::Buffer> buffer(
|
| + device_->ReserveOutputBuffer(media::VideoFrame::I420, dims));
|
| + ASSERT_TRUE(buffer);
|
|
|
| device_->OnError();
|
| - device_->OnIncomingCapturedVideoFrame(frame, base::Time());
|
| - frame = NULL;
|
| + device_->OnIncomingCapturedBuffer(
|
| + buffer.Pass(), media::VideoFrame::I420, dims, base::Time());
|
| + buffer.reset();
|
|
|
| EXPECT_CALL(*client_a_, DoError(route_id)).Times(1);
|
| base::RunLoop().RunUntilIdle();
|
|
|