1 /* 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 MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_ 12 #define MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_ 13 14 #include <stddef.h> 15 16 #if defined(WEBRTC_WIN) 17 // Forward declare HANDLE in a windows.h compatible way so that we can avoid 18 // including windows.h. 19 typedef void* HANDLE; 20 #endif 21 22 #include <memory> 23 24 #include "rtc_base/system/rtc_export.h" 25 26 namespace 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 32 // specific for the target platform and then call 33 // DesktopCapturer::SetSharedMemoryFactory(). 34 class RTC_EXPORT 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 data()44 void* data() const { return data_; } size()45 size_t size() const { return size_; } 46 47 // Platform-specific handle of the buffer. handle()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. id()52 int id() const { return id_; } 53 ~SharedMemory()54 virtual ~SharedMemory() {} 55 56 SharedMemory(const SharedMemory&) = delete; 57 SharedMemory& operator=(const SharedMemory&) = delete; 58 59 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_; 66 }; 67 68 // Interface used to create SharedMemory instances. 69 class SharedMemoryFactory { 70 public: SharedMemoryFactory()71 SharedMemoryFactory() {} ~SharedMemoryFactory()72 virtual ~SharedMemoryFactory() {} 73 74 SharedMemoryFactory(const SharedMemoryFactory&) = delete; 75 SharedMemoryFactory& operator=(const SharedMemoryFactory&) = delete; 76 77 virtual std::unique_ptr<SharedMemory> CreateSharedMemory(size_t size) = 0; 78 }; 79 80 } // namespace webrtc 81 82 #endif // MODULES_DESKTOP_CAPTURE_SHARED_MEMORY_H_ 83