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

Side by Side Diff: content/browser/renderer_host/media/video_capture_controller.cc

Issue 941833004: VideoCaptureDevice: refactor Client::Buffer into an interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/media/video_capture_controller.h" 5 #include "content/browser/renderer_host/media/video_capture_controller.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 22 matching lines...) Expand all
33 33
34 namespace { 34 namespace {
35 35
36 static const int kInfiniteRatio = 99999; 36 static const int kInfiniteRatio = 99999;
37 37
38 #define UMA_HISTOGRAM_ASPECT_RATIO(name, width, height) \ 38 #define UMA_HISTOGRAM_ASPECT_RATIO(name, width, height) \
39 UMA_HISTOGRAM_SPARSE_SLOWLY( \ 39 UMA_HISTOGRAM_SPARSE_SLOWLY( \
40 name, \ 40 name, \
41 (height) ? ((width) * 100) / (height) : kInfiniteRatio); 41 (height) ? ((width) * 100) / (height) : kInfiniteRatio);
42 42
43 class PoolBuffer : public media::VideoCaptureDevice::Client::Buffer { 43 // Class coalescing a Client::Buffer interface implementation and a pool buffer
perkj_chrome 2015/02/20 08:42:13 Can you simplify the language in this comment a bi
mcasas 2015/02/20 15:59:06 Done.
44 // implementation to guarantee proper cleanup on destruction on our side.
45 class AutoReleaseBuffer : public media::VideoCaptureDevice::Client::Buffer {
44 public: 46 public:
45 PoolBuffer(const scoped_refptr<VideoCaptureBufferPool>& pool, 47 AutoReleaseBuffer(const scoped_refptr<VideoCaptureBufferPool>& pool,
46 int buffer_id, 48 int buffer_id,
47 void* data, 49 void* data,
48 size_t size) 50 size_t size)
49 : Buffer(buffer_id, data, size), pool_(pool) { 51 : pool_(pool),
52 id_(buffer_id),
53 data_(data),
54 size_(size) {
50 DCHECK(pool_.get()); 55 DCHECK(pool_.get());
51 } 56 }
57 int id() const override { return id_; }
58 void* data() const override { return data_; }
59 size_t size() const override { return size_; }
52 60
53 private: 61 private:
54 ~PoolBuffer() override { pool_->RelinquishProducerReservation(id()); } 62 ~AutoReleaseBuffer() override { pool_->RelinquishProducerReservation(id_); }
55 63
56 const scoped_refptr<VideoCaptureBufferPool> pool_; 64 const scoped_refptr<VideoCaptureBufferPool> pool_;
65 const int id_;
66 void* const data_;
67 const size_t size_;
57 }; 68 };
58 69
59 class SyncPointClientImpl : public media::VideoFrame::SyncPointClient { 70 class SyncPointClientImpl : public media::VideoFrame::SyncPointClient {
60 public: 71 public:
61 explicit SyncPointClientImpl(GLHelper* gl_helper) : gl_helper_(gl_helper) {} 72 explicit SyncPointClientImpl(GLHelper* gl_helper) : gl_helper_(gl_helper) {}
62 ~SyncPointClientImpl() override {} 73 ~SyncPointClientImpl() override {}
63 uint32 InsertSyncPoint() override { return gl_helper_->InsertSyncPoint(); } 74 uint32 InsertSyncPoint() override { return gl_helper_->InsertSyncPoint(); }
64 void WaitSyncPoint(uint32 sync_point) override { 75 void WaitSyncPoint(uint32 sync_point) override {
65 gl_helper_->WaitSyncPoint(sync_point); 76 gl_helper_->WaitSyncPoint(sync_point);
66 } 77 }
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 int buffer_id_to_drop = VideoCaptureBufferPool::kInvalidId; 364 int buffer_id_to_drop = VideoCaptureBufferPool::kInvalidId;
354 int buffer_id = 365 int buffer_id =
355 buffer_pool_->ReserveForProducer(frame_bytes, &buffer_id_to_drop); 366 buffer_pool_->ReserveForProducer(frame_bytes, &buffer_id_to_drop);
356 if (buffer_id == VideoCaptureBufferPool::kInvalidId) 367 if (buffer_id == VideoCaptureBufferPool::kInvalidId)
357 return NULL; 368 return NULL;
358 void* data; 369 void* data;
359 size_t size; 370 size_t size;
360 buffer_pool_->GetBufferInfo(buffer_id, &data, &size); 371 buffer_pool_->GetBufferInfo(buffer_id, &data, &size);
361 372
362 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> output_buffer( 373 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> output_buffer(
363 new PoolBuffer(buffer_pool_, buffer_id, data, size)); 374 new AutoReleaseBuffer(buffer_pool_, buffer_id, data, size));
364 375
365 if (buffer_id_to_drop != VideoCaptureBufferPool::kInvalidId) { 376 if (buffer_id_to_drop != VideoCaptureBufferPool::kInvalidId) {
366 BrowserThread::PostTask(BrowserThread::IO, 377 BrowserThread::PostTask(BrowserThread::IO,
367 FROM_HERE, 378 FROM_HERE,
368 base::Bind(&VideoCaptureController::DoBufferDestroyedOnIOThread, 379 base::Bind(&VideoCaptureController::DoBufferDestroyedOnIOThread,
369 controller_, buffer_id_to_drop)); 380 controller_, buffer_id_to_drop));
370 } 381 }
371 382
372 return output_buffer; 383 return output_buffer;
373 } 384 }
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 DCHECK_CURRENTLY_ON(BrowserThread::IO); 728 DCHECK_CURRENTLY_ON(BrowserThread::IO);
718 int active_client_count = 0; 729 int active_client_count = 0;
719 for (ControllerClient* client : controller_clients_) { 730 for (ControllerClient* client : controller_clients_) {
720 if (!client->paused) 731 if (!client->paused)
721 ++active_client_count; 732 ++active_client_count;
722 } 733 }
723 return active_client_count; 734 return active_client_count;
724 } 735 }
725 736
726 } // namespace content 737 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698