blob: a7add4447bcd1638db4fcf1dac97fad8690b052e [file] [log] [blame]
sergeyu@chromium.org15e32cc2013-04-29 20:10:571/*
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 04:47:3111#ifndef MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_
12#define MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_
sergeyu@chromium.org15e32cc2013-04-29 20:10:5713
14#include <stddef.h>
15
16#if defined(WEBRTC_WIN)
Bruce Dawson126d0b92021-08-29 17:04:0217// Forward declare HANDLE in a windows.h compatible way so that we can avoid
18// including windows.h.
19typedef void* HANDLE;
sergeyu@chromium.org15e32cc2013-04-29 20:10:5720#endif
21
kwiberg84be5112016-04-27 08:19:5822#include <memory>
23
Mirko Bonadei35214fc2019-09-23 12:54:2824#include "rtc_base/system/rtc_export.h"
sergeyu@chromium.org15e32cc2013-04-29 20:10:5725
26namespace webrtc {
27
28// SharedMemory is a base class for shared memory. It stores all required
29// parameters of the buffer, but doesn't have any logic to allocate or destroy
30// the actual buffer. DesktopCapturer consumers that need to use shared memory
31// for video frames must extend this class with creation and destruction logic
sergeyucc9669c2016-02-09 23:13:2632// specific for the target platform and then call
33// DesktopCapturer::SetSharedMemoryFactory().
Mirko Bonadei35214fc2019-09-23 12:54:2834class RTC_EXPORT SharedMemory {
sergeyu@chromium.org15e32cc2013-04-29 20:10:5735 public:
36#if defined(WEBRTC_WIN)
37 typedef HANDLE Handle;
38 static const Handle kInvalidHandle;
39#else
40 typedef int Handle;
41 static const Handle kInvalidHandle;
42#endif
43
44 void* data() const { return data_; }
45 size_t size() const { return size_; }
46
47 // Platform-specific handle of the buffer.
48 Handle handle() const { return handle_; }
49
50 // Integer identifier that can be used used by consumers of DesktopCapturer
51 // interface to identify shared memory buffers it created.
52 int id() const { return id_; }
53
54 virtual ~SharedMemory() {}
55
Byoungchan Lee604fd2f2022-01-21 00:49:3956 SharedMemory(const SharedMemory&) = delete;
57 SharedMemory& operator=(const SharedMemory&) = delete;
58
sergeyu@chromium.org15e32cc2013-04-29 20:10:5759 protected:
60 SharedMemory(void* data, size_t size, Handle handle, int id);
61
62 void* const data_;
63 const size_t size_;
64 const Handle handle_;
65 const int id_;
sergeyu@chromium.org15e32cc2013-04-29 20:10:5766};
67
sergeyucc9669c2016-02-09 23:13:2668// Interface used to create SharedMemory instances.
69class SharedMemoryFactory {
70 public:
71 SharedMemoryFactory() {}
72 virtual ~SharedMemoryFactory() {}
73
Byoungchan Lee604fd2f2022-01-21 00:49:3974 SharedMemoryFactory(const SharedMemoryFactory&) = delete;
75 SharedMemoryFactory& operator=(const SharedMemoryFactory&) = delete;
sergeyucc9669c2016-02-09 23:13:2676
Byoungchan Lee604fd2f2022-01-21 00:49:3977 virtual std::unique_ptr<SharedMemory> CreateSharedMemory(size_t size) = 0;
sergeyucc9669c2016-02-09 23:13:2678};
79
sergeyu@chromium.org15e32cc2013-04-29 20:10:5780} // namespace webrtc
81
Mirko Bonadei92ea95e2017-09-15 04:47:3182#endif // MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_