summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/audio_mixer_alsa.cc50
-rw-r--r--chrome/browser/chromeos/audio_mixer_alsa.h6
2 files changed, 20 insertions, 36 deletions
diff --git a/chrome/browser/chromeos/audio_mixer_alsa.cc b/chrome/browser/chromeos/audio_mixer_alsa.cc
index b9fd33e..f257af8 100644
--- a/chrome/browser/chromeos/audio_mixer_alsa.cc
+++ b/chrome/browser/chromeos/audio_mixer_alsa.cc
@@ -26,7 +26,6 @@ typedef long alsa_long_t; // 'long' is required for ALSA API calls.
using std::max;
using std::min;
using std::string;
-using std::vector;
namespace chromeos {
@@ -35,12 +34,11 @@ namespace {
// Name of the ALSA card to which we connect.
const char kCardName[] = "default";
-// Mixer element names. We try to connect to the preferred master element
-// first; if it doesn't exist, we'll control any of the alternates that exist.
-const char kPreferredMasterElementName[] = "Master";
-const char* const kAlternateMasterElementNames[] = {
- "Headphone",
- "Speaker",
+// Mixer element names. We'll use the first master element from the list that
+// exists.
+const char* const kMasterElementNames[] = {
+ "Master", // x86
+ "Digital", // ARM
};
const char kPCMElementName[] = "PCM";
@@ -240,22 +238,16 @@ bool AudioMixerAlsa::ConnectInternal() {
double min_volume_db = kDefaultMinVolumeDb;
double max_volume_db = kDefaultMaxVolumeDb;
- vector<snd_mixer_elem_t*> master_elements;
- snd_mixer_elem_t* element =
- FindElementWithName(handle, kPreferredMasterElementName);
- if (element) {
- master_elements.push_back(element);
- } else {
- for (size_t i = 0; i < arraysize(kAlternateMasterElementNames); ++i) {
- element = FindElementWithName(handle, kAlternateMasterElementNames[i]);
- if (element)
- master_elements.push_back(element);
- }
+ snd_mixer_elem_t* master_element = NULL;
+ for (size_t i = 0; i < arraysize(kMasterElementNames); ++i) {
+ master_element = FindElementWithName(handle, kMasterElementNames[i]);
+ if (master_element)
+ break;
}
- if (master_elements.empty()) {
+ if (!master_element) {
if (num_connection_attempts_ == kConnectionAttemptToLogFailure)
- LOG(WARNING) << "Unable to find any mixer elements on " << kCardName;
+ LOG(WARNING) << "Unable to find a master element on " << kCardName;
snd_mixer_close(handle);
return false;
}
@@ -263,7 +255,7 @@ bool AudioMixerAlsa::ConnectInternal() {
alsa_long_t long_low = static_cast<alsa_long_t>(kDefaultMinVolumeDb * 100);
alsa_long_t long_high = static_cast<alsa_long_t>(kDefaultMaxVolumeDb * 100);
err = snd_mixer_selem_get_playback_dB_range(
- master_elements.at(0), &long_low, &long_high);
+ master_element, &long_low, &long_high);
if (err != 0) {
if (num_connection_attempts_ == kConnectionAttemptToLogFailure)
LOG(WARNING) << "snd_mixer_selem_get_playback_dB_range() failed:"
@@ -296,7 +288,7 @@ bool AudioMixerAlsa::ConnectInternal() {
{
base::AutoLock lock(lock_);
alsa_mixer_ = handle;
- master_elements_.swap(master_elements);
+ master_element_ = master_element;
pcm_element_ = pcm_element;
min_volume_db_ = min_volume_db;
max_volume_db_ = max_volume_db;
@@ -334,24 +326,18 @@ void AudioMixerAlsa::ApplyState() {
// If a PCM volume slider exists, then first set the Master volume to the
// nearest volume >= requested volume, then adjust PCM volume down to get
// closer to the requested volume.
- for (vector<snd_mixer_elem_t*>::iterator it = master_elements_.begin();
- it != master_elements_.end(); ++it)
- SetElementVolume(*it, new_volume_db, 0.9999f);
+ SetElementVolume(master_element_, new_volume_db, 0.9999f);
double pcm_volume_db = 0.0;
double master_volume_db = 0.0;
- if (GetElementVolume(master_elements_.at(0), &master_volume_db))
+ if (GetElementVolume(master_element_, &master_volume_db))
pcm_volume_db = new_volume_db - master_volume_db;
SetElementVolume(pcm_element_, pcm_volume_db, 0.5f);
} else {
- for (vector<snd_mixer_elem_t*>::iterator it = master_elements_.begin();
- it != master_elements_.end(); ++it)
- SetElementVolume(*it, new_volume_db, 0.5f);
+ SetElementVolume(master_element_, new_volume_db, 0.5f);
}
- for (vector<snd_mixer_elem_t*>::iterator it = master_elements_.begin();
- it != master_elements_.end(); ++it)
- SetElementMuted(*it, should_mute);
+ SetElementMuted(master_element_, should_mute);
}
snd_mixer_elem_t* AudioMixerAlsa::FindElementWithName(
diff --git a/chrome/browser/chromeos/audio_mixer_alsa.h b/chrome/browser/chromeos/audio_mixer_alsa.h
index 579603d..ea7bb6b 100644
--- a/chrome/browser/chromeos/audio_mixer_alsa.h
+++ b/chrome/browser/chromeos/audio_mixer_alsa.h
@@ -7,7 +7,6 @@
#pragma once
#include <string>
-#include <vector>
#include "base/basictypes.h"
#include "base/callback_old.h"
@@ -102,9 +101,8 @@ class AudioMixerAlsa : public AudioMixer {
// Connection to ALSA. NULL if not connected.
_snd_mixer* alsa_mixer_;
- // Master mixers (some hardware has e.g. separate headphone and speaker
- // elements).
- std::vector<_snd_mixer_elem*> master_elements_;
+ // Master mixer.
+ _snd_mixer_elem* master_element_;
// PCM mixer. May be NULL if the driver doesn't expose one.
_snd_mixer_elem* pcm_element_;