// 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/bind.h" #include "base/location.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 main_message_loop) : proxied_(proxied), main_message_loop_(main_message_loop) { } VideoCaptureHandlerProxy::~VideoCaptureHandlerProxy() { } void VideoCaptureHandlerProxy::OnStarted(VideoCapture* capture) { main_message_loop_->PostTask(FROM_HERE, base::Bind( &VideoCaptureHandlerProxy::OnStartedOnMainThread, base::Unretained(this), capture, GetState(capture))); } void VideoCaptureHandlerProxy::OnStopped(VideoCapture* capture) { main_message_loop_->PostTask(FROM_HERE, base::Bind( &VideoCaptureHandlerProxy::OnStoppedOnMainThread, base::Unretained(this), capture, GetState(capture))); } void VideoCaptureHandlerProxy::OnPaused(VideoCapture* capture) { main_message_loop_->PostTask(FROM_HERE, base::Bind( &VideoCaptureHandlerProxy::OnPausedOnMainThread, base::Unretained(this), capture, GetState(capture))); } void VideoCaptureHandlerProxy::OnError(VideoCapture* capture, int error_code) { main_message_loop_->PostTask(FROM_HERE, base::Bind( &VideoCaptureHandlerProxy::OnErrorOnMainThread, base::Unretained(this), capture, GetState(capture), error_code)); } void VideoCaptureHandlerProxy::OnRemoved(VideoCapture* capture) { main_message_loop_->PostTask(FROM_HERE, base::Bind( &VideoCaptureHandlerProxy::OnRemovedOnMainThread, base::Unretained(this), capture, GetState(capture))); } void VideoCaptureHandlerProxy::OnBufferReady( VideoCapture* capture, scoped_refptr buffer) { main_message_loop_->PostTask(FROM_HERE, base::Bind( &VideoCaptureHandlerProxy::OnBufferReadyOnMainThread, base::Unretained(this), capture, GetState(capture), buffer)); } void VideoCaptureHandlerProxy::OnDeviceInfoReceived( VideoCapture* capture, const VideoCaptureParams& device_info) { main_message_loop_->PostTask(FROM_HERE, base::Bind( &VideoCaptureHandlerProxy::OnDeviceInfoReceivedOnMainThread, base::Unretained(this), 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::OnRemovedOnMainThread( VideoCapture* capture, const VideoCaptureState& state) { state_ = state; proxied_->OnRemoved(capture); } void VideoCaptureHandlerProxy::OnBufferReadyOnMainThread( VideoCapture* capture, const VideoCaptureState& state, scoped_refptr 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