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

Unified Diff: content/renderer/media/video_capture_impl.cc

Issue 120893002: Eliminate video capture thread in renderer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: upload again Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/video_capture_impl.h ('k') | content/renderer/media/video_capture_impl_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/video_capture_impl.cc
diff --git a/content/renderer/media/video_capture_impl.cc b/content/renderer/media/video_capture_impl.cc
index da30a52b43d292f041ac867694e693cb78a3ccc2..b7d195d499b3fa3cdbcebc34916febde73603233 100644
--- a/content/renderer/media/video_capture_impl.cc
+++ b/content/renderer/media/video_capture_impl.cc
@@ -42,11 +42,9 @@ int VideoCaptureImpl::CaptureFrameRate() {
VideoCaptureImpl::VideoCaptureImpl(
const media::VideoCaptureSessionId session_id,
- base::MessageLoopProxy* capture_message_loop_proxy,
VideoCaptureMessageFilter* filter)
: VideoCapture(),
message_filter_(filter),
- capture_message_loop_proxy_(capture_message_loop_proxy),
io_message_loop_proxy_(ChildProcess::current()->io_message_loop_proxy()),
device_id_(0),
session_id_(session_id),
@@ -59,90 +57,62 @@ VideoCaptureImpl::VideoCaptureImpl(
VideoCaptureImpl::~VideoCaptureImpl() {}
void VideoCaptureImpl::Init() {
- if (!io_message_loop_proxy_->BelongsToCurrentThread()) {
- io_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::AddDelegateOnIOThread,
- base::Unretained(this)));
- } else {
- AddDelegateOnIOThread();
- }
+ io_message_loop_proxy_->PostTask(FROM_HERE,
+ base::Bind(&VideoCaptureImpl::InitOnIOThread,
+ base::Unretained(this)));
}
-void VideoCaptureImpl::DeInit(base::Closure task) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoDeInitOnCaptureThread,
- base::Unretained(this), task));
+void VideoCaptureImpl::DeInit(base::Closure done_cb) {
+ io_message_loop_proxy_->PostTask(FROM_HERE,
+ base::Bind(&VideoCaptureImpl::DeInitOnIOThread,
+ base::Unretained(this),
+ done_cb));
+}
+
+void VideoCaptureImpl::SuspendCapture(bool suspend) {
+ io_message_loop_proxy_->PostTask(FROM_HERE,
+ base::Bind(&VideoCaptureImpl::SuspendCaptureOnIOThread,
+ base::Unretained(this),
+ suspend));
}
void VideoCaptureImpl::StartCapture(
media::VideoCapture::EventHandler* handler,
const media::VideoCaptureParams& params) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoStartCaptureOnCaptureThread,
+ io_message_loop_proxy_->PostTask(FROM_HERE,
+ base::Bind(&VideoCaptureImpl::StartCaptureOnIOThread,
base::Unretained(this), handler, params));
}
-void VideoCaptureImpl::StopCapture(media::VideoCapture::EventHandler* handler) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoStopCaptureOnCaptureThread,
+void VideoCaptureImpl::StopCapture(
+ media::VideoCapture::EventHandler* handler) {
+ io_message_loop_proxy_->PostTask(FROM_HERE,
+ base::Bind(&VideoCaptureImpl::StopCaptureOnIOThread,
base::Unretained(this), handler));
}
-void VideoCaptureImpl::OnBufferCreated(
- base::SharedMemoryHandle handle,
- int length, int buffer_id) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoBufferCreatedOnCaptureThread,
- base::Unretained(this), handle, length, buffer_id));
-}
-
-void VideoCaptureImpl::OnBufferDestroyed(int buffer_id) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoBufferDestroyedOnCaptureThread,
- base::Unretained(this), buffer_id));
-}
-
-void VideoCaptureImpl::OnBufferReceived(
- int buffer_id,
- base::TimeTicks timestamp,
- const media::VideoCaptureFormat& format) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoBufferReceivedOnCaptureThread,
- base::Unretained(this), buffer_id, timestamp, format));
-}
-
-void VideoCaptureImpl::OnStateChanged(VideoCaptureState state) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoStateChangedOnCaptureThread,
- base::Unretained(this), state));
-}
-
-void VideoCaptureImpl::OnDelegateAdded(int32 device_id) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoDelegateAddedOnCaptureThread,
- base::Unretained(this), device_id));
-}
-
-void VideoCaptureImpl::SuspendCapture(bool suspend) {
- capture_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::DoSuspendCaptureOnCaptureThread,
- base::Unretained(this), suspend));
+void VideoCaptureImpl::InitOnIOThread() {
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
+ message_filter_->AddDelegate(this);
}
-void VideoCaptureImpl::DoDeInitOnCaptureThread(base::Closure task) {
+void VideoCaptureImpl::DeInitOnIOThread(base::Closure done_cb) {
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
if (state_ == VIDEO_CAPTURE_STATE_STARTED)
Send(new VideoCaptureHostMsg_Stop(device_id_));
+ message_filter_->RemoveDelegate(this);
+ done_cb.Run();
+}
- io_message_loop_proxy_->PostTask(FROM_HERE,
- base::Bind(&VideoCaptureImpl::RemoveDelegateOnIOThread,
- base::Unretained(this), task));
+void VideoCaptureImpl::SuspendCaptureOnIOThread(bool suspend) {
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
+ suspended_ = suspend;
}
-void VideoCaptureImpl::DoStartCaptureOnCaptureThread(
+void VideoCaptureImpl::StartCaptureOnIOThread(
media::VideoCapture::EventHandler* handler,
const media::VideoCaptureParams& params) {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
-
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
if (state_ == VIDEO_CAPTURE_STATE_ERROR) {
handler->OnError(this, 1);
handler->OnRemoved(this);
@@ -183,9 +153,9 @@ void VideoCaptureImpl::DoStartCaptureOnCaptureThread(
}
}
-void VideoCaptureImpl::DoStopCaptureOnCaptureThread(
+void VideoCaptureImpl::StopCaptureOnIOThread(
media::VideoCapture::EventHandler* handler) {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
// A handler can be in only one client list.
// If this handler is in any client list, we can just remove it from
@@ -202,10 +172,10 @@ void VideoCaptureImpl::DoStopCaptureOnCaptureThread(
}
}
-void VideoCaptureImpl::DoBufferCreatedOnCaptureThread(
+void VideoCaptureImpl::OnBufferCreated(
base::SharedMemoryHandle handle,
int length, int buffer_id) {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
// In case client calls StopCapture before the arrival of created buffer,
// just close this buffer and return.
@@ -216,7 +186,7 @@ void VideoCaptureImpl::DoBufferCreatedOnCaptureThread(
scoped_ptr<base::SharedMemory> shm(new base::SharedMemory(handle, false));
if (!shm->Map(length)) {
- DLOG(ERROR) << "DoBufferCreatedOnCaptureThread: Map() failed.";
+ DLOG(ERROR) << "OnBufferCreated: Map failed.";
return;
}
@@ -228,8 +198,8 @@ void VideoCaptureImpl::DoBufferCreatedOnCaptureThread(
DCHECK(inserted);
}
-void VideoCaptureImpl::DoBufferDestroyedOnCaptureThread(int buffer_id) {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+void VideoCaptureImpl::OnBufferDestroyed(int buffer_id) {
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
ClientBufferMap::iterator iter = client_buffers_.find(buffer_id);
if (iter == client_buffers_.end())
@@ -240,11 +210,11 @@ void VideoCaptureImpl::DoBufferDestroyedOnCaptureThread(int buffer_id) {
client_buffers_.erase(iter);
}
-void VideoCaptureImpl::DoBufferReceivedOnCaptureThread(
+void VideoCaptureImpl::OnBufferReceived(
int buffer_id,
base::TimeTicks timestamp,
const media::VideoCaptureFormat& format) {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
if (state_ != VIDEO_CAPTURE_STATE_STARTED || suspended_) {
Send(new VideoCaptureHostMsg_BufferReady(device_id_, buffer_id));
@@ -268,25 +238,26 @@ void VideoCaptureImpl::DoBufferReceivedOnCaptureThread(
buffer->buffer_size,
buffer->buffer->handle(),
timestamp - first_frame_timestamp_,
- media::BindToCurrentLoop(base::Bind(
- &VideoCaptureImpl::DoClientBufferFinishedOnCaptureThread,
- weak_this_factory_.GetWeakPtr(),
- buffer_id,
- buffer)));
+ media::BindToCurrentLoop(
+ base::Bind(
+ &VideoCaptureImpl::OnClientBufferFinished,
+ weak_this_factory_.GetWeakPtr(),
+ buffer_id,
+ buffer)));
for (ClientInfo::iterator it = clients_.begin(); it != clients_.end(); ++it)
it->first->OnFrameReady(this, frame);
}
-void VideoCaptureImpl::DoClientBufferFinishedOnCaptureThread(
+void VideoCaptureImpl::OnClientBufferFinished(
int buffer_id,
const scoped_refptr<ClientBuffer>& buffer) {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
Send(new VideoCaptureHostMsg_BufferReady(device_id_, buffer_id));
}
-void VideoCaptureImpl::DoStateChangedOnCaptureThread(VideoCaptureState state) {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+void VideoCaptureImpl::OnStateChanged(VideoCaptureState state) {
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
switch (state) {
case VIDEO_CAPTURE_STATE_STARTED:
@@ -330,9 +301,9 @@ void VideoCaptureImpl::DoStateChangedOnCaptureThread(VideoCaptureState state) {
}
}
-void VideoCaptureImpl::DoDelegateAddedOnCaptureThread(int32 device_id) {
- DVLOG(1) << "DoDelegateAdded: device_id " << device_id;
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+void VideoCaptureImpl::OnDelegateAdded(int32 device_id) {
+ DVLOG(1) << "OnDelegateAdded: device_id " << device_id;
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
device_id_ = device_id;
for (ClientInfo::iterator it = clients_pending_on_filter_.begin();
@@ -344,15 +315,8 @@ void VideoCaptureImpl::DoDelegateAddedOnCaptureThread(int32 device_id) {
}
}
-void VideoCaptureImpl::DoSuspendCaptureOnCaptureThread(bool suspend) {
- DVLOG(1) << "DoSuspendCapture: suspend " << (suspend ? "yes" : "no");
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
-
- suspended_ = suspend;
-}
-
void VideoCaptureImpl::StopDevice() {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
if (state_ == VIDEO_CAPTURE_STATE_STARTED) {
state_ = VIDEO_CAPTURE_STATE_STOPPING;
@@ -362,7 +326,7 @@ void VideoCaptureImpl::StopDevice() {
}
void VideoCaptureImpl::RestartCapture() {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
DCHECK_EQ(state_, VIDEO_CAPTURE_STATE_STOPPED);
int width = 0;
@@ -386,24 +350,13 @@ void VideoCaptureImpl::RestartCapture() {
}
void VideoCaptureImpl::StartCaptureInternal() {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
DCHECK(device_id_);
Send(new VideoCaptureHostMsg_Start(device_id_, session_id_, params_));
state_ = VIDEO_CAPTURE_STATE_STARTED;
}
-void VideoCaptureImpl::AddDelegateOnIOThread() {
- DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
- message_filter_->AddDelegate(this);
-}
-
-void VideoCaptureImpl::RemoveDelegateOnIOThread(base::Closure task) {
- DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
- message_filter_->RemoveDelegate(this);
- capture_message_loop_proxy_->PostTask(FROM_HERE, task);
-}
-
void VideoCaptureImpl::Send(IPC::Message* message) {
io_message_loop_proxy_->PostTask(FROM_HERE,
base::Bind(base::IgnoreResult(&VideoCaptureMessageFilter::Send),
@@ -413,7 +366,7 @@ void VideoCaptureImpl::Send(IPC::Message* message) {
bool VideoCaptureImpl::RemoveClient(
media::VideoCapture::EventHandler* handler,
ClientInfo* clients) {
- DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
bool found = false;
ClientInfo::iterator it = clients->find(handler);
« no previous file with comments | « content/renderer/media/video_capture_impl.h ('k') | content/renderer/media/video_capture_impl_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698