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 |