summaryrefslogtreecommitdiff
path: root/chromium/media/filters/decrypting_demuxer_stream.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/filters/decrypting_demuxer_stream.cc')
-rw-r--r--chromium/media/filters/decrypting_demuxer_stream.cc50
1 files changed, 33 insertions, 17 deletions
diff --git a/chromium/media/filters/decrypting_demuxer_stream.cc b/chromium/media/filters/decrypting_demuxer_stream.cc
index 1f183ceb288..55021489ba6 100644
--- a/chromium/media/filters/decrypting_demuxer_stream.cc
+++ b/chromium/media/filters/decrypting_demuxer_stream.cc
@@ -43,17 +43,16 @@ DecryptingDemuxerStream::DecryptingDemuxerStream(
key_added_while_decrypt_pending_(false) {
}
-void DecryptingDemuxerStream::Initialize(
- DemuxerStream* stream,
- const PipelineStatusCB& status_cb) {
- DVLOG(2) << "Initialize()";
+void DecryptingDemuxerStream::Initialize(DemuxerStream* stream,
+ const PipelineStatusCB& status_cb) {
+ DVLOG(2) << __FUNCTION__;
DCHECK(message_loop_->BelongsToCurrentThread());
DCHECK_EQ(state_, kUninitialized) << state_;
DCHECK(!demuxer_stream_);
weak_this_ = weak_factory_.GetWeakPtr();
demuxer_stream_ = stream;
- init_cb_ = status_cb;
+ init_cb_ = BindToCurrentLoop(status_cb);
InitializeDecoderConfig();
@@ -63,27 +62,34 @@ void DecryptingDemuxerStream::Initialize(
}
void DecryptingDemuxerStream::Read(const ReadCB& read_cb) {
- DVLOG(3) << "Read()";
+ DVLOG(3) << __FUNCTION__;
DCHECK(message_loop_->BelongsToCurrentThread());
DCHECK_EQ(state_, kIdle) << state_;
DCHECK(!read_cb.is_null());
CHECK(read_cb_.is_null()) << "Overlapping reads are not supported.";
- read_cb_ = read_cb;
+ read_cb_ = BindToCurrentLoop(read_cb);
state_ = kPendingDemuxerRead;
demuxer_stream_->Read(
base::Bind(&DecryptingDemuxerStream::DecryptBuffer, weak_this_));
}
void DecryptingDemuxerStream::Reset(const base::Closure& closure) {
- DVLOG(2) << "Reset() - state: " << state_;
+ DVLOG(2) << __FUNCTION__ << " - state: " << state_;
DCHECK(message_loop_->BelongsToCurrentThread());
- DCHECK(state_ != kUninitialized && state_ != kDecryptorRequested) << state_;
- DCHECK(init_cb_.is_null()); // No Reset() during pending initialization.
+ DCHECK(state_ != kUninitialized) << state_;
DCHECK(reset_cb_.is_null());
reset_cb_ = BindToCurrentLoop(closure);
+ if (state_ == kDecryptorRequested) {
+ DCHECK(!init_cb_.is_null());
+ set_decryptor_ready_cb_.Run(DecryptorReadyCB());
+ base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_ABORT);
+ DoReset();
+ return;
+ }
+
decryptor_->CancelDecrypt(GetDecryptorStreamType());
// Reset() cannot complete if the read callback is still pending.
@@ -126,10 +132,12 @@ void DecryptingDemuxerStream::EnableBitstreamConverter() {
demuxer_stream_->EnableBitstreamConverter();
}
-DecryptingDemuxerStream::~DecryptingDemuxerStream() {}
+DecryptingDemuxerStream::~DecryptingDemuxerStream() {
+ DVLOG(2) << __FUNCTION__ << " : state_ = " << state_;
+}
void DecryptingDemuxerStream::SetDecryptor(Decryptor* decryptor) {
- DVLOG(2) << "SetDecryptor()";
+ DVLOG(2) << __FUNCTION__;
DCHECK(message_loop_->BelongsToCurrentThread());
DCHECK_EQ(state_, kDecryptorRequested) << state_;
DCHECK(!init_cb_.is_null());
@@ -138,8 +146,8 @@ void DecryptingDemuxerStream::SetDecryptor(Decryptor* decryptor) {
set_decryptor_ready_cb_.Reset();
if (!decryptor) {
- base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
state_ = kUninitialized;
+ base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
return;
}
@@ -156,7 +164,7 @@ void DecryptingDemuxerStream::SetDecryptor(Decryptor* decryptor) {
void DecryptingDemuxerStream::DecryptBuffer(
DemuxerStream::Status status,
const scoped_refptr<DecoderBuffer>& buffer) {
- DVLOG(3) << "DecryptBuffer()";
+ DVLOG(3) << __FUNCTION__;
DCHECK(message_loop_->BelongsToCurrentThread());
DCHECK_EQ(state_, kPendingDemuxerRead) << state_;
DCHECK(!read_cb_.is_null());
@@ -212,7 +220,7 @@ void DecryptingDemuxerStream::DecryptPendingBuffer() {
void DecryptingDemuxerStream::DeliverBuffer(
Decryptor::Status status,
const scoped_refptr<DecoderBuffer>& decrypted_buffer) {
- DVLOG(3) << "DeliverBuffer() - status: " << status;
+ DVLOG(3) << __FUNCTION__ << " - status: " << status;
DCHECK(message_loop_->BelongsToCurrentThread());
DCHECK_EQ(state_, kPendingDecrypt) << state_;
DCHECK_NE(status, Decryptor::kNeedMoreData);
@@ -272,9 +280,15 @@ void DecryptingDemuxerStream::OnKeyAdded() {
}
void DecryptingDemuxerStream::DoReset() {
+ DCHECK(state_ != kUninitialized);
DCHECK(init_cb_.is_null());
DCHECK(read_cb_.is_null());
- state_ = kIdle;
+
+ if (state_ == kDecryptorRequested)
+ state_ = kUninitialized;
+ else
+ state_ = kIdle;
+
base::ResetAndReturn(&reset_cb_).Run();
}
@@ -302,7 +316,9 @@ void DecryptingDemuxerStream::InitializeDecoderConfig() {
input_audio_config.extra_data(),
input_audio_config.extra_data_size(),
false, // Output audio is not encrypted.
- false);
+ false,
+ base::TimeDelta(),
+ base::TimeDelta());
break;
}