OLD | NEW |
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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
11 #include <set> | 11 #include <set> |
12 | 12 |
13 #include "base/bind.h" | 13 #include "base/bind.h" |
14 #include "base/command_line.h" | 14 #include "base/command_line.h" |
15 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
16 #include "base/metrics/histogram_macros.h" | 16 #include "base/metrics/histogram_macros.h" |
17 #include "base/metrics/sparse_histogram.h" | 17 #include "base/metrics/sparse_histogram.h" |
18 #include "build/build_config.h" | 18 #include "build/build_config.h" |
19 #include "components/display_compositor/gl_helper.h" | 19 #include "components/display_compositor/gl_helper.h" |
20 #include "content/browser/renderer_host/media/media_stream_manager.h" | 20 #include "content/browser/renderer_host/media/media_stream_manager.h" |
21 #include "content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.h" | |
22 #include "content/browser/renderer_host/media/video_capture_manager.h" | 21 #include "content/browser/renderer_host/media/video_capture_manager.h" |
23 #include "content/public/browser/browser_thread.h" | 22 #include "content/public/browser/browser_thread.h" |
24 #include "content/public/common/content_switches.h" | 23 #include "content/public/common/content_switches.h" |
25 #include "media/base/video_frame.h" | 24 #include "media/base/video_frame.h" |
26 #include "media/capture/video/video_capture_buffer_pool_impl.h" | 25 #include "media/capture/video/video_capture_buffer_pool.h" |
27 #include "media/capture/video/video_capture_buffer_tracker_factory_impl.h" | 26 #include "media/capture/video/video_capture_buffer_tracker_factory_impl.h" |
28 #include "media/capture/video/video_capture_device_client.h" | 27 #include "media/capture/video/video_capture_device_client.h" |
29 | 28 |
30 #if !defined(OS_ANDROID) | 29 #if !defined(OS_ANDROID) |
31 #include "content/browser/compositor/image_transport_factory.h" | 30 #include "content/browser/compositor/image_transport_factory.h" |
32 #endif | 31 #endif |
33 | 32 |
34 using media::VideoCaptureFormat; | 33 using media::VideoCaptureFormat; |
35 using media::VideoFrame; | 34 using media::VideoFrame; |
36 using media::VideoFrameMetadata; | 35 using media::VideoFrameMetadata; |
37 | 36 |
38 namespace content { | 37 namespace content { |
39 | 38 |
40 namespace { | 39 namespace { |
41 | 40 |
42 static const int kInfiniteRatio = 99999; | 41 static const int kInfiniteRatio = 99999; |
43 | 42 |
44 #define UMA_HISTOGRAM_ASPECT_RATIO(name, width, height) \ | 43 #define UMA_HISTOGRAM_ASPECT_RATIO(name, width, height) \ |
45 UMA_HISTOGRAM_SPARSE_SLOWLY( \ | 44 UMA_HISTOGRAM_SPARSE_SLOWLY( \ |
46 name, \ | 45 name, \ |
47 (height) ? ((width) * 100) / (height) : kInfiniteRatio); | 46 (height) ? ((width) * 100) / (height) : kInfiniteRatio); |
48 | 47 |
49 std::unique_ptr<media::VideoCaptureJpegDecoder> CreateGpuJpegDecoder( | |
50 const media::VideoCaptureJpegDecoder::DecodeDoneCB& decode_done_cb) { | |
51 return base::MakeUnique<VideoCaptureGpuJpegDecoder>(decode_done_cb); | |
52 } | |
53 | |
54 // Decorator for media::VideoFrameReceiver that forwards all incoming calls | |
55 // to the Browser IO thread. | |
56 class VideoFrameReceiverOnIOThread : public media::VideoFrameReceiver { | |
57 public: | |
58 explicit VideoFrameReceiverOnIOThread( | |
59 const base::WeakPtr<VideoFrameReceiver>& receiver) | |
60 : receiver_(receiver) {} | |
61 | |
62 void OnIncomingCapturedVideoFrame( | |
63 std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer, | |
64 scoped_refptr<media::VideoFrame> frame) override { | |
65 BrowserThread::PostTask( | |
66 BrowserThread::IO, FROM_HERE, | |
67 base::Bind(&VideoFrameReceiver::OnIncomingCapturedVideoFrame, receiver_, | |
68 base::Passed(&buffer), std::move(frame))); | |
69 } | |
70 | |
71 void OnError() override { | |
72 BrowserThread::PostTask( | |
73 BrowserThread::IO, FROM_HERE, | |
74 base::Bind(&VideoFrameReceiver::OnError, receiver_)); | |
75 } | |
76 | |
77 void OnLog(const std::string& message) override { | |
78 BrowserThread::PostTask( | |
79 BrowserThread::IO, FROM_HERE, | |
80 base::Bind(&VideoFrameReceiver::OnLog, receiver_, message)); | |
81 } | |
82 | |
83 void OnBufferDestroyed(int buffer_id_to_drop) override { | |
84 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | |
85 base::Bind(&VideoFrameReceiver::OnBufferDestroyed, | |
86 receiver_, buffer_id_to_drop)); | |
87 } | |
88 | |
89 private: | |
90 base::WeakPtr<VideoFrameReceiver> receiver_; | |
91 }; | |
92 | |
93 } // anonymous namespace | 48 } // anonymous namespace |
94 | 49 |
95 struct VideoCaptureController::ControllerClient { | 50 struct VideoCaptureController::ControllerClient { |
96 ControllerClient(VideoCaptureControllerID id, | 51 ControllerClient(VideoCaptureControllerID id, |
97 VideoCaptureControllerEventHandler* handler, | 52 VideoCaptureControllerEventHandler* handler, |
98 media::VideoCaptureSessionId session_id, | 53 media::VideoCaptureSessionId session_id, |
99 const media::VideoCaptureParams& params) | 54 const media::VideoCaptureParams& params) |
100 : controller_id(id), | 55 : controller_id(id), |
101 event_handler(handler), | 56 event_handler(handler), |
102 session_id(session_id), | 57 session_id(session_id), |
(...skipping 30 matching lines...) Expand all Loading... |
133 | 88 |
134 // Indicates whether the client is paused, if true, VideoCaptureController | 89 // Indicates whether the client is paused, if true, VideoCaptureController |
135 // stops updating its buffer. | 90 // stops updating its buffer. |
136 bool paused; | 91 bool paused; |
137 }; | 92 }; |
138 | 93 |
139 VideoCaptureController::BufferState::BufferState( | 94 VideoCaptureController::BufferState::BufferState( |
140 int buffer_id, | 95 int buffer_id, |
141 int frame_feedback_id, | 96 int frame_feedback_id, |
142 media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer, | 97 media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer, |
143 scoped_refptr<media::VideoCaptureBufferPool> buffer_pool, | 98 media::FrameBufferPool* frame_buffer_pool, |
144 scoped_refptr<media::VideoFrame> frame) | 99 scoped_refptr<media::VideoFrame> frame) |
145 : buffer_id_(buffer_id), | 100 : buffer_id_(buffer_id), |
146 frame_feedback_id_(frame_feedback_id), | 101 frame_feedback_id_(frame_feedback_id), |
147 consumer_feedback_observer_(consumer_feedback_observer), | 102 consumer_feedback_observer_(consumer_feedback_observer), |
148 buffer_pool_(std::move(buffer_pool)), | 103 frame_buffer_pool_(frame_buffer_pool), |
149 frame_(std::move(frame)), | 104 frame_(std::move(frame)), |
150 max_consumer_utilization_( | 105 max_consumer_utilization_( |
151 media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded), | 106 media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded), |
152 consumer_hold_count_(0) {} | 107 consumer_hold_count_(0) {} |
153 | 108 |
154 VideoCaptureController::BufferState::~BufferState() = default; | 109 VideoCaptureController::BufferState::~BufferState() = default; |
155 | 110 |
156 VideoCaptureController::BufferState::BufferState( | 111 VideoCaptureController::BufferState::BufferState( |
157 const VideoCaptureController::BufferState& other) = default; | 112 const VideoCaptureController::BufferState& other) = default; |
158 | 113 |
159 void VideoCaptureController::BufferState::RecordConsumerUtilization( | 114 void VideoCaptureController::BufferState::RecordConsumerUtilization( |
160 double utilization) { | 115 double utilization) { |
161 if (std::isfinite(utilization) && utilization >= 0.0) { | 116 if (std::isfinite(utilization) && utilization >= 0.0) { |
162 max_consumer_utilization_ = | 117 max_consumer_utilization_ = |
163 std::max(max_consumer_utilization_, utilization); | 118 std::max(max_consumer_utilization_, utilization); |
164 } | 119 } |
165 } | 120 } |
166 | 121 |
167 void VideoCaptureController::BufferState::IncreaseConsumerCount() { | 122 void VideoCaptureController::BufferState::IncreaseConsumerCount() { |
168 if (consumer_hold_count_ == 0) | 123 if (consumer_hold_count_ == 0) |
169 buffer_pool_->HoldForConsumers(buffer_id_, 1); | 124 if (frame_buffer_pool_ != nullptr) |
| 125 frame_buffer_pool_->SetBufferHold(buffer_id_); |
170 consumer_hold_count_++; | 126 consumer_hold_count_++; |
171 } | 127 } |
172 | 128 |
173 void VideoCaptureController::BufferState::DecreaseConsumerCount() { | 129 void VideoCaptureController::BufferState::DecreaseConsumerCount() { |
174 consumer_hold_count_--; | 130 consumer_hold_count_--; |
175 if (consumer_hold_count_ == 0) { | 131 if (consumer_hold_count_ == 0) { |
176 if (consumer_feedback_observer_ != nullptr && | 132 if (consumer_feedback_observer_ != nullptr && |
177 max_consumer_utilization_ != | 133 max_consumer_utilization_ != |
178 media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded) { | 134 media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded) { |
179 consumer_feedback_observer_->OnUtilizationReport( | 135 consumer_feedback_observer_->OnUtilizationReport( |
180 frame_feedback_id_, max_consumer_utilization_); | 136 frame_feedback_id_, max_consumer_utilization_); |
181 } | 137 } |
182 buffer_pool_->RelinquishConsumerHold(buffer_id_, 1); | 138 if (frame_buffer_pool_ != nullptr) |
| 139 frame_buffer_pool_->ReleaseBufferHold(buffer_id_); |
183 max_consumer_utilization_ = | 140 max_consumer_utilization_ = |
184 media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded; | 141 media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded; |
185 } | 142 } |
186 } | 143 } |
187 | 144 |
188 bool VideoCaptureController::BufferState::HasZeroConsumerHoldCount() { | 145 bool VideoCaptureController::BufferState::HasZeroConsumerHoldCount() { |
189 return consumer_hold_count_ == 0; | 146 return consumer_hold_count_ == 0; |
190 } | 147 } |
191 | 148 |
192 void VideoCaptureController::BufferState::SetConsumerFeedbackObserver( | 149 void VideoCaptureController::BufferState::SetConsumerFeedbackObserver( |
193 media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer) { | 150 media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer) { |
194 consumer_feedback_observer_ = consumer_feedback_observer; | 151 consumer_feedback_observer_ = consumer_feedback_observer; |
195 } | 152 } |
196 | 153 |
197 VideoCaptureController::VideoCaptureController(int max_buffers) | 154 void VideoCaptureController::BufferState::SetFrameBufferPool( |
198 : buffer_pool_(new media::VideoCaptureBufferPoolImpl( | 155 media::FrameBufferPool* frame_buffer_pool) { |
199 base::MakeUnique<media::VideoCaptureBufferTrackerFactoryImpl>(), | 156 frame_buffer_pool_ = frame_buffer_pool; |
200 max_buffers)), | 157 } |
| 158 |
| 159 VideoCaptureController::VideoCaptureController() |
| 160 : frame_buffer_pool_(nullptr), |
201 consumer_feedback_observer_(nullptr), | 161 consumer_feedback_observer_(nullptr), |
202 state_(VIDEO_CAPTURE_STATE_STARTED), | 162 state_(VIDEO_CAPTURE_STATE_STARTED), |
203 has_received_frames_(false), | 163 has_received_frames_(false), |
204 weak_ptr_factory_(this) { | 164 weak_ptr_factory_(this) { |
205 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 165 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
206 } | 166 } |
207 | 167 |
| 168 VideoCaptureController::~VideoCaptureController() = default; |
| 169 |
208 base::WeakPtr<VideoCaptureController> | 170 base::WeakPtr<VideoCaptureController> |
209 VideoCaptureController::GetWeakPtrForIOThread() { | 171 VideoCaptureController::GetWeakPtrForIOThread() { |
210 return weak_ptr_factory_.GetWeakPtr(); | 172 return weak_ptr_factory_.GetWeakPtr(); |
211 } | 173 } |
212 | 174 |
| 175 void VideoCaptureController::SetFrameBufferPool( |
| 176 std::unique_ptr<media::FrameBufferPool> frame_buffer_pool) { |
| 177 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 178 frame_buffer_pool_ = std::move(frame_buffer_pool); |
| 179 // Update existing BufferState entries. |
| 180 for (auto& entry : buffer_id_to_state_map_) |
| 181 entry.second.SetFrameBufferPool(frame_buffer_pool_.get()); |
| 182 } |
| 183 |
213 void VideoCaptureController::SetConsumerFeedbackObserver( | 184 void VideoCaptureController::SetConsumerFeedbackObserver( |
214 std::unique_ptr<media::VideoFrameConsumerFeedbackObserver> | 185 std::unique_ptr<media::VideoFrameConsumerFeedbackObserver> |
215 consumer_feedback_observer) { | 186 consumer_feedback_observer) { |
216 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 187 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
217 consumer_feedback_observer_ = std::move(consumer_feedback_observer); | 188 consumer_feedback_observer_ = std::move(consumer_feedback_observer); |
218 // Update existing BufferState entries. | 189 // Update existing BufferState entries. |
219 for (auto& entry : buffer_id_to_state_map_) | 190 for (auto& entry : buffer_id_to_state_map_) |
220 entry.second.SetConsumerFeedbackObserver(consumer_feedback_observer_.get()); | 191 entry.second.SetConsumerFeedbackObserver(consumer_feedback_observer_.get()); |
221 } | 192 } |
222 | 193 |
223 std::unique_ptr<media::VideoCaptureDevice::Client> | |
224 VideoCaptureController::NewDeviceClient() { | |
225 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
226 return base::MakeUnique<media::VideoCaptureDeviceClient>( | |
227 base::MakeUnique<VideoFrameReceiverOnIOThread>( | |
228 this->GetWeakPtrForIOThread()), | |
229 buffer_pool_, | |
230 base::Bind(&CreateGpuJpegDecoder, | |
231 base::Bind(&VideoFrameReceiver::OnIncomingCapturedVideoFrame, | |
232 this->GetWeakPtrForIOThread()))); | |
233 } | |
234 | |
235 void VideoCaptureController::AddClient( | 194 void VideoCaptureController::AddClient( |
236 VideoCaptureControllerID id, | 195 VideoCaptureControllerID id, |
237 VideoCaptureControllerEventHandler* event_handler, | 196 VideoCaptureControllerEventHandler* event_handler, |
238 media::VideoCaptureSessionId session_id, | 197 media::VideoCaptureSessionId session_id, |
239 const media::VideoCaptureParams& params) { | 198 const media::VideoCaptureParams& params) { |
240 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 199 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
241 DVLOG(1) << "VideoCaptureController::AddClient() -- id=" << id | 200 DVLOG(1) << "VideoCaptureController::AddClient() -- id=" << id |
242 << ", session_id=" << session_id | 201 << ", session_id=" << session_id |
243 << ", params.requested_format=" | 202 << ", params.requested_format=" |
244 << media::VideoCaptureFormat::ToString(params.requested_format); | 203 << media::VideoCaptureFormat::ToString(params.requested_format); |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 buffer_state.DecreaseConsumerCount(); | 362 buffer_state.DecreaseConsumerCount(); |
404 client->buffers_in_use.erase(buffers_in_use_entry_iter); | 363 client->buffers_in_use.erase(buffers_in_use_entry_iter); |
405 } | 364 } |
406 | 365 |
407 const media::VideoCaptureFormat& | 366 const media::VideoCaptureFormat& |
408 VideoCaptureController::GetVideoCaptureFormat() const { | 367 VideoCaptureController::GetVideoCaptureFormat() const { |
409 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 368 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
410 return video_capture_format_; | 369 return video_capture_format_; |
411 } | 370 } |
412 | 371 |
413 VideoCaptureController::~VideoCaptureController() { | |
414 } | |
415 | |
416 void VideoCaptureController::OnIncomingCapturedVideoFrame( | 372 void VideoCaptureController::OnIncomingCapturedVideoFrame( |
417 std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer, | 373 std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer, |
418 scoped_refptr<VideoFrame> frame) { | 374 scoped_refptr<VideoFrame> frame) { |
419 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 375 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 376 DCHECK(frame_buffer_pool_); |
420 const int buffer_id = buffer->id(); | 377 const int buffer_id = buffer->id(); |
421 DCHECK_NE(buffer_id, media::VideoCaptureBufferPool::kInvalidId); | 378 DCHECK_NE(buffer_id, media::VideoCaptureBufferPool::kInvalidId); |
422 | 379 |
423 // Insert if not exists. | 380 // Insert if not exists. |
424 const auto it = | 381 const auto it = |
425 buffer_id_to_state_map_ | 382 buffer_id_to_state_map_ |
426 .insert(std::make_pair( | 383 .insert(std::make_pair( |
427 buffer_id, BufferState(buffer_id, buffer->frame_feedback_id(), | 384 buffer_id, BufferState(buffer_id, buffer->frame_feedback_id(), |
428 consumer_feedback_observer_.get(), | 385 consumer_feedback_observer_.get(), |
429 buffer_pool_, frame))) | 386 frame_buffer_pool_.get(), frame))) |
430 .first; | 387 .first; |
431 BufferState& buffer_state = it->second; | 388 BufferState& buffer_state = it->second; |
432 DCHECK(buffer_state.HasZeroConsumerHoldCount()); | 389 DCHECK(buffer_state.HasZeroConsumerHoldCount()); |
433 | 390 |
434 if (state_ == VIDEO_CAPTURE_STATE_STARTED) { | 391 if (state_ == VIDEO_CAPTURE_STATE_STARTED) { |
435 if (!frame->metadata()->HasKey(VideoFrameMetadata::FRAME_RATE)) { | 392 if (!frame->metadata()->HasKey(VideoFrameMetadata::FRAME_RATE)) { |
436 frame->metadata()->SetDouble(VideoFrameMetadata::FRAME_RATE, | 393 frame->metadata()->SetDouble(VideoFrameMetadata::FRAME_RATE, |
437 video_capture_format_.frame_rate); | 394 video_capture_format_.frame_rate); |
438 } | 395 } |
439 std::unique_ptr<base::DictionaryValue> metadata( | 396 std::unique_ptr<base::DictionaryValue> metadata( |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 } | 470 } |
514 } | 471 } |
515 | 472 |
516 void VideoCaptureController::OnLog(const std::string& message) { | 473 void VideoCaptureController::OnLog(const std::string& message) { |
517 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 474 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
518 MediaStreamManager::SendMessageToNativeLog("Video capture: " + message); | 475 MediaStreamManager::SendMessageToNativeLog("Video capture: " + message); |
519 } | 476 } |
520 | 477 |
521 void VideoCaptureController::OnBufferDestroyed(int buffer_id_to_drop) { | 478 void VideoCaptureController::OnBufferDestroyed(int buffer_id_to_drop) { |
522 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 479 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 480 DCHECK(frame_buffer_pool_); |
523 | 481 |
524 for (const auto& client : controller_clients_) { | 482 for (const auto& client : controller_clients_) { |
525 if (client->session_closed) | 483 if (client->session_closed) |
526 continue; | 484 continue; |
527 | 485 |
528 auto known_buffers_entry_iter = | 486 auto known_buffers_entry_iter = |
529 std::find(std::begin(client->known_buffers), | 487 std::find(std::begin(client->known_buffers), |
530 std::end(client->known_buffers), buffer_id_to_drop); | 488 std::end(client->known_buffers), buffer_id_to_drop); |
531 if (known_buffers_entry_iter != std::end(client->known_buffers)) { | 489 if (known_buffers_entry_iter != std::end(client->known_buffers)) { |
532 client->known_buffers.erase(known_buffers_entry_iter); | 490 client->known_buffers.erase(known_buffers_entry_iter); |
533 client->event_handler->OnBufferDestroyed(client->controller_id, | 491 client->event_handler->OnBufferDestroyed(client->controller_id, |
534 buffer_id_to_drop); | 492 buffer_id_to_drop); |
535 } | 493 } |
536 } | 494 } |
537 | 495 |
538 buffer_id_to_state_map_.erase(buffer_id_to_drop); | 496 buffer_id_to_state_map_.erase(buffer_id_to_drop); |
539 } | 497 } |
540 | 498 |
541 void VideoCaptureController::DoNewBufferOnIOThread( | 499 void VideoCaptureController::DoNewBufferOnIOThread( |
542 ControllerClient* client, | 500 ControllerClient* client, |
543 media::VideoCaptureDevice::Client::Buffer* buffer, | 501 media::VideoCaptureDevice::Client::Buffer* buffer, |
544 const scoped_refptr<media::VideoFrame>& frame) { | 502 const scoped_refptr<media::VideoFrame>& frame) { |
545 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 503 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
546 DCHECK_EQ(media::VideoFrame::STORAGE_SHMEM, frame->storage_type()); | 504 DCHECK_EQ(media::VideoFrame::STORAGE_SHMEM, frame->storage_type()); |
547 | 505 |
548 const int buffer_id = buffer->id(); | 506 const int buffer_id = buffer->id(); |
549 mojo::ScopedSharedBufferHandle handle = | 507 mojo::ScopedSharedBufferHandle handle = |
550 buffer_pool_->GetHandleForTransit(buffer_id); | 508 frame_buffer_pool_->GetHandleForTransit(buffer_id); |
551 client->event_handler->OnBufferCreated(client->controller_id, | 509 client->event_handler->OnBufferCreated(client->controller_id, |
552 std::move(handle), | 510 std::move(handle), |
553 buffer->mapped_size(), buffer_id); | 511 buffer->mapped_size(), buffer_id); |
554 } | 512 } |
555 | 513 |
556 VideoCaptureController::ControllerClient* VideoCaptureController::FindClient( | 514 VideoCaptureController::ControllerClient* VideoCaptureController::FindClient( |
557 VideoCaptureControllerID id, | 515 VideoCaptureControllerID id, |
558 VideoCaptureControllerEventHandler* handler, | 516 VideoCaptureControllerEventHandler* handler, |
559 const ControllerClients& clients) { | 517 const ControllerClients& clients) { |
560 for (const auto& client : clients) { | 518 for (const auto& client : clients) { |
561 if (client->controller_id == id && client->event_handler == handler) | 519 if (client->controller_id == id && client->event_handler == handler) |
562 return client.get(); | 520 return client.get(); |
563 } | 521 } |
564 return nullptr; | 522 return nullptr; |
565 } | 523 } |
566 | 524 |
567 VideoCaptureController::ControllerClient* VideoCaptureController::FindClient( | 525 VideoCaptureController::ControllerClient* VideoCaptureController::FindClient( |
568 int session_id, | 526 int session_id, |
569 const ControllerClients& clients) { | 527 const ControllerClients& clients) { |
570 for (const auto& client : clients) { | 528 for (const auto& client : clients) { |
571 if (client->session_id == session_id) | 529 if (client->session_id == session_id) |
572 return client.get(); | 530 return client.get(); |
573 } | 531 } |
574 return nullptr; | 532 return nullptr; |
575 } | 533 } |
576 | 534 |
577 } // namespace content | 535 } // namespace content |
OLD | NEW |