1
0
Fork 0
mirror of https://github.com/alfg/mp4-rust.git synced 2024-05-09 03:52:53 +00:00

Compare commits

...

3 commits

Author SHA1 Message Date
jensenn 44bc45f162
Merge 94b9bff82f into 35560e94f5 2024-02-20 22:41:28 +00:00
Jensenn 94b9bff82f clippy fixes 2024-02-20 15:41:21 -07:00
Jensenn 3fa3856797 Fix track functions when encrypted 2024-02-20 15:13:40 -07:00

View file

@ -208,7 +208,15 @@ impl Mp4Track {
}
pub fn sample_freq_index(&self) -> Result<SampleFreqIndex> {
let mut mp4a_opt: Option<&Mp4aBox> = None;
if let Some(ref mp4a) = self.trak.mdia.minf.stbl.stsd.mp4a {
mp4a_opt = Some(mp4a);
} else if let Some(ref enca) = self.trak.mdia.minf.stbl.stsd.enca {
if let Some(ref mp4a) = enca.mp4a {
mp4a_opt = Some(mp4a);
}
}
if let Some(mp4a) = mp4a_opt {
if let Some(ref esds) = mp4a.esds {
SampleFreqIndex::try_from(esds.es_desc.dec_config.dec_specific.freq_index)
} else {
@ -220,7 +228,15 @@ impl Mp4Track {
}
pub fn channel_config(&self) -> Result<ChannelConfig> {
let mut mp4a_opt: Option<&Mp4aBox> = None;
if let Some(ref mp4a) = self.trak.mdia.minf.stbl.stsd.mp4a {
mp4a_opt = Some(mp4a);
} else if let Some(ref enca) = self.trak.mdia.minf.stbl.stsd.enca {
if let Some(ref mp4a) = enca.mp4a {
mp4a_opt = Some(mp4a);
}
}
if let Some(mp4a) = mp4a_opt {
if let Some(ref esds) = mp4a.esds {
ChannelConfig::try_from(esds.es_desc.dec_config.dec_specific.chan_conf)
} else {
@ -246,7 +262,15 @@ impl Mp4Track {
}
pub fn bitrate(&self) -> u32 {
let mut mp4a_opt: Option<&Mp4aBox> = None;
if let Some(ref mp4a) = self.trak.mdia.minf.stbl.stsd.mp4a {
mp4a_opt = Some(mp4a);
} else if let Some(ref enca) = self.trak.mdia.minf.stbl.stsd.enca {
if let Some(ref mp4a) = enca.mp4a {
mp4a_opt = Some(mp4a);
}
}
if let Some(mp4a) = mp4a_opt {
if let Some(ref esds) = mp4a.esds {
esds.es_desc.dec_config.avg_bitrate
} else {
@ -281,7 +305,15 @@ impl Mp4Track {
}
pub fn video_profile(&self) -> Result<AvcProfile> {
let mut avc1_opt: Option<&Avc1Box> = None;
if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 {
avc1_opt = Some(avc1);
} else if let Some(ref encv) = self.trak.mdia.minf.stbl.stsd.encv {
if let Some(ref avc1) = encv.avc1 {
avc1_opt = Some(avc1);
}
}
if let Some(avc1) = avc1_opt {
AvcProfile::try_from((
avc1.avcc.avc_profile_indication,
avc1.avcc.profile_compatibility,
@ -292,8 +324,16 @@ impl Mp4Track {
}
pub fn sequence_parameter_set(&self) -> Result<&[u8]> {
let mut avc1_opt: Option<&Avc1Box> = None;
if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 {
match avc1.avcc.sequence_parameter_sets.get(0) {
avc1_opt = Some(avc1);
} else if let Some(ref encv) = self.trak.mdia.minf.stbl.stsd.encv {
if let Some(ref avc1) = encv.avc1 {
avc1_opt = Some(avc1);
}
}
if let Some(avc1) = avc1_opt {
match avc1.avcc.sequence_parameter_sets.first() {
Some(nal) => Ok(nal.bytes.as_ref()),
None => Err(Error::EntryInStblNotFound(
self.track_id(),
@ -307,8 +347,16 @@ impl Mp4Track {
}
pub fn picture_parameter_set(&self) -> Result<&[u8]> {
let mut avc1_opt: Option<&Avc1Box> = None;
if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 {
match avc1.avcc.picture_parameter_sets.get(0) {
avc1_opt = Some(avc1);
} else if let Some(ref encv) = self.trak.mdia.minf.stbl.stsd.encv {
if let Some(ref avc1) = encv.avc1 {
avc1_opt = Some(avc1);
}
}
if let Some(avc1) = avc1_opt {
match avc1.avcc.picture_parameter_sets.first() {
Some(nal) => Ok(nal.bytes.as_ref()),
None => Err(Error::EntryInStblNotFound(
self.track_id(),
@ -322,7 +370,15 @@ impl Mp4Track {
}
pub fn audio_profile(&self) -> Result<AudioObjectType> {
let mut mp4a_opt: Option<&Mp4aBox> = None;
if let Some(ref mp4a) = self.trak.mdia.minf.stbl.stsd.mp4a {
mp4a_opt = Some(mp4a);
} else if let Some(ref enca) = self.trak.mdia.minf.stbl.stsd.enca {
if let Some(ref mp4a) = enca.mp4a {
mp4a_opt = Some(mp4a);
}
}
if let Some(mp4a) = mp4a_opt {
if let Some(ref esds) = mp4a.esds {
AudioObjectType::try_from(esds.es_desc.dec_config.dec_specific.profile)
} else {