OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "media/audio/audio_manager_base.h" | 5 #include "media/audio/audio_manager_base.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 // All the input streams should have been deleted. | 98 // All the input streams should have been deleted. |
99 CHECK_EQ(0, num_input_streams_); | 99 CHECK_EQ(0, num_input_streams_); |
100 } | 100 } |
101 | 101 |
102 base::string16 AudioManagerBase::GetAudioInputDeviceModel() { | 102 base::string16 AudioManagerBase::GetAudioInputDeviceModel() { |
103 return base::string16(); | 103 return base::string16(); |
104 } | 104 } |
105 | 105 |
106 AudioOutputStream* AudioManagerBase::MakeAudioOutputStream( | 106 AudioOutputStream* AudioManagerBase::MakeAudioOutputStream( |
107 const AudioParameters& params, | 107 const AudioParameters& params, |
108 const std::string& device_id, | 108 const std::string& device_id) { |
109 const LogCallback& log_callback) { | |
110 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 109 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
111 | 110 |
112 if (!params.IsValid()) { | 111 if (!params.IsValid()) { |
113 DLOG(ERROR) << "Audio parameters are invalid"; | 112 DLOG(ERROR) << "Audio parameters are invalid"; |
114 return NULL; | 113 return NULL; |
115 } | 114 } |
116 | 115 |
117 // Limit the number of audio streams opened. This is to prevent using | 116 // Limit the number of audio streams opened. This is to prevent using |
118 // excessive resources for a large number of audio streams. More | 117 // excessive resources for a large number of audio streams. More |
119 // importantly it prevents instability on certain systems. | 118 // importantly it prevents instability on certain systems. |
120 // See bug: http://crbug.com/30242. | 119 // See bug: http://crbug.com/30242. |
121 if (num_output_streams_ >= max_num_output_streams_) { | 120 if (num_output_streams_ >= max_num_output_streams_) { |
122 DLOG(ERROR) << "Number of opened output audio streams " | 121 DLOG(ERROR) << "Number of opened output audio streams " |
123 << num_output_streams_ | 122 << num_output_streams_ |
124 << " exceed the max allowed number " | 123 << " exceed the max allowed number " |
125 << max_num_output_streams_; | 124 << max_num_output_streams_; |
126 return NULL; | 125 return NULL; |
127 } | 126 } |
128 | 127 |
129 AudioOutputStream* stream; | 128 AudioOutputStream* stream; |
130 switch (params.format()) { | 129 switch (params.format()) { |
131 case AudioParameters::AUDIO_PCM_LINEAR: | 130 case AudioParameters::AUDIO_PCM_LINEAR: |
132 DCHECK(AudioDeviceDescription::IsDefaultDevice(device_id)) | 131 DCHECK(AudioDeviceDescription::IsDefaultDevice(device_id)) |
133 << "AUDIO_PCM_LINEAR supports only the default device."; | 132 << "AUDIO_PCM_LINEAR supports only the default device."; |
134 stream = MakeLinearOutputStream(params, log_callback); | 133 stream = MakeLinearOutputStream(params); |
135 break; | 134 break; |
136 case AudioParameters::AUDIO_PCM_LOW_LATENCY: | 135 case AudioParameters::AUDIO_PCM_LOW_LATENCY: |
137 stream = MakeLowLatencyOutputStream(params, device_id, log_callback); | 136 stream = MakeLowLatencyOutputStream(params, device_id); |
138 break; | 137 break; |
139 case AudioParameters::AUDIO_FAKE: | 138 case AudioParameters::AUDIO_FAKE: |
140 stream = FakeAudioOutputStream::MakeFakeStream(this, params); | 139 stream = FakeAudioOutputStream::MakeFakeStream(this, params); |
141 break; | 140 break; |
142 default: | 141 default: |
143 stream = NULL; | 142 stream = NULL; |
144 break; | 143 break; |
145 } | 144 } |
146 | 145 |
147 if (stream) { | 146 if (stream) { |
148 ++num_output_streams_; | 147 ++num_output_streams_; |
149 } | 148 } |
150 | 149 |
151 return stream; | 150 return stream; |
152 } | 151 } |
153 | 152 |
154 AudioInputStream* AudioManagerBase::MakeAudioInputStream( | 153 AudioInputStream* AudioManagerBase::MakeAudioInputStream( |
155 const AudioParameters& params, | 154 const AudioParameters& params, |
156 const std::string& device_id, | 155 const std::string& device_id) { |
157 const LogCallback& log_callback) { | |
158 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 156 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
159 | 157 |
160 if (!params.IsValid() || (params.channels() > kMaxInputChannels) || | 158 if (!params.IsValid() || (params.channels() > kMaxInputChannels) || |
161 device_id.empty()) { | 159 device_id.empty()) { |
162 DLOG(ERROR) << "Audio parameters are invalid for device " << device_id; | 160 DLOG(ERROR) << "Audio parameters are invalid for device " << device_id; |
163 return NULL; | 161 return NULL; |
164 } | 162 } |
165 | 163 |
166 if (num_input_streams_ >= max_num_input_streams_) { | 164 if (num_input_streams_ >= max_num_input_streams_) { |
167 DLOG(ERROR) << "Number of opened input audio streams " | 165 DLOG(ERROR) << "Number of opened input audio streams " |
168 << num_input_streams_ | 166 << num_input_streams_ |
169 << " exceed the max allowed number " << max_num_input_streams_; | 167 << " exceed the max allowed number " << max_num_input_streams_; |
170 return NULL; | 168 return NULL; |
171 } | 169 } |
172 | 170 |
173 DVLOG(2) << "Creating a new AudioInputStream with buffer size = " | 171 DVLOG(2) << "Creating a new AudioInputStream with buffer size = " |
174 << params.frames_per_buffer(); | 172 << params.frames_per_buffer(); |
175 | 173 |
176 AudioInputStream* stream; | 174 AudioInputStream* stream; |
177 switch (params.format()) { | 175 switch (params.format()) { |
178 case AudioParameters::AUDIO_PCM_LINEAR: | 176 case AudioParameters::AUDIO_PCM_LINEAR: |
179 stream = MakeLinearInputStream(params, device_id, log_callback); | 177 stream = MakeLinearInputStream(params, device_id); |
180 break; | 178 break; |
181 case AudioParameters::AUDIO_PCM_LOW_LATENCY: | 179 case AudioParameters::AUDIO_PCM_LOW_LATENCY: |
182 stream = MakeLowLatencyInputStream(params, device_id, log_callback); | 180 stream = MakeLowLatencyInputStream(params, device_id); |
183 break; | 181 break; |
184 case AudioParameters::AUDIO_FAKE: | 182 case AudioParameters::AUDIO_FAKE: |
185 stream = FakeAudioInputStream::MakeFakeStream(this, params); | 183 stream = FakeAudioInputStream::MakeFakeStream(this, params); |
186 break; | 184 break; |
187 default: | 185 default: |
188 stream = NULL; | 186 stream = NULL; |
189 break; | 187 break; |
190 } | 188 } |
191 | 189 |
192 if (stream) { | 190 if (stream) { |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 | 357 |
360 return 0; | 358 return 0; |
361 } | 359 } |
362 | 360 |
363 std::unique_ptr<AudioLog> AudioManagerBase::CreateAudioLog( | 361 std::unique_ptr<AudioLog> AudioManagerBase::CreateAudioLog( |
364 AudioLogFactory::AudioComponent component) { | 362 AudioLogFactory::AudioComponent component) { |
365 return audio_log_factory_->CreateAudioLog(component); | 363 return audio_log_factory_->CreateAudioLog(component); |
366 } | 364 } |
367 | 365 |
368 } // namespace media | 366 } // namespace media |
OLD | NEW |