media::AudioLogFactory::AUDIO_INPUT_CONTROLLER)) {}
AudioInputRendererHost::~AudioInputRendererHost() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
DCHECK(audio_entries_.empty());
}
void AudioInputRendererHost::DoCompleteCreation(
media::AudioInputController* controller) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
AudioEntry* entry = LookupByController(controller);
if (!entry)
return;
}
- if (!entry->controller->LowLatencyMode()) {
- NOTREACHED() << "Only low-latency mode is supported.";
+ if (!entry->controller->SharedMemoryAndSyncSocketMode()) {
+ NOTREACHED() << "Only shared-memory/sync-socket mode is supported.";
DeleteEntryOnError(entry, INVALID_LATENCY_MODE);
return;
}
void AudioInputRendererHost::DoSendRecordingMessage(
media::AudioInputController* controller) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
// TODO(henrika): See crbug.com/115262 for details on why this method
// should be implemented.
}
void AudioInputRendererHost::DoHandleError(
media::AudioInputController* controller,
media::AudioInputController::ErrorCode error_code) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ 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;
int render_view_id,
int session_id,
const AudioInputHostMsg_CreateStream_Config& config) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
DVLOG(1) << "AudioInputRendererHost@" << this
<< "::OnCreateStream(stream_id=" << stream_id
}
// Check if we have the permission to open the device and which device to use.
+ std::string device_name;
std::string device_id = media::AudioManagerBase::kDefaultDeviceId;
if (audio_params.format() != media::AudioParameters::AUDIO_FAKE) {
const StreamDeviceInfo* info = media_stream_manager_->
}
device_id = info->device.id;
+ device_name = info->device.name;
}
// Create a new AudioEntry structure.
audio_entries_.insert(std::make_pair(stream_id, entry.release()));
MediaStreamManager::SendMessageToNativeLog(
- "Audio input stream created successfully.");
+ "Audio input stream created successfully. Device name: " + device_name);
audio_log_->OnCreated(stream_id, audio_params, device_id);
}
void AudioInputRendererHost::OnRecordStream(int stream_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
AudioEntry* entry = LookupById(stream_id);
if (!entry) {
}
void AudioInputRendererHost::OnCloseStream(int stream_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
AudioEntry* entry = LookupById(stream_id);
}
void AudioInputRendererHost::OnSetVolume(int stream_id, double volume) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
AudioEntry* entry = LookupById(stream_id);
if (!entry) {
}
void AudioInputRendererHost::DeleteEntries() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
for (AudioEntryMap::iterator i = audio_entries_.begin();
i != audio_entries_.end(); ++i) {
}
void AudioInputRendererHost::CloseAndDeleteStream(AudioEntry* entry) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (!entry->pending_close) {
entry->controller->Close(base::Bind(&AudioInputRendererHost::DeleteEntry,
}
void AudioInputRendererHost::DeleteEntry(AudioEntry* entry) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
// Delete the entry when this method goes out of scope.
scoped_ptr<AudioEntry> entry_deleter(entry);
void AudioInputRendererHost::DeleteEntryOnError(AudioEntry* entry,
ErrorCode error_code) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
// Sends the error message first before we close the stream because
// |entry| is destroyed in DeleteEntry().
AudioInputRendererHost::AudioEntry* AudioInputRendererHost::LookupById(
int stream_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
AudioEntryMap::iterator i = audio_entries_.find(stream_id);
if (i != audio_entries_.end())
AudioInputRendererHost::AudioEntry* AudioInputRendererHost::LookupByController(
media::AudioInputController* controller) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
// Iterate the map of entries.
// TODO(hclam): Implement a faster look up method.