mp4_atom/moov/trak/mdia/minf/stbl/stsd/amr/
amrsampleentry.rs1use crate::coding::{Decode, Encode};
2use crate::{Buf, BufMut, Result};
3
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct AmrSampleEntry {
7 pub data_reference_index: u16,
8 pub timescale: u16,
9}
10
11impl Encode for AmrSampleEntry {
12 fn encode<B: BufMut>(&self, buf: &mut B) -> Result<()> {
13 [0u8; 6].encode(buf)?; self.data_reference_index.encode(buf)?;
15 [0u8; 8].encode(buf)?; 2u16.encode(buf)?; 16u16.encode(buf)?; [0u8; 4].encode(buf)?; self.timescale.encode(buf)?;
20 0u16.encode(buf)?; Ok(())
22 }
23}
24impl Decode for AmrSampleEntry {
25 fn decode<B: Buf>(buf: &mut B) -> Result<Self> {
26 u32::decode(buf)?; u16::decode(buf)?; let data_reference_index = u16::decode(buf)?;
29 u32::decode(buf)?; u32::decode(buf)?; u16::decode(buf)?; u16::decode(buf)?; u32::decode(buf)?; let timescale = u16::decode(buf)?;
35 u16::decode(buf)?; Ok(Self {
38 data_reference_index,
39 timescale,
40 })
41 }
42}