summaryrefslogtreecommitdiffstats
path: root/chromium/media/filters/audio_decoder_selector.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/filters/audio_decoder_selector.cc')
-rw-r--r--chromium/media/filters/audio_decoder_selector.cc187
1 files changed, 0 insertions, 187 deletions
diff --git a/chromium/media/filters/audio_decoder_selector.cc b/chromium/media/filters/audio_decoder_selector.cc
deleted file mode 100644
index a08d3c79c3c..00000000000
--- a/chromium/media/filters/audio_decoder_selector.cc
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "media/filters/audio_decoder_selector.h"
-
-#include "base/bind.h"
-#include "base/callback_helpers.h"
-#include "base/logging.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "media/base/audio_decoder_config.h"
-#include "media/base/bind_to_loop.h"
-#include "media/base/demuxer_stream.h"
-#include "media/base/pipeline.h"
-#include "media/filters/decrypting_audio_decoder.h"
-#include "media/filters/decrypting_demuxer_stream.h"
-
-namespace media {
-
-AudioDecoderSelector::AudioDecoderSelector(
- const scoped_refptr<base::MessageLoopProxy>& message_loop,
- ScopedVector<AudioDecoder> decoders,
- const SetDecryptorReadyCB& set_decryptor_ready_cb)
- : message_loop_(message_loop),
- decoders_(decoders.Pass()),
- set_decryptor_ready_cb_(set_decryptor_ready_cb),
- input_stream_(NULL),
- weak_ptr_factory_(this) {
-}
-
-AudioDecoderSelector::~AudioDecoderSelector() {
- DVLOG(2) << __FUNCTION__;
-}
-
-void AudioDecoderSelector::SelectAudioDecoder(
- DemuxerStream* stream,
- const StatisticsCB& statistics_cb,
- const SelectDecoderCB& select_decoder_cb) {
- DVLOG(2) << __FUNCTION__;
- DCHECK(message_loop_->BelongsToCurrentThread());
- DCHECK(stream);
-
- // Make sure |select_decoder_cb| runs on a different execution stack.
- select_decoder_cb_ = BindToCurrentLoop(select_decoder_cb);
-
- const AudioDecoderConfig& config = stream->audio_decoder_config();
- if (!config.IsValidConfig()) {
- DLOG(ERROR) << "Invalid audio stream config.";
- ReturnNullDecoder();
- return;
- }
-
- input_stream_ = stream;
- statistics_cb_ = statistics_cb;
-
- if (!config.is_encrypted()) {
- InitializeDecoder();
- return;
- }
-
- // This could happen if Encrypted Media Extension (EME) is not enabled.
- if (set_decryptor_ready_cb_.is_null()) {
- ReturnNullDecoder();
- return;
- }
-
- audio_decoder_.reset(new DecryptingAudioDecoder(
- message_loop_, set_decryptor_ready_cb_));
-
- audio_decoder_->Initialize(
- input_stream_,
- base::Bind(&AudioDecoderSelector::DecryptingAudioDecoderInitDone,
- weak_ptr_factory_.GetWeakPtr()),
- statistics_cb_);
-}
-
-void AudioDecoderSelector::Abort() {
- DVLOG(2) << __FUNCTION__;
- DCHECK(message_loop_->BelongsToCurrentThread());
-
- // This could happen when SelectAudioDecoder() was not called or when
- // |select_decoder_cb_| was already posted but not fired (e.g. in the
- // message loop queue).
- if (select_decoder_cb_.is_null())
- return;
-
- // We must be trying to initialize the |audio_decoder_| or the
- // |decrypted_stream_|. Invalid all weak pointers so that all initialization
- // callbacks won't fire.
- weak_ptr_factory_.InvalidateWeakPtrs();
-
- if (audio_decoder_) {
- // AudioDecoder doesn't provide a Stop() method. Also, |decrypted_stream_|
- // is either NULL or already initialized. We don't need to Stop()
- // |decrypted_stream_| in either case.
- ReturnNullDecoder();
- return;
- }
-
- if (decrypted_stream_) {
- decrypted_stream_->Stop(
- base::Bind(&AudioDecoderSelector::ReturnNullDecoder,
- weak_ptr_factory_.GetWeakPtr()));
- return;
- }
-
- NOTREACHED();
-}
-
-void AudioDecoderSelector::DecryptingAudioDecoderInitDone(
- PipelineStatus status) {
- DVLOG(2) << __FUNCTION__;
- DCHECK(message_loop_->BelongsToCurrentThread());
-
- if (status == PIPELINE_OK) {
- base::ResetAndReturn(&select_decoder_cb_).Run(
- audio_decoder_.Pass(), scoped_ptr<DecryptingDemuxerStream>());
- return;
- }
-
- audio_decoder_.reset();
-
- decrypted_stream_.reset(new DecryptingDemuxerStream(
- message_loop_, set_decryptor_ready_cb_));
-
- decrypted_stream_->Initialize(
- input_stream_,
- base::Bind(&AudioDecoderSelector::DecryptingDemuxerStreamInitDone,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void AudioDecoderSelector::DecryptingDemuxerStreamInitDone(
- PipelineStatus status) {
- DVLOG(2) << __FUNCTION__;
- DCHECK(message_loop_->BelongsToCurrentThread());
-
- if (status != PIPELINE_OK) {
- ReturnNullDecoder();
- return;
- }
-
- DCHECK(!decrypted_stream_->audio_decoder_config().is_encrypted());
- input_stream_ = decrypted_stream_.get();
- InitializeDecoder();
-}
-
-void AudioDecoderSelector::InitializeDecoder() {
- DVLOG(2) << __FUNCTION__;
- DCHECK(message_loop_->BelongsToCurrentThread());
- DCHECK(!audio_decoder_);
-
- if (decoders_.empty()) {
- ReturnNullDecoder();
- return;
- }
-
- audio_decoder_.reset(decoders_.front());
- decoders_.weak_erase(decoders_.begin());
-
- audio_decoder_->Initialize(input_stream_,
- base::Bind(&AudioDecoderSelector::DecoderInitDone,
- weak_ptr_factory_.GetWeakPtr()),
- statistics_cb_);
-}
-
-void AudioDecoderSelector::DecoderInitDone(PipelineStatus status) {
- DVLOG(2) << __FUNCTION__;
- DCHECK(message_loop_->BelongsToCurrentThread());
-
- if (status != PIPELINE_OK) {
- audio_decoder_.reset();
- InitializeDecoder();
- return;
- }
-
- base::ResetAndReturn(&select_decoder_cb_).Run(audio_decoder_.Pass(),
- decrypted_stream_.Pass());
-}
-
-void AudioDecoderSelector::ReturnNullDecoder() {
- DVLOG(2) << __FUNCTION__;
- DCHECK(message_loop_->BelongsToCurrentThread());
- base::ResetAndReturn(&select_decoder_cb_).Run(
- scoped_ptr<AudioDecoder>(), scoped_ptr<DecryptingDemuxerStream>());
-}
-
-} // namespace media