async_mp4/mp4box/
tfhd.rs

1use std::hash::{Hash, Hasher};
2use bitregions::bitregions;
3use crate::{flag_option, full_box};
4use crate::mp4box::trex::SampleFlags;
5
6bitregions! {
7    pub TfhdFlags u32 {
8        HAS_BASE_DATA_OFFSET:           0b0000000000000000__0000_0000_0000_0001,
9        HAS_SAMPLE_DESCRIPTION_INDEX:   0b0000000000000000__0000_0000_0000_0010,
10        HAS_DEFAULT_SAMPLE_DURATION:    0b0000000000000000__0000_0000_0000_1000,
11        HAS_DEFAULT_SAMPLE_SIZE:        0b0000000000000000__0000_0000_0001_0000,
12        HAS_DEFAULT_SAMPLE_FLAGS:       0b0000000000000000__0000_0000_0010_0000,
13        DURATION_IS_EMPTY:              0b0000000000000001__0000_0000_0000_0000,
14        DEFAULT_BASE_IS_MOOF:           0b0000000000000010__0000_0000_0000_0000,
15    }
16}
17
18impl Eq for TfhdFlags {}
19impl Hash for TfhdFlags {
20    fn hash<H: Hasher>(&self, state: &mut H) {
21        self.0.hash(state)
22    }
23}
24
25flag_option! {
26    #[derive(Default, Debug, Copy, Clone, Eq, PartialEq, Hash)]
27    pub struct TfhdDataOffset(pub u64, TfhdFlags, HAS_BASE_DATA_OFFSET);
28}
29
30flag_option! {
31    #[derive(Default, Debug, Copy, Clone, Eq, PartialEq, Hash)]
32    pub struct TfhdSampleDescriptionIndex(pub u32, TfhdFlags, HAS_SAMPLE_DESCRIPTION_INDEX);
33}
34
35flag_option! {
36    #[derive(Default, Debug, Copy, Clone, Eq, PartialEq, Hash)]
37    pub struct TfhdDefaultSampleDuration(pub u32, TfhdFlags, HAS_DEFAULT_SAMPLE_DURATION);
38}
39
40flag_option! {
41    #[derive(Default, Debug, Copy, Clone, Eq, PartialEq, Hash)]
42    pub struct TfhdDefaultSampleSize(pub u32, TfhdFlags, HAS_DEFAULT_SAMPLE_SIZE);
43}
44
45flag_option! {
46    #[derive(Default, Debug, Copy, Clone, Eq, PartialEq, Hash)]
47    pub struct TfhdDefaultSampleFlags(pub SampleFlags, TfhdFlags, HAS_DEFAULT_SAMPLE_FLAGS);
48}
49
50full_box! {
51    box (b"tfhd", Tfhd, TfhdBox, @save flags: TfhdFlags)
52    data {
53        track_id: u32,
54        base_data_offset: TfhdDataOffset,
55        sample_description_index: TfhdSampleDescriptionIndex,
56        default_sample_duration: TfhdDefaultSampleDuration,
57        default_sample_size: TfhdDefaultSampleSize,
58        default_sample_flags: TfhdDefaultSampleFlags,
59    }
60}