1 #[cfg(test)] 2 mod g7xx_test; 3 4 use crate::error::Result; 5 use crate::packetizer::Payloader; 6 7 use bytes::Bytes; 8 9 /// G711Payloader payloads G711 packets 10 pub type G711Payloader = G7xxPayloader; 11 /// G722Payloader payloads G722 packets 12 pub type G722Payloader = G7xxPayloader; 13 14 #[derive(Default, Debug, Copy, Clone)] 15 pub struct G7xxPayloader; 16 17 impl Payloader for G7xxPayloader { 18 /// Payload fragments an G7xx packet across one or more byte arrays payload(&mut self, mtu: usize, payload: &Bytes) -> Result<Vec<Bytes>>19 fn payload(&mut self, mtu: usize, payload: &Bytes) -> Result<Vec<Bytes>> { 20 if payload.is_empty() || mtu == 0 { 21 return Ok(vec![]); 22 } 23 24 let mut payload_data_remaining = payload.len(); 25 let mut payload_data_index = 0; 26 let mut payloads = Vec::with_capacity(payload_data_remaining / mtu); 27 while payload_data_remaining > 0 { 28 let current_fragment_size = std::cmp::min(mtu, payload_data_remaining); 29 payloads.push( 30 payload.slice(payload_data_index..payload_data_index + current_fragment_size), 31 ); 32 33 payload_data_remaining -= current_fragment_size; 34 payload_data_index += current_fragment_size; 35 } 36 37 Ok(payloads) 38 } 39 clone_to(&self) -> Box<dyn Payloader + Send + Sync>40 fn clone_to(&self) -> Box<dyn Payloader + Send + Sync> { 41 Box::new(*self) 42 } 43 } 44