Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1058)

Unified Diff: content/browser/renderer_host/media/video_capture_controller_unittest.cc

Issue 1090273006: Revert of VideoCapture: add support for GpuMemoryBuffer allocation and lifetime mgmt in VideoCaptureBufferPool (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698