1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "media/formats/mp4/sample_to_group_iterator.h"
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/logging.h"
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace media {
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace mp4 {
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)SampleToGroupIterator::SampleToGroupIterator(
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const SampleToGroup& sample_to_group)
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    : remaining_samples_(0),
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      sample_to_group_table_(sample_to_group.entries),
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      iterator_(sample_to_group_table_.begin()) {
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Handle the case that the table contains an entry with sample count 0.
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  while (iterator_ != sample_to_group_table_.end()) {
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    remaining_samples_ = iterator_->sample_count;
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (remaining_samples_ > 0)
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      break;
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ++iterator_;
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)SampleToGroupIterator::~SampleToGroupIterator() {}
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool SampleToGroupIterator::Advance() {
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  DCHECK(IsValid());
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  --remaining_samples_;
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Handle the case that the table contains an entry with sample count 0.
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  while (remaining_samples_ == 0) {
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ++iterator_;
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (iterator_ == sample_to_group_table_.end())
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      return false;
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    remaining_samples_ = iterator_->sample_count;
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return true;
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool SampleToGroupIterator::IsValid() const {
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return remaining_samples_ > 0;
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace mp4
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace media
48