Chromium Code Reviews| Index: content/browser/renderer_host/media/video_capture_device_client.cc |
| diff --git a/content/browser/renderer_host/media/video_capture_device_client.cc b/content/browser/renderer_host/media/video_capture_device_client.cc |
| index cd39c5fa750dc48da1fc151b6c00d2f4b628e120..cf25ea38a351cd7ee0f50a674cc47e0ebe104602 100644 |
| --- a/content/browser/renderer_host/media/video_capture_device_client.cc |
| +++ b/content/browser/renderer_host/media/video_capture_device_client.cc |
| @@ -17,7 +17,6 @@ |
| #include "content/browser/renderer_host/media/video_capture_buffer_pool.h" |
| #include "content/browser/renderer_host/media/video_capture_controller.h" |
| #include "content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.h" |
| -#include "content/public/browser/browser_thread.h" |
| #include "media/base/bind_to_current_loop.h" |
| #include "media/base/media_switches.h" |
| #include "media/base/video_capture_types.h" |
| @@ -34,7 +33,7 @@ namespace content { |
| // implementation to guarantee proper cleanup on destruction on our side. |
| class AutoReleaseBuffer : public media::VideoCaptureDevice::Client::Buffer { |
| public: |
| - AutoReleaseBuffer(const scoped_refptr<VideoCaptureBufferPool>& pool, |
| + AutoReleaseBuffer(const scoped_refptr<VideoCaptureBufferPoolInterface>& pool, |
| int buffer_id) |
| : id_(buffer_id), |
| pool_(pool), |
| @@ -58,20 +57,23 @@ class AutoReleaseBuffer : public media::VideoCaptureDevice::Client::Buffer { |
| ~AutoReleaseBuffer() override { pool_->RelinquishProducerReservation(id_); } |
| const int id_; |
| - const scoped_refptr<VideoCaptureBufferPool> pool_; |
| - const std::unique_ptr<VideoCaptureBufferPool::BufferHandle> buffer_handle_; |
| + const scoped_refptr<VideoCaptureBufferPoolInterface> pool_; |
| + const std::unique_ptr<VideoCaptureBufferPoolBufferHandle> buffer_handle_; |
| }; |
| VideoCaptureDeviceClient::VideoCaptureDeviceClient( |
| - const base::WeakPtr<VideoCaptureController>& controller, |
| - const scoped_refptr<VideoCaptureBufferPool>& buffer_pool) |
| - : controller_(controller), |
| + std::unique_ptr<VideoFrameReceiver> receiver, |
| + const scoped_refptr<VideoCaptureBufferPoolInterface>& buffer_pool, |
| + std::unique_ptr<VideoCaptureJpegDecoderFactory> jpeg_decoder_factory, |
| + const base::Closure& check_thread_closure) |
| + : receiver_(std::move(receiver)), |
| + jpeg_decoder_factory_(std::move(jpeg_decoder_factory)), |
| external_jpeg_decoder_initialized_(false), |
| buffer_pool_(buffer_pool), |
| use_gpu_memory_buffers_(base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kUseGpuMemoryBuffersForCapture)), |
| last_captured_pixel_format_(media::PIXEL_FORMAT_UNKNOWN) { |
| - DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + check_thread_closure.Run(); |
|
mcasas
2016/09/07 22:43:40
I'd rather pass a const SingleThreadTaskRunner& wh
chfremer
2016/09/08 17:28:51
Please explain why you would prefer doing that.
I
mcasas
2016/09/08 20:25:45
But SingleThreadTaskRunners are pervasively passed
chfremer
2016/09/09 00:55:37
Being more opaque here is actually a good thing, s
chfremer
2016/09/09 16:48:06
After looking at it one more time, I decided to si
|
| } |
| VideoCaptureDeviceClient::~VideoCaptureDeviceClient() { |
| @@ -98,9 +100,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData( |
| if (frame_format.pixel_format == media::PIXEL_FORMAT_MJPEG && |
| !external_jpeg_decoder_initialized_) { |
| external_jpeg_decoder_initialized_ = true; |
|
mcasas
2016/09/07 22:43:40
I think we can remove this flag and test
|external
chfremer
2016/09/08 17:28:51
Not sure we can do that without changing behavior.
mcasas
2016/09/08 20:25:45
I see, forget it then.
chfremer
2016/09/09 00:55:37
Acknowledged.
|
| - external_jpeg_decoder_.reset(new VideoCaptureGpuJpegDecoder(base::Bind( |
| - &VideoCaptureController::DoIncomingCapturedVideoFrameOnIOThread, |
| - controller_))); |
| + external_jpeg_decoder_ = jpeg_decoder_factory_->CreateJpegDecoder(); |
| external_jpeg_decoder_->Initialize(); |
| } |
| } |
| @@ -276,16 +276,13 @@ VideoCaptureDeviceClient::ReserveOutputBuffer( |
| // TODO(mcasas): For PIXEL_STORAGE_GPUMEMORYBUFFER, find a way to indicate if |
| // it's a ShMem GMB or a DmaBuf GMB. |
| - int buffer_id_to_drop = VideoCaptureBufferPool::kInvalidId; |
| + int buffer_id_to_drop = VideoCaptureBufferPoolInterface::kInvalidId; |
| const int buffer_id = buffer_pool_->ReserveForProducer( |
| frame_size, pixel_format, pixel_storage, &buffer_id_to_drop); |
| - if (buffer_id_to_drop != VideoCaptureBufferPool::kInvalidId) { |
| - BrowserThread::PostTask(BrowserThread::IO, |
| - FROM_HERE, |
| - base::Bind(&VideoCaptureController::DoBufferDestroyedOnIOThread, |
| - controller_, buffer_id_to_drop)); |
| + if (buffer_id_to_drop != VideoCaptureBufferPoolInterface::kInvalidId) { |
| + receiver_->OnBufferDestroyed(buffer_id_to_drop); |
| } |
|
mcasas
2016/09/07 22:43:40
nit: Remove {}
chfremer
2016/09/08 17:28:51
Done.
|
| - if (buffer_id == VideoCaptureBufferPool::kInvalidId) |
| + if (buffer_id == VideoCaptureBufferPoolInterface::kInvalidId) |
| return nullptr; |
| return base::WrapUnique<Buffer>( |
| new AutoReleaseBuffer(buffer_pool_, buffer_id)); |
| @@ -335,11 +332,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedBuffer( |
| void VideoCaptureDeviceClient::OnIncomingCapturedVideoFrame( |
| std::unique_ptr<Buffer> buffer, |
| const scoped_refptr<VideoFrame>& frame) { |
| - BrowserThread::PostTask( |
| - BrowserThread::IO, FROM_HERE, |
| - base::Bind( |
| - &VideoCaptureController::DoIncomingCapturedVideoFrameOnIOThread, |
| - controller_, base::Passed(&buffer), frame)); |
| + receiver_->OnIncomingCapturedVideoFrame(std::move(buffer), frame); |
| } |
| std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> |
| @@ -349,7 +342,7 @@ VideoCaptureDeviceClient::ResurrectLastOutputBuffer( |
| media::VideoPixelStorage storage) { |
| const int buffer_id = |
| buffer_pool_->ResurrectLastForProducer(dimensions, format, storage); |
| - if (buffer_id == VideoCaptureBufferPool::kInvalidId) |
| + if (buffer_id == VideoCaptureBufferPoolInterface::kInvalidId) |
| return nullptr; |
| return base::WrapUnique<Buffer>( |
| new AutoReleaseBuffer(buffer_pool_, buffer_id)); |
| @@ -365,20 +358,16 @@ void VideoCaptureDeviceClient::OnError( |
| .c_str()); |
| DLOG(ERROR) << log_message; |
| OnLog(log_message); |
| - BrowserThread::PostTask(BrowserThread::IO, |
| - FROM_HERE, |
| - base::Bind(&VideoCaptureController::DoErrorOnIOThread, controller_)); |
| + receiver_->OnError(); |
| } |
| void VideoCaptureDeviceClient::OnLog( |
| const std::string& message) { |
| - BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| - base::Bind(&VideoCaptureController::DoLogOnIOThread, |
| - controller_, message)); |
| + receiver_->OnLog(message); |
| } |
| double VideoCaptureDeviceClient::GetBufferPoolUtilization() const { |
| - // VideoCaptureBufferPool::GetBufferPoolUtilization() is thread-safe. |
| + // VideoCaptureBufferPoolInterface::GetBufferPoolUtilization() is thread-safe. |
| return buffer_pool_->GetBufferPoolUtilization(); |
| } |