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

Unified Diff: media/video/capture/video_capture_proxy.cc

Issue 7537037: Add a proxy for thread-hopping VideoCapture::EventHandler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments Created 9 years, 5 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 | « media/video/capture/video_capture_proxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/video/capture/video_capture_proxy.cc
diff --git a/media/video/capture/video_capture_proxy.cc b/media/video/capture/video_capture_proxy.cc
new file mode 100644
index 0000000000000000000000000000000000000000..efd2bef738eee7460bdc010b0fbb7691edae969f
--- /dev/null
+++ b/media/video/capture/video_capture_proxy.cc
@@ -0,0 +1,137 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/video/capture/video_capture_proxy.h"
+
+#include "base/message_loop_proxy.h"
+
+namespace {
+
+// Called on VC thread: extracts the state out of the VideoCapture, and
+// serialize it into a VideoCaptureState.
+media::VideoCaptureHandlerProxy::VideoCaptureState GetState(
+ media::VideoCapture* capture) {
+ media::VideoCaptureHandlerProxy::VideoCaptureState state;
+ state.started = capture->CaptureStarted();
+ state.width = capture->CaptureWidth();
+ state.height = capture->CaptureHeight();
+ state.frame_rate = capture->CaptureFrameRate();
+ return state;
+}
+
+} // anonymous namespace
+
+namespace media {
+
+VideoCaptureHandlerProxy::VideoCaptureHandlerProxy(
+ VideoCapture::EventHandler* proxied,
+ scoped_refptr<base::MessageLoopProxy> main_message_loop)
+ : proxied_(proxied),
+ main_message_loop_(main_message_loop) {
+}
+
+VideoCaptureHandlerProxy::~VideoCaptureHandlerProxy() {
+}
+
+void VideoCaptureHandlerProxy::OnStarted(VideoCapture* capture) {
+ main_message_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this,
+ &VideoCaptureHandlerProxy::OnStartedOnMainThread,
+ capture,
+ GetState(capture)));
+}
+
+void VideoCaptureHandlerProxy::OnStopped(VideoCapture* capture) {
+ main_message_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this,
+ &VideoCaptureHandlerProxy::OnStoppedOnMainThread,
+ capture,
+ GetState(capture)));
+}
+
+void VideoCaptureHandlerProxy::OnPaused(VideoCapture* capture) {
+ main_message_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this,
+ &VideoCaptureHandlerProxy::OnPausedOnMainThread,
+ capture,
+ GetState(capture)));
+}
+
+void VideoCaptureHandlerProxy::OnError(VideoCapture* capture, int error_code) {
+ main_message_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this,
+ &VideoCaptureHandlerProxy::OnErrorOnMainThread,
+ capture,
+ GetState(capture),
+ error_code));
+}
+
+void VideoCaptureHandlerProxy::OnBufferReady(
+ VideoCapture* capture,
+ scoped_refptr<VideoCapture::VideoFrameBuffer> buffer) {
+ main_message_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this,
+ &VideoCaptureHandlerProxy::OnBufferReadyOnMainThread,
+ capture,
+ GetState(capture),
+ buffer));
+}
+
+void VideoCaptureHandlerProxy::OnDeviceInfoReceived(
+ VideoCapture* capture,
+ const VideoCaptureParams& device_info) {
+ main_message_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this,
+ &VideoCaptureHandlerProxy::OnDeviceInfoReceivedOnMainThread,
+ capture,
+ GetState(capture),
+ device_info));
+}
+
+void VideoCaptureHandlerProxy::OnStartedOnMainThread(
+ VideoCapture* capture,
+ const VideoCaptureState& state) {
+ state_ = state;
+ proxied_->OnStarted(capture);
+}
+
+void VideoCaptureHandlerProxy::OnStoppedOnMainThread(
+ VideoCapture* capture,
+ const VideoCaptureState& state) {
+ state_ = state;
+ proxied_->OnStopped(capture);
+}
+
+void VideoCaptureHandlerProxy::OnPausedOnMainThread(
+ VideoCapture* capture,
+ const VideoCaptureState& state) {
+ state_ = state;
+ proxied_->OnPaused(capture);
+}
+
+void VideoCaptureHandlerProxy::OnErrorOnMainThread(
+ VideoCapture* capture,
+ const VideoCaptureState& state,
+ int error_code) {
+ state_ = state;
+ proxied_->OnError(capture, error_code);
+}
+
+void VideoCaptureHandlerProxy::OnBufferReadyOnMainThread(
+ VideoCapture* capture,
+ const VideoCaptureState& state,
+ scoped_refptr<VideoCapture::VideoFrameBuffer> buffer) {
+ state_ = state;
+ proxied_->OnBufferReady(capture, buffer);
+}
+
+void VideoCaptureHandlerProxy::OnDeviceInfoReceivedOnMainThread(
+ VideoCapture* capture,
+ const VideoCaptureState& state,
+ const VideoCaptureParams& device_info) {
+ state_ = state;
+ proxied_->OnDeviceInfoReceived(capture, device_info);
+}
+
+} // namespace media
« no previous file with comments | « media/video/capture/video_capture_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698