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

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

Issue 8528045: corresponding change in CaptureVideoDecoder and RTCVideoDecoder due to pull model used in medi... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: code review Created 9 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
« no previous file with comments | « content/renderer/media/video_capture_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/bind.h" 7 #include "base/bind.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "content/common/child_process.h" 9 #include "content/common/child_process.h"
10 #include "content/common/media/video_capture_messages.h" 10 #include "content/common/media/video_capture_messages.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 io_message_loop_proxy->PostTask(FROM_HERE, 72 io_message_loop_proxy->PostTask(FROM_HERE,
73 base::Bind(&VideoCaptureImpl::AddDelegateOnIOThread, 73 base::Bind(&VideoCaptureImpl::AddDelegateOnIOThread,
74 base::Unretained(this))); 74 base::Unretained(this)));
75 return; 75 return;
76 } 76 }
77 77
78 AddDelegateOnIOThread(); 78 AddDelegateOnIOThread();
79 } 79 }
80 80
81 void VideoCaptureImpl::DeInit(base::Closure task) { 81 void VideoCaptureImpl::DeInit(base::Closure task) {
82 ml_proxy_->PostTask(FROM_HERE,
83 base::Bind(&VideoCaptureImpl::DoDeInit,
84 base::Unretained(this), task));
85 }
86
87 void VideoCaptureImpl::DoDeInit(base::Closure task) {
82 if (state_ == kStarted) 88 if (state_ == kStarted)
83 Send(new VideoCaptureHostMsg_Stop(device_id_)); 89 Send(new VideoCaptureHostMsg_Stop(device_id_));
84 90
85 base::MessageLoopProxy* io_message_loop_proxy = 91 base::MessageLoopProxy* io_message_loop_proxy =
86 ChildProcess::current()->io_message_loop_proxy(); 92 ChildProcess::current()->io_message_loop_proxy();
87 93
88 if (!io_message_loop_proxy->BelongsToCurrentThread()) { 94 io_message_loop_proxy->PostTask(FROM_HERE,
89 io_message_loop_proxy->PostTask(FROM_HERE, 95 base::Bind(&VideoCaptureImpl::RemoveDelegateOnIOThread,
90 base::Bind(&VideoCaptureImpl::RemoveDelegateOnIOThread, 96 base::Unretained(this), task));
91 base::Unretained(this), task));
92 return;
93 }
94
95 RemoveDelegateOnIOThread(task);
96 } 97 }
97 98
98 void VideoCaptureImpl::StartCapture( 99 void VideoCaptureImpl::StartCapture(
99 media::VideoCapture::EventHandler* handler, 100 media::VideoCapture::EventHandler* handler,
100 const VideoCaptureCapability& capability) { 101 const VideoCaptureCapability& capability) {
101 DCHECK_EQ(capability.raw_type, media::VideoFrame::I420); 102 DCHECK_EQ(capability.raw_type, media::VideoFrame::I420);
102 103
103 ml_proxy_->PostTask(FROM_HERE, 104 ml_proxy_->PostTask(FROM_HERE,
104 base::Bind(&VideoCaptureImpl::DoStartCapture, 105 base::Bind(&VideoCaptureImpl::DoStartCapture,
105 base::Unretained(this), handler, capability)); 106 base::Unretained(this), handler, capability));
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 if (it != clients_pending_on_restart_.end()) { 231 if (it != clients_pending_on_restart_.end()) {
231 handler->OnStopped(this); 232 handler->OnStopped(this);
232 handler->OnRemoved(this); 233 handler->OnRemoved(this);
233 clients_pending_on_filter_.erase(it); 234 clients_pending_on_filter_.erase(it);
234 return; 235 return;
235 } 236 }
236 237
237 if (clients_.find(handler) == clients_.end()) 238 if (clients_.find(handler) == clients_.end())
238 return; 239 return;
239 240
240 handler->OnStopped(this);
241 handler->OnRemoved(this);
242 clients_.erase(handler); 241 clients_.erase(handler);
243 242
244 if (clients_.empty()) { 243 if (clients_.empty()) {
245 DVLOG(1) << "StopCapture: No more client, stopping ..."; 244 DVLOG(1) << "StopCapture: No more client, stopping ...";
246 StopDevice(); 245 StopDevice();
247 } 246 }
247 handler->OnStopped(this);
248 handler->OnRemoved(this);
248 } 249 }
249 250
250 void VideoCaptureImpl::DoFeedBuffer(scoped_refptr<VideoFrameBuffer> buffer) { 251 void VideoCaptureImpl::DoFeedBuffer(scoped_refptr<VideoFrameBuffer> buffer) {
251 DCHECK(ml_proxy_->BelongsToCurrentThread()); 252 DCHECK(ml_proxy_->BelongsToCurrentThread());
252 253
253 CachedDIB::iterator it; 254 CachedDIB::iterator it;
254 for (it = cached_dibs_.begin(); it != cached_dibs_.end(); it++) { 255 for (it = cached_dibs_.begin(); it != cached_dibs_.end(); it++) {
255 if (buffer == it->second->mapped_memory) 256 if (buffer == it->second->mapped_memory)
256 break; 257 break;
257 } 258 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 414
414 Send(new VideoCaptureHostMsg_Start(device_id_, current_params_)); 415 Send(new VideoCaptureHostMsg_Start(device_id_, current_params_));
415 state_ = kStarted; 416 state_ = kStarted;
416 } 417 }
417 418
418 void VideoCaptureImpl::AddDelegateOnIOThread() { 419 void VideoCaptureImpl::AddDelegateOnIOThread() {
419 message_filter_->AddDelegate(this); 420 message_filter_->AddDelegate(this);
420 } 421 }
421 422
422 void VideoCaptureImpl::RemoveDelegateOnIOThread(base::Closure task) { 423 void VideoCaptureImpl::RemoveDelegateOnIOThread(base::Closure task) {
423 base::ScopedClosureRunner task_runner(task);
424 message_filter_->RemoveDelegate(this); 424 message_filter_->RemoveDelegate(this);
425 ml_proxy_->PostTask(FROM_HERE, task);
425 } 426 }
426 427
427 void VideoCaptureImpl::Send(IPC::Message* message) { 428 void VideoCaptureImpl::Send(IPC::Message* message) {
428 base::MessageLoopProxy* io_message_loop_proxy = 429 base::MessageLoopProxy* io_message_loop_proxy =
429 ChildProcess::current()->io_message_loop_proxy(); 430 ChildProcess::current()->io_message_loop_proxy();
430 431
431 io_message_loop_proxy->PostTask(FROM_HERE, 432 io_message_loop_proxy->PostTask(FROM_HERE,
432 base::IgnoreReturn<bool>(base::Bind(&VideoCaptureMessageFilter::Send, 433 base::IgnoreReturn<bool>(base::Bind(&VideoCaptureMessageFilter::Send,
433 message_filter_.get(), message))); 434 message_filter_.get(), message)));
434 } 435 }
435 436
436 bool VideoCaptureImpl::ClientHasDIB() { 437 bool VideoCaptureImpl::ClientHasDIB() {
437 CachedDIB::iterator it; 438 CachedDIB::iterator it;
438 for (it = cached_dibs_.begin(); it != cached_dibs_.end(); it++) { 439 for (it = cached_dibs_.begin(); it != cached_dibs_.end(); it++) {
439 if (it->second->references > 0) 440 if (it->second->references > 0)
440 return true; 441 return true;
441 } 442 }
442 return false; 443 return false;
443 } 444 }
OLDNEW
« no previous file with comments | « content/renderer/media/video_capture_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698