Home | History | Annotate | Download | only in include
      1 /*
      2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_
     12 #define MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_
     13 
     14 #include "webrtc/modules/audio_device/include/audio_device_defines.h"
     15 #include "webrtc/modules/include/module.h"
     16 
     17 namespace webrtc {
     18 
     19 class AudioDeviceModule : public RefCountedModule {
     20  public:
     21   enum ErrorCode {
     22     kAdmErrNone = 0,
     23     kAdmErrArgument = 1
     24   };
     25 
     26   enum AudioLayer {
     27     kPlatformDefaultAudio = 0,
     28     kWindowsWaveAudio = 1,
     29     kWindowsCoreAudio = 2,
     30     kLinuxAlsaAudio = 3,
     31     kLinuxPulseAudio = 4,
     32     kAndroidJavaAudio = 5,
     33     kAndroidJavaInputAndOpenSLESOutputAudio = 6,
     34     kDummyAudio = 8
     35   };
     36 
     37   enum WindowsDeviceType {
     38     kDefaultCommunicationDevice = -1,
     39     kDefaultDevice = -2
     40   };
     41 
     42   enum BufferType {
     43     kFixedBufferSize  = 0,
     44     kAdaptiveBufferSize = 1
     45   };
     46 
     47   enum ChannelType {
     48     kChannelLeft = 0,
     49     kChannelRight = 1,
     50     kChannelBoth = 2
     51   };
     52 
     53  public:
     54   // Retrieve the currently utilized audio layer
     55   virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const = 0;
     56 
     57   // Error handling
     58   virtual ErrorCode LastError() const = 0;
     59   virtual int32_t RegisterEventObserver(AudioDeviceObserver* eventCallback) = 0;
     60 
     61   // Full-duplex transportation of PCM audio
     62   virtual int32_t RegisterAudioCallback(AudioTransport* audioCallback) = 0;
     63 
     64   // Main initialization and termination
     65   virtual int32_t Init() = 0;
     66   virtual int32_t Terminate() = 0;
     67   virtual bool Initialized() const = 0;
     68 
     69   // Device enumeration
     70   virtual int16_t PlayoutDevices() = 0;
     71   virtual int16_t RecordingDevices() = 0;
     72   virtual int32_t PlayoutDeviceName(uint16_t index,
     73                                     char name[kAdmMaxDeviceNameSize],
     74                                     char guid[kAdmMaxGuidSize]) = 0;
     75   virtual int32_t RecordingDeviceName(uint16_t index,
     76                                       char name[kAdmMaxDeviceNameSize],
     77                                       char guid[kAdmMaxGuidSize]) = 0;
     78 
     79   // Device selection
     80   virtual int32_t SetPlayoutDevice(uint16_t index) = 0;
     81   virtual int32_t SetPlayoutDevice(WindowsDeviceType device) = 0;
     82   virtual int32_t SetRecordingDevice(uint16_t index) = 0;
     83   virtual int32_t SetRecordingDevice(WindowsDeviceType device) = 0;
     84 
     85   // Audio transport initialization
     86   virtual int32_t PlayoutIsAvailable(bool* available) = 0;
     87   virtual int32_t InitPlayout() = 0;
     88   virtual bool PlayoutIsInitialized() const = 0;
     89   virtual int32_t RecordingIsAvailable(bool* available) = 0;
     90   virtual int32_t InitRecording() = 0;
     91   virtual bool RecordingIsInitialized() const = 0;
     92 
     93   // Audio transport control
     94   virtual int32_t StartPlayout() = 0;
     95   virtual int32_t StopPlayout() = 0;
     96   virtual bool Playing() const = 0;
     97   virtual int32_t StartRecording() = 0;
     98   virtual int32_t StopRecording() = 0;
     99   virtual bool Recording() const = 0;
    100 
    101   // Microphone Automatic Gain Control (AGC)
    102   virtual int32_t SetAGC(bool enable) = 0;
    103   virtual bool AGC() const = 0;
    104 
    105   // Volume control based on the Windows Wave API (Windows only)
    106   virtual int32_t SetWaveOutVolume(uint16_t volumeLeft,
    107                                    uint16_t volumeRight) = 0;
    108   virtual int32_t WaveOutVolume(uint16_t* volumeLeft,
    109                                 uint16_t* volumeRight) const = 0;
    110 
    111   // Audio mixer initialization
    112   virtual int32_t InitSpeaker() = 0;
    113   virtual bool SpeakerIsInitialized() const = 0;
    114   virtual int32_t InitMicrophone() = 0;
    115   virtual bool MicrophoneIsInitialized() const = 0;
    116 
    117   // Speaker volume controls
    118   virtual int32_t SpeakerVolumeIsAvailable(bool* available) = 0;
    119   virtual int32_t SetSpeakerVolume(uint32_t volume) = 0;
    120   virtual int32_t SpeakerVolume(uint32_t* volume) const = 0;
    121   virtual int32_t MaxSpeakerVolume(uint32_t* maxVolume) const = 0;
    122   virtual int32_t MinSpeakerVolume(uint32_t* minVolume) const = 0;
    123   virtual int32_t SpeakerVolumeStepSize(uint16_t* stepSize) const = 0;
    124 
    125   // Microphone volume controls
    126   virtual int32_t MicrophoneVolumeIsAvailable(bool* available) = 0;
    127   virtual int32_t SetMicrophoneVolume(uint32_t volume) = 0;
    128   virtual int32_t MicrophoneVolume(uint32_t* volume) const = 0;
    129   virtual int32_t MaxMicrophoneVolume(uint32_t* maxVolume) const = 0;
    130   virtual int32_t MinMicrophoneVolume(uint32_t* minVolume) const = 0;
    131   virtual int32_t MicrophoneVolumeStepSize(uint16_t* stepSize) const = 0;
    132 
    133   // Speaker mute control
    134   virtual int32_t SpeakerMuteIsAvailable(bool* available) = 0;
    135   virtual int32_t SetSpeakerMute(bool enable) = 0;
    136   virtual int32_t SpeakerMute(bool* enabled) const = 0;
    137 
    138   // Microphone mute control
    139   virtual int32_t MicrophoneMuteIsAvailable(bool* available) = 0;
    140   virtual int32_t SetMicrophoneMute(bool enable) = 0;
    141   virtual int32_t MicrophoneMute(bool* enabled) const = 0;
    142 
    143   // Microphone boost control
    144   virtual int32_t MicrophoneBoostIsAvailable(bool* available) = 0;
    145   virtual int32_t SetMicrophoneBoost(bool enable) = 0;
    146   virtual int32_t MicrophoneBoost(bool* enabled) const = 0;
    147 
    148   // Stereo support
    149   virtual int32_t StereoPlayoutIsAvailable(bool* available) const = 0;
    150   virtual int32_t SetStereoPlayout(bool enable) = 0;
    151   virtual int32_t StereoPlayout(bool* enabled) const = 0;
    152   virtual int32_t StereoRecordingIsAvailable(bool* available) const = 0;
    153   virtual int32_t SetStereoRecording(bool enable) = 0;
    154   virtual int32_t StereoRecording(bool* enabled) const = 0;
    155   virtual int32_t SetRecordingChannel(const ChannelType channel) = 0;
    156   virtual int32_t RecordingChannel(ChannelType* channel) const = 0;
    157 
    158   // Delay information and control
    159   virtual int32_t SetPlayoutBuffer(const BufferType type,
    160                                    uint16_t sizeMS = 0) = 0;
    161   virtual int32_t PlayoutBuffer(BufferType* type, uint16_t* sizeMS) const = 0;
    162   virtual int32_t PlayoutDelay(uint16_t* delayMS) const = 0;
    163   virtual int32_t RecordingDelay(uint16_t* delayMS) const = 0;
    164 
    165   // CPU load
    166   virtual int32_t CPULoad(uint16_t* load) const = 0;
    167 
    168   // Recording of raw PCM data
    169   virtual int32_t StartRawOutputFileRecording(
    170       const char pcmFileNameUTF8[kAdmMaxFileNameSize]) = 0;
    171   virtual int32_t StopRawOutputFileRecording() = 0;
    172   virtual int32_t StartRawInputFileRecording(
    173       const char pcmFileNameUTF8[kAdmMaxFileNameSize]) = 0;
    174   virtual int32_t StopRawInputFileRecording() = 0;
    175 
    176   // Native sample rate controls (samples/sec)
    177   virtual int32_t SetRecordingSampleRate(const uint32_t samplesPerSec) = 0;
    178   virtual int32_t RecordingSampleRate(uint32_t* samplesPerSec) const = 0;
    179   virtual int32_t SetPlayoutSampleRate(const uint32_t samplesPerSec) = 0;
    180   virtual int32_t PlayoutSampleRate(uint32_t* samplesPerSec) const = 0;
    181 
    182   // Mobile device specific functions
    183   virtual int32_t ResetAudioDevice() = 0;
    184   virtual int32_t SetLoudspeakerStatus(bool enable) = 0;
    185   virtual int32_t GetLoudspeakerStatus(bool* enabled) const = 0;
    186 
    187   // Only supported on Android.
    188   // TODO(henrika): Make pure virtual after updating Chromium.
    189   virtual bool BuiltInAECIsAvailable() const { return false; }
    190   virtual bool BuiltInAGCIsAvailable() const { return false; }
    191   virtual bool BuiltInNSIsAvailable() const { return false; }
    192 
    193   // Enables the built-in audio effects. Only supported on Android.
    194   // TODO(henrika): Make pure virtual after updating Chromium.
    195   virtual int32_t EnableBuiltInAEC(bool enable) { return -1; }
    196   virtual int32_t EnableBuiltInAGC(bool enable) { return -1; }
    197   virtual int32_t EnableBuiltInNS(bool enable) { return -1; }
    198   // Don't use.
    199   virtual bool BuiltInAECIsEnabled() const { return false; }
    200 
    201   // Only supported on iOS.
    202   // TODO(henrika): Make pure virtual after updating Chromium.
    203   virtual int GetPlayoutAudioParameters(AudioParameters* params) const {
    204     return -1;
    205   }
    206   virtual int GetRecordAudioParameters(AudioParameters* params) const {
    207     return -1;
    208   }
    209 
    210  protected:
    211   virtual ~AudioDeviceModule() {}
    212 };
    213 
    214 AudioDeviceModule* CreateAudioDeviceModule(
    215     int32_t id, AudioDeviceModule::AudioLayer audioLayer);
    216 
    217 }  // namespace webrtc
    218 
    219 #endif  // MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_
    220