Home | History | Annotate | Download | only in chromeos
      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 
     27   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