Skip to main content

mp4_atom/moov/trak/edts/
mod.rs

1mod elst;
2pub use elst::*;
3
4use crate::*;
5
6#[derive(Debug, Clone, PartialEq, Eq, Default)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct Edts {
9    pub elst: Option<Elst>,
10}
11
12impl Atom for Edts {
13    const KIND: FourCC = FourCC::new(b"edts");
14
15    nested! {
16        required: [],
17        optional: [ Elst ],
18        multiple: [],
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    // A container decoded through the `nested!` macro must tolerate a sub-header
27    // padding remainder (e.g. a QuickTime zero terminator) after its children.
28    #[test]
29    fn test_edts_trailing_padding() {
30        let mut buf = Vec::new();
31        Edts::default().encode(&mut buf).unwrap();
32        buf.extend_from_slice(&[0, 0, 0, 0]);
33        let size = (buf.len() as u32).to_be_bytes();
34        buf[0..4].copy_from_slice(&size);
35
36        let edts = Edts::decode(&mut buf.as_slice()).expect("trailing padding must be tolerated");
37        assert_eq!(edts, Edts::default());
38    }
39}