blob: d77cb15b4dc530db632a624dc34adfc08e120f40 [file] [log] [blame]
sergeyu@chromium.org6c82a7e2013-06-04 18:51:23 +00001/*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_SHARED_DESKTOP_FRAME_H_
12#define WEBRTC_MODULES_DESKTOP_CAPTURE_SHARED_DESKTOP_FRAME_H_
13
14#include "webrtc/modules/desktop_capture/desktop_frame.h"
15#include "webrtc/system_wrappers/interface/scoped_refptr.h"
16
17namespace webrtc {
18
19// SharedDesktopFrame is a DesktopFrame that may have multiple instances all
20// sharing the same buffer.
21class SharedDesktopFrame : public DesktopFrame {
22 public:
23 virtual ~SharedDesktopFrame();
24
25 static SharedDesktopFrame* Wrap(DesktopFrame* desktop_frame);
26
27 // Returns the underlying instance of DesktopFrame.
28 DesktopFrame* GetUnderlyingFrame();
29
30 // Creates a clone of this object.
31 SharedDesktopFrame* Share();
32
33 // Checks if the frame is currently shared. If it returns false it's
34 // guaranteed that there are no clones of the object.
35 bool IsShared();
36
37 private:
38 class Core;
39
40 SharedDesktopFrame(scoped_refptr<Core> core);
41
42 scoped_refptr<Core> core_;
43
44 DISALLOW_COPY_AND_ASSIGN(SharedDesktopFrame);
45};
46
47} // namespace webrtc
48
49#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_SHARED_DESKTOP_FRAME_H_