From 3711ad23f6c936b494041845254565efed8ca6f8 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 28 Jun 2021 22:05:55 +0200 Subject: Bump webrtc to branch-heads/4472. --- src/WebRTCLibPeerConnection.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'src/WebRTCLibPeerConnection.cpp') diff --git a/src/WebRTCLibPeerConnection.cpp b/src/WebRTCLibPeerConnection.cpp index 6e81a7c..d88760c 100644 --- a/src/WebRTCLibPeerConnection.cpp +++ b/src/WebRTCLibPeerConnection.cpp @@ -57,7 +57,7 @@ godot_error _parse_channel_config(webrtc::DataChannelInit &r_config, godot::Dict // ID makes sense only when negotiated is true (and must be set in that case) ERR_FAIL_COND_V(r_config.negotiated ? r_config.id == -1 : r_config.id != -1, GODOT_ERR_INVALID_PARAMETER); // Only one of maxRetransmits and maxRetransmitTime can be set on a channel. - ERR_FAIL_COND_V(r_config.maxRetransmits != -1 && r_config.maxRetransmitTime != -1, GODOT_ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V(r_config.maxRetransmits && r_config.maxRetransmitTime, GODOT_ERR_INVALID_PARAMETER); return GODOT_OK; } @@ -119,7 +119,7 @@ godot_object *WebRTCLibPeerConnection::create_data_channel(const char *p_channel godot_error WebRTCLibPeerConnection::create_offer() { ERR_FAIL_COND_V(peer_connection.get() == nullptr, GODOT_ERR_UNCONFIGURED); - peer_connection->CreateOffer(ptr_csdo, nullptr); + peer_connection->CreateOffer(ptr_csdo, webrtc::PeerConnectionInterface::RTCOfferAnswerOptions()); return GODOT_OK; } @@ -191,16 +191,12 @@ void WebRTCLibPeerConnection::_init() { mutex_signal_queue = new std::mutex; // create a PeerConnectionFactoryInterface: - signaling_thread = new rtc::Thread; - signaling_thread->Start(); - pc_factory = webrtc::CreateModularPeerConnectionFactory( - nullptr, // rtc::Thread* network_thread, - nullptr, // rtc::Thread* worker_thread, - signaling_thread, - nullptr, // std::unique_ptr media_engine, - nullptr, // std::unique_ptr call_factory, - nullptr // std::unique_ptr event_log_factory - ); + webrtc::PeerConnectionFactoryDependencies deps; + + signaling_thread = rtc::Thread::Create(); + ERR_FAIL_COND(!signaling_thread->Start()); + deps.signaling_thread = signaling_thread.get(); + pc_factory = webrtc::CreateModularPeerConnectionFactory(std::move(deps)); // Create peer connection with default configuration. webrtc::PeerConnectionInterface::RTCConfiguration config; -- cgit v1.2.3 From da20ebf3970e311af4fa7a0e0b52a58041ceac3e Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Fri, 2 Jul 2021 01:03:44 +0200 Subject: Unified signalling thread. --- src/WebRTCLibPeerConnection.cpp | 18 ++++++++++++++++-- src/WebRTCLibPeerConnection.hpp | 6 ++++-- src/init.cpp | 2 ++ 3 files changed, 22 insertions(+), 4 deletions(-) (limited to 'src/WebRTCLibPeerConnection.cpp') diff --git a/src/WebRTCLibPeerConnection.cpp b/src/WebRTCLibPeerConnection.cpp index d88760c..d95b1e6 100644 --- a/src/WebRTCLibPeerConnection.cpp +++ b/src/WebRTCLibPeerConnection.cpp @@ -5,6 +5,21 @@ using namespace godot_webrtc; +std::unique_ptr WebRTCLibPeerConnection::signaling_thread = nullptr; + +void WebRTCLibPeerConnection::initialize_signaling() { + if (signaling_thread.get() == nullptr) { + signaling_thread = rtc::Thread::Create(); + } + signaling_thread->Start(); +} + +void WebRTCLibPeerConnection::deinitialize_signaling() { + if (signaling_thread.get() != nullptr) { + signaling_thread->Stop(); + } +} + godot_error _parse_ice_server(webrtc::PeerConnectionInterface::RTCConfiguration &r_config, godot::Dictionary p_server) { godot::Variant v; webrtc::PeerConnectionInterface::IceServer ice_server; @@ -193,8 +208,7 @@ void WebRTCLibPeerConnection::_init() { // create a PeerConnectionFactoryInterface: webrtc::PeerConnectionFactoryDependencies deps; - signaling_thread = rtc::Thread::Create(); - ERR_FAIL_COND(!signaling_thread->Start()); + ERR_FAIL_COND(signaling_thread.get() == nullptr); deps.signaling_thread = signaling_thread.get(); pc_factory = webrtc::CreateModularPeerConnectionFactory(std::move(deps)); diff --git a/src/WebRTCLibPeerConnection.hpp b/src/WebRTCLibPeerConnection.hpp index f6b0528..8c5d9b8 100644 --- a/src/WebRTCLibPeerConnection.hpp +++ b/src/WebRTCLibPeerConnection.hpp @@ -18,8 +18,11 @@ class WebRTCLibPeerConnection : public WebRTCPeerConnectionNative { private: godot_error _create_pc(webrtc::PeerConnectionInterface::RTCConfiguration &config); + static std::unique_ptr signaling_thread; public: static void _register_methods(); + static void initialize_signaling(); + static void deinitialize_signaling(); void _init(); @@ -83,10 +86,9 @@ public: rtc::scoped_refptr ptr_ssdo; rtc::scoped_refptr ptr_csdo; - std::mutex *mutex_signal_queue; + std::mutex *mutex_signal_queue = nullptr; std::queue > signal_queue; - std::unique_ptr signaling_thread; rtc::scoped_refptr pc_factory; rtc::scoped_refptr peer_connection; }; diff --git a/src/init.cpp b/src/init.cpp index 2b73cf1..a9a64ad 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -86,6 +86,7 @@ extern "C" void GDN_EXPORT godot_gdnative_init(godot_gdnative_init_options *o) { } } + godot_webrtc::WebRTCLibPeerConnection::initialize_signaling(); godot::Godot::gdnative_init(o); } @@ -93,6 +94,7 @@ extern "C" void GDN_EXPORT godot_gdnative_terminate(godot_gdnative_terminate_opt if (_singleton) { // If we are the active singleton, unregister WebRTCPeerConnectionNative::_net_api->godot_net_set_webrtc_library(NULL); } + godot_webrtc::WebRTCLibPeerConnection::deinitialize_signaling(); godot::Godot::gdnative_terminate(o); } -- cgit v1.2.3