Skip to content

Commit

Permalink
s/sync_sample_index()/sync_sample()/
Browse files Browse the repository at this point in the history
  • Loading branch information
sile committed Oct 7, 2024
1 parent 52bcabe commit 6237ff1
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
2 changes: 1 addition & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
- @sile
- [ADD] `SampleAccessor::timestamp()` を追加する
- @sile
- [ADD] `SampleAccessor::sync_sample_index()` を追加する
- [ADD] `SampleAccessor::sync_sample()` を追加する
- @sile
- [CHANGE] `SampleTableAccessor::new()` で stco ボックスと stsc ボックスの不整合をチェックするようにする
- @sile
Expand Down
28 changes: 16 additions & 12 deletions src/aux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -350,20 +350,24 @@ impl<T: AsRef<StblBox>> SampleAccessor<'_, T> {
stss_box.sample_numbers.binary_search(&self.index).is_ok()
}

/// このサンプルをデコードするために必要となる同期サンプルのインデックスを返す
/// このサンプルをデコードするために必要となる同期サンプルへの参照を返す
///
/// 自分自身が同期サンプルの場合には、自分のインデックスが返される
/// 自分自身が同期サンプルの場合には、自分が返される
/// 自分よりも前方に同期サンプルが存在しない場合には [`None`] が返される。
pub fn sync_sample_index(&self) -> Option<NonZeroU32> {
let Some(stss_box) = &self.sample_table.stbl_box().stss_box else {
return Some(self.index);
pub fn sync_sample(&self) -> Option<Self> {
let index = if let Some(stss_box) = &self.sample_table.stbl_box().stss_box {
match stss_box.sample_numbers.binary_search(&self.index) {
Ok(_) => self.index,
Err(0) => return None,
Err(i) => stss_box.sample_numbers[i - 1],
}
} else {
self.index
};

match stss_box.sample_numbers.binary_search(&self.index) {
Ok(_) => Some(self.index),
Err(0) => None,
Err(i) => Some(stss_box.sample_numbers[i - 1]),
}
Some(Self {
index,
sample_table: self.sample_table,
})
}

/// サンプルが属するチャンクの情報を返す
Expand Down Expand Up @@ -501,7 +505,7 @@ mod tests {
assert_eq!(sample.data_offset(), sample_offsets[i] as u64);
assert_eq!(sample.is_sync_sample(), (i + 1) % 2 == 1);
assert_eq!(
sample.sync_sample_index(),
sample.sync_sample().map(|s| s.index()),
Some(NonZeroU32::MIN.saturating_add(i as u32 / 2 * 2))
);
assert_eq!(sample.chunk().index().get(), sample_chunks[i]);
Expand Down

0 comments on commit 6237ff1

Please sign in to comment.