blob: 6e15f23f6b8a4a0429f2d4aa2c09228f447d03bc [file] [log] [blame]
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +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_MEMORY_H_
12#define WEBRTC_MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_
13
14#include <stddef.h>
15
16#if defined(WEBRTC_WIN)
17#include <windows.h>
18#endif
19
kwiberg84be5112016-04-27 01:19:58 -070020#include <memory>
21
henrike@webrtc.org88fbb2d2014-05-21 21:18:46 +000022#include "webrtc/base/constructormagic.h"
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000023#include "webrtc/typedefs.h"
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000024
25namespace webrtc {
26
27// SharedMemory is a base class for shared memory. It stores all required
28// parameters of the buffer, but doesn't have any logic to allocate or destroy
29// the actual buffer. DesktopCapturer consumers that need to use shared memory
30// for video frames must extend this class with creation and destruction logic
sergeyucc9669c2016-02-09 15:13:26 -080031// specific for the target platform and then call
32// DesktopCapturer::SetSharedMemoryFactory().
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000033class SharedMemory {
34 public:
35#if defined(WEBRTC_WIN)
36 typedef HANDLE Handle;
37 static const Handle kInvalidHandle;
38#else
39 typedef int Handle;
40 static const Handle kInvalidHandle;
41#endif
42
43 void* data() const { return data_; }
44 size_t size() const { return size_; }
45
46 // Platform-specific handle of the buffer.
47 Handle handle() const { return handle_; }
48
49 // Integer identifier that can be used used by consumers of DesktopCapturer
50 // interface to identify shared memory buffers it created.
51 int id() const { return id_; }
52
53 virtual ~SharedMemory() {}
54
55 protected:
56 SharedMemory(void* data, size_t size, Handle handle, int id);
57
58 void* const data_;
59 const size_t size_;
60 const Handle handle_;
61 const int id_;
62
63 private:
henrikg3c089d72015-09-16 05:37:44 -070064 RTC_DISALLOW_COPY_AND_ASSIGN(SharedMemory);
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000065};
66
sergeyucc9669c2016-02-09 15:13:26 -080067// Interface used to create SharedMemory instances.
68class SharedMemoryFactory {
69 public:
70 SharedMemoryFactory() {}
71 virtual ~SharedMemoryFactory() {}
72
kwiberg84be5112016-04-27 01:19:58 -070073 virtual std::unique_ptr<SharedMemory> CreateSharedMemory(size_t size) = 0;
sergeyucc9669c2016-02-09 15:13:26 -080074
75 private:
76 RTC_DISALLOW_COPY_AND_ASSIGN(SharedMemoryFactory);
77};
78
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000079} // namespace webrtc
80
81#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_
82