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

Unified Diff: media/audio/audio_system_impl.cc

Issue 2763383002: Switching AudioInputDeviceManager from using AudioManager interface to AudioSystem one. (Closed)
Patch Set: rebase 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
« no previous file with comments | « media/audio/audio_system_impl.h ('k') | media/audio/audio_system_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_system_impl.cc
diff --git a/media/audio/audio_system_impl.cc b/media/audio/audio_system_impl.cc
index 7504744d42173a3c2529a59f3e169970821f94de..9d009aa5079c9d47b692ab38e13920e5ea12a85c 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)
@@ -136,11 +154,11 @@ void AudioSystemImpl::HasOutputDevices(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;
@@ -150,11 +168,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,
+ GetTaskRunner()->BelongsToCurrentThread()
+ ? std::move(on_input_device_info_cb)
+ : media::BindToCurrentLoop(
+ std::move(on_input_device_info_cb))));
}
base::SingleThreadTaskRunner* AudioSystemImpl::GetTaskRunner() const {
« no previous file with comments | « media/audio/audio_system_impl.h ('k') | media/audio/audio_system_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698