Clean up *_iterator code in media/mp4.
Make functions const if needed and reformat the code using clang-format. Change-Id: If2848ef6c3b61df5358286687d80213533125856
This commit is contained in:
parent
5dd4a8cb45
commit
0a8dc6f606
|
@ -40,24 +40,27 @@ bool ChunkInfoIterator::AdvanceSample() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChunkInfoIterator::IsValid() {
|
bool ChunkInfoIterator::IsValid() const {
|
||||||
return iterator_ != chunk_info_table_.end()
|
return iterator_ != chunk_info_table_.end() &&
|
||||||
&& chunk_sample_index_ < iterator_->samples_per_chunk;
|
chunk_sample_index_ < iterator_->samples_per_chunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 ChunkInfoIterator::NumSamples(uint32 start_chunk, uint32 end_chunk) {
|
uint32 ChunkInfoIterator::NumSamples(uint32 start_chunk,
|
||||||
DCHECK(start_chunk <= end_chunk);
|
uint32 end_chunk) const {
|
||||||
|
DCHECK_LE(start_chunk, end_chunk);
|
||||||
|
|
||||||
uint32 last_chunk = 0;
|
uint32 last_chunk = 0;
|
||||||
uint32 num_samples = 0;
|
uint32 num_samples = 0;
|
||||||
for (std::vector<ChunkInfo>::const_iterator it = chunk_info_table_.begin();
|
for (std::vector<ChunkInfo>::const_iterator it = chunk_info_table_.begin();
|
||||||
it != chunk_info_table_.end(); ++it) {
|
it != chunk_info_table_.end();
|
||||||
last_chunk = (
|
++it) {
|
||||||
(it + 1 == chunk_info_table_.end()) ?
|
last_chunk = (it + 1 == chunk_info_table_.end())
|
||||||
std::numeric_limits<uint32>::max() : (it + 1)->first_chunk) - 1;
|
? std::numeric_limits<uint32>::max()
|
||||||
|
: (it + 1)->first_chunk - 1;
|
||||||
if (last_chunk >= start_chunk) {
|
if (last_chunk >= start_chunk) {
|
||||||
num_samples += (std::min(end_chunk, last_chunk)
|
num_samples += (std::min(end_chunk, last_chunk) -
|
||||||
- std::max(start_chunk, it->first_chunk) + 1)
|
std::max(start_chunk, it->first_chunk) + 1) *
|
||||||
* it->samples_per_chunk;
|
it->samples_per_chunk;
|
||||||
if (last_chunk >= end_chunk)
|
if (last_chunk >= end_chunk)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,32 +31,27 @@ class ChunkInfoIterator {
|
||||||
bool AdvanceSample();
|
bool AdvanceSample();
|
||||||
|
|
||||||
// Return whether the current chunk is valid.
|
// Return whether the current chunk is valid.
|
||||||
bool IsValid();
|
bool IsValid() const;
|
||||||
|
|
||||||
// Return current chunk.
|
// Return current chunk.
|
||||||
uint32 current_chunk() {
|
uint32 current_chunk() const { return current_chunk_; }
|
||||||
return current_chunk_;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return samples per chunk for current chunk.
|
// Return samples per chunk for current chunk.
|
||||||
uint32 samples_per_chunk() {
|
uint32 samples_per_chunk() const { return iterator_->samples_per_chunk; }
|
||||||
return iterator_->samples_per_chunk;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return sample description index for current chunk.
|
// Return sample description index for current chunk.
|
||||||
uint32 sample_description_index() {
|
uint32 sample_description_index() const {
|
||||||
return iterator_->sample_description_index;
|
return iterator_->sample_description_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return number of samples from start_chunk to end_chunk, both 1-based,
|
// Return number of samples from start_chunk to end_chunk, both 1-based,
|
||||||
// inclusive.
|
// inclusive.
|
||||||
uint32 NumSamples(uint32 start_chunk, uint32 end_chunk);
|
uint32 NumSamples(uint32 start_chunk, uint32 end_chunk) const;
|
||||||
|
|
||||||
// Return the last first_chunk in chunk_info_table.
|
// Return the last first_chunk in chunk_info_table.
|
||||||
uint32 LastFirstChunk() {
|
uint32 LastFirstChunk() const {
|
||||||
if (chunk_info_table_.size() == 0)
|
return chunk_info_table_.empty() ? 0
|
||||||
return 0;
|
: chunk_info_table_.back().first_chunk;
|
||||||
return (chunk_info_table_.end() - 1)->first_chunk;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -15,8 +15,7 @@ CompositionOffsetIterator::CompositionOffsetIterator(
|
||||||
const CompositionTimeToSample& composition_time_to_sample)
|
const CompositionTimeToSample& composition_time_to_sample)
|
||||||
: sample_index_(0),
|
: sample_index_(0),
|
||||||
composition_offset_table_(composition_time_to_sample.composition_offset),
|
composition_offset_table_(composition_time_to_sample.composition_offset),
|
||||||
iterator_(composition_offset_table_.begin()) {
|
iterator_(composition_offset_table_.begin()) {}
|
||||||
}
|
|
||||||
|
|
||||||
bool CompositionOffsetIterator::AdvanceSample() {
|
bool CompositionOffsetIterator::AdvanceSample() {
|
||||||
++sample_index_;
|
++sample_index_;
|
||||||
|
@ -29,12 +28,12 @@ bool CompositionOffsetIterator::AdvanceSample() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CompositionOffsetIterator::IsValid() {
|
bool CompositionOffsetIterator::IsValid() const {
|
||||||
return iterator_ != composition_offset_table_.end()
|
return iterator_ != composition_offset_table_.end() &&
|
||||||
&& sample_index_ < iterator_->sample_count;
|
sample_index_ < iterator_->sample_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 CompositionOffsetIterator::SampleOffset(uint32 sample) {
|
uint32 CompositionOffsetIterator::SampleOffset(uint32 sample) const {
|
||||||
uint32 current_sample = 0;
|
uint32 current_sample = 0;
|
||||||
std::vector<CompositionOffset>::const_iterator it =
|
std::vector<CompositionOffset>::const_iterator it =
|
||||||
composition_offset_table_.begin();
|
composition_offset_table_.begin();
|
||||||
|
@ -47,7 +46,7 @@ uint32 CompositionOffsetIterator::SampleOffset(uint32 sample) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 CompositionOffsetIterator::NumSamples() {
|
uint32 CompositionOffsetIterator::NumSamples() const {
|
||||||
uint32 num_samples = 0;
|
uint32 num_samples = 0;
|
||||||
std::vector<CompositionOffset>::const_iterator it =
|
std::vector<CompositionOffset>::const_iterator it =
|
||||||
composition_offset_table_.begin();
|
composition_offset_table_.begin();
|
||||||
|
|
|
@ -29,18 +29,16 @@ class CompositionOffsetIterator {
|
||||||
bool AdvanceSample();
|
bool AdvanceSample();
|
||||||
|
|
||||||
// Return whether the current sample is valid.
|
// Return whether the current sample is valid.
|
||||||
bool IsValid();
|
bool IsValid() const;
|
||||||
|
|
||||||
// Return sample offset for current sample.
|
// Return sample offset for current sample.
|
||||||
uint32 sample_offset() {
|
uint32 sample_offset() const { return iterator_->sample_offset; }
|
||||||
return iterator_->sample_offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return sample offset @ sample, 1-based.
|
// Return sample offset @ sample, 1-based.
|
||||||
uint32 SampleOffset(uint32 sample);
|
uint32 SampleOffset(uint32 sample) const;
|
||||||
|
|
||||||
// Return total number of samples.
|
// Return total number of samples.
|
||||||
uint32 NumSamples();
|
uint32 NumSamples() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32 sample_index_;
|
uint32 sample_index_;
|
||||||
|
|
|
@ -17,8 +17,7 @@ DecodingTimeIterator::DecodingTimeIterator(
|
||||||
const DecodingTimeToSample& decoding_time_to_sample)
|
const DecodingTimeToSample& decoding_time_to_sample)
|
||||||
: sample_index_(0),
|
: sample_index_(0),
|
||||||
decoding_time_table_(decoding_time_to_sample.decoding_time),
|
decoding_time_table_(decoding_time_to_sample.decoding_time),
|
||||||
iterator_(decoding_time_table_.begin()) {
|
iterator_(decoding_time_table_.begin()) {}
|
||||||
}
|
|
||||||
|
|
||||||
bool DecodingTimeIterator::AdvanceSample() {
|
bool DecodingTimeIterator::AdvanceSample() {
|
||||||
++sample_index_;
|
++sample_index_;
|
||||||
|
@ -31,13 +30,14 @@ bool DecodingTimeIterator::AdvanceSample() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DecodingTimeIterator::IsValid() {
|
bool DecodingTimeIterator::IsValid() const {
|
||||||
return iterator_ != decoding_time_table_.end()
|
return iterator_ != decoding_time_table_.end() &&
|
||||||
&& sample_index_ < iterator_->sample_count;
|
sample_index_ < iterator_->sample_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64 DecodingTimeIterator::Duration(uint32 start_sample, uint32 end_sample) {
|
uint64 DecodingTimeIterator::Duration(uint32 start_sample,
|
||||||
DCHECK(start_sample <= end_sample);
|
uint32 end_sample) const {
|
||||||
|
DCHECK_LE(start_sample, end_sample);
|
||||||
uint32 current_sample = 0;
|
uint32 current_sample = 0;
|
||||||
uint32 prev_sample = 0;
|
uint32 prev_sample = 0;
|
||||||
uint64 duration = 0;
|
uint64 duration = 0;
|
||||||
|
@ -45,8 +45,9 @@ uint64 DecodingTimeIterator::Duration(uint32 start_sample, uint32 end_sample) {
|
||||||
for (; it != decoding_time_table_.end(); ++it) {
|
for (; it != decoding_time_table_.end(); ++it) {
|
||||||
current_sample += it->sample_count;
|
current_sample += it->sample_count;
|
||||||
if (current_sample >= start_sample) {
|
if (current_sample >= start_sample) {
|
||||||
duration += (std::min(end_sample, current_sample)
|
duration += (std::min(end_sample, current_sample) -
|
||||||
- std::max(start_sample, prev_sample + 1) + 1) * it->sample_delta;
|
std::max(start_sample, prev_sample + 1) + 1) *
|
||||||
|
it->sample_delta;
|
||||||
if (current_sample >= end_sample)
|
if (current_sample >= end_sample)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +56,7 @@ uint64 DecodingTimeIterator::Duration(uint32 start_sample, uint32 end_sample) {
|
||||||
return duration;
|
return duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 DecodingTimeIterator::NumSamples() {
|
uint32 DecodingTimeIterator::NumSamples() const {
|
||||||
uint32 num_samples = 0;
|
uint32 num_samples = 0;
|
||||||
std::vector<DecodingTime>::const_iterator it = decoding_time_table_.begin();
|
std::vector<DecodingTime>::const_iterator it = decoding_time_table_.begin();
|
||||||
for (; it != decoding_time_table_.end(); ++it) {
|
for (; it != decoding_time_table_.end(); ++it) {
|
||||||
|
|
|
@ -29,18 +29,16 @@ class DecodingTimeIterator {
|
||||||
bool AdvanceSample();
|
bool AdvanceSample();
|
||||||
|
|
||||||
// Return whether the current sample is valid.
|
// Return whether the current sample is valid.
|
||||||
bool IsValid();
|
bool IsValid() const;
|
||||||
|
|
||||||
// Return sample delta for current sample.
|
// Return sample delta for current sample.
|
||||||
uint32 sample_delta() {
|
uint32 sample_delta() const { return iterator_->sample_delta; }
|
||||||
return iterator_->sample_delta;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return duration from start_sample to end_sample, both 1-based, inclusive.
|
// Return duration from start_sample to end_sample, both 1-based, inclusive.
|
||||||
uint64 Duration(uint32 start_sample, uint32 end_sample);
|
uint64 Duration(uint32 start_sample, uint32 end_sample) const;
|
||||||
|
|
||||||
// Return total number of samples in the table.
|
// Return total number of samples in the table.
|
||||||
uint32 NumSamples();
|
uint32 NumSamples() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32 sample_index_;
|
uint32 sample_index_;
|
||||||
|
|
|
@ -15,8 +15,7 @@ SyncSampleIterator::SyncSampleIterator(const SyncSample& sync_sample)
|
||||||
: sample_number_(1),
|
: sample_number_(1),
|
||||||
sync_sample_vector_(sync_sample.sample_number),
|
sync_sample_vector_(sync_sample.sample_number),
|
||||||
iterator_(sync_sample_vector_.begin()),
|
iterator_(sync_sample_vector_.begin()),
|
||||||
is_empty_(iterator_ == sync_sample_vector_.end()) {
|
is_empty_(iterator_ == sync_sample_vector_.end()) {}
|
||||||
}
|
|
||||||
|
|
||||||
bool SyncSampleIterator::AdvanceSample() {
|
bool SyncSampleIterator::AdvanceSample() {
|
||||||
if (iterator_ != sync_sample_vector_.end() && sample_number_ == *iterator_)
|
if (iterator_ != sync_sample_vector_.end() && sample_number_ == *iterator_)
|
||||||
|
@ -25,19 +24,19 @@ bool SyncSampleIterator::AdvanceSample() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SyncSampleIterator::IsSyncSample() {
|
bool SyncSampleIterator::IsSyncSample() const {
|
||||||
// If the sync sample box is not present, every sample is a sync sample.
|
// If the sync sample box is not present, every sample is a sync sample.
|
||||||
if (is_empty_)
|
if (is_empty_)
|
||||||
return true;
|
return true;
|
||||||
return iterator_ != sync_sample_vector_.end() && sample_number_ == *iterator_;
|
return iterator_ != sync_sample_vector_.end() && sample_number_ == *iterator_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SyncSampleIterator::IsSyncSample(uint32 sample) {
|
bool SyncSampleIterator::IsSyncSample(uint32 sample) const {
|
||||||
// If the sync sample box is not present, every sample is a sync sample.
|
// If the sync sample box is not present, every sample is a sync sample.
|
||||||
if (is_empty_)
|
if (is_empty_)
|
||||||
return true;
|
return true;
|
||||||
return std::binary_search(sync_sample_vector_.begin(),
|
return std::binary_search(
|
||||||
sync_sample_vector_.end(), sample);
|
sync_sample_vector_.begin(), sync_sample_vector_.end(), sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace mp4
|
} // namespace mp4
|
||||||
|
|
|
@ -27,10 +27,10 @@ class SyncSampleIterator {
|
||||||
bool AdvanceSample();
|
bool AdvanceSample();
|
||||||
|
|
||||||
// Return whether the current sample is a sync sample.
|
// Return whether the current sample is a sync sample.
|
||||||
bool IsSyncSample();
|
bool IsSyncSample() const;
|
||||||
|
|
||||||
// Return whether sample (1-based) is a sync sample.
|
// Return whether sample (1-based) is a sync sample.
|
||||||
bool IsSyncSample(uint32 sample);
|
bool IsSyncSample(uint32 sample) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32 sample_number_;
|
uint32 sample_number_;
|
||||||
|
|
Loading…
Reference in New Issue