diff options
Diffstat (limited to 'chromium/media/filters/source_buffer_stream.cc')
-rw-r--r-- | chromium/media/filters/source_buffer_stream.cc | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/chromium/media/filters/source_buffer_stream.cc b/chromium/media/filters/source_buffer_stream.cc index b0038dd7bbb..7c76c84a049 100644 --- a/chromium/media/filters/source_buffer_stream.cc +++ b/chromium/media/filters/source_buffer_stream.cc @@ -471,6 +471,9 @@ bool SourceBufferStream::Append( void SourceBufferStream::Remove(base::TimeDelta start, base::TimeDelta end, base::TimeDelta duration) { + DVLOG(1) << __FUNCTION__ << "(" << start.InSecondsF() + << ", " << end.InSecondsF() + << ", " << duration.InSecondsF() << ")"; DCHECK(start >= base::TimeDelta()) << start.InSecondsF(); DCHECK(start < end) << "start " << start.InSecondsF() << " end " << end.InSecondsF(); @@ -497,17 +500,22 @@ void SourceBufferStream::Remove(base::TimeDelta start, base::TimeDelta end, if (new_range) { itr = ranges_.insert(++itr, new_range); --itr; + + // Update the selected range if the next buffer position was transferred + // to |new_range|. + if (new_range->HasNextBufferPosition()) + SetSelectedRange(new_range); } // If the current range now is completely covered by the removal // range then delete it and move on. if (start <= range->GetStartTimestamp()) { if (selected_range_ == range) - SetSelectedRange(NULL); + SetSelectedRange(NULL); - delete range; - itr = ranges_.erase(itr); - continue; + delete range; + itr = ranges_.erase(itr); + continue; } // Truncate the current range so that it only contains data before @@ -518,6 +526,7 @@ void SourceBufferStream::Remove(base::TimeDelta start, base::TimeDelta end, // Check to see if the current playback position was removed and // update the selected range appropriately. if (!saved_buffers.empty()) { + DCHECK(!range->HasNextBufferPosition()); SetSelectedRange(NULL); SetSelectedRangeIfNeeded(saved_buffers.front()->GetDecodeTimestamp()); } @@ -525,6 +534,9 @@ void SourceBufferStream::Remove(base::TimeDelta start, base::TimeDelta end, // Move on to the next range. ++itr; } + + DCHECK(IsRangeListSorted(ranges_)); + DCHECK(OnlySelectedRangeIsSeeked()); } void SourceBufferStream::ResetSeekState() { @@ -992,6 +1004,8 @@ void SourceBufferStream::OnSetDuration(base::TimeDelta duration) { // Need to partially truncate this range. if ((*itr)->GetStartTimestamp() < duration) { (*itr)->TruncateAt(duration, NULL, false); + if ((*itr == selected_range_) && !selected_range_->HasNextBufferPosition()) + SetSelectedRange(NULL); ++itr; } @@ -1253,6 +1267,8 @@ void SourceBufferStream::CompleteConfigChange() { void SourceBufferStream::SetSelectedRangeIfNeeded( const base::TimeDelta timestamp) { + DVLOG(1) << __FUNCTION__ << "(" << timestamp.InSecondsF() << ")"; + if (selected_range_) { DCHECK(track_buffer_.empty()); return; |