Shaka Packager SDK
Loading...
Searching...
No Matches
composition_offset_iterator.cc
1// Copyright 2014 Google LLC. All rights reserved.
2//
3// Use of this source code is governed by a BSD-style
4// license that can be found in the LICENSE file or at
5// https://developers.google.com/open-source/licenses/bsd
6
7#include <packager/media/formats/mp4/composition_offset_iterator.h>
8
9#include <cstdint>
10#include <vector>
11
12#include <absl/log/check.h>
13
14#include <packager/media/formats/mp4/box_definitions.h>
15
16namespace shaka {
17namespace media {
18namespace mp4 {
19
21 const CompositionTimeToSample& composition_time_to_sample)
22 : sample_index_(0),
23 composition_offset_table_(composition_time_to_sample.composition_offset),
24 iterator_(composition_offset_table_.begin()) {}
25CompositionOffsetIterator::~CompositionOffsetIterator() {}
26
28 ++sample_index_;
29 if (sample_index_ >= iterator_->sample_count) {
30 ++iterator_;
31 if (iterator_ == composition_offset_table_.end())
32 return false;
33 sample_index_ = 0;
34 }
35 return true;
36}
37
39 return iterator_ != composition_offset_table_.end() &&
40 sample_index_ < iterator_->sample_count;
41}
42
43int64_t CompositionOffsetIterator::SampleOffset(uint32_t sample) const {
44 uint32_t current_sample = 0;
45 std::vector<CompositionOffset>::const_iterator it =
46 composition_offset_table_.begin();
47 for (; it != composition_offset_table_.end(); ++it) {
48 current_sample += it->sample_count;
49 if (current_sample >= sample)
50 return it->sample_offset;
51 }
52 DCHECK_LE(sample, current_sample) << " Sample is invalid";
53 return 0;
54}
55
57 uint32_t num_samples = 0;
58 std::vector<CompositionOffset>::const_iterator it =
59 composition_offset_table_.begin();
60 for (; it != composition_offset_table_.end(); ++it) {
61 num_samples += it->sample_count;
62 }
63 return num_samples;
64}
65
66} // namespace mp4
67} // namespace media
68} // namespace shaka
CompositionOffsetIterator(const CompositionTimeToSample &composition_time_to_sample)
Create CompositionOffsetIterator from composition time to sample box.
All the methods that are virtual are virtual for mocking.