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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 } | 469 } |
513 } | 470 } |
514 | 471 |
515 void VideoCaptureController::OnLog(const std::string& message) { | 472 void VideoCaptureController::OnLog(const std::string& message) { |
516 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 473 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
517 MediaStreamManager::SendMessageToNativeLog("Video capture: " + message); | 474 MediaStreamManager::SendMessageToNativeLog("Video capture: " + message); |
518 } | 475 } |
519 | 476 |
520 void VideoCaptureController::OnBufferDestroyed(int buffer_id_to_drop) { | 477 void VideoCaptureController::OnBufferDestroyed(int buffer_id_to_drop) { |
521 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 478 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 479 DCHECK(frame_buffer_pool_); |
522 | 480 |
523 for (const auto& client : controller_clients_) { | 481 for (const auto& client : controller_clients_) { |
524 if (client->session_closed) | 482 if (client->session_closed) |
525 continue; | 483 continue; |
526 | 484 |
527 auto known_buffers_entry_iter = | 485 auto known_buffers_entry_iter = |
528 std::find(std::begin(client->known_buffers), | 486 std::find(std::begin(client->known_buffers), |
529 std::end(client->known_buffers), buffer_id_to_drop); | 487 std::end(client->known_buffers), buffer_id_to_drop); |
530 if (known_buffers_entry_iter != std::end(client->known_buffers)) { | 488 if (known_buffers_entry_iter != std::end(client->known_buffers)) { |
531 client->known_buffers.erase(known_buffers_entry_iter); | 489 client->known_buffers.erase(known_buffers_entry_iter); |
532 client->event_handler->OnBufferDestroyed(client->controller_id, | 490 client->event_handler->OnBufferDestroyed(client->controller_id, |
533 buffer_id_to_drop); | 491 buffer_id_to_drop); |
534 } | 492 } |
535 } | 493 } |
536 | 494 |
537 buffer_id_to_state_map_.erase(buffer_id_to_drop); | 495 buffer_id_to_state_map_.erase(buffer_id_to_drop); |
538 } | 496 } |
539 | 497 |
540 void VideoCaptureController::DoNewBufferOnIOThread( | 498 void VideoCaptureController::DoNewBufferOnIOThread( |
541 ControllerClient* client, | 499 ControllerClient* client, |
542 media::VideoCaptureDevice::Client::Buffer* buffer, | 500 media::VideoCaptureDevice::Client::Buffer* buffer, |
543 const scoped_refptr<media::VideoFrame>& frame) { | 501 const scoped_refptr<media::VideoFrame>& frame) { |
544 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 502 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
545 DCHECK_EQ(media::VideoFrame::STORAGE_SHMEM, frame->storage_type()); | 503 DCHECK_EQ(media::VideoFrame::STORAGE_SHMEM, frame->storage_type()); |
546 | 504 |
547 const int buffer_id = buffer->id(); | 505 const int buffer_id = buffer->id(); |
548 mojo::ScopedSharedBufferHandle handle = | 506 mojo::ScopedSharedBufferHandle handle = |
549 buffer_pool_->GetHandleForTransit(buffer_id); | 507 frame_buffer_pool_->GetHandleForTransit(buffer_id); |
550 client->event_handler->OnBufferCreated(client->controller_id, | 508 client->event_handler->OnBufferCreated(client->controller_id, |
551 std::move(handle), | 509 std::move(handle), |
552 buffer->mapped_size(), buffer_id); | 510 buffer->mapped_size(), buffer_id); |
553 } | 511 } |
554 | 512 |
555 VideoCaptureController::ControllerClient* VideoCaptureController::FindClient( | 513 VideoCaptureController::ControllerClient* VideoCaptureController::FindClient( |
556 VideoCaptureControllerID id, | 514 VideoCaptureControllerID id, |
557 VideoCaptureControllerEventHandler* handler, | 515 VideoCaptureControllerEventHandler* handler, |
558 const ControllerClients& clients) { | 516 const ControllerClients& clients) { |
559 for (const auto& client : clients) { | 517 for (const auto& client : clients) { |
560 if (client->controller_id == id && client->event_handler == handler) | 518 if (client->controller_id == id && client->event_handler == handler) |
561 return client.get(); | 519 return client.get(); |
562 } | 520 } |
563 return nullptr; | 521 return nullptr; |
564 } | 522 } |
565 | 523 |
566 VideoCaptureController::ControllerClient* VideoCaptureController::FindClient( | 524 VideoCaptureController::ControllerClient* VideoCaptureController::FindClient( |
567 int session_id, | 525 int session_id, |
568 const ControllerClients& clients) { | 526 const ControllerClients& clients) { |
569 for (const auto& client : clients) { | 527 for (const auto& client : clients) { |
570 if (client->session_id == session_id) | 528 if (client->session_id == session_id) |
571 return client.get(); | 529 return client.get(); |
572 } | 530 } |
573 return nullptr; | 531 return nullptr; |
574 } | 532 } |
575 | 533 |
576 } // namespace content | 534 } // namespace content |
OLD | NEW |