single source of definition

This commit is contained in:
pigeatgarlic 2024-04-05 03:22:36 -07:00
parent dbd8a2ef91
commit 25a8eae190
8 changed files with 75 additions and 180 deletions

View File

@ -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"

View File

@ -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"
)

View File

@ -11,63 +11,8 @@
#endif
extern "C" {
#define QUEUE_SIZE 16
#define PACKET_SIZE 32 * 1024
#include <smemory.h>
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) ;

View File

@ -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 (

57
smemory.h Normal file
View File

@ -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;

View File

@ -19,7 +19,7 @@ using namespace std::literals;
SharedMemory* obtain_shared_memory(char* rand) {
SharedMemoryInternal* obtain_shared_memory(char* rand) {
std::vector<std::string> 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];
}

View File

@ -10,77 +10,25 @@
#include <boost/interprocess/sync/interprocess_mutex.hpp>
#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 <smemory.h>
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);
pop_event(SharedMemoryInternal* memory, EventType type);

View File

@ -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<std::string> display = std::string("123");