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

Unified Diff: extensions/browser/api/audio/audio_service_chromeos.cc

Issue 2635983006: Final cleanup pass over audio device API (Closed)
Patch Set: . Created 3 years, 10 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: extensions/browser/api/audio/audio_service_chromeos.cc
diff --git a/extensions/browser/api/audio/audio_service_chromeos.cc b/extensions/browser/api/audio/audio_service_chromeos.cc
index 79f026fa7d96549f2f0ce5555a73f39a821737a4..7ed9508e963f046fd8b9384acb7e86703bf287d5 100644
--- a/extensions/browser/api/audio/audio_service_chromeos.cc
+++ b/extensions/browser/api/audio/audio_service_chromeos.cc
@@ -10,6 +10,7 @@
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
+#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "chromeos/audio/audio_device.h"
#include "chromeos/audio/cras_audio_handler.h"
@@ -77,6 +78,8 @@ class AudioServiceImpl : public AudioService,
// Start to query audio device information.
bool GetInfo(OutputInfo* output_info_out, InputInfo* input_info_out) override;
+ bool GetDevices(const api::audio::DeviceFilter* filter,
+ DeviceInfoList* devices_out) override;
void SetActiveDevices(const DeviceIdList& device_list) override;
bool SetActiveDeviceLists(
const std::unique_ptr<DeviceIdList>& input_devices,
@@ -108,6 +111,7 @@ class AudioServiceImpl : public AudioService,
bool GetAudioNodeIdList(const DeviceIdList& ids,
bool is_input,
chromeos::CrasAudioHandler::NodeIdList* node_ids);
+ AudioDeviceInfo ToAudioDeviceInfo(const chromeos::AudioDevice& device);
// List of observers.
base::ObserverList<AudioService::Observer> observer_list_;
@@ -181,6 +185,34 @@ bool AudioServiceImpl::GetInfo(OutputInfo* output_info_out,
return true;
}
+bool AudioServiceImpl::GetDevices(const api::audio::DeviceFilter* filter,
+ DeviceInfoList* devices_out) {
+ if (!cras_audio_handler_)
+ return false;
+
+ chromeos::AudioDeviceList devices;
+ cras_audio_handler_->GetAudioDevices(&devices);
+
+ bool accept_input =
+ !(filter && filter->stream_types) ||
+ base::ContainsValue(*filter->stream_types, api::audio::STREAM_TYPE_INPUT);
+ bool accept_output = !(filter && filter->stream_types) ||
+ base::ContainsValue(*filter->stream_types,
+ api::audio::STREAM_TYPE_OUTPUT);
+
+ for (const auto& device : devices) {
+ if (filter && filter->is_active && *filter->is_active != device.active)
+ continue;
+ if (device.is_input && !accept_input)
+ continue;
+ if (!device.is_input && !accept_output)
+ continue;
+ devices_out->push_back(ToAudioDeviceInfo(device));
+ }
+
+ return true;
+}
+
void AudioServiceImpl::SetActiveDevices(const DeviceIdList& device_list) {
DCHECK(cras_audio_handler_);
if (!cras_audio_handler_)
@@ -312,6 +344,31 @@ bool AudioServiceImpl::GetAudioNodeIdList(
return true;
}
+AudioDeviceInfo AudioServiceImpl::ToAudioDeviceInfo(
+ const chromeos::AudioDevice& device) {
+ AudioDeviceInfo info;
+ info.id = base::Uint64ToString(device.id);
+ info.stream_type = device.is_input
+ ? extensions::api::audio::STREAM_TYPE_INPUT
+ : extensions::api::audio::STREAM_TYPE_OUTPUT;
+ info.is_input = device.is_input;
+ info.device_type = GetAsAudioApiDeviceType(device.type);
+ info.display_name = device.display_name;
+ info.device_name = device.device_name;
+ info.is_active = device.active;
+ info.is_muted = device.is_input
+ ? cras_audio_handler_->IsInputMutedForDevice(device.id)
+ : cras_audio_handler_->IsOutputMutedForDevice(device.id);
+ info.level =
+ device.is_input
+ ? cras_audio_handler_->GetOutputVolumePercentForDevice(device.id)
+ : cras_audio_handler_->GetInputGainPercentForDevice(device.id);
+ info.stable_device_id.reset(
+ new std::string(base::Uint64ToString(device.stable_device_id)));
+
+ return info;
+}
+
void AudioServiceImpl::OnOutputNodeVolumeChanged(uint64_t id, int volume) {
NotifyLevelChanged(id, volume);
}
@@ -365,39 +422,17 @@ void AudioServiceImpl::NotifyMuteChanged(bool is_input, bool is_muted) {
void AudioServiceImpl::NotifyDevicesChanged() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- DCHECK(cras_audio_handler_);
- DeviceInfoList devices_info_list;
chromeos::AudioDeviceList devices;
cras_audio_handler_->GetAudioDevices(&devices);
- for (size_t i = 0; i < devices.size(); ++i) {
- AudioDeviceInfo info;
- info.id = base::Uint64ToString(devices[i].id);
- info.stream_type = devices[i].is_input
- ? extensions::api::audio::STREAM_TYPE_INPUT
- : extensions::api::audio::STREAM_TYPE_OUTPUT;
- info.is_input = devices[i].is_input;
- info.device_type = GetAsAudioApiDeviceType(devices[i].type);
- info.display_name = devices[i].display_name;
- info.device_name = devices[i].device_name;
- info.is_active = devices[i].active;
- info.is_muted =
- devices[i].is_input
- ? cras_audio_handler_->IsInputMutedForDevice(devices[i].id)
- : cras_audio_handler_->IsOutputMutedForDevice(devices[i].id);
- info.level =
- devices[i].is_input
- ? cras_audio_handler_->GetOutputVolumePercentForDevice(
- devices[i].id)
- : cras_audio_handler_->GetInputGainPercentForDevice(devices[i].id);
- info.stable_device_id.reset(
- new std::string(base::Uint64ToString(devices[i].stable_device_id)));
-
- devices_info_list.push_back(std::move(info));
+
+ DeviceInfoList device_info_list;
+ for (const auto& device : devices) {
+ device_info_list.push_back(ToAudioDeviceInfo(device));
}
for (auto& observer : observer_list_)
- observer.OnDevicesChanged(devices_info_list);
+ observer.OnDevicesChanged(device_info_list);
// Notify DeviceChanged event for backward compatibility.
// TODO(jennyz): remove this code when the old version of hotrod retires.
« no previous file with comments | « extensions/browser/api/audio/audio_service.cc ('k') | extensions/browser/extension_function_histogram_value.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698