Home | History | Annotate | Download | only in capture
      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
      3 // found in the LICENSE file.
      4 
      5 #include "media/video/capture/video_capture_proxy.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/location.h"
      9 #include "base/message_loop/message_loop_proxy.h"
     10 
     11 namespace {
     12 
     13 // Called on VC thread: extracts the state out of the VideoCapture, and
     14 // serialize it into a VideoCaptureState.
     15 media::VideoCaptureHandlerProxy::VideoCaptureState GetState(
     16     media::VideoCapture* capture) {
     17   media::VideoCaptureHandlerProxy::VideoCaptureState state;
     18   state.started = capture->CaptureStarted();
     19   state.width = capture->CaptureWidth();
     20   state.height = capture->CaptureHeight();
     21   state.frame_rate = capture->CaptureFrameRate();
     22   return state;
     23 }
     24 
     25 }  // anonymous namespace
     26 
     27 namespace media {
     28 
     29 VideoCaptureHandlerProxy::VideoCaptureHandlerProxy(
     30     VideoCapture::EventHandler* proxied,
     31     scoped_refptr<base::MessageLoopProxy> main_message_loop)
     32     : proxied_(proxied),
     33       main_message_loop_(main_message_loop) {
     34 }
     35 
     36 VideoCaptureHandlerProxy::~VideoCaptureHandlerProxy() {
     37 }
     38 
     39 void VideoCaptureHandlerProxy::OnStarted(VideoCapture* capture) {
     40   main_message_loop_->PostTask(FROM_HERE, base::Bind(
     41         &VideoCaptureHandlerProxy::OnStartedOnMainThread,
     42         base::Unretained(this),
     43         capture,
     44         GetState(capture)));
     45 }
     46 
     47 void VideoCaptureHandlerProxy::OnStopped(VideoCapture* capture) {
     48   main_message_loop_->PostTask(FROM_HERE, base::Bind(
     49         &VideoCaptureHandlerProxy::OnStoppedOnMainThread,
     50         base::Unretained(this),
     51         capture,
     52         GetState(capture)));
     53 }
     54 
     55 void VideoCaptureHandlerProxy::OnPaused(VideoCapture* capture) {
     56   main_message_loop_->PostTask(FROM_HERE, base::Bind(
     57       &VideoCaptureHandlerProxy::OnPausedOnMainThread,
     58       base::Unretained(this),
     59       capture,
     60       GetState(capture)));
     61 }
     62 
     63 void VideoCaptureHandlerProxy::OnError(VideoCapture* capture, int error_code) {
     64   main_message_loop_->PostTask(FROM_HERE, base::Bind(
     65       &VideoCaptureHandlerProxy::OnErrorOnMainThread,
     66       base::Unretained(this),
     67       capture,
     68       GetState(capture),
     69       error_code));
     70 }
     71 
     72 void VideoCaptureHandlerProxy::OnRemoved(VideoCapture* capture) {
     73   main_message_loop_->PostTask(FROM_HERE, base::Bind(
     74       &VideoCaptureHandlerProxy::OnRemovedOnMainThread,
     75       base::Unretained(this),
     76       capture,
     77       GetState(capture)));
     78 }
     79 
     80 void VideoCaptureHandlerProxy::OnBufferReady(
     81     VideoCapture* capture,
     82     scoped_refptr<VideoCapture::VideoFrameBuffer> buffer) {
     83   main_message_loop_->PostTask(FROM_HERE, base::Bind(
     84       &VideoCaptureHandlerProxy::OnBufferReadyOnMainThread,
     85       base::Unretained(this),
     86       capture,
     87       GetState(capture),
     88       buffer));
     89 }
     90 
     91 void VideoCaptureHandlerProxy::OnDeviceInfoReceived(
     92     VideoCapture* capture,
     93     const VideoCaptureParams& device_info) {
     94   main_message_loop_->PostTask(FROM_HERE, base::Bind(
     95       &VideoCaptureHandlerProxy::OnDeviceInfoReceivedOnMainThread,
     96       base::Unretained(this),
     97       capture,
     98       GetState(capture),
     99       device_info));
    100 }
    101 
    102 void VideoCaptureHandlerProxy::OnStartedOnMainThread(
    103     VideoCapture* capture,
    104     const VideoCaptureState& state) {
    105   state_ = state;
    106   proxied_->OnStarted(capture);
    107 }
    108 
    109 void VideoCaptureHandlerProxy::OnStoppedOnMainThread(
    110     VideoCapture* capture,
    111     const VideoCaptureState& state) {
    112   state_ = state;
    113   proxied_->OnStopped(capture);
    114 }
    115 
    116 void VideoCaptureHandlerProxy::OnPausedOnMainThread(
    117     VideoCapture* capture,
    118     const VideoCaptureState& state) {
    119   state_ = state;
    120   proxied_->OnPaused(capture);
    121 }
    122 
    123 void VideoCaptureHandlerProxy::OnErrorOnMainThread(
    124     VideoCapture* capture,
    125     const VideoCaptureState& state,
    126     int error_code) {
    127   state_ = state;
    128   proxied_->OnError(capture, error_code);
    129 }
    130 
    131 void VideoCaptureHandlerProxy::OnRemovedOnMainThread(
    132     VideoCapture* capture,
    133     const VideoCaptureState& state) {
    134   state_ = state;
    135   proxied_->OnRemoved(capture);
    136 }
    137 
    138 void VideoCaptureHandlerProxy::OnBufferReadyOnMainThread(
    139     VideoCapture* capture,
    140     const VideoCaptureState& state,
    141     scoped_refptr<VideoCapture::VideoFrameBuffer> buffer) {
    142   state_ = state;
    143   proxied_->OnBufferReady(capture, buffer);
    144 }
    145 
    146 void VideoCaptureHandlerProxy::OnDeviceInfoReceivedOnMainThread(
    147     VideoCapture* capture,
    148     const VideoCaptureState& state,
    149     const VideoCaptureParams& device_info) {
    150   state_ = state;
    151   proxied_->OnDeviceInfoReceived(capture, device_info);
    152 }
    153 
    154 }  // namespace media
    155