Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1238)

Unified Diff: media/audio/audio_system_impl.cc

Issue 2763383002: Switching AudioInputDeviceManager from using AudioManager interface to AudioSystem one. (Closed)
Patch Set: review comments addressed Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/audio/audio_system_impl.cc
diff --git a/media/audio/audio_system_impl.cc b/media/audio/audio_system_impl.cc
index 00ea330761b28861dc27bd55cdc39f9ffc1c8337..f7803a656b348b4c7b8aa9c38efdc1b4d7ad3d3b 100644
--- a/media/audio/audio_system_impl.cc
+++ b/media/audio/audio_system_impl.cc
@@ -9,6 +9,7 @@
#include "base/task_runner_util.h"
#include "media/audio/audio_device_description.h"
#include "media/audio/audio_manager.h"
+#include "media/base/bind_to_current_loop.h"
// Using base::Unretained for |audio_manager_| is safe since it is deleted after
// its task runner, and AudioSystemImpl is deleted on the UI thread after the IO
@@ -57,6 +58,23 @@ AudioDeviceDescriptions GetDeviceDescriptionsOnDeviceThread(
return descriptions;
}
+void GetInputDeviceInfoOnDeviceThread(
+ AudioManager* audio_manager,
+ const std::string& input_device_id,
+ AudioSystem::OnInputDeviceInfoCallback on_input_device_info_cb) {
+ DCHECK(audio_manager->GetTaskRunner()->BelongsToCurrentThread());
+ const std::string associated_output_device_id =
+ audio_manager->GetAssociatedOutputDeviceID(input_device_id);
+
+ on_input_device_info_cb.Run(
+ GetInputParametersOnDeviceThread(audio_manager, input_device_id),
+ associated_output_device_id.empty()
+ ? AudioParameters()
+ : GetOutputParametersOnDeviceThread(audio_manager,
+ associated_output_device_id),
+ associated_output_device_id);
+}
+
} // namespace
AudioSystemImpl::AudioSystemImpl(AudioManager* audio_manager)
@@ -122,11 +140,11 @@ void AudioSystemImpl::HasInputDevices(OnBoolCallback on_has_devices_cb) const {
}
void AudioSystemImpl::GetDeviceDescriptions(
- OnDeviceDescriptionsCallback on_descriptions_cp,
+ OnDeviceDescriptionsCallback on_descriptions_cb,
bool for_input) {
if (GetTaskRunner()->BelongsToCurrentThread()) {
GetTaskRunner()->PostTask(
- FROM_HERE, base::Bind(on_descriptions_cp,
+ FROM_HERE, base::Bind(on_descriptions_cb,
base::Passed(GetDeviceDescriptionsOnDeviceThread(
audio_manager_, for_input))));
return;
@@ -136,11 +154,40 @@ void AudioSystemImpl::GetDeviceDescriptions(
GetTaskRunner(), FROM_HERE,
base::Bind(&GetDeviceDescriptionsOnDeviceThread,
base::Unretained(audio_manager_), for_input),
- std::move(on_descriptions_cp));
+ std::move(on_descriptions_cb));
+}
+
+void AudioSystemImpl::GetAssociatedOutputDeviceID(
+ const std::string& input_device_id,
+ OnDeviceIdCallback on_device_id_cb) {
+ if (GetTaskRunner()->BelongsToCurrentThread()) {
+ GetTaskRunner()->PostTask(
+ FROM_HERE,
+ base::Bind(on_device_id_cb, audio_manager_->GetAssociatedOutputDeviceID(
+ input_device_id)));
+ return;
+ }
+ base::PostTaskAndReplyWithResult(
+ GetTaskRunner(), FROM_HERE,
+ base::Bind(&AudioManager::GetAssociatedOutputDeviceID,
+ base::Unretained(audio_manager_), input_device_id),
+ std::move(on_device_id_cb));
}
-AudioManager* AudioSystemImpl::GetAudioManager() const {
- return audio_manager_;
+void AudioSystemImpl::GetInputDeviceInfo(
+ const std::string& input_device_id,
+ OnInputDeviceInfoCallback on_input_device_info_cb) {
+ // No need to bind |on_input_device_info_cb| to the current loop if we are on
+ // the audio thread. However, the client still expect to receive the reply
+ // asynchronously, so we always post GetInputDeviceInfoOnDeviceThread(), which
+ // will syncronously call the (bound to current loop or not) callback.
+ GetTaskRunner()->PostTask(
+ FROM_HERE, base::Bind(&GetInputDeviceInfoOnDeviceThread,
+ base::Unretained(audio_manager_), input_device_id,
Guido Urdaneta 2017/04/06 14:26:41 When using Unretained, always explain why it is sa
o1ka 2017/04/07 12:22:17 see ll.14-16: there is a file-wide comment there (
+ GetTaskRunner()->BelongsToCurrentThread()
+ ? std::move(on_input_device_info_cb)
+ : media::BindToCurrentLoop(
+ std::move(on_input_device_info_cb))));
}
base::SingleThreadTaskRunner* AudioSystemImpl::GetTaskRunner() const {

Powered by Google App Engine
This is Rietveld 408576698