Home | History | Annotate | Download | only in pulse
      1 // Copyright 2013 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 MEDIA_AUDIO_PULSE_AUDIO_MANAGER_PULSE_H_
      6 #define MEDIA_AUDIO_PULSE_AUDIO_MANAGER_PULSE_H_
      7 
      8 #include <pulse/pulseaudio.h>
      9 #include <string>
     10 
     11 #include "base/compiler_specific.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "media/audio/audio_manager_base.h"
     14 
     15 namespace media {
     16 
     17 class MEDIA_EXPORT AudioManagerPulse : public AudioManagerBase {
     18  public:
     19   AudioManagerPulse();
     20   virtual ~AudioManagerPulse();
     21 
     22   static AudioManager* Create();
     23 
     24   // Implementation of AudioManager.
     25   virtual bool HasAudioOutputDevices() OVERRIDE;
     26   virtual bool HasAudioInputDevices() OVERRIDE;
     27   virtual void ShowAudioInputSettings() OVERRIDE;
     28   virtual void GetAudioInputDeviceNames(media::AudioDeviceNames* device_names)
     29       OVERRIDE;
     30   virtual AudioParameters GetInputStreamParameters(
     31       const std::string& device_id) OVERRIDE;
     32 
     33   // Implementation of AudioManagerBase.
     34   virtual AudioOutputStream* MakeLinearOutputStream(
     35       const AudioParameters& params) OVERRIDE;
     36   virtual AudioOutputStream* MakeLowLatencyOutputStream(
     37       const AudioParameters& params,
     38       const std::string& input_device_id) OVERRIDE;
     39   virtual AudioInputStream* MakeLinearInputStream(
     40       const AudioParameters& params, const std::string& device_id) OVERRIDE;
     41   virtual AudioInputStream* MakeLowLatencyInputStream(
     42       const AudioParameters& params, const std::string& device_id) OVERRIDE;
     43 
     44  protected:
     45   virtual AudioParameters GetPreferredOutputStreamParameters(
     46       const AudioParameters& input_params) OVERRIDE;
     47 
     48  private:
     49   bool Init();
     50   void DestroyPulse();
     51 
     52   // Callback to get the devices' info like names, used by GetInputDevices().
     53   static void InputDevicesInfoCallback(pa_context* context,
     54                                        const pa_source_info* info,
     55                                        int error, void* user_data);
     56   static void OutputDevicesInfoCallback(pa_context* context,
     57                                         const pa_sink_info* info,
     58                                         int error, void* user_data);
     59 
     60   // Callback to get the native sample rate of PulseAudio, used by
     61   // GetNativeSampleRate().
     62   static void SampleRateInfoCallback(pa_context* context,
     63                                      const pa_server_info* info,
     64                                      void* user_data);
     65 
     66   // Called by MakeLinearOutputStream and MakeLowLatencyOutputStream.
     67   AudioOutputStream* MakeOutputStream(const AudioParameters& params,
     68                                       const std::string& input_device_id);
     69 
     70   // Called by MakeLinearInputStream and MakeLowLatencyInputStream.
     71   AudioInputStream* MakeInputStream(const AudioParameters& params,
     72                                     const std::string& device_id);
     73 
     74   // Gets the native sample rate of Pulse.
     75   int GetNativeSampleRate();
     76 
     77   pa_threaded_mainloop* input_mainloop_;
     78   pa_context* input_context_;
     79   AudioDeviceNames* devices_;
     80   int native_input_sample_rate_;
     81 
     82   DISALLOW_COPY_AND_ASSIGN(AudioManagerPulse);
     83 };
     84 
     85 }  // namespace media
     86 
     87 #endif  // MEDIA_AUDIO_PULSE_AUDIO_MANAGER_PULSE_H_
     88