blob: 12d373a0f3eac3a78b25f8cdf6feb9da2be88054 [file] [log] [blame]
sergeyu@chromium.org3d34f662013-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
Peter Boström26b08602015-06-04 15:18:17 +020014#include "webrtc/base/scoped_ref_ptr.h"
sergeyu@chromium.org3d34f662013-06-04 18:51:23 +000015#include "webrtc/modules/desktop_capture/desktop_frame.h"
sergeyu@chromium.org3d34f662013-06-04 18:51:23 +000016
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
Peter Boström26b08602015-06-04 15:18:17 +020040 SharedDesktopFrame(rtc::scoped_refptr<Core> core);
sergeyu@chromium.org3d34f662013-06-04 18:51:23 +000041
Peter Boström26b08602015-06-04 15:18:17 +020042 rtc::scoped_refptr<Core> core_;
sergeyu@chromium.org3d34f662013-06-04 18:51:23 +000043
44 DISALLOW_COPY_AND_ASSIGN(SharedDesktopFrame);
45};
46
47} // namespace webrtc
48
49#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_SHARED_DESKTOP_FRAME_H_