60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
// Copyright (c) 2013 Google Inc. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "media/mp4/composition_offset_iterator.h"
|
|
|
|
#include "base/logging.h"
|
|
|
|
namespace media {
|
|
namespace mp4 {
|
|
|
|
CompositionOffsetIterator::CompositionOffsetIterator(
|
|
const CompositionTimeToSample& composition_time_to_sample)
|
|
: sample_index_(0),
|
|
composition_offset_table_(composition_time_to_sample.composition_offset),
|
|
iterator_(composition_offset_table_.begin()) {
|
|
}
|
|
|
|
bool CompositionOffsetIterator::AdvanceSample() {
|
|
++sample_index_;
|
|
if (sample_index_ >= iterator_->sample_count) {
|
|
++iterator_;
|
|
if (iterator_ == composition_offset_table_.end())
|
|
return false;
|
|
sample_index_ = 0;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool CompositionOffsetIterator::IsValid() {
|
|
return iterator_ != composition_offset_table_.end()
|
|
&& sample_index_ < iterator_->sample_count;
|
|
}
|
|
|
|
uint32 CompositionOffsetIterator::SampleOffset(uint32 sample) {
|
|
uint32 current_sample = 0;
|
|
std::vector<CompositionOffset>::const_iterator it =
|
|
composition_offset_table_.begin();
|
|
for (; it != composition_offset_table_.end(); ++it) {
|
|
current_sample += it->sample_count;
|
|
if (current_sample >= sample)
|
|
return it->sample_offset;
|
|
}
|
|
DCHECK_LE(sample, current_sample) << " Sample is invalid";
|
|
return 0;
|
|
}
|
|
|
|
uint32 CompositionOffsetIterator::NumSamples() {
|
|
uint32 num_samples = 0;
|
|
std::vector<CompositionOffset>::const_iterator it =
|
|
composition_offset_table_.begin();
|
|
for (; it != composition_offset_table_.end(); ++it) {
|
|
num_samples += it->sample_count;
|
|
}
|
|
return num_samples;
|
|
}
|
|
|
|
} // namespace mp4
|
|
} // namespace media
|