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