blob: 2e2d2f33881be5ff2abdd8f7f71cabb5e9017ba6 [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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_
12#define MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000013
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
Steve Anton10542f22019-01-11 09:11:00 -080022#include "rtc_base/constructor_magic.h"
Mirko Bonadei35214fc2019-09-23 14:54:28 +020023#include "rtc_base/system/rtc_export.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().
Mirko Bonadei35214fc2019-09-23 14:54:28 +020033class RTC_EXPORT SharedMemory {
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000034 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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020081#endif // MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_