Home | History | Annotate | Download | only in client
      1 // Copyright (c) 2012 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 "remoting/client/frame_consumer_proxy.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/location.h"
      9 #include "base/single_thread_task_runner.h"
     10 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
     11 
     12 namespace remoting {
     13 
     14 FrameConsumerProxy::FrameConsumerProxy(
     15     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
     16     : task_runner_(task_runner) {
     17 }
     18 
     19 void FrameConsumerProxy::ApplyBuffer(const SkISize& view_size,
     20                                      const SkIRect& clip_area,
     21                                      webrtc::DesktopFrame* buffer,
     22                                      const SkRegion& region) {
     23   if (!task_runner_->BelongsToCurrentThread()) {
     24     task_runner_->PostTask(FROM_HERE, base::Bind(
     25         &FrameConsumerProxy::ApplyBuffer, this,
     26         view_size, clip_area, buffer, region));
     27     return;
     28   }
     29 
     30   if (frame_consumer_.get())
     31     frame_consumer_->ApplyBuffer(view_size, clip_area, buffer, region);
     32 }
     33 
     34 void FrameConsumerProxy::ReturnBuffer(webrtc::DesktopFrame* buffer) {
     35   if (!task_runner_->BelongsToCurrentThread()) {
     36     task_runner_->PostTask(FROM_HERE, base::Bind(
     37         &FrameConsumerProxy::ReturnBuffer, this, buffer));
     38     return;
     39   }
     40 
     41   if (frame_consumer_.get())
     42     frame_consumer_->ReturnBuffer(buffer);
     43 }
     44 
     45 void FrameConsumerProxy::SetSourceSize(const SkISize& source_size,
     46                                        const SkIPoint& source_dpi) {
     47   if (!task_runner_->BelongsToCurrentThread()) {
     48     task_runner_->PostTask(FROM_HERE, base::Bind(
     49         &FrameConsumerProxy::SetSourceSize, this, source_size, source_dpi));
     50     return;
     51   }
     52 
     53   if (frame_consumer_.get())
     54     frame_consumer_->SetSourceSize(source_size, source_dpi);
     55 }
     56 
     57 void FrameConsumerProxy::Attach(
     58     const base::WeakPtr<FrameConsumer>& frame_consumer) {
     59   DCHECK(task_runner_->BelongsToCurrentThread());
     60   DCHECK(frame_consumer_.get() == NULL);
     61   frame_consumer_ = frame_consumer;
     62 }
     63 
     64 FrameConsumerProxy::~FrameConsumerProxy() {
     65 }
     66 
     67 }  // namespace remoting
     68