1use isobmff::boxes::{MPEG4ExtensionDescriptorsBox, VisualSampleEntry};
6use isobmff::{IsoBox, UnknownBox};
7
8use crate::AVCDecoderConfigurationRecord;
9
10#[derive(IsoBox, Debug, PartialEq, Eq)]
14#[iso_box(box_type = b"avcC")]
15pub struct AVCConfigurationBox<'a> {
16 pub avc_config: AVCDecoderConfigurationRecord<'a>,
18}
19
20impl<'a> AVCConfigurationBox<'a> {
21 pub fn new(avc_config: AVCDecoderConfigurationRecord<'a>) -> Self {
23 Self { avc_config }
24 }
25}
26
27#[derive(IsoBox, Debug, PartialEq, Eq)]
33#[iso_box(box_type = b"avc1")]
34pub struct AVCSampleEntry1<'a> {
35 pub visual_sample_entry: VisualSampleEntry,
37 #[iso_box(nested_box)]
39 pub config: AVCConfigurationBox<'a>,
40 #[iso_box(nested_box(collect))]
42 pub mpeg4_extension: Option<MPEG4ExtensionDescriptorsBox<'a>>,
43 #[iso_box(nested_box(collect_unknown))]
45 pub sub_boxes: Vec<UnknownBox<'a>>,
46}
47
48#[derive(IsoBox, Debug, PartialEq, Eq)]
52#[iso_box(box_type = b"avc2")]
53pub struct AVCSampleEntry2<'a> {
54 pub visual_sample_entry: VisualSampleEntry,
56 #[iso_box(nested_box)]
58 pub config: AVCConfigurationBox<'a>,
59 #[iso_box(nested_box(collect))]
61 pub mpeg4_extension: Option<MPEG4ExtensionDescriptorsBox<'a>>,
62 #[iso_box(nested_box(collect_unknown))]
64 pub sub_boxes: Vec<UnknownBox<'a>>,
65}
66
67#[derive(IsoBox, Debug, PartialEq, Eq)]
71#[iso_box(box_type = b"avc3")]
72pub struct AVCSampleEntry3<'a> {
73 pub visual_sample_entry: VisualSampleEntry,
75 #[iso_box(nested_box)]
77 pub config: AVCConfigurationBox<'a>,
78 #[iso_box(nested_box(collect))]
80 pub mpeg4_extension: Option<MPEG4ExtensionDescriptorsBox<'a>>,
81 #[iso_box(nested_box(collect_unknown))]
83 pub sub_boxes: Vec<UnknownBox<'a>>,
84}
85
86#[derive(IsoBox, Debug, PartialEq, Eq)]
90#[iso_box(box_type = b"avc4")]
91pub struct AVCSampleEntry4<'a> {
92 pub visual_sample_entry: VisualSampleEntry,
94 #[iso_box(nested_box)]
96 pub config: AVCConfigurationBox<'a>,
97 #[iso_box(nested_box(collect))]
99 pub mpeg4_extension: Option<MPEG4ExtensionDescriptorsBox<'a>>,
100 #[iso_box(nested_box(collect_unknown))]
102 pub sub_boxes: Vec<UnknownBox<'a>>,
103}
104
105#[derive(IsoBox, Debug, PartialEq, Eq)]
109#[iso_box(box_type = b"avcp")]
110pub struct AVCParameterSampleEntry<'a> {
111 pub visual_sample_entry: VisualSampleEntry,
113 #[iso_box(nested_box)]
115 pub config: AVCConfigurationBox<'a>,
116 #[iso_box(nested_box(collect_unknown))]
118 pub sub_boxes: Vec<UnknownBox<'a>>,
119}