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#ifndef REMOTING_CLIENT_FRAME_CONSUMER_H_
6#define REMOTING_CLIENT_FRAME_CONSUMER_H_
7
8#include "base/basictypes.h"
9
10namespace webrtc {
11class DesktopFrame;
12class DesktopRect;
13class DesktopRegion;
14class DesktopSize;
15class DesktopVector;
16}  // namespace webrtc
17
18namespace remoting {
19
20class FrameConsumer {
21 public:
22
23  // List of supported pixel formats needed by various platforms.
24  enum PixelFormat {
25    FORMAT_BGRA,  // Used by the Pepper plugin.
26    FORMAT_RGBA,  // Used for Android's Bitmap class.
27  };
28
29  // Accepts a buffer to be painted to the screen. The buffer's dimensions and
30  // relative position within the frame are specified by |clip_area|. Only
31  // pixels falling within |region| and the current clipping area are painted.
32  // The function assumes that the passed buffer was scaled to fit a window
33  // having |view_size| dimensions.
34  //
35  // N.B. Both |clip_area| and |region| are in output coordinates relative to
36  // the frame.
37  virtual void ApplyBuffer(const webrtc::DesktopSize& view_size,
38                           const webrtc::DesktopRect& clip_area,
39                           webrtc::DesktopFrame* buffer,
40                           const webrtc::DesktopRegion& region) = 0;
41
42  // Accepts a buffer that couldn't be used for drawing for any reason (shutdown
43  // is in progress, the view area has changed, etc.). The accepted buffer can
44  // be freed or reused for another drawing operation.
45  virtual void ReturnBuffer(webrtc::DesktopFrame* buffer) = 0;
46
47  // Set the dimension of the entire host screen.
48  virtual void SetSourceSize(const webrtc::DesktopSize& source_size,
49                             const webrtc::DesktopVector& dpi) = 0;
50
51  // Returns the preferred pixel encoding for the platform.
52  virtual PixelFormat GetPixelFormat() = 0;
53
54 protected:
55  FrameConsumer() {}
56  virtual ~FrameConsumer() {}
57
58 private:
59  DISALLOW_COPY_AND_ASSIGN(FrameConsumer);
60};
61
62}  // namespace remoting
63
64#endif  // REMOTING_CLIENT_FRAME_CONSUMER_H_
65