diff --git a/cmake/compile_definitions/common.cmake b/cmake/compile_definitions/common.cmake index f6354add..59828a3b 100644 --- a/cmake/compile_definitions/common.cmake +++ b/cmake/compile_definitions/common.cmake @@ -49,6 +49,7 @@ configure_file("${CMAKE_SOURCE_DIR}/src/version.h.in" version.h @ONLY) include_directories("${CMAKE_CURRENT_BINARY_DIR}") # required for importing version.h set(SUNSHINE_TARGET_FILES + "${CMAKE_SOURCE_DIR}/smemory.h" "${CMAKE_SOURCE_DIR}/src/interprocess.h" "${CMAKE_SOURCE_DIR}/src/interprocess.cpp" "${CMAKE_SOURCE_DIR}/src/cbs.cpp" diff --git a/cmake/targets/common.cmake b/cmake/targets/common.cmake index 4369c5e5..7cf39bb8 100644 --- a/cmake/targets/common.cmake +++ b/cmake/targets/common.cmake @@ -2,6 +2,7 @@ # this file will also load platform specific macros add_library(parent SHARED + "${CMAKE_SOURCE_DIR}/smemory.h" "${CMAKE_SOURCE_DIR}/lib/interprocess.h" "${CMAKE_SOURCE_DIR}/lib/interprocess.cpp" ) diff --git a/lib/interprocess.h b/lib/interprocess.h index 2b22776a..baa96880 100644 --- a/lib/interprocess.h +++ b/lib/interprocess.h @@ -11,63 +11,8 @@ #endif extern "C" { -#define QUEUE_SIZE 16 -#define PACKET_SIZE 32 * 1024 +#include -enum QueueType { - Video0, - Video1, - Audio, - Microphone, - Max -}; - -typedef struct { - int is_idr; - QueueType type; -}Metadata; - -typedef struct { - int size; - Metadata metadata; - char data[PACKET_SIZE]; -} Packet; - -typedef enum _EventType { - POINTER_VISIBLE, - CHANGE_BITRATE, - CHANGE_FRAMERATE, - IDR_FRAME, - - STOP, - HDR_CALLBACK, - EVENT_TYPE_MAX -} EventType; - -typedef enum _DataType { - HDR_INFO, -} DataType; - -typedef struct { - int value_number; - char value_raw[PACKET_SIZE]; - int data_size; - - DataType type; - - int read; -} Event; - - -typedef struct _Queue{ - Packet array[QUEUE_SIZE]; - int order[QUEUE_SIZE]; -}Queue; - -typedef struct { - Queue queues[QueueType::Max]; - Event events[EVENT_TYPE_MAX]; -}SharedMemory; EXPORT(SharedMemory*) allocate_shared_memory(char* rand) ; diff --git a/parent.go b/parent.go index 41803a46..c877eb7f 100644 --- a/parent.go +++ b/parent.go @@ -1,64 +1,7 @@ package main /* -#define QUEUE_SIZE 16 -#define PACKET_SIZE 32 * 1024 - -enum QueueType { - Video0, - Video1, - Audio, - Microphone, - Max -}; - -typedef struct { - int is_idr; - enum QueueType type; -}Metadata; - -typedef struct { - int size; - Metadata metadata; - char data[PACKET_SIZE]; -} Packet; - -typedef enum _EventType { - POINTER_VISIBLE, - CHANGE_BITRATE, - CHANGE_FRAMERATE, - IDR_FRAME, - - STOP, - HDR_CALLBACK, - EVENT_TYPE_MAX -} EventType; - -typedef enum _DataType { - HDR_INFO, -} DataType; - -typedef struct { - int value_number; - char value_raw[PACKET_SIZE]; - int data_size; - - DataType type; - - int read; -} Event; - - -typedef struct _Queue{ - Packet array[QUEUE_SIZE]; - int order[QUEUE_SIZE]; -}Queue; - -typedef struct { - Queue queues[Max]; - Event events[EVENT_TYPE_MAX]; -}SharedMemory; - +#include "smemory.h" */ import "C" import ( diff --git a/smemory.h b/smemory.h new file mode 100644 index 00000000..d22cec1d --- /dev/null +++ b/smemory.h @@ -0,0 +1,57 @@ +#define QUEUE_SIZE 16 +#define PACKET_SIZE 32 * 1024 + +enum QueueType { + Video0, + Video1, + Audio, + Microphone, + Max +}; + +typedef enum _EventType { + POINTER_VISIBLE, + CHANGE_BITRATE, + CHANGE_FRAMERATE, + IDR_FRAME, + + STOP, + HDR_CALLBACK, + EVENT_TYPE_MAX +} EventType; + +typedef struct { + int is_idr; + enum QueueType type; +}Metadata; + +typedef struct { + int size; + Metadata metadata; + char data[PACKET_SIZE]; +} Packet; + +typedef enum _DataType { + HDR_INFO, +} DataType; + +typedef struct { + int value_number; + char value_raw[PACKET_SIZE]; + int data_size; + + DataType type; + + int read; +} Event; + + +typedef struct _Queue{ + Packet array[QUEUE_SIZE]; + int order[QUEUE_SIZE]; +}Queue; + +typedef struct { + Queue queues[Max]; + Event events[EVENT_TYPE_MAX]; +}SharedMemory; \ No newline at end of file diff --git a/src/interprocess.cpp b/src/interprocess.cpp index be886236..bc6689b6 100644 --- a/src/interprocess.cpp +++ b/src/interprocess.cpp @@ -19,7 +19,7 @@ using namespace std::literals; -SharedMemory* obtain_shared_memory(char* rand) { +SharedMemoryInternal* obtain_shared_memory(char* rand) { std::vector strings; std::istringstream f(rand); @@ -40,7 +40,7 @@ SharedMemory* obtain_shared_memory(char* rand) { static managed_shared_memory segment(open_only, key.c_str()); //Get buffer local address from handle - SharedMemory* memory = (SharedMemory*)segment.get_address_from_handle(handle); + SharedMemoryInternal* memory = (SharedMemoryInternal*)segment.get_address_from_handle(handle); return memory; } @@ -85,7 +85,7 @@ int find_available_slot(int* orders) { void -push_packet(SharedMemory* memory, +push_packet(SharedMemoryInternal* memory, void* data, int size, Metadata metadata){ @@ -105,18 +105,18 @@ push_packet(SharedMemory* memory, void -raise_event(SharedMemory* memory, EventType type, Event event){ +raise_event(SharedMemoryInternal* memory, EventType type, Event event){ event.read = false; memcpy(&memory->events[type],&event,sizeof(Event)); } int -peek_event(SharedMemory* memory, EventType type){ +peek_event(SharedMemoryInternal* memory, EventType type){ return !memory->events[type].read; } Event -pop_event(SharedMemory* memory, EventType type){ +pop_event(SharedMemoryInternal* memory, EventType type){ memory->events[type].read = true; return memory->events[type]; } \ No newline at end of file diff --git a/src/interprocess.h b/src/interprocess.h index 54a8b30e..cef9e975 100644 --- a/src/interprocess.h +++ b/src/interprocess.h @@ -10,77 +10,25 @@ #include - -#define QUEUE_SIZE 16 -#define PACKET_SIZE 32 * 1024 - -enum QueueType { - Video0, - Video1, - Audio, - Microphone, - Max -}; - -typedef struct { - int is_idr; - QueueType type; -}Metadata; - -typedef struct { - int size; - Metadata metadata; - char data[PACKET_SIZE]; -} Packet; - -typedef enum _EventType { - POINTER_VISIBLE, - CHANGE_BITRATE, - CHANGE_FRAMERATE, - IDR_FRAME, - - STOP, - HDR_CALLBACK, - EVENT_TYPE_MAX -} EventType; - -typedef enum _DataType { - HDR_INFO, -} DataType; - -typedef struct { - int value_number; - char value_raw[PACKET_SIZE]; - int data_size; - - DataType type; - - int read; -} Event; - - -typedef struct _Queue{ - Packet array[QUEUE_SIZE]; - int order[QUEUE_SIZE]; -}Queue; +#include typedef struct { Queue queues[QueueType::Max]; Event events[EVENT_TYPE_MAX]; boost::interprocess::interprocess_mutex lock; -}SharedMemory; +}SharedMemoryInternal; -SharedMemory* +SharedMemoryInternal* obtain_shared_memory(char* key); void -push_packet(SharedMemory* memory, void* data, int size, Metadata metadata); +push_packet(SharedMemoryInternal* memory, void* data, int size, Metadata metadata); void -raise_event(SharedMemory* memory, EventType type, Event event); +raise_event(SharedMemoryInternal* memory, EventType type, Event event); int -peek_event(SharedMemory* memory, EventType type); +peek_event(SharedMemoryInternal* memory, EventType type); Event -pop_event(SharedMemory* memory, EventType type); \ No newline at end of file +pop_event(SharedMemoryInternal* memory, EventType type); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index a5bd63ac..48075f45 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -146,7 +146,7 @@ main(int argc, char *argv[]) { } //Get buffer local address from handle - SharedMemory* memory = obtain_shared_memory(argv[1]); + SharedMemoryInternal* memory = obtain_shared_memory(argv[1]); auto video_capture = std::thread{[&](){ std::optional display = std::string("123");