Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(261)

Unified Diff: media/filters/audio_renderer_impl.cc

Issue 11492003: Encrypted Media: Support Audio Decrypt-Only. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/filters/audio_renderer_impl.cc
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
index c07048161d9967fde1beb70e79059d208d7e2719..6a8ee3bfa355763361ee210f2962e2f55f1fb4ff 100644
--- a/media/filters/audio_renderer_impl.cc
+++ b/media/filters/audio_renderer_impl.cc
@@ -19,6 +19,8 @@
#include "media/base/bind_to_loop.h"
#include "media/base/demuxer_stream.h"
#include "media/base/media_switches.h"
+#include "media/filters/audio_decoder_factory.h"
+#include "media/filters/decrypting_demuxer_stream.h"
namespace media {
@@ -92,6 +94,10 @@ void AudioRendererImpl::DoPause() {
void AudioRendererImpl::Flush(const base::Closure& callback) {
DCHECK(pipeline_thread_checker_.CalledOnValidThread());
+
+ if (decrypting_demuxer_stream_)
+ decrypting_demuxer_stream_->Reset(base::Closure());
+
decoder_->Reset(callback);
}
@@ -149,15 +155,17 @@ void AudioRendererImpl::Preroll(base::TimeDelta time,
sink_->Pause(true);
}
-void AudioRendererImpl::Initialize(const scoped_refptr<DemuxerStream>& stream,
- const AudioDecoderList& decoders,
- const PipelineStatusCB& init_cb,
- const StatisticsCB& statistics_cb,
- const base::Closure& underflow_cb,
- const TimeCB& time_cb,
- const base::Closure& ended_cb,
- const base::Closure& disabled_cb,
- const PipelineStatusCB& error_cb) {
+void AudioRendererImpl::Initialize(
+ const scoped_refptr<DemuxerStream>& stream,
+ const AudioDecoderList& decoders,
+ const RequestDecryptorNotificationCB& request_decryptor_notification_cb,
+ const PipelineStatusCB& init_cb,
+ const StatisticsCB& statistics_cb,
+ const base::Closure& underflow_cb,
+ const TimeCB& time_cb,
+ const base::Closure& ended_cb,
+ const base::Closure& disabled_cb,
+ const PipelineStatusCB& error_cb) {
DCHECK(pipeline_thread_checker_.CalledOnValidThread());
DCHECK(stream);
DCHECK(!decoders.empty());
@@ -180,46 +188,31 @@ void AudioRendererImpl::Initialize(const scoped_refptr<DemuxerStream>& stream,
disabled_cb_ = disabled_cb;
error_cb_ = error_cb;
- scoped_ptr<AudioDecoderList> decoder_list(new AudioDecoderList(decoders));
- InitializeNextDecoder(stream, decoder_list.Pass());
-}
-
-void AudioRendererImpl::InitializeNextDecoder(
- const scoped_refptr<DemuxerStream>& demuxer_stream,
- scoped_ptr<AudioDecoderList> decoders) {
- DCHECK(pipeline_thread_checker_.CalledOnValidThread());
- DCHECK(!decoders->empty());
-
- scoped_refptr<AudioDecoder> decoder = decoders->front();
- decoders->pop_front();
-
- DCHECK(decoder);
- decoder_ = decoder;
- decoder->Initialize(
- demuxer_stream, BindToLoop(base::MessageLoopProxy::current(), base::Bind(
- &AudioRendererImpl::OnDecoderInitDone, this, demuxer_stream,
- base::Passed(&decoders))),
- statistics_cb_);
+ factory_.reset(new AudioDecoderFactory(base::MessageLoopProxy::current(),
+ decoders,
+ request_decryptor_notification_cb));
+ factory_->InitAudioDecoder(
+ stream,
+ statistics_cb,
+ base::Bind(&AudioRendererImpl::OnDecoderInitDone, this));
}
void AudioRendererImpl::OnDecoderInitDone(
- const scoped_refptr<DemuxerStream>& demuxer_stream,
- scoped_ptr<AudioDecoderList> decoders,
- PipelineStatus status) {
+ const scoped_refptr<AudioDecoder>& audio_decoder,
+ const scoped_refptr<DecryptingDemuxerStream>& decrypting_demuxer_stream) {
DCHECK(pipeline_thread_checker_.CalledOnValidThread());
+ decoder_ = audio_decoder;
+ decrypting_demuxer_stream_ = decrypting_demuxer_stream;
+ factory_.reset();
+
if (state_ == kStopped) {
DCHECK(!sink_);
return;
}
- if (!decoders->empty() && status == DECODER_ERROR_NOT_SUPPORTED) {
- InitializeNextDecoder(demuxer_stream, decoders.Pass());
- return;
- }
-
- if (status != PIPELINE_OK) {
- base::ResetAndReturn(&init_cb_).Run(status);
+ if (!decoder_) {
+ base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
return;
}

Powered by Google App Engine
This is Rietveld 408576698