| Index: content/browser/renderer_host/media/video_capture_controller.cc
|
| diff --git a/content/browser/renderer_host/media/video_capture_controller.cc b/content/browser/renderer_host/media/video_capture_controller.cc
|
| index bae4d44e7d97c4770e58524218d43ad2255e68e9..f4ad7344fce440bc49b6884a08351c1d15a7d999 100644
|
| --- a/content/browser/renderer_host/media/video_capture_controller.cc
|
| +++ b/content/browser/renderer_host/media/video_capture_controller.cc
|
| @@ -40,20 +40,31 @@ static const int kInfiniteRatio = 99999;
|
| name, \
|
| (height) ? ((width) * 100) / (height) : kInfiniteRatio);
|
|
|
| -class PoolBuffer : public media::VideoCaptureDevice::Client::Buffer {
|
| +// Class combining a Client::Buffer interface implementation and a pool buffer
|
| +// implementation to guarantee proper cleanup on destruction on our side.
|
| +class AutoReleaseBuffer : public media::VideoCaptureDevice::Client::Buffer {
|
| public:
|
| - PoolBuffer(const scoped_refptr<VideoCaptureBufferPool>& pool,
|
| - int buffer_id,
|
| - void* data,
|
| - size_t size)
|
| - : Buffer(buffer_id, data, size), pool_(pool) {
|
| + AutoReleaseBuffer(const scoped_refptr<VideoCaptureBufferPool>& pool,
|
| + int buffer_id,
|
| + void* data,
|
| + size_t size)
|
| + : pool_(pool),
|
| + id_(buffer_id),
|
| + data_(data),
|
| + size_(size) {
|
| DCHECK(pool_.get());
|
| }
|
| + int id() const override { return id_; }
|
| + void* data() const override { return data_; }
|
| + size_t size() const override { return size_; }
|
|
|
| private:
|
| - ~PoolBuffer() override { pool_->RelinquishProducerReservation(id()); }
|
| + ~AutoReleaseBuffer() override { pool_->RelinquishProducerReservation(id_); }
|
|
|
| const scoped_refptr<VideoCaptureBufferPool> pool_;
|
| + const int id_;
|
| + void* const data_;
|
| + const size_t size_;
|
| };
|
|
|
| class SyncPointClientImpl : public media::VideoFrame::SyncPointClient {
|
| @@ -360,7 +371,7 @@ VideoCaptureController::VideoCaptureDeviceClient::ReserveOutputBuffer(
|
| buffer_pool_->GetBufferInfo(buffer_id, &data, &size);
|
|
|
| scoped_refptr<media::VideoCaptureDevice::Client::Buffer> output_buffer(
|
| - new PoolBuffer(buffer_pool_, buffer_id, data, size));
|
| + new AutoReleaseBuffer(buffer_pool_, buffer_id, data, size));
|
|
|
| if (buffer_id_to_drop != VideoCaptureBufferPool::kInvalidId) {
|
| BrowserThread::PostTask(BrowserThread::IO,
|
|
|