diff options
author | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-11 16:39:28 +0000 |
---|---|---|
committer | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-11 16:39:28 +0000 |
commit | 4857a4f0e4ba1bd153cd29a12f86c6c3ec4f9eb8 (patch) | |
tree | c7b99bdfc145180b1a6e25148df96378b9da3383 | |
parent | 6dbdaa892d120c6fbb1355aeb0ba8810dad12840 (diff) | |
download | chromium_src-4857a4f0e4ba1bd153cd29a12f86c6c3ec4f9eb8.zip chromium_src-4857a4f0e4ba1bd153cd29a12f86c6c3ec4f9eb8.tar.gz chromium_src-4857a4f0e4ba1bd153cd29a12f86c6c3ec4f9eb8.tar.bz2 |
chromeos: Look for "Master" or "Digital" mixer elements.
This removes the code to control "Headphone" and "Speaker"
elements simultaneously for ARM, and makes us instead just
look for "Master" (x86) or "Digital" (ARM).
BUG=chromium-os:18578
TEST=manual: still works on x86
Review URL: http://codereview.chromium.org/7582024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96402 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/audio_mixer_alsa.cc | 50 | ||||
-rw-r--r-- | chrome/browser/chromeos/audio_mixer_alsa.h | 6 |
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_; |