Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(517)

Unified Diff: media/filters/source_buffer_stream.cc

Issue 10690124: Revert 145965 - Make sure previous seek points in SourceBufferStream are ignored during overlaps (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/source_buffer_stream.h ('k') | media/filters/source_buffer_stream_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/source_buffer_stream.cc
===================================================================
--- media/filters/source_buffer_stream.cc (revision 145967)
+++ media/filters/source_buffer_stream.cc (working copy)
@@ -95,9 +95,6 @@
// has the next buffer yet.
bool HasNextBufferPosition() const;
- // Resets this range to an "unseeked" state.
- void ResetNextBufferPosition();
-
// Returns the timestamp of the next buffer that will be returned from
// GetNextBuffer(), or kNoTimestamp() if the timestamp is unknown.
base::TimeDelta GetNextTimestamp() const;
@@ -326,7 +323,7 @@
// beginning of the range.
// TODO(vrk): This should be done by ChunkDemuxer. (crbug.com/132815)
if (!seek_pending_ && !selected_range_) {
- SetSelectedRange(*range_for_new_buffers);
+ selected_range_ = *range_for_new_buffers;
selected_range_->Seek(buffers.front()->GetDecodeTimestamp());
}
@@ -341,7 +338,7 @@
// returned in the next call to GetNextBuffer().
if (deleted_next_buffer) {
DCHECK(!seek_pending_);
- SetSelectedRange(*range_for_new_buffers);
+ selected_range_ = *range_for_new_buffers;
if (!deleted_buffers.empty()) {
// Seek the range to the keyframe at or after |next_buffer_timestamp|.
selected_range_->SeekAheadTo(next_buffer_timestamp);
@@ -356,7 +353,6 @@
}
DCHECK(IsRangeListSorted(ranges_));
- DCHECK(OnlySelectedRangeIsSeeked());
return true;
}
@@ -377,15 +373,6 @@
return true;
}
-bool SourceBufferStream::OnlySelectedRangeIsSeeked() const {
- for (RangeList::const_iterator itr = ranges_.begin();
- itr != ranges_.end(); ++itr) {
- if ((*itr)->HasNextBufferPosition() && (*itr) != selected_range_)
- return false;
- }
- return !selected_range_ || selected_range_->HasNextBufferPosition();
-}
-
void SourceBufferStream::UpdateMaxInterbufferDistance(
const BufferQueue& buffers) {
DCHECK(!buffers.empty());
@@ -437,25 +424,18 @@
// Delete the buffers that are overlapped by |new_buffers|, then append
// |new_buffers| to the end of the range.
- BufferQueue saved_buffers;
- bool deleted_next_buffer_from_range =
- range_for_new_buffers->TruncateAt(new_buffers.front(), &saved_buffers);
+ DCHECK(!*deleted_next_buffer);
+ *deleted_next_buffer =
+ range_for_new_buffers->TruncateAt(new_buffers.front(), deleted_buffers);
range_for_new_buffers->AppendToEnd(new_buffers);
- if (selected_range_ != range_for_new_buffers)
- return;
-
- DCHECK(!*deleted_next_buffer);
- *deleted_buffers = saved_buffers;
- *deleted_next_buffer = deleted_next_buffer_from_range;
-
// If this was a middle overlap resulting in a new range, and the next buffer
// position has been transferred to the newly created range, update the
// |selected_range_| accordingly.
if (new_next_range && new_next_range->HasNextBufferPosition()) {
DCHECK(!range_for_new_buffers->HasNextBufferPosition());
DCHECK(!*deleted_next_buffer);
- SetSelectedRange(new_next_range);
+ selected_range_ = new_next_range;
}
}
@@ -472,10 +452,10 @@
while (next_range_itr != ranges_.end() &&
range_with_new_buffers->CompletelyOverlaps(**next_range_itr)) {
if (*next_range_itr == selected_range_) {
+ selected_range_ = NULL;
DCHECK(!*deleted_next_buffer);
- *deleted_next_buffer = selected_range_->DeleteAll(deleted_buffers);
+ *deleted_next_buffer = (*next_range_itr)->DeleteAll(deleted_buffers);
DCHECK(*deleted_next_buffer);
- SetSelectedRange(NULL);
}
delete *next_range_itr;
next_range_itr = ranges_.erase(next_range_itr);
@@ -519,13 +499,12 @@
// |new_next_range|, make |new_next_range| the |selected_range_|.
if (new_next_range && new_next_range->HasNextBufferPosition()) {
DCHECK(!overlapped_range->HasNextBufferPosition());
- SetSelectedRange(new_next_range);
+ selected_range_ = new_next_range;
return;
}
// Save the buffers in |overlapped_range|.
DCHECK(!*deleted_next_buffer);
- DCHECK_EQ(overlapped_range.get(), selected_range_);
*deleted_next_buffer = overlapped_range->DeleteAll(deleted_buffers);
DCHECK(*deleted_next_buffer);
}
@@ -575,7 +554,7 @@
if ((*next_range_itr)->HasNextBuffer() &&
selected_range_->IsNextInSequence(
track_buffer_.back(), (*next_range_itr)->GetNextTimestamp())) {
- SetSelectedRange(*next_range_itr);
+ selected_range_ = *next_range_itr;
}
}
}
@@ -594,7 +573,7 @@
// Update |selected_range_| pointer if |range| has become selected after
// merges.
if (transfer_current_position)
- SetSelectedRange(range_with_new_buffers);
+ selected_range_ = range_with_new_buffers;
delete *next_range_itr;
ranges_.erase(next_range_itr);
@@ -602,7 +581,7 @@
}
void SourceBufferStream::Seek(base::TimeDelta timestamp) {
- SetSelectedRange(NULL);
+ selected_range_ = NULL;
track_buffer_.clear();
seek_buffer_timestamp_ = timestamp;
@@ -617,7 +596,7 @@
if (itr == ranges_.end())
return;
- SetSelectedRange(*itr);
+ selected_range_ = *itr;
selected_range_->Seek(timestamp);
seek_pending_ = false;
end_of_stream_ = false;
@@ -690,12 +669,6 @@
return itr;
}
-void SourceBufferStream::SetSelectedRange(SourceBufferRange* range) {
- if (selected_range_)
- selected_range_->ResetNextBufferPosition();
- selected_range_ = range;
-}
-
Ranges<base::TimeDelta> SourceBufferStream::GetBufferedTime() const {
Ranges<base::TimeDelta> ranges;
for (RangeList::const_iterator itr = ranges_.begin();
@@ -932,12 +905,6 @@
return next_buffer_index_ >= 0 || waiting_for_keyframe_;
}
-void SourceBufferRange::ResetNextBufferPosition() {
- next_buffer_index_ = -1;
- waiting_for_keyframe_ = false;
- next_keyframe_timestamp_ = kNoTimestamp();
-}
-
void SourceBufferRange::AppendToEnd(const SourceBufferRange& range,
bool transfer_current_position) {
DCHECK(CanAppendToEnd(range));
« no previous file with comments | « media/filters/source_buffer_stream.h ('k') | media/filters/source_buffer_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698