blob: dc72b29b4009f4e9563902675638f6db166edaac [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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020022#include "rtc_base/constructormagic.h"
23#include "rtc_base/thread_checker.h"
Mirko Bonadei71207422017-09-15 13:58:09 +020024#include "typedefs.h" // NOLINT(build/include)
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000025
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 15:13:26 -080032// specific for the target platform and then call
33// DesktopCapturer::SetSharedMemoryFactory().
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000034class SharedMemory {
35 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
56 protected:
57 SharedMemory(void* data, size_t size, Handle handle, int id);
58
59 void* const data_;
60 const size_t size_;
61 const Handle handle_;
62 const int id_;
63
64 private:
henrikg3c089d72015-09-16 05:37:44 -070065 RTC_DISALLOW_COPY_AND_ASSIGN(SharedMemory);
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000066};
67
sergeyucc9669c2016-02-09 15:13:26 -080068// Interface used to create SharedMemory instances.
69class SharedMemoryFactory {
70 public:
71 SharedMemoryFactory() {}
72 virtual ~SharedMemoryFactory() {}
73
kwiberg84be5112016-04-27 01:19:58 -070074 virtual std::unique_ptr<SharedMemory> CreateSharedMemory(size_t size) = 0;
sergeyucc9669c2016-02-09 15:13:26 -080075
76 private:
77 RTC_DISALLOW_COPY_AND_ASSIGN(SharedMemoryFactory);
78};
79
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000080} // namespace webrtc
81
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020082#endif // MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_
sergeyu@chromium.org15e32cc2013-04-29 20:10:57 +000083