mp4_atom/moov/mvex/
trex.rs1use crate::*;
2
3#[derive(Debug, Clone, PartialEq, Eq, Default)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5pub struct Trex {
6 pub track_id: u32,
7 pub default_sample_description_index: u32,
8 pub default_sample_duration: u32,
9 pub default_sample_size: u32,
10 pub default_sample_flags: u32,
11}
12
13impl AtomExt for Trex {
14 type Ext = ();
15
16 const KIND_EXT: FourCC = FourCC::new(b"trex");
17
18 fn decode_body_ext<B: Buf>(buf: &mut B, _ext: ()) -> Result<Self> {
19 Ok(Trex {
20 track_id: u32::decode(buf)?,
21 default_sample_description_index: u32::decode(buf)?,
22 default_sample_duration: u32::decode(buf)?,
23 default_sample_size: u32::decode(buf)?,
24 default_sample_flags: u32::decode(buf)?,
25 })
26 }
27
28 fn encode_body_ext<B: BufMut>(&self, buf: &mut B) -> Result<()> {
29 self.track_id.encode(buf)?;
30 self.default_sample_description_index.encode(buf)?;
31 self.default_sample_duration.encode(buf)?;
32 self.default_sample_size.encode(buf)?;
33 self.default_sample_flags.encode(buf)?;
34
35 Ok(())
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn test_trex() {
45 let expected = Trex {
46 track_id: 1,
47 default_sample_description_index: 1,
48 default_sample_duration: 1000,
49 default_sample_size: 0,
50 default_sample_flags: 65536,
51 };
52 let mut buf = Vec::new();
53 expected.encode(&mut buf).unwrap();
54
55 let mut buf = buf.as_ref();
56 let decoded = Trex::decode(&mut buf).unwrap();
57 assert_eq!(decoded, expected);
58 }
59}