Files
crossdesk/src/interface/x.h

128 lines
2.9 KiB
C++

#ifndef _X_H_
#define _X_H_
#if defined(_MSC_VER)
#define DLLAPI __declspec(dllexport)
#elif defined(__GNUC__)
#define DLLAPI __attribute__((visibility("default")))
#else
#define DLLAPI
#endif
#include <cstddef>
#include <cstdint>
enum DATA_TYPE { VIDEO = 0, AUDIO, DATA };
enum ConnectionStatus {
Connecting = 0,
Connected,
Gathering,
Disconnected,
Failed,
Closed,
IncorrectPassword,
NoSuchTransmissionId
};
enum SignalStatus {
SignalConnecting = 0,
SignalConnected,
SignalFailed,
SignalClosed,
SignalReconnecting,
SignalServerClosed
};
enum TraversalMode { P2P = 0, Relay, UnknownMode };
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
const char* data;
size_t size;
uint32_t width;
uint32_t height;
} XVideoFrame;
typedef struct {
uint64_t video_in;
uint64_t video_out;
uint64_t audio_in;
uint64_t audio_out;
uint64_t data_in;
uint64_t data_out;
uint64_t total_in;
uint64_t total_out;
} XNetTrafficStats;
typedef struct Peer PeerPtr;
typedef void (*OnReceiveBuffer)(const char*, size_t, const char*, const size_t,
void*);
typedef void (*OnReceiveVideoFrame)(const XVideoFrame*, const char*,
const size_t, void*);
typedef void (*OnSignalStatus)(SignalStatus, void*);
typedef void (*OnConnectionStatus)(ConnectionStatus, const char*, const size_t,
void*);
typedef void (*NetStatusReport)(const char*, const size_t, TraversalMode,
const XNetTrafficStats*, void*);
typedef struct {
bool use_cfg_file;
const char* cfg_path;
const char* signal_server_ip;
int signal_server_port;
const char* stun_server_ip;
int stun_server_port;
const char* turn_server_ip;
int turn_server_port;
const char* turn_server_username;
const char* turn_server_password;
bool hardware_acceleration;
bool av1_encoding;
bool enable_turn;
OnReceiveBuffer on_receive_video_buffer;
OnReceiveBuffer on_receive_audio_buffer;
OnReceiveBuffer on_receive_data_buffer;
OnReceiveVideoFrame on_receive_video_frame;
OnSignalStatus on_signal_status;
OnConnectionStatus on_connection_status;
NetStatusReport net_status_report;
void* user_data;
} Params;
DLLAPI PeerPtr* CreatePeer(const Params* params);
DLLAPI void DestroyPeer(PeerPtr** peer_ptr);
DLLAPI int Init(PeerPtr* peer_ptr, const char* user_id);
DLLAPI int CreateConnection(PeerPtr* peer_ptr, const char* transmission_id,
const char* password);
DLLAPI int JoinConnection(PeerPtr* peer_ptr, const char* transmission_id,
const char* password);
DLLAPI int LeaveConnection(PeerPtr* peer_ptr, const char* transmission_id);
DLLAPI int SendVideoFrame(PeerPtr* peer_ptr, const XVideoFrame* video_frame);
DLLAPI int SendAudioFrame(PeerPtr* peer_ptr, const char* data, size_t size);
DLLAPI int SendData(PeerPtr* peer_ptr, const char* data, size_t size);
#ifdef __cplusplus
}
#endif
#endif