sample_to_group_iterator.cc revision 010d83a9304c5a91596085d917d248abff47903a
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "media/formats/mp4/sample_to_group_iterator.h"
6
7#include "base/logging.h"
8
9namespace media {
10namespace mp4 {
11
12SampleToGroupIterator::SampleToGroupIterator(
13    const SampleToGroup& sample_to_group)
14    : remaining_samples_(0),
15      sample_to_group_table_(sample_to_group.entries),
16      iterator_(sample_to_group_table_.begin()) {
17  // Handle the case that the table contains an entry with sample count 0.
18  while (iterator_ != sample_to_group_table_.end()) {
19    remaining_samples_ = iterator_->sample_count;
20    if (remaining_samples_ > 0)
21      break;
22    ++iterator_;
23  }
24}
25
26SampleToGroupIterator::~SampleToGroupIterator() {}
27
28bool SampleToGroupIterator::Advance() {
29  DCHECK(IsValid());
30
31  --remaining_samples_;
32  // Handle the case that the table contains an entry with sample count 0.
33  while (remaining_samples_ == 0) {
34    ++iterator_;
35    if (iterator_ == sample_to_group_table_.end())
36      return false;
37    remaining_samples_ = iterator_->sample_count;
38  }
39  return true;
40}
41
42bool SampleToGroupIterator::IsValid() const {
43  return remaining_samples_ > 0;
44}
45
46}  // namespace mp4
47}  // namespace media
48