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