Home | History | Annotate | Download | only in audio_device
      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 WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_GENERIC_H
     12 #define WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_GENERIC_H
     13 
     14 #include "webrtc/modules/audio_device/audio_device_buffer.h"
     15 #include "webrtc/modules/audio_device/include/audio_device.h"
     16 
     17 namespace webrtc {
     18 
     19 class AudioDeviceGeneric {
     20  public:
     21   // Retrieve the currently utilized audio layer
     22   virtual int32_t ActiveAudioLayer(
     23       AudioDeviceModule::AudioLayer& audioLayer) const = 0;
     24 
     25   // Main initializaton and termination
     26   virtual int32_t Init() = 0;
     27   virtual int32_t Terminate() = 0;
     28   virtual bool Initialized() const = 0;
     29 
     30   // Device enumeration
     31   virtual int16_t PlayoutDevices() = 0;
     32   virtual int16_t RecordingDevices() = 0;
     33   virtual int32_t PlayoutDeviceName(uint16_t index,
     34                                     char name[kAdmMaxDeviceNameSize],
     35                                     char guid[kAdmMaxGuidSize]) = 0;
     36   virtual int32_t RecordingDeviceName(uint16_t index,
     37                                       char name[kAdmMaxDeviceNameSize],
     38                                       char guid[kAdmMaxGuidSize]) = 0;
     39 
     40   // Device selection
     41   virtual int32_t SetPlayoutDevice(uint16_t index) = 0;
     42   virtual int32_t SetPlayoutDevice(
     43       AudioDeviceModule::WindowsDeviceType device) = 0;
     44   virtual int32_t SetRecordingDevice(uint16_t index) = 0;
     45   virtual int32_t SetRecordingDevice(
     46       AudioDeviceModule::WindowsDeviceType device) = 0;
     47 
     48   // Audio transport initialization
     49   virtual int32_t PlayoutIsAvailable(bool& available) = 0;
     50   virtual int32_t InitPlayout() = 0;
     51   virtual bool PlayoutIsInitialized() const = 0;
     52   virtual int32_t RecordingIsAvailable(bool& available) = 0;
     53   virtual int32_t InitRecording() = 0;
     54   virtual bool RecordingIsInitialized() const = 0;
     55 
     56   // Audio transport control
     57   virtual int32_t StartPlayout() = 0;
     58   virtual int32_t StopPlayout() = 0;
     59   virtual bool Playing() const = 0;
     60   virtual int32_t StartRecording() = 0;
     61   virtual int32_t StopRecording() = 0;
     62   virtual bool Recording() const = 0;
     63 
     64   // Microphone Automatic Gain Control (AGC)
     65   virtual int32_t SetAGC(bool enable) = 0;
     66   virtual bool AGC() const = 0;
     67 
     68   // Volume control based on the Windows Wave API (Windows only)
     69   virtual int32_t SetWaveOutVolume(uint16_t volumeLeft,
     70                                    uint16_t volumeRight) = 0;
     71   virtual int32_t WaveOutVolume(uint16_t& volumeLeft,
     72                                 uint16_t& volumeRight) const = 0;
     73 
     74   // Audio mixer initialization
     75   virtual int32_t InitSpeaker() = 0;
     76   virtual bool SpeakerIsInitialized() const = 0;
     77   virtual int32_t InitMicrophone() = 0;
     78   virtual bool MicrophoneIsInitialized() const = 0;
     79 
     80   // Speaker volume controls
     81   virtual int32_t SpeakerVolumeIsAvailable(bool& available) = 0;
     82   virtual int32_t SetSpeakerVolume(uint32_t volume) = 0;
     83   virtual int32_t SpeakerVolume(uint32_t& volume) const = 0;
     84   virtual int32_t MaxSpeakerVolume(uint32_t& maxVolume) const = 0;
     85   virtual int32_t MinSpeakerVolume(uint32_t& minVolume) const = 0;
     86   virtual int32_t SpeakerVolumeStepSize(uint16_t& stepSize) const = 0;
     87 
     88   // Microphone volume controls
     89   virtual int32_t MicrophoneVolumeIsAvailable(bool& available) = 0;
     90   virtual int32_t SetMicrophoneVolume(uint32_t volume) = 0;
     91   virtual int32_t MicrophoneVolume(uint32_t& volume) const = 0;
     92   virtual int32_t MaxMicrophoneVolume(uint32_t& maxVolume) const = 0;
     93   virtual int32_t MinMicrophoneVolume(uint32_t& minVolume) const = 0;
     94   virtual int32_t MicrophoneVolumeStepSize(uint16_t& stepSize) const = 0;
     95 
     96   // Speaker mute control
     97   virtual int32_t SpeakerMuteIsAvailable(bool& available) = 0;
     98   virtual int32_t SetSpeakerMute(bool enable) = 0;
     99   virtual int32_t SpeakerMute(bool& enabled) const = 0;
    100 
    101   // Microphone mute control
    102   virtual int32_t MicrophoneMuteIsAvailable(bool& available) = 0;
    103   virtual int32_t SetMicrophoneMute(bool enable) = 0;
    104   virtual int32_t MicrophoneMute(bool& enabled) const = 0;
    105 
    106   // Microphone boost control
    107   virtual int32_t MicrophoneBoostIsAvailable(bool& available) = 0;
    108   virtual int32_t SetMicrophoneBoost(bool enable) = 0;
    109   virtual int32_t MicrophoneBoost(bool& enabled) const = 0;
    110 
    111   // Stereo support
    112   virtual int32_t StereoPlayoutIsAvailable(bool& available) = 0;
    113   virtual int32_t SetStereoPlayout(bool enable) = 0;
    114   virtual int32_t StereoPlayout(bool& enabled) const = 0;
    115   virtual int32_t StereoRecordingIsAvailable(bool& available) = 0;
    116   virtual int32_t SetStereoRecording(bool enable) = 0;
    117   virtual int32_t StereoRecording(bool& enabled) const = 0;
    118 
    119   // Delay information and control
    120   virtual int32_t SetPlayoutBuffer(const AudioDeviceModule::BufferType type,
    121                                    uint16_t sizeMS = 0) = 0;
    122   virtual int32_t PlayoutBuffer(AudioDeviceModule::BufferType& type,
    123                                 uint16_t& sizeMS) const = 0;
    124   virtual int32_t PlayoutDelay(uint16_t& delayMS) const = 0;
    125   virtual int32_t RecordingDelay(uint16_t& delayMS) const = 0;
    126 
    127   // CPU load
    128   virtual int32_t CPULoad(uint16_t& load) const = 0;
    129 
    130   // Native sample rate controls (samples/sec)
    131   virtual int32_t SetRecordingSampleRate(const uint32_t samplesPerSec);
    132   virtual int32_t SetPlayoutSampleRate(const uint32_t samplesPerSec);
    133 
    134   // Speaker audio routing (for mobile devices)
    135   virtual int32_t SetLoudspeakerStatus(bool enable);
    136   virtual int32_t GetLoudspeakerStatus(bool& enable) const;
    137 
    138   // Reset Audio Device (for mobile devices)
    139   virtual int32_t ResetAudioDevice();
    140 
    141   // Sound Audio Device control (for WinCE only)
    142   virtual int32_t SoundDeviceControl(unsigned int par1 = 0,
    143                                      unsigned int par2 = 0,
    144                                      unsigned int par3 = 0,
    145                                      unsigned int par4 = 0);
    146 
    147   // Android only
    148   virtual bool BuiltInAECIsAvailable() const;
    149   virtual bool BuiltInAGCIsAvailable() const;
    150   virtual bool BuiltInNSIsAvailable() const;
    151 
    152   // Windows Core Audio and Android only.
    153   virtual int32_t EnableBuiltInAEC(bool enable);
    154   virtual int32_t EnableBuiltInAGC(bool enable);
    155   virtual int32_t EnableBuiltInNS(bool enable);
    156 
    157   // Windows Core Audio only.
    158   virtual bool BuiltInAECIsEnabled() const;
    159 
    160   // iOS only.
    161   // TODO(henrika): add Android support.
    162   virtual int GetPlayoutAudioParameters(AudioParameters* params) const;
    163   virtual int GetRecordAudioParameters(AudioParameters* params) const;
    164 
    165   virtual bool PlayoutWarning() const = 0;
    166   virtual bool PlayoutError() const = 0;
    167   virtual bool RecordingWarning() const = 0;
    168   virtual bool RecordingError() const = 0;
    169   virtual void ClearPlayoutWarning() = 0;
    170   virtual void ClearPlayoutError() = 0;
    171   virtual void ClearRecordingWarning() = 0;
    172   virtual void ClearRecordingError() = 0;
    173 
    174   virtual void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) = 0;
    175 
    176   virtual ~AudioDeviceGeneric() {}
    177 };
    178 
    179 }  // namespace webrtc
    180 
    181 #endif  // WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_GENERIC_H
    182