mirror of
https://github.com/thinkonmay/sunshine-sdk.git
synced 2026-01-03 15:58:43 +00:00
single source of definition
This commit is contained in:
parent
dbd8a2ef91
commit
25a8eae190
@ -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"
|
||||
|
||||
@ -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"
|
||||
)
|
||||
|
||||
@ -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) ;
|
||||
|
||||
59
parent.go
59
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 (
|
||||
|
||||
57
smemory.h
Normal file
57
smemory.h
Normal 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;
|
||||
@ -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];
|
||||
}
|
||||
@ -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);
|
||||
@ -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");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user