Skip to main content

vsd_mp4/boxes/
mod.rs

1//! MP4 box structures and parsers.
2
3#[cfg(feature = "decrypt-cenc")]
4mod schm;
5
6#[cfg(feature = "decrypt-cenc")]
7#[cfg_attr(docsrs, doc(cfg(feature = "decrypt-cenc")))]
8pub use schm::SchmBox;
9
10#[cfg(feature = "decrypt-cenc")]
11mod senc;
12
13#[cfg(feature = "decrypt-cenc")]
14#[cfg_attr(docsrs, doc(cfg(feature = "decrypt-cenc")))]
15pub use senc::{SencBox, SencSample, SencSubsample};
16
17#[cfg(feature = "decrypt-cenc")]
18mod tenc;
19
20#[cfg(feature = "decrypt-cenc")]
21#[cfg_attr(docsrs, doc(cfg(feature = "decrypt-cenc")))]
22pub use tenc::TencBox;
23
24#[cfg(feature = "sidx")]
25mod sidx;
26
27#[cfg(feature = "sidx")]
28#[cfg_attr(docsrs, doc(cfg(feature = "sidx")))]
29pub use sidx::{SidxBox, SidxRange};
30
31#[cfg(feature = "sub-vtt")]
32mod mdhd;
33
34#[cfg(feature = "sub-vtt")]
35#[cfg_attr(docsrs, doc(cfg(feature = "sub-vtt")))]
36pub use mdhd::MdhdBox;
37
38#[cfg(feature = "sub-vtt")]
39mod tfdt;
40
41#[cfg(feature = "sub-vtt")]
42#[cfg_attr(docsrs, doc(cfg(feature = "sub-vtt")))]
43pub use tfdt::TfdtBox;
44
45#[cfg(any(feature = "decrypt-cenc", feature = "sub-vtt"))]
46mod tfhd;
47
48#[cfg(any(feature = "decrypt-cenc", feature = "sub-vtt"))]
49#[cfg_attr(docsrs, doc(cfg(any(feature = "decrypt-cenc", feature = "sub-vtt"))))]
50pub use tfhd::TfhdBox;
51
52#[cfg(any(feature = "decrypt-cenc", feature = "sub-vtt"))]
53mod trun;
54
55#[cfg(any(feature = "decrypt-cenc", feature = "sub-vtt"))]
56#[cfg_attr(docsrs, doc(cfg(any(feature = "decrypt-cenc", feature = "sub-vtt"))))]
57pub use trun::{TrunBox, TrunSample};
58
59/// Helper macro to create a reference-counted, interior-mutable `Option` cell.
60///
61/// This macro is widely used in custom MP4 parsing chains to collect parsed boxes in parser closures.
62#[macro_export]
63macro_rules! data {
64    () => {
65        std::rc::Rc::new(std::cell::RefCell::new(None))
66    };
67    ($val:expr) => {
68        std::rc::Rc::new(std::cell::RefCell::new($val))
69    };
70}