From e9d32fb221a9ae87b5f26288324e769134e7d248 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Fri, 19 May 2023 14:56:49 +0200 Subject: [PATCH] webrtcsink: fix stats_sigid logic First off, we just created the session, we know stats_sigid is None at this point. Second, don't first assign the result of connecting on-new-ssrc to the field, then the result of connection twcc-stats, that simply doesn't make sense. Finally, actually check that stats_sigid *is* None before connecting twcc-stats, as I understand it this must have been the original intention / behavior. Part-of: --- net/webrtc/src/webrtcsink/imp.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/net/webrtc/src/webrtcsink/imp.rs b/net/webrtc/src/webrtcsink/imp.rs index d4b1f0ef..b786c78e 100644 --- a/net/webrtc/src/webrtcsink/imp.rs +++ b/net/webrtc/src/webrtcsink/imp.rs @@ -1618,7 +1618,7 @@ impl WebRTCSink { } }); - let mut session = Session::new( + let session = Session::new( session_id.clone(), pipeline.clone(), webrtcbin.clone(), @@ -1643,8 +1643,7 @@ impl WebRTCSink { if session.congestion_controller.is_some() { let session_id_str = session_id.to_string(); - if session.stats_sigid.is_none() { - session.stats_sigid = Some(rtpbin.connect_closure("on-new-ssrc", true, + rtpbin.connect_closure("on-new-ssrc", true, glib::closure!(@weak-allow-none element, @weak-allow-none webrtcbin => move |rtpbin: gst::Object, session_id: u32, _src: u32| { let rtp_session = rtpbin.emit_by_name::("get-session", &[&session_id]); @@ -1654,16 +1653,17 @@ impl WebRTCSink { let mut state = element.imp().state.lock().unwrap(); if let Some(mut session) = state.sessions.get_mut(&session_id_str) { - session.stats_sigid = Some(rtp_session.connect_notify(Some("twcc-stats"), - glib::clone!(@strong session_id_str, @weak webrtcbin, @weak element => @default-return (), move |sess, pspec| { - // Run the Loss-based control algorithm on new peer TWCC feedbacks - element.imp().process_loss_stats(&element, &session_id_str, &sess.property::(pspec.name())); - }) - )); + if session.stats_sigid.is_none() { + session.stats_sigid = Some(rtp_session.connect_notify(Some("twcc-stats"), + glib::clone!(@strong session_id_str, @weak webrtcbin, @weak element => @default-return (), move |sess, pspec| { + // Run the Loss-based control algorithm on new peer TWCC feedbacks + element.imp().process_loss_stats(&element, &session_id_str, &sess.property::(pspec.name())); + }) + )); + } } }) - )); - } + ); } state