Skip to content

Commit afb01d9

Browse files
authored
Merge pull request #89 from alfredoyang/remove_empty_sample_boxes
Remove empty_sample_boxes.
2 parents 02d54e6 + a9007e8 commit afb01d9

File tree

2 files changed

+8
-27
lines changed

2 files changed

+8
-27
lines changed

mp4parse/src/lib.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -437,22 +437,6 @@ impl <T> std::ops::Add for TrackScaledTime<T> where T: Num {
437437
}
438438
}
439439

440-
/// A fragmented file contains no sample data in stts, stsc, and stco.
441-
#[derive(Debug, Default)]
442-
pub struct EmptySampleTableBoxes {
443-
// TODO: Track has stts, stsc and stco, this structure can be discarded.
444-
pub empty_stts: bool,
445-
pub empty_stsc: bool,
446-
pub empty_stco: bool,
447-
}
448-
449-
/// Check boxes contain data.
450-
impl EmptySampleTableBoxes {
451-
pub fn all_empty(&self) -> bool {
452-
self.empty_stts & self.empty_stsc & self.empty_stco
453-
}
454-
}
455-
456440
#[derive(Debug, Default)]
457441
pub struct Track {
458442
pub id: usize,
@@ -463,7 +447,6 @@ pub struct Track {
463447
pub duration: Option<TrackScaledTime<u64>>,
464448
pub track_id: Option<u32>,
465449
pub codec_type: CodecType,
466-
pub empty_sample_boxes: EmptySampleTableBoxes,
467450
pub data: Option<SampleEntry>,
468451
pub tkhd: Option<TrackHeaderBox>, // TODO(kinetik): find a nicer way to export this.
469452
pub stts: Option<TimeToSampleBox>,
@@ -892,13 +875,11 @@ fn read_stbl<T: Read>(f: &mut BMFFBox<T>, track: &mut Track) -> Result<()> {
892875
BoxType::TimeToSampleBox => {
893876
let stts = read_stts(&mut b)?;
894877
log!("{:?}", stts);
895-
track.empty_sample_boxes.empty_stts = stts.samples.is_empty();
896878
track.stts = Some(stts);
897879
}
898880
BoxType::SampleToChunkBox => {
899881
let stsc = read_stsc(&mut b)?;
900882
log!("{:?}", stsc);
901-
track.empty_sample_boxes.empty_stsc = stsc.samples.is_empty();
902883
track.stsc = Some(stsc);
903884
}
904885
BoxType::SampleSizeBox => {
@@ -908,7 +889,6 @@ fn read_stbl<T: Read>(f: &mut BMFFBox<T>, track: &mut Track) -> Result<()> {
908889
}
909890
BoxType::ChunkOffsetBox => {
910891
let stco = read_stco(&mut b)?;
911-
track.empty_sample_boxes.empty_stco = stco.offsets.is_empty();
912892
log!("{:?}", stco);
913893
track.stco = Some(stco);
914894
}

mp4parse_capi/src/lib.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,13 +1049,14 @@ pub unsafe extern fn mp4parse_is_fragmented(parser: *mut mp4parse_parser, track_
10491049

10501050
// check sample tables.
10511051
let mut iter = tracks.iter();
1052-
match iter.find(|track| track.track_id == Some(track_id)) {
1053-
Some(track) if track.empty_sample_boxes.all_empty() => (*fragmented) = true as u8,
1054-
Some(_) => {},
1055-
None => return mp4parse_status::BAD_ARG,
1056-
}
1057-
1058-
mp4parse_status::OK
1052+
iter.find(|track| track.track_id == Some(track_id)).map_or(mp4parse_status::BAD_ARG, |track| {
1053+
match (&track.stsc, &track.stco, &track.stts) {
1054+
(&Some(ref stsc), &Some(ref stco), &Some(ref stts))
1055+
if stsc.samples.is_empty() && stco.offsets.is_empty() && stts.samples.is_empty() => (*fragmented) = true as u8,
1056+
_ => {},
1057+
};
1058+
mp4parse_status::OK
1059+
})
10591060
}
10601061

10611062
/// Get 'pssh' system id and 'pssh' box content for eme playback.

0 commit comments

Comments
 (0)