Index: media/filters/fake_demuxer_stream.cc |
diff --git a/media/filters/fake_demuxer_stream.cc b/media/filters/fake_demuxer_stream.cc |
index 3cc7fa666659735715142351482b1868583eb52d..8fdd5d3686305e4e14c67883e24d7a533300530a 100644 |
--- a/media/filters/fake_demuxer_stream.cc |
+++ b/media/filters/fake_demuxer_stream.cc |
@@ -34,10 +34,12 @@ FakeDemuxerStream::FakeDemuxerStream(int num_configs, |
num_buffers_in_one_config_(num_buffers_in_one_config), |
is_encrypted_(is_encrypted), |
num_buffers_left_in_current_config_(num_buffers_in_one_config), |
+ num_buffers_returned_(0), |
current_timestamp_(base::TimeDelta::FromMilliseconds(kStartTimestampMs)), |
duration_(base::TimeDelta::FromMilliseconds(kDurationMs)), |
next_coded_size_(kStartWidth, kStartHeight), |
- hold_next_read_(false) { |
+ next_read_num_(0), |
+ read_to_hold_(-1) { |
DCHECK_GT(num_configs_left_, 0); |
DCHECK_GT(num_buffers_in_one_config_, 0); |
UpdateVideoDecoderConfig(); |
@@ -51,8 +53,11 @@ void FakeDemuxerStream::Read(const ReadCB& read_cb) { |
read_cb_ = BindToCurrentLoop(read_cb); |
- if (!hold_next_read_) |
- DoRead(); |
+ if (read_to_hold_ == next_read_num_) |
+ return; |
+ |
+ DCHECK(read_to_hold_ == -1 || read_to_hold_ > next_read_num_); |
+ DoRead(); |
} |
const AudioDecoderConfig& FakeDemuxerStream::audio_decoder_config() { |
@@ -78,19 +83,27 @@ void FakeDemuxerStream::EnableBitstreamConverter() { |
void FakeDemuxerStream::HoldNextRead() { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
- hold_next_read_ = true; |
+ read_to_hold_ = next_read_num_; |
+} |
+ |
+void FakeDemuxerStream::HoldNextConfigChangeRead() { |
+ DCHECK(message_loop_->BelongsToCurrentThread()); |
+ // Set |read_to_hold_| to be the next config change read. |
+ read_to_hold_ = next_read_num_ + num_buffers_in_one_config_ - |
+ next_read_num_ % (num_buffers_in_one_config_ + 1); |
} |
void FakeDemuxerStream::SatisfyRead() { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
- DCHECK(hold_next_read_); |
+ DCHECK_EQ(read_to_hold_, next_read_num_); |
DCHECK(!read_cb_.is_null()); |
+ read_to_hold_ = -1; |
DoRead(); |
} |
void FakeDemuxerStream::Reset() { |
- hold_next_read_ = false; |
+ read_to_hold_ = -1; |
if (!read_cb_.is_null()) |
base::ResetAndReturn(&read_cb_).Run(kAborted, NULL); |
@@ -109,6 +122,8 @@ void FakeDemuxerStream::DoRead() { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
DCHECK(!read_cb_.is_null()); |
+ next_read_num_++; |
+ |
if (num_buffers_left_in_current_config_ == 0) { |
// End of stream. |
if (num_configs_left_ == 0) { |
@@ -143,6 +158,7 @@ void FakeDemuxerStream::DoRead() { |
if (num_buffers_left_in_current_config_ == 0) |
num_configs_left_--; |
+ num_buffers_returned_++; |
base::ResetAndReturn(&read_cb_).Run(kOk, buffer); |
} |