diff options
Diffstat (limited to 'chromium/media/filters/fake_demuxer_stream.cc')
-rw-r--r-- | chromium/media/filters/fake_demuxer_stream.cc | 70 |
1 files changed, 48 insertions, 22 deletions
diff --git a/chromium/media/filters/fake_demuxer_stream.cc b/chromium/media/filters/fake_demuxer_stream.cc index c6daa9f405f..78386e3b046 100644 --- a/chromium/media/filters/fake_demuxer_stream.cc +++ b/chromium/media/filters/fake_demuxer_stream.cc @@ -8,8 +8,8 @@ #include "base/callback_helpers.h" #include "base/location.h" #include "base/logging.h" -#include "base/message_loop/message_loop.h" -#include "media/base/bind_to_loop.h" +#include "base/message_loop/message_loop_proxy.h" +#include "media/base/bind_to_current_loop.h" #include "media/base/decoder_buffer.h" #include "media/base/test_helpers.h" #include "media/base/video_frame.h" @@ -33,26 +33,34 @@ const uint8 kIv[] = { FakeDemuxerStream::FakeDemuxerStream(int num_configs, int num_buffers_in_one_config, bool is_encrypted) - : message_loop_(base::MessageLoopProxy::current()), - num_configs_left_(num_configs), + : task_runner_(base::MessageLoopProxy::current()), + num_configs_(num_configs), num_buffers_in_one_config_(num_buffers_in_one_config), + config_changes_(num_configs > 1), 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), - next_read_num_(0), read_to_hold_(-1) { - DCHECK_GT(num_configs_left_, 0); - DCHECK_GT(num_buffers_in_one_config_, 0); + DCHECK_GT(num_configs, 0); + DCHECK_GT(num_buffers_in_one_config, 0); + Initialize(); UpdateVideoDecoderConfig(); } FakeDemuxerStream::~FakeDemuxerStream() {} +void FakeDemuxerStream::Initialize() { + DCHECK_EQ(-1, read_to_hold_); + num_configs_left_ = num_configs_; + 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); + splice_timestamp_ = kNoTimestamp(); + next_coded_size_ = gfx::Size(kStartWidth, kStartHeight); + next_read_num_ = 0; +} + void FakeDemuxerStream::Read(const ReadCB& read_cb) { - DCHECK(message_loop_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(read_cb_.is_null()); read_cb_ = BindToCurrentLoop(read_cb); @@ -65,40 +73,44 @@ void FakeDemuxerStream::Read(const ReadCB& read_cb) { } AudioDecoderConfig FakeDemuxerStream::audio_decoder_config() { - DCHECK(message_loop_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); NOTREACHED(); return AudioDecoderConfig(); } VideoDecoderConfig FakeDemuxerStream::video_decoder_config() { - DCHECK(message_loop_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); return video_decoder_config_; } // TODO(xhwang): Support audio if needed. DemuxerStream::Type FakeDemuxerStream::type() { - DCHECK(message_loop_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); return VIDEO; } void FakeDemuxerStream::EnableBitstreamConverter() { - DCHECK(message_loop_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); +} + +bool FakeDemuxerStream::SupportsConfigChanges() { + return config_changes_; } void FakeDemuxerStream::HoldNextRead() { - DCHECK(message_loop_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); read_to_hold_ = next_read_num_; } void FakeDemuxerStream::HoldNextConfigChangeRead() { - DCHECK(message_loop_->BelongsToCurrentThread()); + DCHECK(task_runner_->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(task_runner_->BelongsToCurrentThread()); DCHECK_EQ(read_to_hold_, next_read_num_); DCHECK(!read_cb_.is_null()); @@ -106,6 +118,15 @@ void FakeDemuxerStream::SatisfyRead() { DoRead(); } +void FakeDemuxerStream::SatisfyReadAndHoldNext() { + DCHECK(task_runner_->BelongsToCurrentThread()); + DCHECK_EQ(read_to_hold_, next_read_num_); + DCHECK(!read_cb_.is_null()); + + ++read_to_hold_; + DoRead(); +} + void FakeDemuxerStream::Reset() { read_to_hold_ = -1; @@ -113,6 +134,11 @@ void FakeDemuxerStream::Reset() { base::ResetAndReturn(&read_cb_).Run(kAborted, NULL); } +void FakeDemuxerStream::SeekToStart() { + Reset(); + Initialize(); +} + void FakeDemuxerStream::UpdateVideoDecoderConfig() { const gfx::Rect kVisibleRect(kStartWidth, kStartHeight); video_decoder_config_.Initialize( @@ -123,7 +149,7 @@ void FakeDemuxerStream::UpdateVideoDecoderConfig() { } void FakeDemuxerStream::DoRead() { - DCHECK(message_loop_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(!read_cb_.is_null()); next_read_num_++; @@ -151,11 +177,11 @@ void FakeDemuxerStream::DoRead() { buffer->set_decrypt_config(scoped_ptr<DecryptConfig>( new DecryptConfig(std::string(kKeyId, kKeyId + arraysize(kKeyId)), std::string(kIv, kIv + arraysize(kIv)), - 0, std::vector<SubsampleEntry>()))); } buffer->set_timestamp(current_timestamp_); buffer->set_duration(duration_); + buffer->set_splice_timestamp(splice_timestamp_); current_timestamp_ += duration_; num_buffers_left_in_current_config_--; |