Index: media/filters/chunk_demuxer.cc |
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
index 6322f5a97b99e91e8797eff90a6403869019bcb1..15d8b09148daaef9a6b621cef0788d6546d18614 100644 |
--- a/media/filters/chunk_demuxer.cc |
+++ b/media/filters/chunk_demuxer.cc |
@@ -181,6 +181,9 @@ class ChunkDemuxerStream : public DemuxerStream { |
// Returns true if buffers were successfully added. |
bool Append(const StreamParser::BufferQueue& buffers); |
+ // Signal to the stream that duration has changed to |duration|. |
+ void OnSetDuration(base::TimeDelta duration); |
+ |
// Returns the range of buffered data in this stream, capped at |duration|. |
Ranges<TimeDelta> GetBufferedRanges(base::TimeDelta duration) const; |
@@ -335,6 +338,11 @@ bool ChunkDemuxerStream::Append(const StreamParser::BufferQueue& buffers) { |
return true; |
} |
+void ChunkDemuxerStream::OnSetDuration(base::TimeDelta duration) { |
+ base::AutoLock auto_lock(lock_); |
+ stream_->OnSetDuration(duration); |
+} |
+ |
Ranges<TimeDelta> ChunkDemuxerStream::GetBufferedRanges( |
base::TimeDelta duration) const { |
base::AutoLock auto_lock(lock_); |
@@ -824,6 +832,21 @@ void ChunkDemuxer::Abort(const std::string& id) { |
stream_parser_map_[id]->Flush(); |
} |
+void ChunkDemuxer::SetDuration(base::TimeDelta duration) { |
+ DVLOG(1) << "SetDuration(" << duration.InSecondsF() << ")"; |
+ |
+ if (duration == duration_) |
+ return; |
+ |
+ UpdateDuration(duration); |
+ |
+ if (audio_) |
+ audio_->OnSetDuration(duration); |
+ |
+ if (video_) |
+ video_->OnSetDuration(duration); |
+} |
+ |
bool ChunkDemuxer::SetTimestampOffset(const std::string& id, TimeDelta offset) { |
DVLOG(1) << "SetTimestampOffset(" << id << ", " << offset.InSecondsF() << ")"; |
CHECK(IsValidId(id)); |