Shaka Packager SDK
Loading...
Searching...
No Matches
chunk_info_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/chunk_info_iterator.h>
8
9#include <algorithm>
10#include <cstdint>
11#include <limits>
12#include <vector>
13
14#include <absl/log/check.h>
15
16#include <packager/media/formats/mp4/box_definitions.h>
17
18namespace shaka {
19namespace media {
20namespace mp4 {
21
23 : chunk_sample_index_(0),
24 current_chunk_(0),
25 chunk_info_table_(sample_to_chunk.chunk_info),
26 iterator_(chunk_info_table_.begin()) {
27 if (iterator_ != chunk_info_table_.end())
28 current_chunk_ = iterator_->first_chunk;
29}
30ChunkInfoIterator::~ChunkInfoIterator() {}
31
33 ++current_chunk_;
34 if (iterator_ + 1 != chunk_info_table_.end()) {
35 if (current_chunk_ >= (iterator_ + 1)->first_chunk)
36 ++iterator_;
37 }
38 chunk_sample_index_ = 0;
39 return true;
40}
41
43 ++chunk_sample_index_;
44 if (chunk_sample_index_ >= iterator_->samples_per_chunk)
46 return true;
47}
48
50 return iterator_ != chunk_info_table_.end() &&
51 chunk_sample_index_ < iterator_->samples_per_chunk;
52}
53
54uint32_t ChunkInfoIterator::NumSamples(uint32_t start_chunk,
55 uint32_t end_chunk) const {
56 DCHECK_LE(start_chunk, end_chunk);
57
58 uint32_t last_chunk = 0;
59 uint32_t num_samples = 0;
60 for (std::vector<ChunkInfo>::const_iterator it = chunk_info_table_.begin();
61 it != chunk_info_table_.end(); ++it) {
62 last_chunk = (it + 1 == chunk_info_table_.end())
63 ? std::numeric_limits<uint32_t>::max()
64 : (it + 1)->first_chunk - 1;
65 if (last_chunk >= start_chunk) {
66 num_samples += (std::min(end_chunk, last_chunk) -
67 std::max(start_chunk, it->first_chunk) + 1) *
68 it->samples_per_chunk;
69 if (last_chunk >= end_chunk)
70 break;
71 }
72 }
73 return num_samples;
74}
75
76} // namespace mp4
77} // namespace media
78} // namespace shaka
uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const
ChunkInfoIterator(const SampleToChunk &sample_to_chunk)
Create ChunkInfoIterator from sample to chunk box.
All the methods that are virtual are virtual for mocking.