diff options
author | Edward Hervey <edward@centricular.com> | 2023-04-15 09:17:09 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2023-04-22 11:56:37 +0300 |
commit | a76330e76c1e5019939f46236d01657bd72713cf (patch) | |
tree | 36afc42ea9b2faf918f8f971154e606ec2ab4bb7 /net | |
parent | 1f26b9e336b6a0bfd4c943a1bac7a2f8c99579ee (diff) |
rtpgccbwe: Don't process empty lists
The structure parsing could result in an empty vector. Don't do any processing
since the loss code assumes it's non-empty for average estimates which would
result in weird/invalid results.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1189>
Diffstat (limited to 'net')
-rw-r--r-- | net/rtp/src/gcc/imp.rs | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/net/rtp/src/gcc/imp.rs b/net/rtp/src/gcc/imp.rs index 479198ac..f56d0a78 100644 --- a/net/rtp/src/gcc/imp.rs +++ b/net/rtp/src/gcc/imp.rs @@ -1184,19 +1184,22 @@ impl ObjectSubclass for BandwidthEstimator { }) .collect::<Vec<Packet>>(); - let bitrate_changed = { - let mut state = this.state.lock().unwrap(); - - state.detector.update(&mut packets); - if !state.delay_control(&bwe) { - state.loss_control(&bwe) - } else { - true + // The list of packets could be empty once parsed + if !packets.is_empty() { + let bitrate_changed = { + let mut state = this.state.lock().unwrap(); + + state.detector.update(&mut packets); + if !state.delay_control(&bwe) { + state.loss_control(&bwe) + } else { + true + } + }; + + if bitrate_changed { + bwe.notify("estimated-bitrate") } - }; - - if bitrate_changed { - bwe.notify("estimated-bitrate") } } } |