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

Side by Side Diff: media/audio/cras/audio_manager_cras.cc

Issue 1362093002: Re-land: Add localized default audio device names. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Exclude media_resource_provider on iOS. Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « media/audio/cras/audio_manager_cras.h ('k') | media/audio/mac/audio_manager_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "media/audio/cras/audio_manager_cras.h" 5 #include "media/audio/cras/audio_manager_cras.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/environment.h" 10 #include "base/environment.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/nix/xdg_util.h" 12 #include "base/nix/xdg_util.h"
13 #include "base/stl_util.h" 13 #include "base/stl_util.h"
14 #include "chromeos/audio/audio_device.h" 14 #include "chromeos/audio/audio_device.h"
15 #include "chromeos/audio/cras_audio_handler.h" 15 #include "chromeos/audio/cras_audio_handler.h"
16 #include "media/audio/cras/cras_input.h" 16 #include "media/audio/cras/cras_input.h"
17 #include "media/audio/cras/cras_unified.h" 17 #include "media/audio/cras/cras_unified.h"
18 #include "media/base/channel_layout.h" 18 #include "media/base/channel_layout.h"
19 #include "media/base/media_resources.h"
19 20
20 // cras_util.h headers pull in min/max macros... 21 // cras_util.h headers pull in min/max macros...
21 // TODO(dgreid): Fix headers such that these aren't imported. 22 // TODO(dgreid): Fix headers such that these aren't imported.
22 #undef min 23 #undef min
23 #undef max 24 #undef max
24 25
25 namespace media { 26 namespace media {
26 namespace { 27 namespace {
27 28
28 // Maximum number of output streams that can be open simultaneously. 29 // Maximum number of output streams that can be open simultaneously.
29 const int kMaxOutputStreams = 50; 30 const int kMaxOutputStreams = 50;
30 31
31 // Default sample rate for input and output streams. 32 // Default sample rate for input and output streams.
32 const int kDefaultSampleRate = 48000; 33 const int kDefaultSampleRate = 48000;
33 34
34 // Define bounds for the output buffer size. 35 // Define bounds for the output buffer size.
35 const int kMinimumOutputBufferSize = 512; 36 const int kMinimumOutputBufferSize = 512;
36 const int kMaximumOutputBufferSize = 8192; 37 const int kMaximumOutputBufferSize = 8192;
37 38
38 // Default input buffer size. 39 // Default input buffer size.
39 const int kDefaultInputBufferSize = 1024; 40 const int kDefaultInputBufferSize = 1024;
40 41
42 const char kBeamformingOnUniqueId[] = "beamforming-on";
43 const char kBeamformingOffUniqueId[] = "beamforming-off";
44
41 void AddDefaultDevice(AudioDeviceNames* device_names) { 45 void AddDefaultDevice(AudioDeviceNames* device_names) {
46 DCHECK(device_names->empty());
47
42 // Cras will route audio from a proper physical device automatically. 48 // Cras will route audio from a proper physical device automatically.
43 device_names->push_back( 49 device_names->push_back(AudioDeviceName(AudioManager::GetDefaultDeviceName(),
44 AudioDeviceName(AudioManagerBase::kDefaultDeviceName, 50 AudioManagerBase::kDefaultDeviceId));
45 AudioManagerBase::kDefaultDeviceId));
46 } 51 }
47 52
48 // Returns the AudioDeviceName of the virtual device with beamforming on. 53 // Adds the beamforming on and off devices to |device_names|.
49 AudioDeviceName BeamformingOnDeviceName() { 54 void AddBeamformingDevices(AudioDeviceNames* device_names) {
50 // TODO(ajm): Replace these strings with properly localized ones. 55 DCHECK(device_names->empty());
51 // (crbug.com/497001)
52 static const char kBeamformingOnNameSuffix[] = " (pick up just one person)";
53 static const char kBeamformingOnIdSuffix[] = "-beamforming";
54 56
55 return AudioDeviceName( 57 device_names->push_back(AudioDeviceName(
56 std::string(AudioManagerBase::kDefaultDeviceName) + 58 GetLocalizedStringUTF8(BEAMFORMING_ON_DEFAULT_AUDIO_INPUT_DEVICE_NAME),
57 kBeamformingOnNameSuffix, 59 kBeamformingOnUniqueId));
58 std::string(AudioManagerBase::kDefaultDeviceId) + kBeamformingOnIdSuffix); 60 device_names->push_back(AudioDeviceName(
59 } 61 GetLocalizedStringUTF8(BEAMFORMING_OFF_DEFAULT_AUDIO_INPUT_DEVICE_NAME),
60 62 kBeamformingOffUniqueId));
61 // Returns the AudioDeviceName of the virtual device with beamforming off.
62 AudioDeviceName BeamformingOffDeviceName() {
63 static const char kBeamformingOffNameSuffix[] = " (pick up everything)";
64 return AudioDeviceName(std::string(AudioManagerBase::kDefaultDeviceName) +
65 kBeamformingOffNameSuffix,
66 AudioManagerBase::kDefaultDeviceId);
67 } 63 }
68 64
69 // Returns a mic positions string if the machine has a beamforming capable 65 // Returns a mic positions string if the machine has a beamforming capable
70 // internal mic and otherwise an empty string. 66 // internal mic and otherwise an empty string.
71 std::string MicPositions() { 67 std::string MicPositions() {
72 // Get the list of devices from CRAS. An internal mic with a non-empty 68 // Get the list of devices from CRAS. An internal mic with a non-empty
73 // positions field indicates the machine has a beamforming capable mic array. 69 // positions field indicates the machine has a beamforming capable mic array.
74 chromeos::AudioDeviceList devices; 70 chromeos::AudioDeviceList devices;
75 chromeos::CrasAudioHandler::Get()->GetAudioDevices(&devices); 71 chromeos::CrasAudioHandler::Get()->GetAudioDevices(&devices);
76 for (const auto& device : devices) { 72 for (const auto& device : devices) {
(...skipping 15 matching lines...) Expand all
92 chromeos::AudioDeviceList devices; 88 chromeos::AudioDeviceList devices;
93 chromeos::CrasAudioHandler::Get()->GetAudioDevices(&devices); 89 chromeos::CrasAudioHandler::Get()->GetAudioDevices(&devices);
94 for (size_t i = 0; i < devices.size(); ++i) { 90 for (size_t i = 0; i < devices.size(); ++i) {
95 if (devices[i].is_input && devices[i].is_for_simple_usage()) 91 if (devices[i].is_input && devices[i].is_for_simple_usage())
96 return true; 92 return true;
97 } 93 }
98 return false; 94 return false;
99 } 95 }
100 96
101 AudioManagerCras::AudioManagerCras(AudioLogFactory* audio_log_factory) 97 AudioManagerCras::AudioManagerCras(AudioLogFactory* audio_log_factory)
102 : AudioManagerBase(audio_log_factory), 98 : AudioManagerBase(audio_log_factory), has_keyboard_mic_(false) {
103 has_keyboard_mic_(false),
104 beamforming_on_device_name_(BeamformingOnDeviceName()),
105 beamforming_off_device_name_(BeamformingOffDeviceName()) {
106 SetMaxOutputStreamsAllowed(kMaxOutputStreams); 99 SetMaxOutputStreamsAllowed(kMaxOutputStreams);
107 } 100 }
108 101
109 AudioManagerCras::~AudioManagerCras() { 102 AudioManagerCras::~AudioManagerCras() {
110 Shutdown(); 103 Shutdown();
111 } 104 }
112 105
113 void AudioManagerCras::ShowAudioInputSettings() { 106 void AudioManagerCras::ShowAudioInputSettings() {
114 NOTIMPLEMENTED(); 107 NOTIMPLEMENTED();
115 } 108 }
116 109
117 void AudioManagerCras::GetAudioInputDeviceNames( 110 void AudioManagerCras::GetAudioInputDeviceNames(
118 AudioDeviceNames* device_names) { 111 AudioDeviceNames* device_names) {
119 DCHECK(device_names->empty()); 112 DCHECK(device_names->empty());
120 113
121 mic_positions_ = ParsePointsFromString(MicPositions()); 114 mic_positions_ = ParsePointsFromString(MicPositions());
122 // At least two mic positions indicates we have a beamforming capable mic 115 // At least two mic positions indicates we have a beamforming capable mic
123 // array. Add the virtual beamforming device to the list. When this device is 116 // array. Add the virtual beamforming device to the list. When this device is
124 // queried through GetInputStreamParameters, provide the cached mic positions. 117 // queried through GetInputStreamParameters, provide the cached mic positions.
125 if (mic_positions_.size() > 1) { 118 if (mic_positions_.size() > 1)
126 device_names->push_back(beamforming_on_device_name_); 119 AddBeamformingDevices(device_names);
127 device_names->push_back(beamforming_off_device_name_); 120 else
128 } else {
129 AddDefaultDevice(device_names); 121 AddDefaultDevice(device_names);
130 }
131 } 122 }
132 123
133 void AudioManagerCras::GetAudioOutputDeviceNames( 124 void AudioManagerCras::GetAudioOutputDeviceNames(
134 AudioDeviceNames* device_names) { 125 AudioDeviceNames* device_names) {
135 DCHECK(device_names->empty());
136
137 AddDefaultDevice(device_names); 126 AddDefaultDevice(device_names);
138 } 127 }
139 128
140 AudioParameters AudioManagerCras::GetInputStreamParameters( 129 AudioParameters AudioManagerCras::GetInputStreamParameters(
141 const std::string& device_id) { 130 const std::string& device_id) {
142 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); 131 DCHECK(GetTaskRunner()->BelongsToCurrentThread());
143 132
144 int user_buffer_size = GetUserBufferSize(); 133 int user_buffer_size = GetUserBufferSize();
145 int buffer_size = user_buffer_size ? 134 int buffer_size = user_buffer_size ?
146 user_buffer_size : kDefaultInputBufferSize; 135 user_buffer_size : kDefaultInputBufferSize;
147 136
148 // TODO(hshi): Fine-tune audio parameters based on |device_id|. The optimal 137 // TODO(hshi): Fine-tune audio parameters based on |device_id|. The optimal
149 // parameters for the loopback stream may differ from the default. 138 // parameters for the loopback stream may differ from the default.
150 AudioParameters params(AudioParameters::AUDIO_PCM_LOW_LATENCY, 139 AudioParameters params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
151 CHANNEL_LAYOUT_STEREO, kDefaultSampleRate, 16, 140 CHANNEL_LAYOUT_STEREO, kDefaultSampleRate, 16,
152 buffer_size); 141 buffer_size);
153 if (has_keyboard_mic_) 142 if (has_keyboard_mic_)
154 params.set_effects(AudioParameters::KEYBOARD_MIC); 143 params.set_effects(AudioParameters::KEYBOARD_MIC);
155 if (device_id == beamforming_on_device_name_.unique_id) 144 if (device_id == kBeamformingOnUniqueId)
156 params.set_mic_positions(mic_positions_); 145 params.set_mic_positions(mic_positions_);
157 return params; 146 return params;
158 } 147 }
159 148
160 void AudioManagerCras::SetHasKeyboardMic() { 149 void AudioManagerCras::SetHasKeyboardMic() {
161 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); 150 DCHECK(GetTaskRunner()->BelongsToCurrentThread());
162 has_keyboard_mic_ = true; 151 has_keyboard_mic_ = true;
163 } 152 }
164 153
165 AudioOutputStream* AudioManagerCras::MakeLinearOutputStream( 154 AudioOutputStream* AudioManagerCras::MakeLinearOutputStream(
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 case 24: 223 case 24:
235 return SND_PCM_FORMAT_S24; 224 return SND_PCM_FORMAT_S24;
236 case 32: 225 case 32:
237 return SND_PCM_FORMAT_S32; 226 return SND_PCM_FORMAT_S32;
238 default: 227 default:
239 return SND_PCM_FORMAT_UNKNOWN; 228 return SND_PCM_FORMAT_UNKNOWN;
240 } 229 }
241 } 230 }
242 231
243 } // namespace media 232 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/cras/audio_manager_cras.h ('k') | media/audio/mac/audio_manager_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698