mp4/mp4box/
edts.rs

1use serde::Serialize;
2use std::io::{Read, Seek, Write};
3
4use crate::mp4box::elst::ElstBox;
5use crate::mp4box::*;
6
7#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)]
8pub struct EdtsBox {
9    pub elst: Option<ElstBox>,
10}
11
12impl EdtsBox {
13    pub(crate) fn new() -> EdtsBox {
14        Default::default()
15    }
16
17    pub fn get_type(&self) -> BoxType {
18        BoxType::EdtsBox
19    }
20
21    pub fn get_size(&self) -> u64 {
22        let mut size = HEADER_SIZE;
23        if let Some(ref elst) = self.elst {
24            size += elst.box_size();
25        }
26        size
27    }
28}
29
30impl Mp4Box for EdtsBox {
31    fn box_type(&self) -> BoxType {
32        self.get_type()
33    }
34
35    fn box_size(&self) -> u64 {
36        self.get_size()
37    }
38
39    fn to_json(&self) -> Result<String> {
40        Ok(serde_json::to_string(&self).unwrap())
41    }
42
43    fn summary(&self) -> Result<String> {
44        let s = String::new();
45        Ok(s)
46    }
47}
48
49impl<R: Read + Seek> ReadBox<&mut R> for EdtsBox {
50    fn read_box(reader: &mut R, size: u64) -> Result<Self> {
51        let start = box_start(reader)?;
52
53        let mut edts = EdtsBox::new();
54
55        let header = BoxHeader::read(reader)?;
56        let BoxHeader { name, size: s } = header;
57        if s > size {
58            return Err(Error::InvalidData(
59                "edts box contains a box with a larger size than it",
60            ));
61        }
62
63        if let BoxType::ElstBox = name {
64            let elst = ElstBox::read_box(reader, s)?;
65            edts.elst = Some(elst);
66        }
67
68        skip_bytes_to(reader, start + size)?;
69
70        Ok(edts)
71    }
72}
73
74impl<W: Write> WriteBox<&mut W> for EdtsBox {
75    fn write_box(&self, writer: &mut W) -> Result<u64> {
76        let size = self.box_size();
77        BoxHeader::new(self.box_type(), size).write(writer)?;
78
79        if let Some(ref elst) = self.elst {
80            elst.write_box(writer)?;
81        }
82
83        Ok(size)
84    }
85}