Index: chromecast/media/cma/pipeline/audio_pipeline_impl.cc |
diff --git a/chromecast/media/cma/pipeline/audio_pipeline_impl.cc b/chromecast/media/cma/pipeline/audio_pipeline_impl.cc |
index c7bdfda279d81dd96e49ea8ba98b19b45e2415f1..d264e17575df3e2fb14d4eb131308b5a33afb1c9 100644 |
--- a/chromecast/media/cma/pipeline/audio_pipeline_impl.cc |
+++ b/chromecast/media/cma/pipeline/audio_pipeline_impl.cc |
@@ -10,7 +10,6 @@ |
#include "chromecast/media/cma/base/coded_frame_provider.h" |
#include "chromecast/media/cma/base/decoder_config_adapter.h" |
#include "chromecast/media/cma/pipeline/av_pipeline_impl.h" |
-#include "chromecast/public/media/audio_pipeline_device.h" |
#include "chromecast/public/media/decoder_config.h" |
#include "media/base/audio_decoder_config.h" |
@@ -21,11 +20,12 @@ namespace { |
const size_t kMaxAudioFrameSize = 32 * 1024; |
} |
-AudioPipelineImpl::AudioPipelineImpl(AudioPipelineDevice* audio_device) |
- : audio_device_(audio_device), |
- weak_factory_(this) { |
+AudioPipelineImpl::AudioPipelineImpl( |
+ MediaPipelineBackend::AudioDecoder* decoder, |
+ const AvPipelineClient& client) |
+ : decoder_(decoder), audio_client_(client), weak_factory_(this) { |
av_pipeline_impl_.reset(new AvPipelineImpl( |
- audio_device_, |
+ decoder_, |
base::Bind(&AudioPipelineImpl::OnUpdateConfig, base::Unretained(this)))); |
weak_this_ = weak_factory_.GetWeakPtr(); |
} |
@@ -39,11 +39,6 @@ void AudioPipelineImpl::SetCodedFrameProvider( |
frame_provider.Pass(), kAppAudioBufferSize, kMaxAudioFrameSize); |
} |
-void AudioPipelineImpl::SetClient(const AvPipelineClient& client) { |
- audio_client_ = client; |
- av_pipeline_impl_->SetClient(client); |
-} |
- |
bool AudioPipelineImpl::StartPlayingFrom( |
base::TimeDelta time, |
const scoped_refptr<BufferingState>& buffering_state) { |
@@ -110,9 +105,8 @@ void AudioPipelineImpl::Initialize( |
SetCodedFrameProvider(frame_provider.Pass()); |
DCHECK(audio_config.IsValidConfig()); |
- if (!audio_device_->SetConfig( |
- DecoderConfigAdapter::ToCastAudioConfig(kPrimary, audio_config)) || |
- !av_pipeline_impl_->Initialize()) { |
+ if (!decoder_->SetConfig( |
+ DecoderConfigAdapter::ToCastAudioConfig(kPrimary, audio_config))) { |
status_cb.Run(::media::PIPELINE_ERROR_INITIALIZATION_FAILED); |
return; |
} |
@@ -121,7 +115,24 @@ void AudioPipelineImpl::Initialize( |
} |
void AudioPipelineImpl::SetVolume(float volume) { |
- audio_device_->SetStreamVolumeMultiplier(volume); |
+ decoder_->SetVolume(volume); |
+} |
+ |
+void AudioPipelineImpl::OnBufferPushed( |
+ MediaPipelineBackend::BufferStatus status) { |
+ av_pipeline_impl_->OnBufferPushed(status); |
+} |
+ |
+void AudioPipelineImpl::OnEndOfStream() { |
+ if (!audio_client_.eos_cb.is_null()) |
+ audio_client_.eos_cb.Run(); |
+} |
+ |
+void AudioPipelineImpl::OnError() { |
+ if (!audio_client_.playback_error_cb.is_null()) { |
+ audio_client_.playback_error_cb.Run( |
+ ::media::PIPELINE_ERROR_COULD_NOT_RENDER); |
+ } |
} |
void AudioPipelineImpl::OnUpdateConfig( |
@@ -132,7 +143,7 @@ void AudioPipelineImpl::OnUpdateConfig( |
CMALOG(kLogControl) << "AudioPipelineImpl::OnUpdateConfig id:" << id << " " |
<< audio_config.AsHumanReadableString(); |
- bool success = audio_device_->SetConfig( |
+ bool success = decoder_->SetConfig( |
DecoderConfigAdapter::ToCastAudioConfig(id, audio_config)); |
if (!success && !audio_client_.playback_error_cb.is_null()) |
audio_client_.playback_error_cb.Run(::media::PIPELINE_ERROR_DECODE); |
@@ -143,9 +154,8 @@ void AudioPipelineImpl::UpdateStatistics() { |
if (audio_client_.statistics_cb.is_null()) |
return; |
- MediaComponentDevice::Statistics device_stats; |
- if (!audio_device_->GetStatistics(&device_stats)) |
- return; |
+ MediaPipelineBackend::Decoder::Statistics device_stats; |
+ decoder_->GetStatistics(&device_stats); |
::media::PipelineStatistics current_stats; |
current_stats.audio_bytes_decoded = device_stats.decoded_bytes; |