scuffle_mp4/object_description/
profile_level_indication_index.rs1use isobmff::IsoSized;
2use scuffle_bytes_util::zero_copy::{Deserialize, DeserializeSeed, Serialize};
3
4use super::{BaseDescriptor, DescriptorTag};
5
6#[derive(Debug, PartialEq, Eq)]
10pub struct ProfileLevelIndicationIndexDescriptor {
11 pub profile_level_indication_index: u8,
14}
15
16impl ProfileLevelIndicationIndexDescriptor {
17 pub fn base_descriptor(&self) -> BaseDescriptor {
19 BaseDescriptor {
20 tag: DescriptorTag::profileLevelIndicationIndexDescrTag,
21 size_of_instance: self.payload_size() as u32,
22 }
23 }
24
25 fn payload_size(&self) -> usize {
26 self.profile_level_indication_index.size()
27 }
28}
29
30impl<'a> Deserialize<'a> for ProfileLevelIndicationIndexDescriptor {
31 fn deserialize<R>(mut reader: R) -> std::io::Result<Self>
32 where
33 R: scuffle_bytes_util::zero_copy::ZeroCopyReader<'a>,
34 {
35 let base_descriptor = BaseDescriptor::deserialize(&mut reader)?;
36 Self::deserialize_seed(reader, base_descriptor)
37 }
38}
39
40impl<'a> DeserializeSeed<'a, BaseDescriptor> for ProfileLevelIndicationIndexDescriptor {
41 fn deserialize_seed<R>(reader: R, seed: BaseDescriptor) -> std::io::Result<Self>
42 where
43 R: scuffle_bytes_util::zero_copy::ZeroCopyReader<'a>,
44 {
45 let reader = reader.take(seed.size_of_instance as usize);
46
47 Ok(Self {
48 profile_level_indication_index: u8::deserialize(reader)?,
49 })
50 }
51}
52
53impl Serialize for ProfileLevelIndicationIndexDescriptor {
54 fn serialize<W>(&self, mut writer: W) -> std::io::Result<()>
55 where
56 W: std::io::Write,
57 {
58 self.base_descriptor().serialize(&mut writer)?;
59 self.profile_level_indication_index.serialize(&mut writer)?;
60 Ok(())
61 }
62}
63
64impl IsoSized for ProfileLevelIndicationIndexDescriptor {
65 fn size(&self) -> usize {
66 self.base_descriptor().size() + self.payload_size()
67 }
68}