summaryrefslogtreecommitdiffstats
path: root/chromium/media/filters/fake_demuxer_stream.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/filters/fake_demuxer_stream.cc')
-rw-r--r--chromium/media/filters/fake_demuxer_stream.cc70
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_--;