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

Side by Side Diff: content/renderer/media/video_capture_impl.cc

Issue 7222024: use control message instead of routed for video capture (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/renderer/media/video_capture_impl.h" 5 #include "content/renderer/media/video_capture_impl.h"
6 6
7 #include "base/stl_util-inl.h" 7 #include "base/stl_util-inl.h"
8 #include "content/common/child_process.h" 8 #include "content/common/child_process.h"
9 #include "content/common/media/video_capture_messages.h" 9 #include "content/common/media/video_capture_messages.h"
10 10
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 io_message_loop_proxy->PostTask(FROM_HERE, 65 io_message_loop_proxy->PostTask(FROM_HERE,
66 NewRunnableMethod(this, &VideoCaptureImpl::AddDelegateOnIOThread)); 66 NewRunnableMethod(this, &VideoCaptureImpl::AddDelegateOnIOThread));
67 return; 67 return;
68 } 68 }
69 69
70 AddDelegateOnIOThread(); 70 AddDelegateOnIOThread();
71 } 71 }
72 72
73 void VideoCaptureImpl::DeInit(Task* task) { 73 void VideoCaptureImpl::DeInit(Task* task) {
74 if (state_ == kStarted) 74 if (state_ == kStarted)
75 Send(new VideoCaptureHostMsg_Stop(0, device_id_)); 75 Send(new VideoCaptureHostMsg_Stop(device_id_));
76 76
77 base::MessageLoopProxy* io_message_loop_proxy = 77 base::MessageLoopProxy* io_message_loop_proxy =
78 ChildProcess::current()->io_message_loop_proxy(); 78 ChildProcess::current()->io_message_loop_proxy();
79 79
80 if (!io_message_loop_proxy->BelongsToCurrentThread()) { 80 if (!io_message_loop_proxy->BelongsToCurrentThread()) {
81 io_message_loop_proxy->PostTask(FROM_HERE, 81 io_message_loop_proxy->PostTask(FROM_HERE,
82 NewRunnableMethod(this, &VideoCaptureImpl::RemoveDelegateOnIOThread, 82 NewRunnableMethod(this, &VideoCaptureImpl::RemoveDelegateOnIOThread,
83 task)); 83 task));
84 return; 84 return;
85 } 85 }
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 buffer->height = height_; 285 buffer->height = height_;
286 286
287 DIBBuffer* dib_buffer = new DIBBuffer(dib, buffer); 287 DIBBuffer* dib_buffer = new DIBBuffer(dib, buffer);
288 cached_dibs_[buffer_id] = dib_buffer; 288 cached_dibs_[buffer_id] = dib_buffer;
289 } 289 }
290 290
291 void VideoCaptureImpl::DoBufferReceived(int buffer_id, base::Time timestamp) { 291 void VideoCaptureImpl::DoBufferReceived(int buffer_id, base::Time timestamp) {
292 DCHECK(ml_proxy_->BelongsToCurrentThread()); 292 DCHECK(ml_proxy_->BelongsToCurrentThread());
293 293
294 if (state_ != kStarted) { 294 if (state_ != kStarted) {
295 Send(new VideoCaptureHostMsg_BufferReady(0, device_id_, buffer_id)); 295 Send(new VideoCaptureHostMsg_BufferReady(device_id_, buffer_id));
296 return; 296 return;
297 } 297 }
298 298
299 media::VideoCapture::VideoFrameBuffer* buffer; 299 media::VideoCapture::VideoFrameBuffer* buffer;
300 DCHECK(cached_dibs_.find(buffer_id) != cached_dibs_.end()); 300 DCHECK(cached_dibs_.find(buffer_id) != cached_dibs_.end());
301 buffer = cached_dibs_[buffer_id]->mapped_memory; 301 buffer = cached_dibs_[buffer_id]->mapped_memory;
302 302
303 // TODO(wjia): handle buffer sharing with downstream modules. 303 // TODO(wjia): handle buffer sharing with downstream modules.
304 for (ClientInfo::iterator it = clients_.begin(); it != clients_.end(); it++) { 304 for (ClientInfo::iterator it = clients_.begin(); it != clients_.end(); it++) {
305 it->first->OnBufferReady(this, buffer); 305 it->first->OnBufferReady(this, buffer);
306 } 306 }
307 307
308 Send(new VideoCaptureHostMsg_BufferReady(0, device_id_, buffer_id)); 308 Send(new VideoCaptureHostMsg_BufferReady(device_id_, buffer_id));
309 } 309 }
310 310
311 void VideoCaptureImpl::DoStateChanged(const media::VideoCapture::State& state) { 311 void VideoCaptureImpl::DoStateChanged(const media::VideoCapture::State& state) {
312 DCHECK(ml_proxy_->BelongsToCurrentThread()); 312 DCHECK(ml_proxy_->BelongsToCurrentThread());
313 313
314 switch (state) { 314 switch (state) {
315 case media::VideoCapture::kStarted: 315 case media::VideoCapture::kStarted:
316 for (ClientInfo::iterator it = clients_.begin(); 316 for (ClientInfo::iterator it = clients_.begin();
317 it != clients_.end(); it++) { 317 it != clients_.end(); it++) {
318 it->first->OnStarted(this); 318 it->first->OnStarted(this);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 367
368 void VideoCaptureImpl::StopDevice() { 368 void VideoCaptureImpl::StopDevice() {
369 if (!ml_proxy_->BelongsToCurrentThread()) { 369 if (!ml_proxy_->BelongsToCurrentThread()) {
370 ml_proxy_->PostTask(FROM_HERE, 370 ml_proxy_->PostTask(FROM_HERE,
371 NewRunnableMethod(this, &VideoCaptureImpl::StopDevice)); 371 NewRunnableMethod(this, &VideoCaptureImpl::StopDevice));
372 return; 372 return;
373 } 373 }
374 374
375 if (state_ == kStarted) { 375 if (state_ == kStarted) {
376 state_ = kStopping; 376 state_ = kStopping;
377 Send(new VideoCaptureHostMsg_Stop(0, device_id_)); 377 Send(new VideoCaptureHostMsg_Stop(device_id_));
378 width_ = height_ = 0; 378 width_ = height_ = 0;
379 STLDeleteContainerPairSecondPointers(cached_dibs_.begin(), 379 STLDeleteContainerPairSecondPointers(cached_dibs_.begin(),
380 cached_dibs_.end()); 380 cached_dibs_.end());
381 cached_dibs_.clear(); 381 cached_dibs_.clear();
382 } 382 }
383 } 383 }
384 384
385 void VideoCaptureImpl::RestartCapture() { 385 void VideoCaptureImpl::RestartCapture() {
386 DCHECK(ml_proxy_->BelongsToCurrentThread()); 386 DCHECK(ml_proxy_->BelongsToCurrentThread());
387 DCHECK_EQ(state_, kStopped); 387 DCHECK_EQ(state_, kStopped);
(...skipping 10 matching lines...) Expand all
398 void VideoCaptureImpl::StartCaptureInternal() { 398 void VideoCaptureImpl::StartCaptureInternal() {
399 DCHECK(ml_proxy_->BelongsToCurrentThread()); 399 DCHECK(ml_proxy_->BelongsToCurrentThread());
400 DCHECK(device_id_); 400 DCHECK(device_id_);
401 401
402 media::VideoCaptureParams params; 402 media::VideoCaptureParams params;
403 params.width = width_; 403 params.width = width_;
404 params.height = height_; 404 params.height = height_;
405 params.frame_per_second = frame_rate_; 405 params.frame_per_second = frame_rate_;
406 params.session_id = session_id_; 406 params.session_id = session_id_;
407 407
408 Send(new VideoCaptureHostMsg_Start(0, device_id_, params)); 408 Send(new VideoCaptureHostMsg_Start(device_id_, params));
409 state_ = kStarted; 409 state_ = kStarted;
410 for (ClientInfo::iterator it = clients_.begin(); it != clients_.end(); it++) { 410 for (ClientInfo::iterator it = clients_.begin(); it != clients_.end(); it++) {
411 it->first->OnStarted(this); 411 it->first->OnStarted(this);
412 } 412 }
413 } 413 }
414 414
415 void VideoCaptureImpl::AddDelegateOnIOThread() { 415 void VideoCaptureImpl::AddDelegateOnIOThread() {
416 message_filter_->AddDelegate(this); 416 message_filter_->AddDelegate(this);
417 } 417 }
418 418
419 void VideoCaptureImpl::RemoveDelegateOnIOThread(Task* task) { 419 void VideoCaptureImpl::RemoveDelegateOnIOThread(Task* task) {
420 base::ScopedTaskRunner task_runner(task); 420 base::ScopedTaskRunner task_runner(task);
421 message_filter_->RemoveDelegate(this); 421 message_filter_->RemoveDelegate(this);
422 } 422 }
423 423
424 void VideoCaptureImpl::Send(IPC::Message* message) { 424 void VideoCaptureImpl::Send(IPC::Message* message) {
425 base::MessageLoopProxy* io_message_loop_proxy = 425 base::MessageLoopProxy* io_message_loop_proxy =
426 ChildProcess::current()->io_message_loop_proxy(); 426 ChildProcess::current()->io_message_loop_proxy();
427 427
428 io_message_loop_proxy->PostTask(FROM_HERE, 428 io_message_loop_proxy->PostTask(FROM_HERE,
429 NewRunnableMethod(message_filter_.get(), 429 NewRunnableMethod(message_filter_.get(),
430 &VideoCaptureMessageFilter::Send, message)); 430 &VideoCaptureMessageFilter::Send, message));
431 } 431 }
OLDNEW
« no previous file with comments | « content/common/media/video_capture_messages.h ('k') | content/renderer/media/video_capture_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698