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 <deque> | 8 #include <deque> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
174 void StartWaitingForSeek(); | 174 void StartWaitingForSeek(); |
175 void Seek(TimeDelta time); | 175 void Seek(TimeDelta time); |
176 void CancelPendingSeek(); | 176 void CancelPendingSeek(); |
177 bool IsSeekPending() const; | 177 bool IsSeekPending() const; |
178 | 178 |
179 // Add buffers to this stream. Buffers are stored in SourceBufferStreams, | 179 // Add buffers to this stream. Buffers are stored in SourceBufferStreams, |
180 // which handle ordering and overlap resolution. | 180 // which handle ordering and overlap resolution. |
181 // Returns true if buffers were successfully added. | 181 // Returns true if buffers were successfully added. |
182 bool Append(const StreamParser::BufferQueue& buffers); | 182 bool Append(const StreamParser::BufferQueue& buffers); |
183 | 183 |
184 // Signal to the stream that duration has changed to |duration|. | |
185 void OnSetDuration(base::TimeDelta duration); | |
186 | |
184 // Returns the range of buffered data in this stream, capped at |duration|. | 187 // Returns the range of buffered data in this stream, capped at |duration|. |
185 Ranges<TimeDelta> GetBufferedRanges(base::TimeDelta duration) const; | 188 Ranges<TimeDelta> GetBufferedRanges(base::TimeDelta duration) const; |
186 | 189 |
187 // Signal to the stream that buffers handed in through subsequent calls to | 190 // Signal to the stream that buffers handed in through subsequent calls to |
188 // Append() belong to a media segment that starts at |start_timestamp|. | 191 // Append() belong to a media segment that starts at |start_timestamp|. |
189 void OnNewMediaSegment(TimeDelta start_timestamp); | 192 void OnNewMediaSegment(TimeDelta start_timestamp); |
190 | 193 |
191 // Called when mid-stream config updates occur. | 194 // Called when mid-stream config updates occur. |
192 // Returns true if the new config is accepted. | 195 // Returns true if the new config is accepted. |
193 // Returns false if the new config should trigger an error. | 196 // Returns false if the new config should trigger an error. |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
328 } | 331 } |
329 CreateReadDoneClosures_Locked(&closures); | 332 CreateReadDoneClosures_Locked(&closures); |
330 } | 333 } |
331 | 334 |
332 for (ClosureQueue::iterator it = closures.begin(); it != closures.end(); ++it) | 335 for (ClosureQueue::iterator it = closures.begin(); it != closures.end(); ++it) |
333 it->Run(); | 336 it->Run(); |
334 | 337 |
335 return true; | 338 return true; |
336 } | 339 } |
337 | 340 |
341 void ChunkDemuxerStream::OnSetDuration(base::TimeDelta duration) { | |
342 base::AutoLock auto_lock(lock_); | |
343 stream_->OnSetDuration(duration); | |
344 } | |
345 | |
338 Ranges<TimeDelta> ChunkDemuxerStream::GetBufferedRanges( | 346 Ranges<TimeDelta> ChunkDemuxerStream::GetBufferedRanges( |
339 base::TimeDelta duration) const { | 347 base::TimeDelta duration) const { |
340 base::AutoLock auto_lock(lock_); | 348 base::AutoLock auto_lock(lock_); |
341 Ranges<TimeDelta> range = stream_->GetBufferedTime(); | 349 Ranges<TimeDelta> range = stream_->GetBufferedTime(); |
342 | 350 |
343 if (range.size() == 0u) | 351 if (range.size() == 0u) |
344 return range; | 352 return range; |
345 | 353 |
346 // Clamp the end of the stream's buffered ranges to fit within the duration. | 354 // Clamp the end of the stream's buffered ranges to fit within the duration. |
347 // This can be done by intersecting the stream's range with the valid time | 355 // This can be done by intersecting the stream's range with the valid time |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
817 } | 825 } |
818 | 826 |
819 void ChunkDemuxer::Abort(const std::string& id) { | 827 void ChunkDemuxer::Abort(const std::string& id) { |
820 DVLOG(1) << "Abort(" << id << ")"; | 828 DVLOG(1) << "Abort(" << id << ")"; |
821 DCHECK(!id.empty()); | 829 DCHECK(!id.empty()); |
822 CHECK(IsValidId(id)); | 830 CHECK(IsValidId(id)); |
823 | 831 |
824 stream_parser_map_[id]->Flush(); | 832 stream_parser_map_[id]->Flush(); |
825 } | 833 } |
826 | 834 |
835 void ChunkDemuxer::SetDuration(base::TimeDelta duration) { | |
836 DVLOG(1) << "SetDuration(" << duration.InSecondsF() << ")"; | |
837 | |
838 UpdateDuration(duration); | |
acolwell GONE FROM CHROMIUM
2012/08/24 18:19:10
I think you need a
if(duration != duration_)
re
vrk (LEFT CHROMIUM)
2012/08/28 00:03:22
Did == instead :)
| |
839 | |
840 if (audio_) | |
841 audio_->OnSetDuration(duration); | |
842 | |
843 if (video_) | |
844 video_->OnSetDuration(duration); | |
845 } | |
846 | |
827 bool ChunkDemuxer::SetTimestampOffset(const std::string& id, TimeDelta offset) { | 847 bool ChunkDemuxer::SetTimestampOffset(const std::string& id, TimeDelta offset) { |
828 DVLOG(1) << "SetTimestampOffset(" << id << ", " << offset.InSecondsF() << ")"; | 848 DVLOG(1) << "SetTimestampOffset(" << id << ", " << offset.InSecondsF() << ")"; |
829 CHECK(IsValidId(id)); | 849 CHECK(IsValidId(id)); |
830 | 850 |
831 if (!source_info_map_[id].can_update_offset) | 851 if (!source_info_map_[id].can_update_offset) |
832 return false; | 852 return false; |
833 | 853 |
834 source_info_map_[id].timestamp_offset = offset; | 854 source_info_map_[id].timestamp_offset = offset; |
835 return true; | 855 return true; |
836 } | 856 } |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1156 | 1176 |
1157 Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges() const { | 1177 Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges() const { |
1158 if (audio_ && !video_) | 1178 if (audio_ && !video_) |
1159 return audio_->GetBufferedRanges(duration_); | 1179 return audio_->GetBufferedRanges(duration_); |
1160 else if (!audio_ && video_) | 1180 else if (!audio_ && video_) |
1161 return video_->GetBufferedRanges(duration_); | 1181 return video_->GetBufferedRanges(duration_); |
1162 return ComputeIntersection(); | 1182 return ComputeIntersection(); |
1163 } | 1183 } |
1164 | 1184 |
1165 } // namespace media | 1185 } // namespace media |
OLD | NEW |