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..b88f686b3e7ab529bf486b6036e19446ac3ef42b 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,16 +39,10 @@ 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) { |
- CMALOG(kLogControl) << "AudioPipelineImpl::StartPlayingFrom t0=" |
- << time.InMilliseconds(); |
+ CMALOG(kLogControl) << __FUNCTION__ << " t0=" << time.InMilliseconds(); |
// Reset the pipeline statistics. |
previous_stats_ = ::media::PipelineStatistics(); |
@@ -68,7 +62,7 @@ bool AudioPipelineImpl::StartPlayingFrom( |
} |
void AudioPipelineImpl::Flush(const ::media::PipelineStatusCB& status_cb) { |
- CMALOG(kLogControl) << "AudioPipelineImpl::Flush"; |
+ CMALOG(kLogControl) << __FUNCTION__; |
if (av_pipeline_impl_->GetState() == AvPipelineImpl::kError) { |
status_cb.Run(::media::PIPELINE_ERROR_ABORT); |
return; |
@@ -81,7 +75,7 @@ void AudioPipelineImpl::Flush(const ::media::PipelineStatusCB& status_cb) { |
void AudioPipelineImpl::OnFlushDone( |
const ::media::PipelineStatusCB& status_cb) { |
- CMALOG(kLogControl) << "AudioPipelineImpl::OnFlushDone"; |
+ CMALOG(kLogControl) << __FUNCTION__; |
if (av_pipeline_impl_->GetState() == AvPipelineImpl::kError) { |
status_cb.Run(::media::PIPELINE_ERROR_ABORT); |
return; |
@@ -91,7 +85,7 @@ void AudioPipelineImpl::OnFlushDone( |
} |
void AudioPipelineImpl::Stop() { |
- CMALOG(kLogControl) << "AudioPipelineImpl::Stop"; |
+ CMALOG(kLogControl) << __FUNCTION__; |
av_pipeline_impl_->Stop(); |
av_pipeline_impl_->TransitionToState(AvPipelineImpl::kStopped); |
} |
@@ -104,15 +98,14 @@ void AudioPipelineImpl::Initialize( |
const ::media::AudioDecoderConfig& audio_config, |
scoped_ptr<CodedFrameProvider> frame_provider, |
const ::media::PipelineStatusCB& status_cb) { |
- CMALOG(kLogControl) << "AudioPipelineImpl::Initialize " |
+ CMALOG(kLogControl) << __FUNCTION__ << " " |
<< audio_config.AsHumanReadableString(); |
if (frame_provider) |
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 +114,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( |
@@ -129,10 +139,10 @@ void AudioPipelineImpl::OnUpdateConfig( |
const ::media::AudioDecoderConfig& audio_config, |
const ::media::VideoDecoderConfig& video_config) { |
if (audio_config.IsValidConfig()) { |
- CMALOG(kLogControl) << "AudioPipelineImpl::OnUpdateConfig id:" << id << " " |
+ CMALOG(kLogControl) << __FUNCTION__ << " 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 +153,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; |