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

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

Issue 11339014: Move content\browser\renderer_host\media to content namespace. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 1 month 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 | Annotate | Revision Log
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 <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "content/browser/renderer_host/media/media_stream_manager.h" 12 #include "content/browser/renderer_host/media/media_stream_manager.h"
13 #include "content/browser/renderer_host/media/video_capture_manager.h" 13 #include "content/browser/renderer_host/media/video_capture_manager.h"
14 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
15 #include "media/base/yuv_convert.h" 15 #include "media/base/yuv_convert.h"
16 16
17 using content::BrowserThread; 17 namespace content {
18 18
19 // The number of DIBs VideoCaptureController allocate. 19 // The number of DIBs VideoCaptureController allocate.
20 static const size_t kNoOfDIBS = 3; 20 static const size_t kNoOfDIBS = 3;
21 21
22 struct VideoCaptureController::ControllerClient { 22 struct VideoCaptureController::ControllerClient {
23 ControllerClient( 23 ControllerClient(
24 const VideoCaptureControllerID& id, 24 const VideoCaptureControllerID& id,
25 VideoCaptureControllerEventHandler* handler, 25 VideoCaptureControllerEventHandler* handler,
26 base::ProcessHandle render_process, 26 base::ProcessHandle render_process,
27 const media::VideoCaptureParams& params) 27 const media::VideoCaptureParams& params)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 // The memory created to be shared with renderer processes. 60 // The memory created to be shared with renderer processes.
61 scoped_ptr<base::SharedMemory> shared_memory; 61 scoped_ptr<base::SharedMemory> shared_memory;
62 62
63 // Number of renderer processes which hold this shared memory. 63 // Number of renderer processes which hold this shared memory.
64 // renderer process is represented by VidoeCaptureHost. 64 // renderer process is represented by VidoeCaptureHost.
65 int references; 65 int references;
66 }; 66 };
67 67
68 VideoCaptureController::VideoCaptureController( 68 VideoCaptureController::VideoCaptureController(
69 media_stream::VideoCaptureManager* video_capture_manager) 69 VideoCaptureManager* video_capture_manager)
70 : chopped_width_(0), 70 : chopped_width_(0),
71 chopped_height_(0), 71 chopped_height_(0),
72 frame_info_available_(false), 72 frame_info_available_(false),
73 video_capture_manager_(video_capture_manager), 73 video_capture_manager_(video_capture_manager),
74 device_in_use_(false), 74 device_in_use_(false),
75 state_(video_capture::kStopped) { 75 state_(VIDEO_CAPTURE_STATE_STOPPED) {
76 memset(&current_params_, 0, sizeof(current_params_)); 76 memset(&current_params_, 0, sizeof(current_params_));
77 } 77 }
78 78
79 void VideoCaptureController::StartCapture( 79 void VideoCaptureController::StartCapture(
80 const VideoCaptureControllerID& id, 80 const VideoCaptureControllerID& id,
81 VideoCaptureControllerEventHandler* event_handler, 81 VideoCaptureControllerEventHandler* event_handler,
82 base::ProcessHandle render_process, 82 base::ProcessHandle render_process,
83 const media::VideoCaptureParams& params) { 83 const media::VideoCaptureParams& params) {
84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
85 DVLOG(1) << "VideoCaptureController::StartCapture, id " << id.device_id 85 DVLOG(1) << "VideoCaptureController::StartCapture, id " << id.device_id
86 << ", (" << params.width 86 << ", (" << params.width
87 << ", " << params.height 87 << ", " << params.height
88 << ", " << params.frame_per_second 88 << ", " << params.frame_per_second
89 << ", " << params.session_id 89 << ", " << params.session_id
90 << ")"; 90 << ")";
91 91
92 // Signal error in case device is already in error state. 92 // Signal error in case device is already in error state.
93 if (state_ == video_capture::kError) { 93 if (state_ == VIDEO_CAPTURE_STATE_ERROR) {
94 event_handler->OnError(id); 94 event_handler->OnError(id);
95 return; 95 return;
96 } 96 }
97 97
98 // Do nothing if this client has called StartCapture before. 98 // Do nothing if this client has called StartCapture before.
99 if (FindClient(id, event_handler, controller_clients_) || 99 if (FindClient(id, event_handler, controller_clients_) ||
100 FindClient(id, event_handler, pending_clients_)) 100 FindClient(id, event_handler, pending_clients_))
101 return; 101 return;
102 102
103 ControllerClient* client = new ControllerClient(id, event_handler, 103 ControllerClient* client = new ControllerClient(id, event_handler,
104 render_process, params); 104 render_process, params);
105 // In case capture has been started, need to check different condtions. 105 // In case capture has been started, need to check different condtions.
106 if (state_ == video_capture::kStarted) { 106 if (state_ == VIDEO_CAPTURE_STATE_STARTED) {
107 // TODO(wjia): Temporarily disable restarting till client supports resampling. 107 // TODO(wjia): Temporarily disable restarting till client supports resampling.
108 #if 0 108 #if 0
109 // This client has higher resolution than what is currently requested. 109 // This client has higher resolution than what is currently requested.
110 // Need restart capturing. 110 // Need restart capturing.
111 if (params.width > current_params_.width || 111 if (params.width > current_params_.width ||
112 params.height > current_params_.height) { 112 params.height > current_params_.height) {
113 video_capture_manager_->Stop(current_params_.session_id, 113 video_capture_manager_->Stop(current_params_.session_id,
114 base::Bind(&VideoCaptureController::OnDeviceStopped, this)); 114 base::Bind(&VideoCaptureController::OnDeviceStopped, this));
115 frame_info_available_ = false; 115 frame_info_available_ = false;
116 state_ = video_capture::kStopping; 116 state_ = VIDEO_CAPTURE_STATE_STOPPING;
117 pending_clients_.push_back(client); 117 pending_clients_.push_back(client);
118 return; 118 return;
119 } 119 }
120 #endif 120 #endif
121 121
122 // This client's resolution is no larger than what's currently requested. 122 // This client's resolution is no larger than what's currently requested.
123 // When frame_info has been returned by device, send them to client. 123 // When frame_info has been returned by device, send them to client.
124 if (frame_info_available_) { 124 if (frame_info_available_) {
125 int buffer_size = (frame_info_.width * frame_info_.height * 3) / 2; 125 int buffer_size = (frame_info_.width * frame_info_.height * 3) / 2;
126 SendFrameInfoAndBuffers(client, buffer_size); 126 SendFrameInfoAndBuffers(client, buffer_size);
127 } 127 }
128 controller_clients_.push_back(client); 128 controller_clients_.push_back(client);
129 return; 129 return;
130 } 130 }
131 131
132 // In case the device is in the middle of stopping, put the client in 132 // In case the device is in the middle of stopping, put the client in
133 // pending queue. 133 // pending queue.
134 if (state_ == video_capture::kStopping) { 134 if (state_ == VIDEO_CAPTURE_STATE_STOPPING) {
135 pending_clients_.push_back(client); 135 pending_clients_.push_back(client);
136 return; 136 return;
137 } 137 }
138 138
139 // Fresh start. 139 // Fresh start.
140 controller_clients_.push_back(client); 140 controller_clients_.push_back(client);
141 current_params_ = params; 141 current_params_ = params;
142 // Order the manager to start the actual capture. 142 // Order the manager to start the actual capture.
143 video_capture_manager_->Start(params, this); 143 video_capture_manager_->Start(params, this);
144 state_ = video_capture::kStarted; 144 state_ = VIDEO_CAPTURE_STATE_STARTED;
145 device_in_use_ = true; 145 device_in_use_ = true;
146 } 146 }
147 147
148 void VideoCaptureController::StopCapture( 148 void VideoCaptureController::StopCapture(
149 const VideoCaptureControllerID& id, 149 const VideoCaptureControllerID& id,
150 VideoCaptureControllerEventHandler* event_handler) { 150 VideoCaptureControllerEventHandler* event_handler) {
151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
152 DVLOG(1) << "VideoCaptureController::StopCapture, id " << id.device_id; 152 DVLOG(1) << "VideoCaptureController::StopCapture, id " << id.device_id;
153 153
154 ControllerClient* client = FindClient(id, event_handler, pending_clients_); 154 ControllerClient* client = FindClient(id, event_handler, pending_clients_);
(...skipping 22 matching lines...) Expand all
177 dib_it->second->references -= 1; 177 dib_it->second->references -= 1;
178 } 178 }
179 } 179 }
180 client->buffers.clear(); 180 client->buffers.clear();
181 181
182 int session_id = client->parameters.session_id; 182 int session_id = client->parameters.session_id;
183 delete client; 183 delete client;
184 controller_clients_.remove(client); 184 controller_clients_.remove(client);
185 185
186 // No more clients. Stop device. 186 // No more clients. Stop device.
187 if (controller_clients_.empty() && state_ == video_capture::kStarted) { 187 if (controller_clients_.empty() && state_ == VIDEO_CAPTURE_STATE_STARTED) {
188 video_capture_manager_->Stop(session_id, 188 video_capture_manager_->Stop(session_id,
189 base::Bind(&VideoCaptureController::OnDeviceStopped, this)); 189 base::Bind(&VideoCaptureController::OnDeviceStopped, this));
190 frame_info_available_ = false; 190 frame_info_available_ = false;
191 state_ = video_capture::kStopping; 191 state_ = VIDEO_CAPTURE_STATE_STOPPING;
192 } 192 }
193 } 193 }
194 194
195 void VideoCaptureController::StopSession( 195 void VideoCaptureController::StopSession(
196 int session_id) { 196 int session_id) {
197 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 197 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
198 DVLOG(1) << "VideoCaptureController::StopSession, id " << session_id; 198 DVLOG(1) << "VideoCaptureController::StopSession, id " << session_id;
199 199
200 ControllerClient* client = FindClient(session_id, pending_clients_); 200 ControllerClient* client = FindClient(session_id, pending_clients_);
201 if (!client) 201 if (!client)
(...skipping 27 matching lines...) Expand all
229 DCHECK_GT(dib_it->second->references, 0) 229 DCHECK_GT(dib_it->second->references, 0)
230 << "The buffer is not used by renderer."; 230 << "The buffer is not used by renderer.";
231 dib_it->second->references -= 1; 231 dib_it->second->references -= 1;
232 if (dib_it->second->references > 0) 232 if (dib_it->second->references > 0)
233 return; 233 return;
234 } 234 }
235 235
236 // When all buffers have been returned by clients and device has been 236 // When all buffers have been returned by clients and device has been
237 // called to stop, check if restart is needed. This could happen when 237 // called to stop, check if restart is needed. This could happen when
238 // capture needs to be restarted due to resolution change. 238 // capture needs to be restarted due to resolution change.
239 if (!ClientHasDIB() && state_ == video_capture::kStopping) { 239 if (!ClientHasDIB() && state_ == VIDEO_CAPTURE_STATE_STOPPING) {
240 PostStopping(); 240 PostStopping();
241 } 241 }
242 } 242 }
243 243
244 /////////////////////////////////////////////////////////////////////////////// 244 ///////////////////////////////////////////////////////////////////////////////
245 // Implements VideoCaptureDevice::EventHandler. 245 // Implements VideoCaptureDevice::EventHandler.
246 // OnIncomingCapturedFrame is called the thread running the capture device. 246 // OnIncomingCapturedFrame is called the thread running the capture device.
247 // I.e.- DirectShow thread on windows and v4l2_thread on Linux. 247 // I.e.- DirectShow thread on windows and v4l2_thread on Linux.
248 void VideoCaptureController::OnIncomingCapturedFrame(const uint8* data, 248 void VideoCaptureController::OnIncomingCapturedFrame(const uint8* data,
249 int length, 249 int length,
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 BrowserThread::PostTask(BrowserThread::IO, 383 BrowserThread::PostTask(BrowserThread::IO,
384 FROM_HERE, 384 FROM_HERE,
385 base::Bind(&VideoCaptureController::DoDeviceStoppedOnIOThread, this)); 385 base::Bind(&VideoCaptureController::DoDeviceStoppedOnIOThread, this));
386 } 386 }
387 387
388 void VideoCaptureController::DoIncomingCapturedFrameOnIOThread( 388 void VideoCaptureController::DoIncomingCapturedFrameOnIOThread(
389 int buffer_id, base::Time timestamp) { 389 int buffer_id, base::Time timestamp) {
390 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 390 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
391 391
392 int count = 0; 392 int count = 0;
393 if (state_ == video_capture::kStarted) { 393 if (state_ == VIDEO_CAPTURE_STATE_STARTED) {
394 for (ControllerClients::iterator client_it = controller_clients_.begin(); 394 for (ControllerClients::iterator client_it = controller_clients_.begin();
395 client_it != controller_clients_.end(); client_it++) { 395 client_it != controller_clients_.end(); client_it++) {
396 if ((*client_it)->session_closed) 396 if ((*client_it)->session_closed)
397 continue; 397 continue;
398 398
399 (*client_it)->event_handler->OnBufferReady((*client_it)->controller_id, 399 (*client_it)->event_handler->OnBufferReady((*client_it)->controller_id,
400 buffer_id, timestamp); 400 buffer_id, timestamp);
401 (*client_it)->buffers.insert(buffer_id); 401 (*client_it)->buffers.insert(buffer_id);
402 count++; 402 count++;
403 } 403 }
404 } 404 }
405 405
406 base::AutoLock lock(lock_); 406 base::AutoLock lock(lock_);
407 if (owned_dibs_.find(buffer_id) != owned_dibs_.end()) { 407 if (owned_dibs_.find(buffer_id) != owned_dibs_.end()) {
408 DCHECK_EQ(owned_dibs_[buffer_id]->references, -1); 408 DCHECK_EQ(owned_dibs_[buffer_id]->references, -1);
409 owned_dibs_[buffer_id]->references = count; 409 owned_dibs_[buffer_id]->references = count;
410 } 410 }
411 } 411 }
412 412
413 void VideoCaptureController::DoFrameInfoOnIOThread() { 413 void VideoCaptureController::DoFrameInfoOnIOThread() {
414 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 414 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
415 DCHECK(owned_dibs_.empty()) 415 DCHECK(owned_dibs_.empty())
416 << "Device is restarted without releasing shared memory."; 416 << "Device is restarted without releasing shared memory.";
417 417
418 // Allocate memory only when device has been started. 418 // Allocate memory only when device has been started.
419 if (state_ != video_capture::kStarted) 419 if (state_ != VIDEO_CAPTURE_STATE_STARTED)
420 return; 420 return;
421 421
422 bool frames_created = true; 422 bool frames_created = true;
423 const size_t needed_size = (frame_info_.width * frame_info_.height * 3) / 2; 423 const size_t needed_size = (frame_info_.width * frame_info_.height * 3) / 2;
424 { 424 {
425 base::AutoLock lock(lock_); 425 base::AutoLock lock(lock_);
426 for (size_t i = 1; i <= kNoOfDIBS; ++i) { 426 for (size_t i = 1; i <= kNoOfDIBS; ++i) {
427 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); 427 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
428 if (!shared_memory->CreateAndMapAnonymous(needed_size)) { 428 if (!shared_memory->CreateAndMapAnonymous(needed_size)) {
429 frames_created = false; 429 frames_created = false;
430 break; 430 break;
431 } 431 }
432 SharedDIB* dib = new SharedDIB(shared_memory.release()); 432 SharedDIB* dib = new SharedDIB(shared_memory.release());
433 owned_dibs_.insert(std::make_pair(i, dib)); 433 owned_dibs_.insert(std::make_pair(i, dib));
434 } 434 }
435 } 435 }
436 // Check whether all DIBs were created successfully. 436 // Check whether all DIBs were created successfully.
437 if (!frames_created) { 437 if (!frames_created) {
438 state_ = video_capture::kError; 438 state_ = VIDEO_CAPTURE_STATE_ERROR;
439 for (ControllerClients::iterator client_it = controller_clients_.begin(); 439 for (ControllerClients::iterator client_it = controller_clients_.begin();
440 client_it != controller_clients_.end(); client_it++) { 440 client_it != controller_clients_.end(); client_it++) {
441 (*client_it)->event_handler->OnError((*client_it)->controller_id); 441 (*client_it)->event_handler->OnError((*client_it)->controller_id);
442 } 442 }
443 return; 443 return;
444 } 444 }
445 frame_info_available_ = true; 445 frame_info_available_ = true;
446 446
447 for (ControllerClients::iterator client_it = controller_clients_.begin(); 447 for (ControllerClients::iterator client_it = controller_clients_.begin();
448 client_it != controller_clients_.end(); client_it++) { 448 client_it != controller_clients_.end(); client_it++) {
449 SendFrameInfoAndBuffers((*client_it), static_cast<int>(needed_size)); 449 SendFrameInfoAndBuffers((*client_it), static_cast<int>(needed_size));
450 } 450 }
451 } 451 }
452 452
453 void VideoCaptureController::DoErrorOnIOThread() { 453 void VideoCaptureController::DoErrorOnIOThread() {
454 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 454 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
455 state_ = video_capture::kError; 455 state_ = VIDEO_CAPTURE_STATE_ERROR;
456 ControllerClients::iterator client_it; 456 ControllerClients::iterator client_it;
457 for (client_it = controller_clients_.begin(); 457 for (client_it = controller_clients_.begin();
458 client_it != controller_clients_.end(); client_it++) { 458 client_it != controller_clients_.end(); client_it++) {
459 (*client_it)->event_handler->OnError((*client_it)->controller_id); 459 (*client_it)->event_handler->OnError((*client_it)->controller_id);
460 } 460 }
461 for (client_it = pending_clients_.begin(); 461 for (client_it = pending_clients_.begin();
462 client_it != pending_clients_.end(); client_it++) { 462 client_it != pending_clients_.end(); client_it++) {
463 (*client_it)->event_handler->OnError((*client_it)->controller_id); 463 (*client_it)->event_handler->OnError((*client_it)->controller_id);
464 } 464 }
465 } 465 }
466 466
467 void VideoCaptureController::DoDeviceStoppedOnIOThread() { 467 void VideoCaptureController::DoDeviceStoppedOnIOThread() {
468 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 468 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
469 device_in_use_ = false; 469 device_in_use_ = false;
470 if (state_ == video_capture::kStopping) { 470 if (state_ == VIDEO_CAPTURE_STATE_STOPPING) {
471 PostStopping(); 471 PostStopping();
472 } 472 }
473 } 473 }
474 474
475 void VideoCaptureController::SendFrameInfoAndBuffers( 475 void VideoCaptureController::SendFrameInfoAndBuffers(
476 ControllerClient* client, int buffer_size) { 476 ControllerClient* client, int buffer_size) {
477 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 477 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
478 DCHECK(frame_info_available_); 478 DCHECK(frame_info_available_);
479 client->event_handler->OnFrameInfo(client->controller_id, 479 client->event_handler->OnFrameInfo(client->controller_id,
480 frame_info_.width, frame_info_.height, 480 frame_info_.width, frame_info_.height,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 } 519 }
520 } 520 }
521 return NULL; 521 return NULL;
522 } 522 }
523 523
524 // This function is called when all buffers have been returned to controller, 524 // This function is called when all buffers have been returned to controller,
525 // or when device is stopped. It decides whether the device needs to be 525 // or when device is stopped. It decides whether the device needs to be
526 // restarted. 526 // restarted.
527 void VideoCaptureController::PostStopping() { 527 void VideoCaptureController::PostStopping() {
528 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 528 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
529 DCHECK_EQ(state_, video_capture::kStopping); 529 DCHECK_EQ(state_, VIDEO_CAPTURE_STATE_STOPPING);
530 530
531 // When clients still have some buffers, or device has not been stopped yet, 531 // When clients still have some buffers, or device has not been stopped yet,
532 // do nothing. 532 // do nothing.
533 if (ClientHasDIB() || device_in_use_) 533 if (ClientHasDIB() || device_in_use_)
534 return; 534 return;
535 535
536 { 536 {
537 base::AutoLock lock(lock_); 537 base::AutoLock lock(lock_);
538 STLDeleteValues(&owned_dibs_); 538 STLDeleteValues(&owned_dibs_);
539 } 539 }
540 540
541 // No more client. Therefore the controller is stopped. 541 // No more client. Therefore the controller is stopped.
542 if (controller_clients_.empty() && pending_clients_.empty()) { 542 if (controller_clients_.empty() && pending_clients_.empty()) {
543 state_ = video_capture::kStopped; 543 state_ = VIDEO_CAPTURE_STATE_STOPPED;
544 return; 544 return;
545 } 545 }
546 546
547 // Restart the device. 547 // Restart the device.
548 current_params_.width = 0; 548 current_params_.width = 0;
549 current_params_.height = 0; 549 current_params_.height = 0;
550 ControllerClients::iterator client_it; 550 ControllerClients::iterator client_it;
551 for (client_it = controller_clients_.begin(); 551 for (client_it = controller_clients_.begin();
552 client_it != controller_clients_.end(); client_it++) { 552 client_it != controller_clients_.end(); client_it++) {
553 if (current_params_.width < (*client_it)->parameters.width) 553 if (current_params_.width < (*client_it)->parameters.width)
554 current_params_.width = (*client_it)->parameters.width; 554 current_params_.width = (*client_it)->parameters.width;
555 if (current_params_.height < (*client_it)->parameters.height) 555 if (current_params_.height < (*client_it)->parameters.height)
556 current_params_.height = (*client_it)->parameters.height; 556 current_params_.height = (*client_it)->parameters.height;
557 } 557 }
558 for (client_it = pending_clients_.begin(); 558 for (client_it = pending_clients_.begin();
559 client_it != pending_clients_.end(); ) { 559 client_it != pending_clients_.end(); ) {
560 if (current_params_.width < (*client_it)->parameters.width) 560 if (current_params_.width < (*client_it)->parameters.width)
561 current_params_.width = (*client_it)->parameters.width; 561 current_params_.width = (*client_it)->parameters.width;
562 if (current_params_.height < (*client_it)->parameters.height) 562 if (current_params_.height < (*client_it)->parameters.height)
563 current_params_.height = (*client_it)->parameters.height; 563 current_params_.height = (*client_it)->parameters.height;
564 controller_clients_.push_back((*client_it)); 564 controller_clients_.push_back((*client_it));
565 pending_clients_.erase(client_it++); 565 pending_clients_.erase(client_it++);
566 } 566 }
567 // Request the manager to start the actual capture. 567 // Request the manager to start the actual capture.
568 video_capture_manager_->Start(current_params_, this); 568 video_capture_manager_->Start(current_params_, this);
569 state_ = video_capture::kStarted; 569 state_ = VIDEO_CAPTURE_STATE_STARTED;
570 device_in_use_ = true; 570 device_in_use_ = true;
571 } 571 }
572 572
573 bool VideoCaptureController::ClientHasDIB() { 573 bool VideoCaptureController::ClientHasDIB() {
574 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 574 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
575 base::AutoLock lock(lock_); 575 base::AutoLock lock(lock_);
576 for (DIBMap::iterator dib_it = owned_dibs_.begin(); 576 for (DIBMap::iterator dib_it = owned_dibs_.begin();
577 dib_it != owned_dibs_.end(); dib_it++) { 577 dib_it != owned_dibs_.end(); dib_it++) {
578 if (dib_it->second->references > 0) 578 if (dib_it->second->references > 0)
579 return true; 579 return true;
580 } 580 }
581 return false; 581 return false;
582 } 582 }
583
584 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698