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 "content/browser/renderer_host/media/audio_input_renderer_host.h" | 5 #include "content/browser/renderer_host/media/audio_input_renderer_host.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "base/process.h" | 9 #include "base/process.h" |
10 #include "base/shared_memory.h" | 10 #include "base/shared_memory.h" |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 // successfully, OnDeviceStarted() callback will be triggered. | 205 // successfully, OnDeviceStarted() callback will be triggered. |
206 media_stream_manager_->audio_input_device_manager()->Start(session_id, this); | 206 media_stream_manager_->audio_input_device_manager()->Start(session_id, this); |
207 } | 207 } |
208 | 208 |
209 void AudioInputRendererHost::OnCreateStream( | 209 void AudioInputRendererHost::OnCreateStream( |
210 int stream_id, const media::AudioParameters& params, | 210 int stream_id, const media::AudioParameters& params, |
211 const std::string& device_id, bool automatic_gain_control) { | 211 const std::string& device_id, bool automatic_gain_control) { |
212 VLOG(1) << "AudioInputRendererHost::OnCreateStream(stream_id=" | 212 VLOG(1) << "AudioInputRendererHost::OnCreateStream(stream_id=" |
213 << stream_id << ")"; | 213 << stream_id << ")"; |
214 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 214 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
215 DCHECK(LookupById(stream_id) == NULL); | 215 // media::AudioParameters is validated in the deserializer. |
| 216 if (LookupById(stream_id) != NULL) { |
| 217 SendErrorMessage(stream_id); |
| 218 return; |
| 219 } |
216 | 220 |
217 media::AudioParameters audio_params(params); | 221 media::AudioParameters audio_params(params); |
218 | 222 |
219 if (media_stream_manager_->audio_input_device_manager()-> | 223 if (media_stream_manager_->audio_input_device_manager()-> |
220 ShouldUseFakeDevice()) { | 224 ShouldUseFakeDevice()) { |
221 audio_params.Reset(media::AudioParameters::AUDIO_FAKE, | 225 audio_params.Reset(media::AudioParameters::AUDIO_FAKE, |
222 params.channel_layout(), params.sample_rate(), | 226 params.channel_layout(), params.sample_rate(), |
223 params.bits_per_sample(), params.frames_per_buffer()); | 227 params.bits_per_sample(), params.frames_per_buffer()); |
224 } else if (WebContentsCaptureUtil::IsWebContentsDeviceId(device_id)) { | 228 } else if (WebContentsCaptureUtil::IsWebContentsDeviceId(device_id)) { |
225 audio_params.Reset(media::AudioParameters::AUDIO_VIRTUAL, | 229 audio_params.Reset(media::AudioParameters::AUDIO_VIRTUAL, |
226 params.channel_layout(), params.sample_rate(), | 230 params.channel_layout(), params.sample_rate(), |
227 params.bits_per_sample(), params.frames_per_buffer()); | 231 params.bits_per_sample(), params.frames_per_buffer()); |
228 } | 232 } |
229 | 233 |
230 DCHECK_GT(audio_params.frames_per_buffer(), 0); | |
231 uint32 buffer_size = audio_params.GetBytesPerBuffer(); | 234 uint32 buffer_size = audio_params.GetBytesPerBuffer(); |
232 | 235 |
233 // Create a new AudioEntry structure. | 236 // Create a new AudioEntry structure. |
234 scoped_ptr<AudioEntry> entry(new AudioEntry()); | 237 scoped_ptr<AudioEntry> entry(new AudioEntry()); |
235 | 238 |
236 uint32 mem_size = sizeof(media::AudioInputBufferParameters) + buffer_size; | 239 uint32 mem_size = sizeof(media::AudioInputBufferParameters) + buffer_size; |
237 | 240 |
238 // Create the shared memory and share it with the renderer process | 241 // Create the shared memory and share it with the renderer process |
239 // using a new SyncWriter object. | 242 // using a new SyncWriter object. |
240 if (!entry->shared_memory.CreateAndMapAnonymous(mem_size)) { | 243 if (!entry->shared_memory.CreateAndMapAnonymous(mem_size)) { |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 for (SessionEntryMap::iterator it = session_entries_.begin(); | 449 for (SessionEntryMap::iterator it = session_entries_.begin(); |
447 it != session_entries_.end(); ++it) { | 450 it != session_entries_.end(); ++it) { |
448 if (stream_id == it->second) { | 451 if (stream_id == it->second) { |
449 return it->first; | 452 return it->first; |
450 } | 453 } |
451 } | 454 } |
452 return 0; | 455 return 0; |
453 } | 456 } |
454 | 457 |
455 } // namespace content | 458 } // namespace content |
OLD | NEW |