OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/filters/chunk_demuxer.h" | 5 #include "media/filters/chunk_demuxer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <list> | 9 #include <list> |
10 #include <utility> | 10 #include <utility> |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 return range; | 150 return range; |
151 | 151 |
152 // Clamp the end of the stream's buffered ranges to fit within the duration. | 152 // Clamp the end of the stream's buffered ranges to fit within the duration. |
153 // This can be done by intersecting the stream's range with the valid time | 153 // This can be done by intersecting the stream's range with the valid time |
154 // range. | 154 // range. |
155 Ranges<TimeDelta> valid_time_range; | 155 Ranges<TimeDelta> valid_time_range; |
156 valid_time_range.Add(range.start(0), duration); | 156 valid_time_range.Add(range.start(0), duration); |
157 return range.IntersectionWith(valid_time_range); | 157 return range.IntersectionWith(valid_time_range); |
158 } | 158 } |
159 | 159 |
| 160 TimeDelta ChunkDemuxerStream::GetHighestPresentationTimestamp() const { |
| 161 return stream_->GetHighestPresentationTimestamp(); |
| 162 } |
| 163 |
160 TimeDelta ChunkDemuxerStream::GetBufferedDuration() const { | 164 TimeDelta ChunkDemuxerStream::GetBufferedDuration() const { |
161 return stream_->GetBufferedDuration(); | 165 return stream_->GetBufferedDuration(); |
162 } | 166 } |
163 | 167 |
164 size_t ChunkDemuxerStream::GetBufferedSize() const { | 168 size_t ChunkDemuxerStream::GetBufferedSize() const { |
165 return stream_->GetBufferedSize(); | 169 return stream_->GetBufferedSize(); |
166 } | 170 } |
167 | 171 |
168 void ChunkDemuxerStream::OnStartOfCodedFrameGroup( | 172 void ChunkDemuxerStream::OnStartOfCodedFrameGroup( |
169 DecodeTimestamp start_timestamp) { | 173 DecodeTimestamp start_timestamp) { |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges(const std::string& id) const { | 590 Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges(const std::string& id) const { |
587 base::AutoLock auto_lock(lock_); | 591 base::AutoLock auto_lock(lock_); |
588 DCHECK(!id.empty()); | 592 DCHECK(!id.empty()); |
589 | 593 |
590 MediaSourceStateMap::const_iterator itr = source_state_map_.find(id); | 594 MediaSourceStateMap::const_iterator itr = source_state_map_.find(id); |
591 | 595 |
592 DCHECK(itr != source_state_map_.end()); | 596 DCHECK(itr != source_state_map_.end()); |
593 return itr->second->GetBufferedRanges(duration_, state_ == ENDED); | 597 return itr->second->GetBufferedRanges(duration_, state_ == ENDED); |
594 } | 598 } |
595 | 599 |
| 600 base::TimeDelta ChunkDemuxer::GetHighestPresentationTimestamp( |
| 601 const std::string& id) const { |
| 602 base::AutoLock auto_lock(lock_); |
| 603 DCHECK(!id.empty()); |
| 604 |
| 605 MediaSourceStateMap::const_iterator itr = source_state_map_.find(id); |
| 606 |
| 607 DCHECK(itr != source_state_map_.end()); |
| 608 return itr->second->GetHighestPresentationTimestamp(); |
| 609 } |
| 610 |
596 bool ChunkDemuxer::EvictCodedFrames(const std::string& id, | 611 bool ChunkDemuxer::EvictCodedFrames(const std::string& id, |
597 base::TimeDelta currentMediaTime, | 612 base::TimeDelta currentMediaTime, |
598 size_t newDataSize) { | 613 size_t newDataSize) { |
599 DVLOG(1) << __FUNCTION__ << "(" << id << ")" | 614 DVLOG(1) << __FUNCTION__ << "(" << id << ")" |
600 << " media_time=" << currentMediaTime.InSecondsF() | 615 << " media_time=" << currentMediaTime.InSecondsF() |
601 << " newDataSize=" << newDataSize; | 616 << " newDataSize=" << newDataSize; |
602 base::AutoLock auto_lock(lock_); | 617 base::AutoLock auto_lock(lock_); |
603 | 618 |
604 // Note: The direct conversion from PTS to DTS is safe here, since we don't | 619 // Note: The direct conversion from PTS to DTS is safe here, since we don't |
605 // need to know currentTime precisely for GC. GC only needs to know which GOP | 620 // need to know currentTime precisely for GC. GC only needs to know which GOP |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1161 } | 1176 } |
1162 | 1177 |
1163 void ChunkDemuxer::ShutdownAllStreams() { | 1178 void ChunkDemuxer::ShutdownAllStreams() { |
1164 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); | 1179 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
1165 itr != source_state_map_.end(); ++itr) { | 1180 itr != source_state_map_.end(); ++itr) { |
1166 itr->second->Shutdown(); | 1181 itr->second->Shutdown(); |
1167 } | 1182 } |
1168 } | 1183 } |
1169 | 1184 |
1170 } // namespace media | 1185 } // namespace media |
OLD | NEW |