#![cfg_attr(not(feature = "std"), no_std)]
pub mod g729;
pub const FRAME_SAMPLES: usize = 80;
pub const VOICE_FRAME_BYTES: usize = 10;
pub struct Encoder {
inner: g729::encoder::Encoder,
}
impl Encoder {
pub fn new(enable_vad: bool) -> Self {
Self {
inner: g729::encoder::Encoder::new(enable_vad),
}
}
pub fn encode_into(
&mut self,
input_80_samples: &[i16; FRAME_SAMPLES],
out: &mut [u8; VOICE_FRAME_BYTES],
) -> u8 {
let mut len: u8 = 0;
self.inner.encode(input_80_samples, out, &mut len);
len
}
#[cfg(feature = "std")]
pub fn encode(&mut self, input_80_samples: &[i16; FRAME_SAMPLES]) -> Vec<u8> {
let mut out = [0u8; VOICE_FRAME_BYTES];
let len = self.encode_into(input_80_samples, &mut out);
out[..len as usize].to_vec()
}
pub fn rfc3389_payload(&mut self) -> [u8; 11] {
[0u8; 11]
}
}
pub struct Decoder {
inner: g729::decoder::Decoder,
}
impl Default for Decoder {
fn default() -> Self {
Self::new()
}
}
impl Decoder {
pub fn new() -> Self {
Self {
inner: g729::decoder::Decoder::new(),
}
}
pub fn decode(
&mut self,
payload: &[u8],
frame_erased: bool,
is_sid: bool,
rfc3389: bool,
) -> [i16; FRAME_SAMPLES] {
let mut out = [0i16; FRAME_SAMPLES];
let len = payload.len() as u8;
let payload_opt = if len > 0 { Some(payload) } else { None };
self.inner.decode(
payload_opt,
len,
frame_erased as u8,
is_sid as u8,
rfc3389 as u8,
&mut out,
);
out
}
}