| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromecast/media/cma/pipeline/audio_pipeline_impl.h" | 5 #include "chromecast/media/cma/pipeline/audio_pipeline_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "chromecast/media/cma/backend/audio_pipeline_device.h" | 8 #include "chromecast/media/cma/backend/audio_pipeline_device.h" |
| 9 #include "chromecast/media/cma/base/buffering_defs.h" | 9 #include "chromecast/media/cma/base/buffering_defs.h" |
| 10 #include "chromecast/media/cma/base/cma_logging.h" | 10 #include "chromecast/media/cma/base/cma_logging.h" |
| 11 #include "chromecast/media/cma/base/coded_frame_provider.h" | 11 #include "chromecast/media/cma/base/coded_frame_provider.h" |
| 12 #include "chromecast/media/cma/base/decoder_config_adapter.h" |
| 12 #include "chromecast/media/cma/pipeline/av_pipeline_impl.h" | 13 #include "chromecast/media/cma/pipeline/av_pipeline_impl.h" |
| 14 #include "chromecast/media/cma/public/audio_config.h" |
| 15 #include "chromecast/media/cma/public/video_config.h" |
| 13 #include "media/base/audio_decoder_config.h" | 16 #include "media/base/audio_decoder_config.h" |
| 14 | 17 |
| 15 namespace chromecast { | 18 namespace chromecast { |
| 16 namespace media { | 19 namespace media { |
| 17 | 20 |
| 18 namespace { | 21 namespace { |
| 19 const size_t kMaxAudioFrameSize = 32 * 1024; | 22 const size_t kMaxAudioFrameSize = 32 * 1024; |
| 20 } | 23 } |
| 21 | 24 |
| 22 AudioPipelineImpl::AudioPipelineImpl(AudioPipelineDevice* audio_device) | 25 AudioPipelineImpl::AudioPipelineImpl(AudioPipelineDevice* audio_device) |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 | 103 |
| 101 void AudioPipelineImpl::Initialize( | 104 void AudioPipelineImpl::Initialize( |
| 102 const ::media::AudioDecoderConfig& audio_config, | 105 const ::media::AudioDecoderConfig& audio_config, |
| 103 scoped_ptr<CodedFrameProvider> frame_provider, | 106 scoped_ptr<CodedFrameProvider> frame_provider, |
| 104 const ::media::PipelineStatusCB& status_cb) { | 107 const ::media::PipelineStatusCB& status_cb) { |
| 105 CMALOG(kLogControl) << "AudioPipelineImpl::Initialize " | 108 CMALOG(kLogControl) << "AudioPipelineImpl::Initialize " |
| 106 << audio_config.AsHumanReadableString(); | 109 << audio_config.AsHumanReadableString(); |
| 107 if (frame_provider) | 110 if (frame_provider) |
| 108 SetCodedFrameProvider(frame_provider.Pass()); | 111 SetCodedFrameProvider(frame_provider.Pass()); |
| 109 | 112 |
| 110 if (!audio_device_->SetConfig(audio_config) || | 113 if (!audio_device_->SetConfig( |
| 114 DecoderConfigAdapter::ToAudioConfig(audio_config)) || |
| 111 !av_pipeline_impl_->Initialize()) { | 115 !av_pipeline_impl_->Initialize()) { |
| 112 status_cb.Run(::media::PIPELINE_ERROR_INITIALIZATION_FAILED); | 116 status_cb.Run(::media::PIPELINE_ERROR_INITIALIZATION_FAILED); |
| 113 return; | 117 return; |
| 114 } | 118 } |
| 115 av_pipeline_impl_->TransitionToState(AvPipelineImpl::kFlushed); | 119 av_pipeline_impl_->TransitionToState(AvPipelineImpl::kFlushed); |
| 116 status_cb.Run(::media::PIPELINE_OK); | 120 status_cb.Run(::media::PIPELINE_OK); |
| 117 } | 121 } |
| 118 | 122 |
| 119 void AudioPipelineImpl::SetVolume(float volume) { | 123 void AudioPipelineImpl::SetVolume(float volume) { |
| 120 audio_device_->SetStreamVolumeMultiplier(volume); | 124 audio_device_->SetStreamVolumeMultiplier(volume); |
| 121 } | 125 } |
| 122 | 126 |
| 123 void AudioPipelineImpl::OnUpdateConfig( | 127 void AudioPipelineImpl::OnUpdateConfig( |
| 124 const ::media::AudioDecoderConfig& audio_config, | 128 const ::media::AudioDecoderConfig& audio_config, |
| 125 const ::media::VideoDecoderConfig& video_config) { | 129 const ::media::VideoDecoderConfig& video_config) { |
| 126 if (audio_config.IsValidConfig()) { | 130 if (audio_config.IsValidConfig()) { |
| 127 CMALOG(kLogControl) << "AudioPipelineImpl::OnUpdateConfig " | 131 CMALOG(kLogControl) << "AudioPipelineImpl::OnUpdateConfig " |
| 128 << audio_config.AsHumanReadableString(); | 132 << audio_config.AsHumanReadableString(); |
| 129 | 133 |
| 130 bool success = audio_device_->SetConfig(audio_config); | 134 bool success = |
| 135 audio_device_->SetConfig( |
| 136 DecoderConfigAdapter::ToAudioConfig(audio_config)); |
| 131 if (!success && !audio_client_.playback_error_cb.is_null()) | 137 if (!success && !audio_client_.playback_error_cb.is_null()) |
| 132 audio_client_.playback_error_cb.Run(::media::PIPELINE_ERROR_DECODE); | 138 audio_client_.playback_error_cb.Run(::media::PIPELINE_ERROR_DECODE); |
| 133 } | 139 } |
| 134 } | 140 } |
| 135 | 141 |
| 136 void AudioPipelineImpl::UpdateStatistics() { | 142 void AudioPipelineImpl::UpdateStatistics() { |
| 137 if (audio_client_.statistics_cb.is_null()) | 143 if (audio_client_.statistics_cb.is_null()) |
| 138 return; | 144 return; |
| 139 | 145 |
| 140 MediaComponentDevice::Statistics device_stats; | 146 MediaComponentDevice::Statistics device_stats; |
| 141 if (!audio_device_->GetStatistics(&device_stats)) | 147 if (!audio_device_->GetStatistics(&device_stats)) |
| 142 return; | 148 return; |
| 143 | 149 |
| 144 ::media::PipelineStatistics current_stats; | 150 ::media::PipelineStatistics current_stats; |
| 145 current_stats.audio_bytes_decoded = device_stats.decoded_bytes; | 151 current_stats.audio_bytes_decoded = device_stats.decoded_bytes; |
| 146 | 152 |
| 147 ::media::PipelineStatistics delta_stats; | 153 ::media::PipelineStatistics delta_stats; |
| 148 delta_stats.audio_bytes_decoded = | 154 delta_stats.audio_bytes_decoded = |
| 149 current_stats.audio_bytes_decoded - previous_stats_.audio_bytes_decoded; | 155 current_stats.audio_bytes_decoded - previous_stats_.audio_bytes_decoded; |
| 150 | 156 |
| 151 previous_stats_ = current_stats; | 157 previous_stats_ = current_stats; |
| 152 | 158 |
| 153 audio_client_.statistics_cb.Run(delta_stats); | 159 audio_client_.statistics_cb.Run(delta_stats); |
| 154 } | 160 } |
| 155 | 161 |
| 156 } // namespace media | 162 } // namespace media |
| 157 } // namespace chromecast | 163 } // namespace chromecast |
| OLD | NEW |