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_PRODUCER_H_
6#define REMOTING_CLIENT_FRAME_PRODUCER_H_
7
8#include "base/callback_forward.h"
9
10namespace webrtc {
11class DesktopFrame;
12class DesktopRect;
13class DesktopRegion;
14class DesktopSize;
15}  // namespace webrtc
16
17namespace remoting {
18
19class FrameProducer {
20 public:
21  FrameProducer() {}
22
23  // Adds an image buffer to the pool of pending buffers for subsequent drawing.
24  // Once drawing is completed the buffer will be returned to the consumer via
25  // the FrameConsumer::ApplyBuffer() call. Alternatively an empty buffer could
26  // be returned via the FrameConsumer::ReturnBuffer() call.
27  //
28  // The passed buffer must be large enough to hold the whole clipping area.
29  virtual void DrawBuffer(webrtc::DesktopFrame* buffer) = 0;
30
31  // Requests repainting of the specified |region| of the frame as soon as
32  // possible. |region| is specified in output coordinates relative to
33  // the beginning of the frame.
34  virtual void InvalidateRegion(const webrtc::DesktopRegion& region) = 0;
35
36  // Requests returing of all pending buffers to the consumer via
37  // FrameConsumer::ReturnBuffer() calls.
38  virtual void RequestReturnBuffers(const base::Closure& done) = 0;
39
40  // Notifies the producer of changes to the output view size or clipping area.
41  // Implementations must cope with empty |view_size| or |clip_area|.
42  virtual void SetOutputSizeAndClip(const webrtc::DesktopSize& view_size,
43                                    const webrtc::DesktopRect& clip_area) = 0;
44
45 protected:
46  virtual ~FrameProducer() {}
47
48 private:
49  DISALLOW_COPY_AND_ASSIGN(FrameProducer);
50};
51
52}  // namespace remoting
53
54#endif  // REMOTING_CLIENT_FRAME_PRODUCER_H_
55