| Index: media/filters/source_buffer_stream.cc
|
| diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc
|
| index 5626ff898f3e688fb3323eaa4e049f3c370c6450..6207c99810a58cc09998a68db7704318a9475d79 100644
|
| --- a/media/filters/source_buffer_stream.cc
|
| +++ b/media/filters/source_buffer_stream.cc
|
| @@ -359,6 +359,7 @@ SourceBufferStream::SourceBufferStream(const AudioDecoderConfig& audio_config,
|
| memory_limit_(kDefaultAudioMemoryLimit),
|
| config_change_pending_(false),
|
| splice_buffers_index_(0),
|
| + pre_splice_complete_(false),
|
| splice_frames_enabled_(splice_frames_enabled) {
|
| DCHECK(audio_config.IsValidConfig());
|
| audio_configs_.push_back(audio_config);
|
| @@ -384,6 +385,7 @@ SourceBufferStream::SourceBufferStream(const VideoDecoderConfig& video_config,
|
| memory_limit_(kDefaultVideoMemoryLimit),
|
| config_change_pending_(false),
|
| splice_buffers_index_(0),
|
| + pre_splice_complete_(false),
|
| splice_frames_enabled_(splice_frames_enabled) {
|
| DCHECK(video_config.IsValidConfig());
|
| video_configs_.push_back(video_config);
|
| @@ -410,6 +412,7 @@ SourceBufferStream::SourceBufferStream(const TextTrackConfig& text_config,
|
| memory_limit_(kDefaultAudioMemoryLimit),
|
| config_change_pending_(false),
|
| splice_buffers_index_(0),
|
| + pre_splice_complete_(false),
|
| splice_frames_enabled_(splice_frames_enabled) {}
|
|
|
| SourceBufferStream::~SourceBufferStream() {
|
| @@ -691,6 +694,7 @@ void SourceBufferStream::ResetSeekState() {
|
| last_output_buffer_timestamp_ = kNoTimestamp();
|
| splice_buffers_index_ = 0;
|
| splice_buffer_ = NULL;
|
| + pre_splice_complete_ = false;
|
| }
|
|
|
| bool SourceBufferStream::ShouldSeekToStartOfBuffered(
|
| @@ -1170,8 +1174,9 @@ SourceBufferStream::Status SourceBufferStream::GetNextBuffer(
|
| }
|
|
|
| // Did we hand out the last pre-splice buffer on the previous call?
|
| - if (splice_buffers_index_ == last_splice_buffer_index) {
|
| - splice_buffers_index_++;
|
| + if (!pre_splice_complete_) {
|
| + DCHECK_EQ(splice_buffers_index_, last_splice_buffer_index);
|
| + pre_splice_complete_ = true;
|
| config_change_pending_ = true;
|
| DVLOG(1) << "Config change (forced for fade in of splice frame).";
|
| return SourceBufferStream::kConfigChange;
|
| @@ -1181,11 +1186,13 @@ SourceBufferStream::Status SourceBufferStream::GetNextBuffer(
|
| // so hand out the final buffer for fade in. Because a config change is
|
| // always issued prior to handing out this buffer, any changes in config id
|
| // have been inherently handled.
|
| - DCHECK_GE(splice_buffers_index_, splice_buffers.size());
|
| + DCHECK(pre_splice_complete_);
|
| + DCHECK_EQ(splice_buffers_index_, splice_buffers.size() - 1);
|
| DCHECK(splice_buffers.back()->splice_timestamp() == kNoTimestamp());
|
| *out_buffer = splice_buffers.back();
|
| splice_buffer_ = NULL;
|
| splice_buffers_index_ = 0;
|
| + pre_splice_complete_ = false;
|
| return SourceBufferStream::kSuccess;
|
| }
|
|
|
|
|