2020#error "Unknown target"
2121#endif
2222
23- #define KFunc (NAME ) g_lib->kotlin.root.com.piasy.kmp.webrtc.## NAME
24- #define KType (NAME ) kmp_webrtc_kref_com_piasy_kmp_webrtc_##NAME
23+ #define KFunc (NAME ) g_lib->kotlin.root.com.piasy.kmp.webrtc.NAME
24+ #define KType (NAME ) KT_SYMBOL( kmp_webrtc_kref_com_piasy_kmp_webrtc_##NAME)
2525
2626static KT_SYMBOL (kmp_webrtc_ExportedSymbols)* g_lib = nullptr;
2727
2828int InitializeWebRTC (const char * field_trials, int debug_log) {
2929 if (!g_lib) {
3030 g_lib = KT_SYMBOL (kmp_webrtc_symbols)();
3131 }
32- return KFunc (initializeWebRTC)(kmp_webrtc_kref_kotlin_Any (), field_trials, debug_log);
32+ return KFunc (initializeWebRTC)(KT_SYMBOL ( kmp_webrtc_kref_kotlin_Any) (), field_trials, debug_log);
3333}
3434
3535struct PCClientFactoryConfig * DefaultPCClientFactoryConfig () {
@@ -39,6 +39,11 @@ struct PCClientFactoryConfig* DefaultPCClientFactoryConfig() {
3939 config->video_capture_height = 720 ;
4040 config->video_capture_fps = 30 ;
4141 config->private_config .hwnd = nullptr ;
42+ config->private_config .disable_encryption = 0 ;
43+ config->private_config .dummy_audio_device = 0 ;
44+ config->private_config .transit_video = 0 ;
45+ config->private_config .capture_file_path = " " ;
46+ config->private_config .capture_dump_path = " " ;
4247 return config;
4348}
4449
@@ -52,14 +57,18 @@ struct PcClientFactoryHolder {
5257};
5358
5459void * CreatePCClientFactory (struct PCClientFactoryConfig * config, PCClientFactoryErrorHandler handler, void * opaque) {
55- KType (PeerConnectionClientFactory_PrivateConfig) private_config = KFunc (PeerConnectionClientFactory.PrivateConfig .PrivateConfig )();
60+ KType (PeerConnectionClientFactory_PrivateConfig) pconfig = KFunc (PeerConnectionClientFactory.PrivateConfig .PrivateConfig )();
5661 KType (PeerConnectionClientFactory_Config) k_config = KFunc (PeerConnectionClientFactory.Config .Config )(
5762 (int ) config->video_capture_impl , config->video_capture_width , config->video_capture_height ,
58- config->video_capture_fps , 0 , private_config);
59- KType (WinPrivateConfig) win_private_config = KFunc (WinPrivateConfig.WinPrivateConfig )(config->private_config .hwnd , config->private_config .disable_encryption );
60- KType (PeerConnectionClientFactory_Config) k_config_with_pri = KFunc (utils.createPcClientFactoryConfig )(k_config, win_private_config);
63+ config->video_capture_fps , 0 , pconfig);
64+ #if defined(WEBRTC_WIN)
65+ KType (WinPrivateConfig) private_config = KFunc (WinPrivateConfig.WinPrivateConfig )(config->private_config .hwnd , config->private_config .disable_encryption );
66+ #else
67+ KType (LinuxPrivateConfig) private_config = KFunc (LinuxPrivateConfig.LinuxPrivateConfig )(config->private_config .hwnd , config->private_config .disable_encryption , config->private_config .dummy_audio_device , config->private_config .transit_video , config->private_config .capture_file_path , config->private_config .capture_dump_path );
68+ #endif
69+ KType (PeerConnectionClientFactory_Config) k_config_with_pri = KFunc (utils.createPcClientFactoryConfig )(k_config, private_config);
6170
62- kmp_webrtc_kref_kotlin_Function2 error_handler = KFunc (utils.createErrorHandler )(handler, opaque);
71+ KT_SYMBOL ( kmp_webrtc_kref_kotlin_Function2) error_handler = KFunc (utils.createErrorHandler )(( void *) handler, opaque);
6372
6473 PcClientFactoryHolder* holder = new PcClientFactoryHolder ();
6574 holder->factory = KFunc (createPeerConnectionClientFactory)(k_config_with_pri, error_handler);
@@ -69,7 +78,7 @@ void* CreatePCClientFactory(struct PCClientFactoryConfig* config, PCClientFactor
6978void DestroyPCClientFactory (void ** pc_client_factory) {
7079 PcClientFactoryHolder* holder = reinterpret_cast <PcClientFactoryHolder*>(*pc_client_factory);
7180 KFunc (PeerConnectionClientFactory.destroyPeerConnectionFactory )(holder->factory );
72- delete (*pc_client_factory );
81+ delete (holder );
7382 *pc_client_factory = nullptr ;
7483}
7584
@@ -106,13 +115,13 @@ void* CreatePeerConnectionClient(void* pc_client_factory, const char* peer_uid,
106115void ClosePeerConnectionClient (void ** pc_client) {
107116 PcClientHolder* holder = reinterpret_cast <PcClientHolder*>(*pc_client);
108117 KFunc (PeerConnectionClient.close )(holder->client );
109- delete (*pc_client );
118+ delete (holder );
110119 *pc_client = nullptr ;
111120}
112121
113122void CreatePeerConnection (void * pc_client) {
114123 PcClientHolder* holder = reinterpret_cast <PcClientHolder*>(pc_client);
115- kmp_webrtc_kref_kotlin_collections_List ice_servers = KFunc (utils.emptyIceServers )();
124+ KT_SYMBOL ( kmp_webrtc_kref_kotlin_collections_List) ice_servers = KFunc (utils.emptyIceServers )();
116125 KFunc (PeerConnectionClient.createPeerConnection )(holder->client , ice_servers);
117126}
118127
@@ -138,6 +147,16 @@ void GetStats(void* pc_client) {
138147 KFunc (PeerConnectionClient.getStats )(holder->client );
139148}
140149
150+ int StartRecorder (void * pc_client, int dir, const char * path) {
151+ PcClientHolder* holder = reinterpret_cast <PcClientHolder*>(pc_client);
152+ return KFunc (PeerConnectionClient.startRecorder )(holder->client , dir, path);
153+ }
154+
155+ int StopRecorder (void * pc_client, int dir) {
156+ PcClientHolder* holder = reinterpret_cast <PcClientHolder*>(pc_client);
157+ return KFunc (PeerConnectionClient.stopRecorder )(holder->client , dir);
158+ }
159+
141160#if defined(WEBRTC_WIN)
142161void AddRemoteTrackRenderer (void * pc_client, void * renderer) {
143162 PcClientHolder* holder = reinterpret_cast <PcClientHolder*>(pc_client);
@@ -148,3 +167,7 @@ void AddRemoteTrackRenderer(void* pc_client, void* renderer) {
148167void LogInfo (const char * log) {
149168 KFunc (utils.logInfo )(log);
150169}
170+
171+ const char * PreferSdp (const char * sdp, int codec) {
172+ return KFunc (utils.preferCodec )(sdp, codec);
173+ }
0 commit comments