| Index: webrtc/modules/audio_device/audio_device_buffer.cc
|
| diff --git a/webrtc/modules/audio_device/audio_device_buffer.cc b/webrtc/modules/audio_device/audio_device_buffer.cc
|
| index 0bc2f5c225f55a04c30e12a52e11781de9f05744..d10a2bd464bc2c86c13ca02399f288cca1e45694 100644
|
| --- a/webrtc/modules/audio_device/audio_device_buffer.cc
|
| +++ b/webrtc/modules/audio_device/audio_device_buffer.cc
|
| @@ -28,166 +28,160 @@ static const int kLogHighDelayIntervalFrames = 500; // 5 seconds.
|
| // ctor
|
| // ----------------------------------------------------------------------------
|
|
|
| -AudioDeviceBuffer::AudioDeviceBuffer() :
|
| - _id(-1),
|
| - _critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
| - _critSectCb(*CriticalSectionWrapper::CreateCriticalSection()),
|
| - _ptrCbAudioTransport(NULL),
|
| - _recSampleRate(0),
|
| - _playSampleRate(0),
|
| - _recChannels(0),
|
| - _playChannels(0),
|
| - _recChannel(AudioDeviceModule::kChannelBoth),
|
| - _recBytesPerSample(0),
|
| - _playBytesPerSample(0),
|
| - _recSamples(0),
|
| - _recSize(0),
|
| - _playSamples(0),
|
| - _playSize(0),
|
| - _recFile(*FileWrapper::Create()),
|
| - _playFile(*FileWrapper::Create()),
|
| - _currentMicLevel(0),
|
| - _newMicLevel(0),
|
| - _typingStatus(false),
|
| - _playDelayMS(0),
|
| - _recDelayMS(0),
|
| - _clockDrift(0),
|
| - // Set to the interval in order to log on the first occurrence.
|
| - high_delay_counter_(kLogHighDelayIntervalFrames) {
|
| - // valid ID will be set later by SetId, use -1 for now
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s created", __FUNCTION__);
|
| - memset(_recBuffer, 0, kMaxBufferSizeBytes);
|
| - memset(_playBuffer, 0, kMaxBufferSizeBytes);
|
| +AudioDeviceBuffer::AudioDeviceBuffer()
|
| + : _id(-1),
|
| + _critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
| + _critSectCb(*CriticalSectionWrapper::CreateCriticalSection()),
|
| + _ptrCbAudioTransport(NULL),
|
| + _recSampleRate(0),
|
| + _playSampleRate(0),
|
| + _recChannels(0),
|
| + _playChannels(0),
|
| + _recChannel(AudioDeviceModule::kChannelBoth),
|
| + _recBytesPerSample(0),
|
| + _playBytesPerSample(0),
|
| + _recSamples(0),
|
| + _recSize(0),
|
| + _playSamples(0),
|
| + _playSize(0),
|
| + _recFile(*FileWrapper::Create()),
|
| + _playFile(*FileWrapper::Create()),
|
| + _currentMicLevel(0),
|
| + _newMicLevel(0),
|
| + _typingStatus(false),
|
| + _playDelayMS(0),
|
| + _recDelayMS(0),
|
| + _clockDrift(0),
|
| + // Set to the interval in order to log on the first occurrence.
|
| + high_delay_counter_(kLogHighDelayIntervalFrames) {
|
| + // valid ID will be set later by SetId, use -1 for now
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s created",
|
| + __FUNCTION__);
|
| + memset(_recBuffer, 0, kMaxBufferSizeBytes);
|
| + memset(_playBuffer, 0, kMaxBufferSizeBytes);
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // dtor
|
| // ----------------------------------------------------------------------------
|
|
|
| -AudioDeviceBuffer::~AudioDeviceBuffer()
|
| -{
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s destroyed", __FUNCTION__);
|
| - {
|
| - CriticalSectionScoped lock(&_critSect);
|
| +AudioDeviceBuffer::~AudioDeviceBuffer() {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s destroyed",
|
| + __FUNCTION__);
|
| + {
|
| + CriticalSectionScoped lock(&_critSect);
|
|
|
| - _recFile.Flush();
|
| - _recFile.CloseFile();
|
| - delete &_recFile;
|
| + _recFile.Flush();
|
| + _recFile.CloseFile();
|
| + delete &_recFile;
|
|
|
| - _playFile.Flush();
|
| - _playFile.CloseFile();
|
| - delete &_playFile;
|
| - }
|
| + _playFile.Flush();
|
| + _playFile.CloseFile();
|
| + delete &_playFile;
|
| + }
|
|
|
| - delete &_critSect;
|
| - delete &_critSectCb;
|
| + delete &_critSect;
|
| + delete &_critSectCb;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // SetId
|
| // ----------------------------------------------------------------------------
|
|
|
| -void AudioDeviceBuffer::SetId(uint32_t id)
|
| -{
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, id, "AudioDeviceBuffer::SetId(id=%d)", id);
|
| - _id = id;
|
| +void AudioDeviceBuffer::SetId(uint32_t id) {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, id,
|
| + "AudioDeviceBuffer::SetId(id=%d)", id);
|
| + _id = id;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // RegisterAudioCallback
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::RegisterAudioCallback(AudioTransport* audioCallback)
|
| -{
|
| - CriticalSectionScoped lock(&_critSectCb);
|
| - _ptrCbAudioTransport = audioCallback;
|
| +int32_t AudioDeviceBuffer::RegisterAudioCallback(
|
| + AudioTransport* audioCallback) {
|
| + CriticalSectionScoped lock(&_critSectCb);
|
| + _ptrCbAudioTransport = audioCallback;
|
|
|
| - return 0;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // InitPlayout
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::InitPlayout()
|
| -{
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::InitPlayout() {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // InitRecording
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::InitRecording()
|
| -{
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::InitRecording() {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // SetRecordingSampleRate
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::SetRecordingSampleRate(uint32_t fsHz)
|
| -{
|
| - CriticalSectionScoped lock(&_critSect);
|
| - _recSampleRate = fsHz;
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::SetRecordingSampleRate(uint32_t fsHz) {
|
| + CriticalSectionScoped lock(&_critSect);
|
| + _recSampleRate = fsHz;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // SetPlayoutSampleRate
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::SetPlayoutSampleRate(uint32_t fsHz)
|
| -{
|
| - CriticalSectionScoped lock(&_critSect);
|
| - _playSampleRate = fsHz;
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::SetPlayoutSampleRate(uint32_t fsHz) {
|
| + CriticalSectionScoped lock(&_critSect);
|
| + _playSampleRate = fsHz;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // RecordingSampleRate
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::RecordingSampleRate() const
|
| -{
|
| - return _recSampleRate;
|
| +int32_t AudioDeviceBuffer::RecordingSampleRate() const {
|
| + return _recSampleRate;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // PlayoutSampleRate
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::PlayoutSampleRate() const
|
| -{
|
| - return _playSampleRate;
|
| +int32_t AudioDeviceBuffer::PlayoutSampleRate() const {
|
| + return _playSampleRate;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // SetRecordingChannels
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::SetRecordingChannels(size_t channels)
|
| -{
|
| - CriticalSectionScoped lock(&_critSect);
|
| - _recChannels = channels;
|
| - _recBytesPerSample = 2*channels; // 16 bits per sample in mono, 32 bits in stereo
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::SetRecordingChannels(size_t channels) {
|
| + CriticalSectionScoped lock(&_critSect);
|
| + _recChannels = channels;
|
| + _recBytesPerSample =
|
| + 2 * channels; // 16 bits per sample in mono, 32 bits in stereo
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // SetPlayoutChannels
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::SetPlayoutChannels(size_t channels)
|
| -{
|
| - CriticalSectionScoped lock(&_critSect);
|
| - _playChannels = channels;
|
| - // 16 bits per sample in mono, 32 bits in stereo
|
| - _playBytesPerSample = 2*channels;
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::SetPlayoutChannels(size_t channels) {
|
| + CriticalSectionScoped lock(&_critSect);
|
| + _playChannels = channels;
|
| + // 16 bits per sample in mono, 32 bits in stereo
|
| + _playBytesPerSample = 2 * channels;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| @@ -201,88 +195,80 @@ int32_t AudioDeviceBuffer::SetPlayoutChannels(size_t channels)
|
| // will be 2 instead of 4 four these cases.
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::SetRecordingChannel(const AudioDeviceModule::ChannelType channel)
|
| -{
|
| - CriticalSectionScoped lock(&_critSect);
|
| +int32_t AudioDeviceBuffer::SetRecordingChannel(
|
| + const AudioDeviceModule::ChannelType channel) {
|
| + CriticalSectionScoped lock(&_critSect);
|
|
|
| - if (_recChannels == 1)
|
| - {
|
| - return -1;
|
| - }
|
| + if (_recChannels == 1) {
|
| + return -1;
|
| + }
|
|
|
| - if (channel == AudioDeviceModule::kChannelBoth)
|
| - {
|
| - // two bytes per channel
|
| - _recBytesPerSample = 4;
|
| - }
|
| - else
|
| - {
|
| - // only utilize one out of two possible channels (left or right)
|
| - _recBytesPerSample = 2;
|
| - }
|
| - _recChannel = channel;
|
| + if (channel == AudioDeviceModule::kChannelBoth) {
|
| + // two bytes per channel
|
| + _recBytesPerSample = 4;
|
| + } else {
|
| + // only utilize one out of two possible channels (left or right)
|
| + _recBytesPerSample = 2;
|
| + }
|
| + _recChannel = channel;
|
|
|
| - return 0;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // RecordingChannel
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::RecordingChannel(AudioDeviceModule::ChannelType& channel) const
|
| -{
|
| - channel = _recChannel;
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::RecordingChannel(
|
| + AudioDeviceModule::ChannelType& channel) const {
|
| + channel = _recChannel;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // RecordingChannels
|
| // ----------------------------------------------------------------------------
|
|
|
| -size_t AudioDeviceBuffer::RecordingChannels() const
|
| -{
|
| - return _recChannels;
|
| +size_t AudioDeviceBuffer::RecordingChannels() const {
|
| + return _recChannels;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // PlayoutChannels
|
| // ----------------------------------------------------------------------------
|
|
|
| -size_t AudioDeviceBuffer::PlayoutChannels() const
|
| -{
|
| - return _playChannels;
|
| +size_t AudioDeviceBuffer::PlayoutChannels() const {
|
| + return _playChannels;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // SetCurrentMicLevel
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::SetCurrentMicLevel(uint32_t level)
|
| -{
|
| - _currentMicLevel = level;
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::SetCurrentMicLevel(uint32_t level) {
|
| + _currentMicLevel = level;
|
| + return 0;
|
| }
|
|
|
| -int32_t AudioDeviceBuffer::SetTypingStatus(bool typingStatus)
|
| -{
|
| - _typingStatus = typingStatus;
|
| - return 0;
|
| +int32_t AudioDeviceBuffer::SetTypingStatus(bool typingStatus) {
|
| + _typingStatus = typingStatus;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // NewMicLevel
|
| // ----------------------------------------------------------------------------
|
|
|
| -uint32_t AudioDeviceBuffer::NewMicLevel() const
|
| -{
|
| - return _newMicLevel;
|
| +uint32_t AudioDeviceBuffer::NewMicLevel() const {
|
| + return _newMicLevel;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // SetVQEData
|
| // ----------------------------------------------------------------------------
|
|
|
| -void AudioDeviceBuffer::SetVQEData(int playDelayMs, int recDelayMs,
|
| +void AudioDeviceBuffer::SetVQEData(int playDelayMs,
|
| + int recDelayMs,
|
| int clockDrift) {
|
| if (high_delay_counter_ < kLogHighDelayIntervalFrames) {
|
| ++high_delay_counter_;
|
| @@ -304,32 +290,30 @@ void AudioDeviceBuffer::SetVQEData(int playDelayMs, int recDelayMs,
|
| // ----------------------------------------------------------------------------
|
|
|
| int32_t AudioDeviceBuffer::StartInputFileRecording(
|
| - const char fileName[kAdmMaxFileNameSize])
|
| -{
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
| + const char fileName[kAdmMaxFileNameSize]) {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
|
|
| - CriticalSectionScoped lock(&_critSect);
|
| + CriticalSectionScoped lock(&_critSect);
|
|
|
| - _recFile.Flush();
|
| - _recFile.CloseFile();
|
| + _recFile.Flush();
|
| + _recFile.CloseFile();
|
|
|
| - return _recFile.OpenFile(fileName, false) ? 0 : -1;
|
| + return _recFile.OpenFile(fileName, false) ? 0 : -1;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // StopInputFileRecording
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::StopInputFileRecording()
|
| -{
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
| +int32_t AudioDeviceBuffer::StopInputFileRecording() {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
|
|
| - CriticalSectionScoped lock(&_critSect);
|
| + CriticalSectionScoped lock(&_critSect);
|
|
|
| - _recFile.Flush();
|
| - _recFile.CloseFile();
|
| + _recFile.Flush();
|
| + _recFile.CloseFile();
|
|
|
| - return 0;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| @@ -337,32 +321,30 @@ int32_t AudioDeviceBuffer::StopInputFileRecording()
|
| // ----------------------------------------------------------------------------
|
|
|
| int32_t AudioDeviceBuffer::StartOutputFileRecording(
|
| - const char fileName[kAdmMaxFileNameSize])
|
| -{
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
| + const char fileName[kAdmMaxFileNameSize]) {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
|
|
| - CriticalSectionScoped lock(&_critSect);
|
| + CriticalSectionScoped lock(&_critSect);
|
|
|
| - _playFile.Flush();
|
| - _playFile.CloseFile();
|
| + _playFile.Flush();
|
| + _playFile.CloseFile();
|
|
|
| - return _playFile.OpenFile(fileName, false) ? 0 : -1;
|
| + return _playFile.OpenFile(fileName, false) ? 0 : -1;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // StopOutputFileRecording
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::StopOutputFileRecording()
|
| -{
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
| +int32_t AudioDeviceBuffer::StopOutputFileRecording() {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s", __FUNCTION__);
|
|
|
| - CriticalSectionScoped lock(&_critSect);
|
| + CriticalSectionScoped lock(&_critSect);
|
|
|
| - _playFile.Flush();
|
| - _playFile.CloseFile();
|
| + _playFile.Flush();
|
| + _playFile.CloseFile();
|
|
|
| - return 0;
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| @@ -381,202 +363,175 @@ int32_t AudioDeviceBuffer::StopOutputFileRecording()
|
| // ----------------------------------------------------------------------------
|
|
|
| int32_t AudioDeviceBuffer::SetRecordedBuffer(const void* audioBuffer,
|
| - size_t nSamples)
|
| -{
|
| - CriticalSectionScoped lock(&_critSect);
|
| + size_t nSamples) {
|
| + CriticalSectionScoped lock(&_critSect);
|
|
|
| - if (_recBytesPerSample == 0)
|
| - {
|
| - assert(false);
|
| - return -1;
|
| - }
|
| + if (_recBytesPerSample == 0) {
|
| + assert(false);
|
| + return -1;
|
| + }
|
|
|
| - _recSamples = nSamples;
|
| - _recSize = _recBytesPerSample*nSamples; // {2,4}*nSamples
|
| - if (_recSize > kMaxBufferSizeBytes)
|
| - {
|
| - assert(false);
|
| - return -1;
|
| - }
|
| + _recSamples = nSamples;
|
| + _recSize = _recBytesPerSample * nSamples; // {2,4}*nSamples
|
| + if (_recSize > kMaxBufferSizeBytes) {
|
| + assert(false);
|
| + return -1;
|
| + }
|
|
|
| - if (_recChannel == AudioDeviceModule::kChannelBoth)
|
| - {
|
| - // (default) copy the complete input buffer to the local buffer
|
| - memcpy(&_recBuffer[0], audioBuffer, _recSize);
|
| - }
|
| - else
|
| - {
|
| - int16_t* ptr16In = (int16_t*)audioBuffer;
|
| - int16_t* ptr16Out = (int16_t*)&_recBuffer[0];
|
| -
|
| - if (AudioDeviceModule::kChannelRight == _recChannel)
|
| - {
|
| - ptr16In++;
|
| - }
|
| -
|
| - // exctract left or right channel from input buffer to the local buffer
|
| - for (size_t i = 0; i < _recSamples; i++)
|
| - {
|
| - *ptr16Out = *ptr16In;
|
| - ptr16Out++;
|
| - ptr16In++;
|
| - ptr16In++;
|
| - }
|
| + if (_recChannel == AudioDeviceModule::kChannelBoth) {
|
| + // (default) copy the complete input buffer to the local buffer
|
| + memcpy(&_recBuffer[0], audioBuffer, _recSize);
|
| + } else {
|
| + int16_t* ptr16In = (int16_t*)audioBuffer;
|
| + int16_t* ptr16Out = (int16_t*)&_recBuffer[0];
|
| +
|
| + if (AudioDeviceModule::kChannelRight == _recChannel) {
|
| + ptr16In++;
|
| }
|
|
|
| - if (_recFile.is_open()) {
|
| - // write to binary file in mono or stereo (interleaved)
|
| - _recFile.Write(&_recBuffer[0], _recSize);
|
| + // exctract left or right channel from input buffer to the local buffer
|
| + for (size_t i = 0; i < _recSamples; i++) {
|
| + *ptr16Out = *ptr16In;
|
| + ptr16Out++;
|
| + ptr16In++;
|
| + ptr16In++;
|
| }
|
| + }
|
|
|
| - return 0;
|
| + if (_recFile.is_open()) {
|
| + // write to binary file in mono or stereo (interleaved)
|
| + _recFile.Write(&_recBuffer[0], _recSize);
|
| + }
|
| +
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // DeliverRecordedData
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::DeliverRecordedData()
|
| -{
|
| - CriticalSectionScoped lock(&_critSectCb);
|
| +int32_t AudioDeviceBuffer::DeliverRecordedData() {
|
| + CriticalSectionScoped lock(&_critSectCb);
|
|
|
| - // Ensure that user has initialized all essential members
|
| - if ((_recSampleRate == 0) ||
|
| - (_recSamples == 0) ||
|
| - (_recBytesPerSample == 0) ||
|
| - (_recChannels == 0))
|
| - {
|
| - assert(false);
|
| - return -1;
|
| - }
|
| + // Ensure that user has initialized all essential members
|
| + if ((_recSampleRate == 0) || (_recSamples == 0) ||
|
| + (_recBytesPerSample == 0) || (_recChannels == 0)) {
|
| + assert(false);
|
| + return -1;
|
| + }
|
|
|
| - if (_ptrCbAudioTransport == NULL)
|
| - {
|
| - WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "failed to deliver recorded data (AudioTransport does not exist)");
|
| - return 0;
|
| - }
|
| + if (_ptrCbAudioTransport == NULL) {
|
| + WEBRTC_TRACE(
|
| + kTraceWarning, kTraceAudioDevice, _id,
|
| + "failed to deliver recorded data (AudioTransport does not exist)");
|
| + return 0;
|
| + }
|
|
|
| - int32_t res(0);
|
| - uint32_t newMicLevel(0);
|
| - uint32_t totalDelayMS = _playDelayMS +_recDelayMS;
|
| -
|
| - res = _ptrCbAudioTransport->RecordedDataIsAvailable(&_recBuffer[0],
|
| - _recSamples,
|
| - _recBytesPerSample,
|
| - _recChannels,
|
| - _recSampleRate,
|
| - totalDelayMS,
|
| - _clockDrift,
|
| - _currentMicLevel,
|
| - _typingStatus,
|
| - newMicLevel);
|
| - if (res != -1)
|
| - {
|
| - _newMicLevel = newMicLevel;
|
| - }
|
| + int32_t res(0);
|
| + uint32_t newMicLevel(0);
|
| + uint32_t totalDelayMS = _playDelayMS + _recDelayMS;
|
|
|
| - return 0;
|
| + res = _ptrCbAudioTransport->RecordedDataIsAvailable(
|
| + &_recBuffer[0], _recSamples, _recBytesPerSample, _recChannels,
|
| + _recSampleRate, totalDelayMS, _clockDrift, _currentMicLevel,
|
| + _typingStatus, newMicLevel);
|
| + if (res != -1) {
|
| + _newMicLevel = newMicLevel;
|
| + }
|
| +
|
| + return 0;
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // RequestPlayoutData
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::RequestPlayoutData(size_t nSamples)
|
| -{
|
| - uint32_t playSampleRate = 0;
|
| - size_t playBytesPerSample = 0;
|
| - size_t playChannels = 0;
|
| - {
|
| - CriticalSectionScoped lock(&_critSect);
|
| -
|
| - // Store copies under lock and use copies hereafter to avoid race with
|
| - // setter methods.
|
| - playSampleRate = _playSampleRate;
|
| - playBytesPerSample = _playBytesPerSample;
|
| - playChannels = _playChannels;
|
| -
|
| - // Ensure that user has initialized all essential members
|
| - if ((playBytesPerSample == 0) ||
|
| - (playChannels == 0) ||
|
| - (playSampleRate == 0))
|
| - {
|
| - assert(false);
|
| - return -1;
|
| - }
|
| -
|
| - _playSamples = nSamples;
|
| - _playSize = playBytesPerSample * nSamples; // {2,4}*nSamples
|
| - if (_playSize > kMaxBufferSizeBytes)
|
| - {
|
| - assert(false);
|
| - return -1;
|
| - }
|
| -
|
| - if (nSamples != _playSamples)
|
| - {
|
| - WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "invalid number of samples to be played out (%d)", nSamples);
|
| - return -1;
|
| - }
|
| - }
|
| +int32_t AudioDeviceBuffer::RequestPlayoutData(size_t nSamples) {
|
| + uint32_t playSampleRate = 0;
|
| + size_t playBytesPerSample = 0;
|
| + size_t playChannels = 0;
|
| + {
|
| + CriticalSectionScoped lock(&_critSect);
|
| +
|
| + // Store copies under lock and use copies hereafter to avoid race with
|
| + // setter methods.
|
| + playSampleRate = _playSampleRate;
|
| + playBytesPerSample = _playBytesPerSample;
|
| + playChannels = _playChannels;
|
|
|
| - size_t nSamplesOut(0);
|
| + // Ensure that user has initialized all essential members
|
| + if ((playBytesPerSample == 0) || (playChannels == 0) ||
|
| + (playSampleRate == 0)) {
|
| + assert(false);
|
| + return -1;
|
| + }
|
|
|
| - CriticalSectionScoped lock(&_critSectCb);
|
| + _playSamples = nSamples;
|
| + _playSize = playBytesPerSample * nSamples; // {2,4}*nSamples
|
| + if (_playSize > kMaxBufferSizeBytes) {
|
| + assert(false);
|
| + return -1;
|
| + }
|
|
|
| - if (_ptrCbAudioTransport == NULL)
|
| - {
|
| - WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "failed to feed data to playout (AudioTransport does not exist)");
|
| - return 0;
|
| + if (nSamples != _playSamples) {
|
| + WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
|
| + "invalid number of samples to be played out (%d)", nSamples);
|
| + return -1;
|
| }
|
| + }
|
| +
|
| + size_t nSamplesOut(0);
|
|
|
| - if (_ptrCbAudioTransport)
|
| - {
|
| - uint32_t res(0);
|
| - int64_t elapsed_time_ms = -1;
|
| - int64_t ntp_time_ms = -1;
|
| - res = _ptrCbAudioTransport->NeedMorePlayData(_playSamples,
|
| - playBytesPerSample,
|
| - playChannels,
|
| - playSampleRate,
|
| - &_playBuffer[0],
|
| - nSamplesOut,
|
| - &elapsed_time_ms,
|
| - &ntp_time_ms);
|
| - if (res != 0)
|
| - {
|
| - WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "NeedMorePlayData() failed");
|
| - }
|
| + CriticalSectionScoped lock(&_critSectCb);
|
| +
|
| + if (_ptrCbAudioTransport == NULL) {
|
| + WEBRTC_TRACE(
|
| + kTraceWarning, kTraceAudioDevice, _id,
|
| + "failed to feed data to playout (AudioTransport does not exist)");
|
| + return 0;
|
| + }
|
| +
|
| + if (_ptrCbAudioTransport) {
|
| + uint32_t res(0);
|
| + int64_t elapsed_time_ms = -1;
|
| + int64_t ntp_time_ms = -1;
|
| + res = _ptrCbAudioTransport->NeedMorePlayData(
|
| + _playSamples, playBytesPerSample, playChannels, playSampleRate,
|
| + &_playBuffer[0], nSamplesOut, &elapsed_time_ms, &ntp_time_ms);
|
| + if (res != 0) {
|
| + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| + "NeedMorePlayData() failed");
|
| }
|
| + }
|
|
|
| - return static_cast<int32_t>(nSamplesOut);
|
| + return static_cast<int32_t>(nSamplesOut);
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| // GetPlayoutData
|
| // ----------------------------------------------------------------------------
|
|
|
| -int32_t AudioDeviceBuffer::GetPlayoutData(void* audioBuffer)
|
| -{
|
| - CriticalSectionScoped lock(&_critSect);
|
| +int32_t AudioDeviceBuffer::GetPlayoutData(void* audioBuffer) {
|
| + CriticalSectionScoped lock(&_critSect);
|
|
|
| - if (_playSize > kMaxBufferSizeBytes)
|
| - {
|
| - WEBRTC_TRACE(kTraceError, kTraceUtility, _id,
|
| - "_playSize %" PRIuS " exceeds kMaxBufferSizeBytes in "
|
| - "AudioDeviceBuffer::GetPlayoutData", _playSize);
|
| - assert(false);
|
| - return -1;
|
| - }
|
| + if (_playSize > kMaxBufferSizeBytes) {
|
| + WEBRTC_TRACE(kTraceError, kTraceUtility, _id,
|
| + "_playSize %" PRIuS
|
| + " exceeds kMaxBufferSizeBytes in "
|
| + "AudioDeviceBuffer::GetPlayoutData",
|
| + _playSize);
|
| + assert(false);
|
| + return -1;
|
| + }
|
|
|
| - memcpy(audioBuffer, &_playBuffer[0], _playSize);
|
| + memcpy(audioBuffer, &_playBuffer[0], _playSize);
|
|
|
| - if (_playFile.is_open()) {
|
| - // write to binary file in mono or stereo (interleaved)
|
| - _playFile.Write(&_playBuffer[0], _playSize);
|
| - }
|
| + if (_playFile.is_open()) {
|
| + // write to binary file in mono or stereo (interleaved)
|
| + _playFile.Write(&_playBuffer[0], _playSize);
|
| + }
|
|
|
| - return static_cast<int32_t>(_playSamples);
|
| + return static_cast<int32_t>(_playSamples);
|
| }
|
|
|
| } // namespace webrtc
|
|
|