• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_H_
6 #define CHROME_BROWSER_CHROMEOS_AUDIO_MIXER_H_
7 #pragma once
8 
9 #include "base/basictypes.h"
10 #include "base/callback.h"
11 
12 namespace chromeos {
13 
14 class AudioMixer {
15  public:
16   // Approximation of pure silence expressed in decibels.
17   static const double kSilenceDb = -200.0;
18 
19   enum State {
20     UNINITIALIZED = 0,
21     INITIALIZING,
22     READY,
23     SHUTTING_DOWN,
24     IN_ERROR,
25   };
26 
AudioMixer()27   AudioMixer() {}
~AudioMixer()28   virtual ~AudioMixer() {}
29 
30   // Non-Blocking call.  Connect to Mixer, find a default device, then call the
31   // callback when complete with success code.
32   typedef Callback1<bool>::Type InitDoneCallback;
33   virtual void Init(InitDoneCallback* callback) = 0;
34 
35   // Call may block.  Mixer will be connected before returning, unless error.
36   virtual bool InitSync() = 0;
37 
38   // Call may block.  Returns a default of kSilenceDb on error.
39   virtual double GetVolumeDb() const = 0;
40 
41   // Non-Blocking call.  Returns the actual volume limits possible according
42   // to the mixer.  Limits are left unchanged on error
43   virtual bool GetVolumeLimits(double* vol_min, double* vol_max) = 0;
44 
45   // Non-blocking call.
46   virtual void SetVolumeDb(double vol_db) = 0;
47 
48   // Call may block.  Gets the mute state of the default device (true == mute).
49   // Returns a default of false on error.
50   virtual bool IsMute() const = 0;
51 
52   // Non-Blocking call.
53   virtual void SetMute(bool mute) = 0;
54 
55   // Returns READY if we have a valid working connection to the Mixer.
56   // This can return IN_ERROR if we lose the connection, even after an original
57   // successful init.  Non-blocking call.
58   virtual State GetState() const = 0;
59 
60  private:
61   DISALLOW_COPY_AND_ASSIGN(AudioMixer);
62 };
63 
64 }  // namespace chromeos
65 
66 #endif  // CHROME_BROWSER_CHROMEOS_AUDIO_MIXER_H_
67 
68