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

Side by Side Diff: chrome/browser/chromeos/audio_mixer_alsa.h

Issue 5859003: Add ALSA support to volume keys (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/browser/chromeos
Patch Set: cleanups Created 10 years 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_CHROMEOS_AUDIO_MIXER_ALSA_H_
6 #define CHROME_BROWSER_CHROMEOS_AUDIO_MIXER_ALSA_H_
7 #pragma once
8
9 #include <alsa/asoundlib.h>
scherkus (not reviewing) 2010/12/22 22:31:58 avoid system includes in header files at all costs
davejcool 2010/12/23 03:09:02 OK, I considered that too until I saw several head
10
11 #include "base/basictypes.h"
12 #include "base/callback.h"
13 #include "base/lock.h"
14 #include "base/scoped_ptr.h"
15 #include "base/thread.h"
16
scherkus (not reviewing) 2010/12/22 22:31:58 nit: no blank line
17 #include "chrome/browser/chromeos/audio_mixer_base.h"
18
19 namespace chromeos {
20
21 class AudioMixerAlsa : public AudioMixerBase {
22 public:
23
scherkus (not reviewing) 2010/12/22 22:31:58 nit: no blank line
24 AudioMixerAlsa();
25 ~AudioMixerAlsa();
scherkus (not reviewing) 2010/12/22 22:31:58 add virtual
26
27 // Implementation of AudioMixer, see AudioMixerBase for explanations.
28 virtual bool Init(InitDoneCallback* callback);
29 virtual bool InitSync();
30 virtual double GetVolumeDb() const;
31 virtual void GetVolumeLimits(double* vol_min, double* vol_max);
32 virtual void SetVolumeDb(double vol_db);
33 virtual bool IsMute() const;
34 virtual void SetMute(bool mute);
35 virtual State CheckState() const;
36
37 private:
38 // Called to do initialization in background from worker thread.
39 void DoInit(InitDoneCallback* callback);
40
41 // Helper function to just get our message loop thread going.
42 bool InitThread();
43
44 // Try to connect to the ALSA mixer through their simple controls interface,
45 // and cache mixer handle and mixer elements we'll be using.
46 bool InitializeAlsaMixer();
47 void FreeAlsaMixer();
48
49 snd_mixer_elem_t* FindElementWithName(snd_mixer_t* handle,
50 const char* element_name) const;
51
52 bool GetElementVolume(snd_mixer_elem_t* elem,
53 float* current_vol) const;
54
55 // Since volume is done in steps, we may not get the exact volume asked for,
56 // so actual_vol will contain the true volume that was set. This information
57 // can be used to further refine the volume by adjust a different mixer
58 // element. The rounding_bias is added in before rounding to the nearest
59 // volume step (use 0.5 to round to nearest).
60 bool SetElementVolume(snd_mixer_elem_t* elem,
61 float new_vol,
62 float* actual_vol,
63 float rounding_bias);
64
65 // In ALSA, the mixer element's 'switch' is turned off for mute.
66 bool GetElementSwitched(snd_mixer_elem_t* elem,
scherkus (not reviewing) 2010/12/22 22:31:58 maybe these should be renamed IsElementMuted / Set
67 int* switched) const;
68
69 bool SetElementSwitched(snd_mixer_elem_t* elem,
70 int switched);
71
72 bool MixerReady() const;
73
74 // Volume range limits are computed once during InitializeAlsaMixer.
75 float min_volume_;
76 float max_volume_;
77
78 // Muting is done by setting volume to minimum, so we must save the original.
79 // This is the only state information kept in this object. In some cases,
80 // ALSA can report it has a volume switch and we can turn it off, but it has
81 // no effect.
82 float save_volume_;
83
84 mutable Lock mixer_state_lock_;
85 mutable State mixer_state_;
86
87 // Cached contexts for use in ALSA calls.
88 snd_mixer_t* alsa_mixer_;
89 snd_mixer_elem_t* elem_master_;
90 snd_mixer_elem_t* elem_pcm_;
91
92 scoped_ptr<base::Thread> thread_;
93
94 DISALLOW_COPY_AND_ASSIGN(AudioMixerAlsa);
95 };
96
97 } // namespace chromeos
98
99 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::AudioMixerAlsa);
100
101 #endif // CHROME_BROWSER_CHROMEOS_AUDIO_MIXER_ALSA_H_
102
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698