1// Copyright 2013 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#ifndef REMOTING_CLIENT_JNI_JNI_FRAME_CONSUMER_H_ 6#define REMOTING_CLIENT_JNI_JNI_FRAME_CONSUMER_H_ 7 8#include "remoting/client/frame_consumer.h" 9 10#include "base/compiler_specific.h" 11 12namespace webrtc { 13class DesktopFrame; 14} // namespace webrtc 15 16namespace remoting { 17class ChromotingJniRuntime; 18class FrameProducer; 19 20// FrameConsumer implementation that draws onto a JNI direct byte buffer. 21class JniFrameConsumer : public FrameConsumer { 22 public: 23 // The instance does not take ownership of |jni_runtime|. 24 explicit JniFrameConsumer(ChromotingJniRuntime* jni_runtime); 25 26 virtual ~JniFrameConsumer(); 27 28 // This must be called once before the producer's source size is set. 29 void set_frame_producer(FrameProducer* producer); 30 31 // FrameConsumer implementation. 32 virtual void ApplyBuffer(const SkISize& view_size, 33 const SkIRect& clip_area, 34 webrtc::DesktopFrame* buffer, 35 const SkRegion& region) OVERRIDE; 36 virtual void ReturnBuffer(webrtc::DesktopFrame* buffer) OVERRIDE; 37 virtual void SetSourceSize(const SkISize& source_size, 38 const SkIPoint& dpi) OVERRIDE; 39 40 private: 41 // Variables are to be used from the display thread. 42 43 // Used to obtain task runner references and make calls to Java methods. 44 ChromotingJniRuntime* jni_runtime_; 45 46 // Whether we're currently in the constructor, and should deallocate the 47 // buffer instead of passing it back to the producer. 48 bool in_dtor_; 49 50 FrameProducer* frame_producer_; 51 SkISize view_size_; 52 SkIRect clip_area_; 53 54 // If |provide_buffer_|, allocates a new buffer of |view_size_|, informs 55 // Java about it, and tells the producer to draw onto it. Otherwise, no-op. 56 void AllocateBuffer(); 57 58 DISALLOW_COPY_AND_ASSIGN(JniFrameConsumer); 59}; 60 61} // namespace remoting 62 63#endif 64