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_BUFFER_H
     12 #define WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_BUFFER_H
     13 
     14 #include "webrtc/modules/audio_device/include/audio_device.h"
     15 #include "webrtc/system_wrappers/interface/file_wrapper.h"
     16 #include "webrtc/typedefs.h"
     17 
     18 namespace webrtc {
     19 class CriticalSectionWrapper;
     20 
     21 const uint32_t kPulsePeriodMs = 1000;
     22 const uint32_t kMaxBufferSizeBytes = 3840; // 10ms in stereo @ 96kHz
     23 
     24 class AudioDeviceObserver;
     25 class MediaFile;
     26 
     27 class AudioDeviceBuffer
     28 {
     29 public:
     30     AudioDeviceBuffer();
     31     virtual ~AudioDeviceBuffer();
     32 
     33     void SetId(uint32_t id);
     34     int32_t RegisterAudioCallback(AudioTransport* audioCallback);
     35 
     36     int32_t InitPlayout();
     37     int32_t InitRecording();
     38 
     39     virtual int32_t SetRecordingSampleRate(uint32_t fsHz);
     40     virtual int32_t SetPlayoutSampleRate(uint32_t fsHz);
     41     int32_t RecordingSampleRate() const;
     42     int32_t PlayoutSampleRate() const;
     43 
     44     virtual int32_t SetRecordingChannels(uint8_t channels);
     45     virtual int32_t SetPlayoutChannels(uint8_t channels);
     46     uint8_t RecordingChannels() const;
     47     uint8_t PlayoutChannels() const;
     48     int32_t SetRecordingChannel(
     49         const AudioDeviceModule::ChannelType channel);
     50     int32_t RecordingChannel(
     51         AudioDeviceModule::ChannelType& channel) const;
     52 
     53     virtual int32_t SetRecordedBuffer(const void* audioBuffer,
     54                                       uint32_t nSamples);
     55     int32_t SetCurrentMicLevel(uint32_t level);
     56     virtual void SetVQEData(int playDelayMS,
     57                             int recDelayMS,
     58                             int clockDrift);
     59     virtual int32_t DeliverRecordedData();
     60     uint32_t NewMicLevel() const;
     61 
     62     virtual int32_t RequestPlayoutData(uint32_t nSamples);
     63     virtual int32_t GetPlayoutData(void* audioBuffer);
     64 
     65     int32_t StartInputFileRecording(
     66         const char fileName[kAdmMaxFileNameSize]);
     67     int32_t StopInputFileRecording();
     68     int32_t StartOutputFileRecording(
     69         const char fileName[kAdmMaxFileNameSize]);
     70     int32_t StopOutputFileRecording();
     71 
     72     int32_t SetTypingStatus(bool typingStatus);
     73 
     74 private:
     75     int32_t                   _id;
     76     CriticalSectionWrapper&         _critSect;
     77     CriticalSectionWrapper&         _critSectCb;
     78 
     79     AudioTransport*                 _ptrCbAudioTransport;
     80 
     81     uint32_t                  _recSampleRate;
     82     uint32_t                  _playSampleRate;
     83 
     84     uint8_t                   _recChannels;
     85     uint8_t                   _playChannels;
     86 
     87     // selected recording channel (left/right/both)
     88     AudioDeviceModule::ChannelType _recChannel;
     89 
     90     // 2 or 4 depending on mono or stereo
     91     uint8_t                   _recBytesPerSample;
     92     uint8_t                   _playBytesPerSample;
     93 
     94     // 10ms in stereo @ 96kHz
     95     int8_t                          _recBuffer[kMaxBufferSizeBytes];
     96 
     97     // one sample <=> 2 or 4 bytes
     98     uint32_t                  _recSamples;
     99     uint32_t                  _recSize;           // in bytes
    100 
    101     // 10ms in stereo @ 96kHz
    102     int8_t                          _playBuffer[kMaxBufferSizeBytes];
    103 
    104     // one sample <=> 2 or 4 bytes
    105     uint32_t                  _playSamples;
    106     uint32_t                  _playSize;          // in bytes
    107 
    108     FileWrapper&                    _recFile;
    109     FileWrapper&                    _playFile;
    110 
    111     uint32_t                  _currentMicLevel;
    112     uint32_t                  _newMicLevel;
    113 
    114     bool                      _typingStatus;
    115 
    116     int _playDelayMS;
    117     int _recDelayMS;
    118     int _clockDrift;
    119     int high_delay_counter_;
    120 };
    121 
    122 }  // namespace webrtc
    123 
    124 #endif  // WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_BUFFER_H
    125