rtc_rtp/codecs/g7xx/
mod.rs

1#[cfg(test)]
2mod g7xx_test;
3
4use crate::packetizer::Payloader;
5use shared::error::Result;
6
7use bytes::Bytes;
8
9/// G711Payloader payloads G711 packets
10pub type G711Payloader = G7xxPayloader;
11/// G722Payloader payloads G722 packets
12pub type G722Payloader = G7xxPayloader;
13
14#[derive(Default, Debug, Copy, Clone)]
15pub struct G7xxPayloader;
16
17impl Payloader for G7xxPayloader {
18    /// Payload fragments an G7xx packet across one or more byte arrays
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
40    fn clone_to(&self) -> Box<dyn Payloader> {
41        Box::new(*self)
42    }
43}