summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-11 16:39:28 +0000
committerderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-11 16:39:28 +0000
commit4857a4f0e4ba1bd153cd29a12f86c6c3ec4f9eb8 (patch)
treec7b99bdfc145180b1a6e25148df96378b9da3383
parent6dbdaa892d120c6fbb1355aeb0ba8810dad12840 (diff)
downloadchromium_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.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_;