sunshine-sdk/lib/interprocess.h
2024-04-04 16:51:36 -07:00

79 lines
1.4 KiB
C

/**
* @file globals.h
* @brief Header for globally accessible variables and functions.
*/
#pragma once
#if _WIN32
#define EXPORT(x) extern __declspec(dllexport) x __cdecl
#else
#define EXPORT(x) __attribute__((visibility("default"))) extern x
#endif
extern "C" {
#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;
typedef struct {
Queue queues[QueueType::Max];
Event events[EVENT_TYPE_MAX];
}SharedMemory;
EXPORT(SharedMemory*) allocate_shared_memory(char* rand) ;
EXPORT(SharedMemory*) obtain_shared_memory(char* rand) ;
EXPORT(void) lock_shared_memory(SharedMemory* memory);
EXPORT(void) unlock_shared_memory(SharedMemory* memory);
EXPORT(void) free_shared_memory(SharedMemory* buffer);
EXPORT(void) deinit_shared_memory();
}