| 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/win/audio_unified_win.h" | 5 #include "media/audio/win/audio_unified_win.h" |
| 6 | 6 |
| 7 #include <Functiondiscoverykeys_devpkey.h> | 7 #include <Functiondiscoverykeys_devpkey.h> |
| 8 | 8 |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #ifndef NDEBUG | 10 #ifndef NDEBUG |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 // Convert frame count to milliseconds given the audio format in |format|. | 102 // Convert frame count to milliseconds given the audio format in |format|. |
| 103 static double FrameCountToMilliseconds(int num_frames, | 103 static double FrameCountToMilliseconds(int num_frames, |
| 104 const WAVEFORMATPCMEX& format) { | 104 const WAVEFORMATPCMEX& format) { |
| 105 return (base::Time::kMillisecondsPerSecond * num_frames) / | 105 return (base::Time::kMillisecondsPerSecond * num_frames) / |
| 106 static_cast<double>(format.Format.nSamplesPerSec); | 106 static_cast<double>(format.Format.nSamplesPerSec); |
| 107 } | 107 } |
| 108 | 108 |
| 109 namespace media { | 109 namespace media { |
| 110 | 110 |
| 111 WASAPIUnifiedStream::WASAPIUnifiedStream(AudioManagerWin* manager, | 111 WASAPIUnifiedStream::WASAPIUnifiedStream(AudioManagerWin* manager, |
| 112 const AudioParameters& params) | 112 const AudioParameters& params, |
| 113 const std::string& input_device_id) |
| 113 : creating_thread_id_(base::PlatformThread::CurrentId()), | 114 : creating_thread_id_(base::PlatformThread::CurrentId()), |
| 114 manager_(manager), | 115 manager_(manager), |
| 115 params_(params), | 116 params_(params), |
| 116 input_channels_(params.input_channels()), | 117 input_channels_(params.input_channels()), |
| 117 output_channels_(params.channels()), | 118 output_channels_(params.channels()), |
| 119 input_device_id_(input_device_id), |
| 118 share_mode_(CoreAudioUtil::GetShareMode()), | 120 share_mode_(CoreAudioUtil::GetShareMode()), |
| 119 audio_io_thread_(NULL), | 121 audio_io_thread_(NULL), |
| 120 opened_(false), | 122 opened_(false), |
| 121 volume_(1.0), | 123 volume_(1.0), |
| 122 output_buffer_size_frames_(0), | 124 output_buffer_size_frames_(0), |
| 123 input_buffer_size_frames_(0), | 125 input_buffer_size_frames_(0), |
| 124 endpoint_render_buffer_size_frames_(0), | 126 endpoint_render_buffer_size_frames_(0), |
| 125 endpoint_capture_buffer_size_frames_(0), | 127 endpoint_capture_buffer_size_frames_(0), |
| 126 num_written_frames_(0), | 128 num_written_frames_(0), |
| 127 total_delay_ms_(0.0), | 129 total_delay_ms_(0.0), |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 } | 323 } |
| 322 if (FAILED(hr)) | 324 if (FAILED(hr)) |
| 323 return false; | 325 return false; |
| 324 | 326 |
| 325 ScopedComPtr<IAudioRenderClient> audio_render_client = | 327 ScopedComPtr<IAudioRenderClient> audio_render_client = |
| 326 CoreAudioUtil::CreateRenderClient(audio_output_client); | 328 CoreAudioUtil::CreateRenderClient(audio_output_client); |
| 327 if (!audio_render_client) | 329 if (!audio_render_client) |
| 328 return false; | 330 return false; |
| 329 | 331 |
| 330 // Capture side (always event driven but format depends on varispeed or not): | 332 // Capture side (always event driven but format depends on varispeed or not): |
| 331 | 333 // TODO(henrika): Open the correct input device with |input_device_id_|, |
| 334 // http://crbug.com/147327. |
| 332 ScopedComPtr<IAudioClient> audio_input_client = | 335 ScopedComPtr<IAudioClient> audio_input_client = |
| 333 CoreAudioUtil::CreateDefaultClient(eCapture, eConsole); | 336 CoreAudioUtil::CreateDefaultClient(eCapture, eConsole); |
| 334 if (!audio_input_client) | 337 if (!audio_input_client) |
| 335 return false; | 338 return false; |
| 336 | 339 |
| 337 if (!CoreAudioUtil::IsFormatSupported(audio_input_client, | 340 if (!CoreAudioUtil::IsFormatSupported(audio_input_client, |
| 338 share_mode_, | 341 share_mode_, |
| 339 &input_format_)) { | 342 &input_format_)) { |
| 340 return false; | 343 return false; |
| 341 } | 344 } |
| (...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 971 void WASAPIUnifiedStream::StopAndJoinThread(HRESULT err) { | 974 void WASAPIUnifiedStream::StopAndJoinThread(HRESULT err) { |
| 972 CHECK(GetCurrentThreadId() == creating_thread_id_); | 975 CHECK(GetCurrentThreadId() == creating_thread_id_); |
| 973 DCHECK(audio_io_thread_.get()); | 976 DCHECK(audio_io_thread_.get()); |
| 974 SetEvent(stop_streaming_event_.Get()); | 977 SetEvent(stop_streaming_event_.Get()); |
| 975 audio_io_thread_->Join(); | 978 audio_io_thread_->Join(); |
| 976 audio_io_thread_.reset(); | 979 audio_io_thread_.reset(); |
| 977 HandleError(err); | 980 HandleError(err); |
| 978 } | 981 } |
| 979 | 982 |
| 980 } // namespace media | 983 } // namespace media |
| OLD | NEW |