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 |