Index: content/browser/renderer_host/media/audio_input_renderer_host.cc |
diff --git a/content/browser/renderer_host/media/audio_input_renderer_host.cc b/content/browser/renderer_host/media/audio_input_renderer_host.cc |
index ca5d0683d209a56a187430639fc1a85b811f2fd4..efddd6ec1cae8cd09ea9aaec7b1db63af6a5152f 100644 |
--- a/content/browser/renderer_host/media/audio_input_renderer_host.cc |
+++ b/content/browser/renderer_host/media/audio_input_renderer_host.cc |
@@ -182,9 +182,20 @@ void AudioInputRendererHost::DoHandleError( |
media::AudioInputController* controller, |
media::AudioInputController::ErrorCode error_code) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ // Log all errors even it is ignored later. |
MediaStreamManager::SendMessageToNativeLog( |
base::StringPrintf("AudioInputController error: %d", error_code)); |
+ // This is a fix for crbug.com/357501. The error can be triggered when closing |
+ // the lid on Macs, which causes more problems than it fixes. |
+ // Also, in crbug.com/357569, the goal is to remove usage of the error since |
+ // it was added to solve a crash on Windows that no longer can be reproduced. |
+ if (error_code == media::AudioInputController::NO_DATA_ERROR) { |
+ DVLOG(1) << "AudioInputRendererHost@" << this << "::DoHandleError: " |
+ << "NO_DATA_ERROR ignored."; |
+ return; |
+ } |
+ |
AudioEntry* entry = LookupByController(controller); |
if (!entry) |
return; |
@@ -237,7 +248,9 @@ void AudioInputRendererHost::OnCreateStream( |
} |
// Check if we have the permission to open the device and which device to use. |
- std::string device_id = media::AudioManagerBase::kDefaultDeviceId; |
+ media::AudioDeviceName device_name( |
+ media::AudioManagerBase::kDefaultDeviceName, |
+ media::AudioManagerBase::kDefaultDeviceId); |
if (audio_params.format() != media::AudioParameters::AUDIO_FAKE) { |
const StreamDeviceInfo* info = media_stream_manager_-> |
audio_input_device_manager()->GetOpenedDeviceInfoById(session_id); |
@@ -248,7 +261,8 @@ void AudioInputRendererHost::OnCreateStream( |
return; |
} |
- device_id = info->device.id; |
+ device_name.unique_id = info->device.id; |
tommi (sloooow) - chröme
2014/04/10 20:04:30
ah, I thought that |device| was of type AudioDevic
|
+ device_name.device_name = info->device.name; |
} |
// Create a new AudioEntry structure. |
@@ -281,12 +295,12 @@ void AudioInputRendererHost::OnCreateStream( |
// If we have successfully created the SyncWriter then assign it to the |
// entry and construct an AudioInputController. |
entry->writer.reset(writer.release()); |
- if (WebContentsCaptureUtil::IsWebContentsDeviceId(device_id)) { |
+ if (WebContentsCaptureUtil::IsWebContentsDeviceId(device_name.unique_id)) { |
entry->controller = media::AudioInputController::CreateForStream( |
audio_manager_->GetTaskRunner(), |
this, |
WebContentsAudioInputStream::Create( |
- device_id, |
+ device_name.unique_id, |
audio_params, |
audio_manager_->GetWorkerTaskRunner(), |
audio_mirroring_manager_), |
@@ -300,7 +314,7 @@ void AudioInputRendererHost::OnCreateStream( |
media::AudioInputController::CreateLowLatency(audio_manager_, |
this, |
audio_params, |
- device_id, |
+ device_name.unique_id, |
entry->writer.get(), |
user_input_monitor_); |
} |
@@ -321,8 +335,9 @@ void AudioInputRendererHost::OnCreateStream( |
audio_entries_.insert(std::make_pair(stream_id, entry.release())); |
MediaStreamManager::SendMessageToNativeLog( |
- "Audio input stream created successfully."); |
- audio_log_->OnCreated(stream_id, audio_params, device_id); |
+ "Audio input stream created successfully. Device name: " + |
+ device_name.device_name); |
+ audio_log_->OnCreated(stream_id, audio_params, device_name.unique_id); |
} |
void AudioInputRendererHost::OnRecordStream(int stream_id) { |