use crate::coding::{Decode, Encode};
use crate::{Buf, BufMut, Result};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AmrSampleEntry {
pub data_reference_index: u16,
pub timescale: u16,
}
impl Encode for AmrSampleEntry {
fn encode<B: BufMut>(&self, buf: &mut B) -> Result<()> {
[0u8; 6].encode(buf)?; self.data_reference_index.encode(buf)?;
[0u8; 8].encode(buf)?; 2u16.encode(buf)?; 16u16.encode(buf)?; [0u8; 4].encode(buf)?; self.timescale.encode(buf)?;
0u16.encode(buf)?; Ok(())
}
}
impl Decode for AmrSampleEntry {
fn decode<B: Buf>(buf: &mut B) -> Result<Self> {
u32::decode(buf)?; u16::decode(buf)?; let data_reference_index = u16::decode(buf)?;
u32::decode(buf)?; u32::decode(buf)?; u16::decode(buf)?; u16::decode(buf)?; u32::decode(buf)?; let timescale = u16::decode(buf)?;
u16::decode(buf)?;
Ok(Self {
data_reference_index,
timescale,
})
}
}