| 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..c9b3e47c9daa1160ce864a145b5e97aa94caab20 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<ProducerVideoCaptureBufferPool>& 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<ProducerVideoCaptureBufferPool> 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<ProducerVideoCaptureBufferPool>& 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();
|
| }
|
|
|
| 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;
|
| - 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,12 @@ 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 = ProducerVideoCaptureBufferPool::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 == VideoCaptureBufferPool::kInvalidId)
|
| + if (buffer_id_to_drop != ProducerVideoCaptureBufferPool::kInvalidId)
|
| + receiver_->OnBufferDestroyed(buffer_id_to_drop);
|
| + if (buffer_id == ProducerVideoCaptureBufferPool::kInvalidId)
|
| return nullptr;
|
| return base::WrapUnique<Buffer>(
|
| new AutoReleaseBuffer(buffer_pool_, buffer_id));
|
| @@ -335,11 +331,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 +341,7 @@ VideoCaptureDeviceClient::ResurrectLastOutputBuffer(
|
| media::VideoPixelStorage storage) {
|
| const int buffer_id =
|
| buffer_pool_->ResurrectLastForProducer(dimensions, format, storage);
|
| - if (buffer_id == VideoCaptureBufferPool::kInvalidId)
|
| + if (buffer_id == ProducerVideoCaptureBufferPool::kInvalidId)
|
| return nullptr;
|
| return base::WrapUnique<Buffer>(
|
| new AutoReleaseBuffer(buffer_pool_, buffer_id));
|
| @@ -365,20 +357,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.
|
| + // ProducerVideoCaptureBufferPool::GetBufferPoolUtilization() is thread-safe.
|
| return buffer_pool_->GetBufferPoolUtilization();
|
| }
|
|
|
|
|