Skip to content
File

Blob: firmware/vendor/str0m/src/_internal_test_exports/setup.rs

rust68 lines
1use std::time::Duration;
2 
3use crate::Bitrate;
4use crate::RtcConfig;
5use crate::rtp::{Extension, ExtensionMap};
6 
7use super::Rng;
8 
9pub fn random_extmap(rng: &mut Rng, to_set: usize) -> Option<ExtensionMap> {
10 use Extension::*;
11 let mut e = ExtensionMap::empty();
12 for _ in 0..to_set {
13 let id = rng.u8(13)? + 1;
14 let ext = match rng.u8(12)? {
15 0 => AbsoluteSendTime,
16 1 => AudioLevel,
17 2 => TransmissionTimeOffset,
18 3 => VideoOrientation,
19 4 => TransportSequenceNumber,
20 5 => PlayoutDelay,
21 6 => VideoContentType,
22 7 => VideoTiming,
23 8 => RtpStreamId,
24 9 => RepairedRtpStreamId,
25 10 => RtpMid,
26 11 => FrameMarking,
27 12 => ColorSpace,
28 _ => unreachable!(),
29 };
30 e.set(id, ext);
31 }
32 Some(e)
33}
34 
35#[allow(unused)]
36pub fn random_config(rng: &mut Rng) -> Option<RtcConfig> {
37 let mut c = RtcConfig::new();
38 c = c.set_extension_map(random_extmap(rng, 8)?);
39 c = c.set_ice_lite(rng.bool()?);
40 c = c.set_fingerprint_verification(rng.bool()?);
41 c = c.clear_codecs();
42 c = c.enable_opus(rng.bool()?);
43 c = c.enable_h264(rng.bool()?);
44 c = c.enable_vp8(rng.bool()?);
45 c = c.enable_vp9(rng.bool()?);
46 c = c.enable_av1(rng.bool()?);
47 if rng.bool()? {
48 rng.bool(); // consume one
49 c = c.set_stats_interval(None);
50 } else {
51 let t = Duration::from_millis(rng.u64(10_000)?);
52 c = c.set_stats_interval(Some(t));
53 }
54 if rng.bool()? {
55 rng.bool();
56 c = c.enable_bwe(None);
57 } else {
58 c = c.enable_bwe(Some(Bitrate::bps(rng.u64(u64::MAX)?)));
59 }
60 c = c.set_reordering_size_audio(rng.usize(usize::MAX)?);
61 c = c.set_reordering_size_video(rng.usize(usize::MAX)?);
62 c = c.set_send_buffer_audio(rng.usize(usize::MAX)?.saturating_add(1)); // panics if set to 0
63 c = c.set_send_buffer_video(rng.usize(usize::MAX)?);
64 c = c.set_rtp_mode(rng.bool()?);
65 c = c.enable_raw_packets(rng.bool()?);
66 Some(c)
67}