| Index: media/video/capture/fake_video_capture_device.cc
|
| diff --git a/media/video/capture/fake_video_capture_device.cc b/media/video/capture/fake_video_capture_device.cc
|
| index 4f3a8bb7d62ae73569cf634d7c8991239f89f5a0..cd831a9e36bb2b42e1da8369a02635d1d630fd09 100644
|
| --- a/media/video/capture/fake_video_capture_device.cc
|
| +++ b/media/video/capture/fake_video_capture_device.cc
|
| @@ -103,6 +103,7 @@ void FakeVideoCaptureDevice::AllocateAndStart(
|
|
|
| switch (device_type_) {
|
| case USING_OWN_BUFFERS:
|
| + case USING_OWN_BUFFERS_TRIPLANAR:
|
| fake_frame_.reset(new uint8[VideoFrame::AllocationSize(
|
| VideoFrame::I420, capture_format_.frame_size)]);
|
| BeepAndScheduleNextCapture(
|
| @@ -131,8 +132,7 @@ void FakeVideoCaptureDevice::StopAndDeAllocate() {
|
|
|
| void FakeVideoCaptureDevice::CaptureUsingOwnBuffers() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - const size_t frame_size =
|
| - VideoFrame::AllocationSize(VideoFrame::I420, capture_format_.frame_size);
|
| + const size_t frame_size = capture_format_.ImageAllocationSize();
|
| memset(fake_frame_.get(), 0, frame_size);
|
|
|
| DrawPacman(false /* use_argb */,
|
| @@ -142,11 +142,24 @@ void FakeVideoCaptureDevice::CaptureUsingOwnBuffers() {
|
| capture_format_.frame_size);
|
|
|
| // Give the captured frame to the client.
|
| - client_->OnIncomingCapturedData(fake_frame_.get(),
|
| - frame_size,
|
| - capture_format_,
|
| - 0,
|
| - base::TimeTicks::Now());
|
| + if (device_type_ == USING_OWN_BUFFERS) {
|
| + client_->OnIncomingCapturedData(fake_frame_.get(),
|
| + frame_size,
|
| + capture_format_,
|
| + 0 /* rotation */,
|
| + base::TimeTicks::Now());
|
| + } else if (device_type_ == USING_OWN_BUFFERS_TRIPLANAR) {
|
| + client_->OnIncomingCapturedYuvData(
|
| + fake_frame_.get(),
|
| + fake_frame_.get() + capture_format_.frame_size.GetArea(),
|
| + fake_frame_.get() + capture_format_.frame_size.GetArea() * 5 / 4,
|
| + capture_format_.frame_size.width(),
|
| + capture_format_.frame_size.width() / 2,
|
| + capture_format_.frame_size.width() / 2,
|
| + capture_format_,
|
| + 0 /* rotation */,
|
| + base::TimeTicks::Now());
|
| + }
|
| BeepAndScheduleNextCapture(
|
| base::Bind(&FakeVideoCaptureDevice::CaptureUsingOwnBuffers,
|
| weak_factory_.GetWeakPtr()));
|
| @@ -162,9 +175,11 @@ void FakeVideoCaptureDevice::CaptureUsingClientBuffers() {
|
| if (!capture_buffer)
|
| return;
|
|
|
| - uint8_t* const data_ptr = static_cast<uint8_t*>(capture_buffer->data());
|
| - memset(data_ptr, 0, capture_buffer->size());
|
| + const scoped_ptr<media::DataHandle> scoped_data_handle =
|
| + capture_buffer->GetDataHandle().Pass();
|
| + uint8_t* const data_ptr = static_cast<uint8_t*>(scoped_data_handle->data());
|
| DCHECK(data_ptr) << "Buffer has NO backing memory";
|
| + memset(data_ptr, 0, capture_buffer->size());
|
|
|
| DrawPacman(false /* use_argb */,
|
| data_ptr,
|
| @@ -178,7 +193,7 @@ void FakeVideoCaptureDevice::CaptureUsingClientBuffers() {
|
| capture_format_.frame_size,
|
| gfx::Rect(capture_format_.frame_size),
|
| capture_format_.frame_size,
|
| - static_cast<uint8*>(capture_buffer->data()),
|
| + data_ptr,
|
| capture_buffer->size(),
|
| base::SharedMemory::NULLHandle(),
|
| 0,
|
| @@ -197,7 +212,34 @@ void FakeVideoCaptureDevice::CaptureUsingClientBuffers() {
|
| void FakeVideoCaptureDevice::CaptureUsingGpuMemoryBuffers() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - NOTIMPLEMENTED();
|
| + const scoped_refptr<VideoCaptureDevice::Client::Buffer> capture_buffer =
|
| + client_->ReserveOutputBuffer(media::PIXEL_FORMAT_GPUMEMORYBUFFER,
|
| + capture_format_.frame_size);
|
| + DLOG_IF(ERROR, !capture_buffer) << "Couldn't allocate Capture Buffer";
|
| + if (!capture_buffer)
|
| + return;
|
| +
|
| + const scoped_ptr<media::DataHandle> scoped_data_handle =
|
| + capture_buffer->GetDataHandle().Pass();
|
| + uint8_t* const data_ptr = static_cast<uint8_t*>(scoped_data_handle->data());
|
| + DCHECK(data_ptr) << "Buffer has NO backing memory";
|
| + memset(data_ptr, 0, capture_buffer->size());
|
| +
|
| + DrawPacman(true /* use_argb */,
|
| + data_ptr,
|
| + frame_count_,
|
| + kFakeCapturePeriodMs,
|
| + capture_format_.frame_size);
|
| +
|
| + // Give the captured frame to the client.
|
| + const VideoCaptureFormat format(capture_format_.frame_size,
|
| + capture_format_.frame_rate,
|
| + media::PIXEL_FORMAT_GPUMEMORYBUFFER);
|
| + client_->OnIncomingCapturedBuffer(capture_buffer, format,
|
| + base::TimeTicks::Now());
|
| + BeepAndScheduleNextCapture(
|
| + base::Bind(&FakeVideoCaptureDevice::CaptureUsingGpuMemoryBuffers,
|
| + weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| void FakeVideoCaptureDevice::BeepAndScheduleNextCapture(
|
|
|