| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "content/browser/media/media_internals.h" | 22 #include "content/browser/media/media_internals.h" |
| 23 #include "content/browser/renderer_host/media/audio_input_debug_writer.h" | 23 #include "content/browser/renderer_host/media/audio_input_debug_writer.h" |
| 24 #include "content/browser/renderer_host/media/audio_input_device_manager.h" | 24 #include "content/browser/renderer_host/media/audio_input_device_manager.h" |
| 25 #include "content/browser/renderer_host/media/audio_input_sync_writer.h" | 25 #include "content/browser/renderer_host/media/audio_input_sync_writer.h" |
| 26 #include "content/browser/renderer_host/media/media_stream_manager.h" | 26 #include "content/browser/renderer_host/media/media_stream_manager.h" |
| 27 #include "content/browser/webrtc/webrtc_internals.h" | 27 #include "content/browser/webrtc/webrtc_internals.h" |
| 28 #include "content/public/browser/web_contents_media_capture_id.h" | 28 #include "content/public/browser/web_contents_media_capture_id.h" |
| 29 #include "media/audio/audio_device_description.h" | 29 #include "media/audio/audio_device_description.h" |
| 30 #include "media/base/audio_bus.h" | 30 #include "media/base/audio_bus.h" |
| 31 #include "media/base/media_switches.h" | 31 #include "media/base/media_switches.h" |
| 32 #include "media/media_features.h" |
| 32 | 33 |
| 33 namespace content { | 34 namespace content { |
| 34 | 35 |
| 35 namespace { | 36 namespace { |
| 36 | 37 |
| 37 #ifdef ENABLE_WEBRTC | 38 #if BUILDFLAG(ENABLE_WEBRTC) |
| 38 const base::FilePath::CharType kDebugRecordingFileNameAddition[] = | 39 const base::FilePath::CharType kDebugRecordingFileNameAddition[] = |
| 39 FILE_PATH_LITERAL("source_input"); | 40 FILE_PATH_LITERAL("source_input"); |
| 40 const base::FilePath::CharType kDebugRecordingFileNameExtension[] = | 41 const base::FilePath::CharType kDebugRecordingFileNameExtension[] = |
| 41 FILE_PATH_LITERAL("wav"); | 42 FILE_PATH_LITERAL("wav"); |
| 42 #endif | 43 #endif |
| 43 | 44 |
| 44 void LogMessage(int stream_id, const std::string& msg, bool add_prefix) { | 45 void LogMessage(int stream_id, const std::string& msg, bool add_prefix) { |
| 45 std::ostringstream oss; | 46 std::ostringstream oss; |
| 46 oss << "[stream_id=" << stream_id << "] "; | 47 oss << "[stream_id=" << stream_id << "] "; |
| 47 if (add_prefix) | 48 if (add_prefix) |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 user_input_monitor_(user_input_monitor), | 106 user_input_monitor_(user_input_monitor), |
| 106 audio_log_(MediaInternals::GetInstance()->CreateAudioLog( | 107 audio_log_(MediaInternals::GetInstance()->CreateAudioLog( |
| 107 media::AudioLogFactory::AUDIO_INPUT_CONTROLLER)), | 108 media::AudioLogFactory::AUDIO_INPUT_CONTROLLER)), |
| 108 weak_factory_(this) {} | 109 weak_factory_(this) {} |
| 109 | 110 |
| 110 AudioInputRendererHost::~AudioInputRendererHost() { | 111 AudioInputRendererHost::~AudioInputRendererHost() { |
| 111 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 112 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 112 DCHECK(audio_entries_.empty()); | 113 DCHECK(audio_entries_.empty()); |
| 113 } | 114 } |
| 114 | 115 |
| 115 #ifdef ENABLE_WEBRTC | 116 #if BUILDFLAG(ENABLE_WEBRTC) |
| 116 void AudioInputRendererHost::EnableDebugRecording(const base::FilePath& file) { | 117 void AudioInputRendererHost::EnableDebugRecording(const base::FilePath& file) { |
| 117 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 118 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 118 base::FilePath file_with_extensions = | 119 base::FilePath file_with_extensions = |
| 119 GetDebugRecordingFilePathWithExtensions(file); | 120 GetDebugRecordingFilePathWithExtensions(file); |
| 120 for (const auto& entry : audio_entries_) | 121 for (const auto& entry : audio_entries_) |
| 121 EnableDebugRecordingForId(file_with_extensions, entry.first); | 122 EnableDebugRecordingForId(file_with_extensions, entry.first); |
| 122 } | 123 } |
| 123 | 124 |
| 124 void AudioInputRendererHost::DisableDebugRecording() { | 125 void AudioInputRendererHost::DisableDebugRecording() { |
| 125 for (const auto& entry : audio_entries_) { | 126 for (const auto& entry : audio_entries_) { |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 std::unique_ptr<AudioInputSyncWriter> writer(new AudioInputSyncWriter( | 382 std::unique_ptr<AudioInputSyncWriter> writer(new AudioInputSyncWriter( |
| 382 entry->shared_memory.memory(), entry->shared_memory.requested_size(), | 383 entry->shared_memory.memory(), entry->shared_memory.requested_size(), |
| 383 entry->shared_memory_segment_count, audio_params)); | 384 entry->shared_memory_segment_count, audio_params)); |
| 384 | 385 |
| 385 if (!writer->Init()) { | 386 if (!writer->Init()) { |
| 386 SendErrorMessage(stream_id, SYNC_WRITER_INIT_FAILED); | 387 SendErrorMessage(stream_id, SYNC_WRITER_INIT_FAILED); |
| 387 MaybeUnregisterKeyboardMicStream(config); | 388 MaybeUnregisterKeyboardMicStream(config); |
| 388 return; | 389 return; |
| 389 } | 390 } |
| 390 | 391 |
| 391 #if defined(ENABLE_WEBRTC) | 392 #if BUILDFLAG(ENABLE_WEBRTC) |
| 392 std::unique_ptr<media::AudioInputWriter> debug_writer( | 393 std::unique_ptr<media::AudioInputWriter> debug_writer( |
| 393 new AudioInputDebugWriter(audio_params)); | 394 new AudioInputDebugWriter(audio_params)); |
| 394 #else | 395 #else |
| 395 std::unique_ptr<media::AudioInputWriter> debug_writer(nullptr); | 396 std::unique_ptr<media::AudioInputWriter> debug_writer(nullptr); |
| 396 #endif | 397 #endif |
| 397 | 398 |
| 398 // If we have successfully created the SyncWriter then assign it to the | 399 // If we have successfully created the SyncWriter then assign it to the |
| 399 // entry and construct an AudioInputController. | 400 // entry and construct an AudioInputController. |
| 400 entry->writer.reset(writer.release()); | 401 entry->writer.reset(writer.release()); |
| 401 if (WebContentsMediaCaptureId::Parse(device_id, nullptr)) { | 402 if (WebContentsMediaCaptureId::Parse(device_id, nullptr)) { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 DVLOG(1) << oss.str(); | 454 DVLOG(1) << oss.str(); |
| 454 | 455 |
| 455 // Since the controller was created successfully, create an entry and add it | 456 // Since the controller was created successfully, create an entry and add it |
| 456 // to the map. | 457 // to the map. |
| 457 entry->stream_id = stream_id; | 458 entry->stream_id = stream_id; |
| 458 audio_entries_.insert(std::make_pair(stream_id, entry.release())); | 459 audio_entries_.insert(std::make_pair(stream_id, entry.release())); |
| 459 audio_log_->OnCreated(stream_id, audio_params, device_id); | 460 audio_log_->OnCreated(stream_id, audio_params, device_id); |
| 460 MediaInternals::GetInstance()->SetWebContentsTitleForAudioLogEntry( | 461 MediaInternals::GetInstance()->SetWebContentsTitleForAudioLogEntry( |
| 461 stream_id, render_process_id_, render_frame_id, audio_log_.get()); | 462 stream_id, render_process_id_, render_frame_id, audio_log_.get()); |
| 462 | 463 |
| 463 #if defined(ENABLE_WEBRTC) | 464 #if BUILDFLAG(ENABLE_WEBRTC) |
| 464 BrowserThread::PostTask( | 465 BrowserThread::PostTask( |
| 465 BrowserThread::UI, | 466 BrowserThread::UI, |
| 466 FROM_HERE, | 467 FROM_HERE, |
| 467 base::Bind( | 468 base::Bind( |
| 468 &AudioInputRendererHost::MaybeEnableDebugRecordingForId, | 469 &AudioInputRendererHost::MaybeEnableDebugRecordingForId, |
| 469 this, | 470 this, |
| 470 stream_id)); | 471 stream_id)); |
| 471 #endif | 472 #endif |
| 472 } | 473 } |
| 473 | 474 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 const AudioInputHostMsg_CreateStream_Config& config) { | 596 const AudioInputHostMsg_CreateStream_Config& config) { |
| 596 #if defined(OS_CHROMEOS) | 597 #if defined(OS_CHROMEOS) |
| 597 if (config.params.channel_layout() == | 598 if (config.params.channel_layout() == |
| 598 media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC) { | 599 media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC) { |
| 599 media_stream_manager_->audio_input_device_manager() | 600 media_stream_manager_->audio_input_device_manager() |
| 600 ->UnregisterKeyboardMicStream(); | 601 ->UnregisterKeyboardMicStream(); |
| 601 } | 602 } |
| 602 #endif | 603 #endif |
| 603 } | 604 } |
| 604 | 605 |
| 605 #if defined(ENABLE_WEBRTC) | 606 #if BUILDFLAG(ENABLE_WEBRTC) |
| 606 void AudioInputRendererHost::MaybeEnableDebugRecordingForId(int stream_id) { | 607 void AudioInputRendererHost::MaybeEnableDebugRecordingForId(int stream_id) { |
| 607 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 608 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 608 if (WebRTCInternals::GetInstance()->IsAudioDebugRecordingsEnabled()) { | 609 if (WebRTCInternals::GetInstance()->IsAudioDebugRecordingsEnabled()) { |
| 609 BrowserThread::PostTask( | 610 BrowserThread::PostTask( |
| 610 BrowserThread::IO, | 611 BrowserThread::IO, |
| 611 FROM_HERE, | 612 FROM_HERE, |
| 612 base::Bind( | 613 base::Bind( |
| 613 &AudioInputRendererHost::EnableDebugRecordingForId, | 614 &AudioInputRendererHost::EnableDebugRecordingForId, |
| 614 this, | 615 this, |
| 615 GetDebugRecordingFilePathWithExtensions( | 616 GetDebugRecordingFilePathWithExtensions( |
| (...skipping 22 matching lines...) Expand all Loading... |
| 638 AudioEntry* entry = LookupById(stream_id); | 639 AudioEntry* entry = LookupById(stream_id); |
| 639 if (!entry) | 640 if (!entry) |
| 640 return; | 641 return; |
| 641 entry->controller->EnableDebugRecording( | 642 entry->controller->EnableDebugRecording( |
| 642 file_name.AddExtension(IntToStringType(stream_id)) | 643 file_name.AddExtension(IntToStringType(stream_id)) |
| 643 .AddExtension(kDebugRecordingFileNameExtension)); | 644 .AddExtension(kDebugRecordingFileNameExtension)); |
| 644 } | 645 } |
| 645 | 646 |
| 646 #undef IntToStringType | 647 #undef IntToStringType |
| 647 | 648 |
| 648 #endif // defined(ENABLE_WEBRTC) | 649 #endif // BUILDFLAG(ENABLE_WEBRTC) |
| 649 | 650 |
| 650 } // namespace content | 651 } // namespace content |
| OLD | NEW |