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

Unified Diff: media/audio/cras/audio_manager_cras.cc

Issue 2869933002: cros: Create virtual device name only when two audio nodes sharing the same device index (Closed)
Patch Set: Created 3 years, 7 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/cras/audio_manager_cras.cc
diff --git a/media/audio/cras/audio_manager_cras.cc b/media/audio/cras/audio_manager_cras.cc
index 49d9b875f4656034706f6a6c6f222d750d7ea07d..118d384200d2de71df8b14e72dce545755beb45a 100644
--- a/media/audio/cras/audio_manager_cras.cc
+++ b/media/audio/cras/audio_manager_cras.cc
@@ -50,8 +50,9 @@ const int kDefaultInputBufferSize = 1024;
const char kBeamformingOnDeviceId[] = "default-beamforming-on";
const char kBeamformingOffDeviceId[] = "default-beamforming-off";
-const char kInternalInputDevice[] = "Built-in mic";
-const char kInternalOutputDevice[] = "Built-in speaker";
+const char kInternalInputVirtualDevice[] = "Built-in mic";
+const char kInternalOutputVirtualDevice[] = "Built-in speaker";
+const char kHeadphoneLineOutVirtualDevice[] = "Headphone/Line Out";
enum CrosBeamformingDeviceState {
BEAMFORMING_DEFAULT_ENABLED = 0,
@@ -87,6 +88,27 @@ std::string MicPositions() {
return "";
}
+// Process |device_list| that two shares the same dev_index by creating a
+// virtual device name for them.
+void ProcessVirtualDeviceName(AudioDeviceNames* device_names,
+ const chromeos::AudioDeviceList& device_list) {
+ DCHECK_EQ(2, device_list.size());
+ if (device_list[0].type == chromeos::AUDIO_TYPE_LINEOUT ||
+ device_list[1].type == chromeos::AUDIO_TYPE_LINEOUT) {
+ device_names->emplace_back(kHeadphoneLineOutVirtualDevice,
+ base::Uint64ToString(device_list[0].id));
+ } else if (device_list[0].type == chromeos::AUDIO_TYPE_INTERNAL_SPEAKER ||
+ device_list[1].type == chromeos::AUDIO_TYPE_INTERNAL_SPEAKER) {
+ device_names->emplace_back(kInternalOutputVirtualDevice,
+ base::Uint64ToString(device_list[0].id));
+ } else {
+ DCHECK(device_list[0].type == chromeos::AUDIO_TYPE_INTERNAL_MIC ||
+ device_list[1].type == chromeos::AUDIO_TYPE_INTERNAL_MIC);
+ device_names->emplace_back(kInternalInputVirtualDevice,
+ base::Uint64ToString(device_list[0].id));
+ }
+}
+
} // namespace
// Adds the beamforming on and off devices to |device_names|.
@@ -169,36 +191,24 @@ void AudioManagerCras::GetAudioDeviceNamesImpl(bool is_input,
chromeos::AudioDeviceList devices;
chromeos::CrasAudioHandler::Get()->GetAudioDevices(&devices);
- int internal_input_dev_index = 0;
- int internal_output_dev_index = 0;
+ // |dev_idx_map| is a map of dev_index and their audio devices.
+ std::map<int, chromeos::AudioDeviceList> dev_idx_map;
for (const auto& device : devices) {
- if (device.type == chromeos::AUDIO_TYPE_INTERNAL_MIC)
- internal_input_dev_index = dev_index_of(device.id);
- else if (device.type == chromeos::AUDIO_TYPE_INTERNAL_SPEAKER)
- internal_output_dev_index = dev_index_of(device.id);
+ if (device.is_input != is_input || !device.is_for_simple_usage())
+ continue;
+
+ dev_idx_map[dev_index_of(device.id)].push_back(device);
}
- bool has_internal_input = false;
- bool has_internal_output = false;
- for (const auto& device : devices) {
- if (device.is_input == is_input && device.is_for_simple_usage()) {
- int dev_index = dev_index_of(device.id);
- if (dev_index == internal_input_dev_index) {
- if (!has_internal_input) {
- device_names->emplace_back(kInternalInputDevice,
- base::Uint64ToString(device.id));
- has_internal_input = true;
- }
- } else if (dev_index == internal_output_dev_index) {
- if (!has_internal_output) {
- device_names->emplace_back(kInternalOutputDevice,
- base::Uint64ToString(device.id));
- has_internal_output = true;
- }
- } else {
- device_names->emplace_back(device.display_name,
- base::Uint64ToString(device.id));
- }
+ for (const auto& item : dev_idx_map) {
+ if (1 == item.second.size()) {
+ const chromeos::AudioDevice& device = item.second.front();
+ device_names->emplace_back(device.display_name,
+ base::Uint64ToString(device.id));
+ } else {
+ // Create virtual device name for audio nodes that share the same device
+ // index.
+ ProcessVirtualDeviceName(device_names, item.second);
}
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698