diff --git a/webrtc/modules/audio_device/audio_device_buffer.cc b/webrtc/modules/audio_device/audio_device_buffer.cc index e3ceb56749..e6cde5d746 100644 --- a/webrtc/modules/audio_device/audio_device_buffer.cc +++ b/webrtc/modules/audio_device/audio_device_buffer.cc @@ -12,6 +12,7 @@ #include "webrtc/modules/audio_device/audio_device_config.h" #include "webrtc/modules/audio_device/audio_device_utility.h" #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" +#include "webrtc/system_wrappers/interface/logging.h" #include "webrtc/system_wrappers/interface/trace.h" #include @@ -22,6 +23,9 @@ namespace webrtc { +static const int kHighDelayThresholdMs = 300; +static const int kLogHighDelayIntervalFrames = 500; // 5 seconds. + // ---------------------------------------------------------------------------- // ctor // ---------------------------------------------------------------------------- @@ -49,7 +53,9 @@ AudioDeviceBuffer::AudioDeviceBuffer() : _typingStatus(false), _playDelayMS(0), _recDelayMS(0), - _clockDrift(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); @@ -286,18 +292,21 @@ uint32_t AudioDeviceBuffer::NewMicLevel() const // SetVQEData // ---------------------------------------------------------------------------- -int32_t AudioDeviceBuffer::SetVQEData(uint32_t playDelayMS, uint32_t recDelayMS, int32_t clockDrift) -{ - if ((playDelayMS + recDelayMS) > 300) - { - WEBRTC_TRACE(kTraceWarning, kTraceUtility, _id, "too long delay (play:%i rec:%i)", playDelayMS, recDelayMS, clockDrift); +void AudioDeviceBuffer::SetVQEData(uint32_t playDelayMs, uint32_t recDelayMs, + int32_t clockDrift) { + if (high_delay_counter_ < kLogHighDelayIntervalFrames) { + ++high_delay_counter_; + } else { + if (playDelayMs + recDelayMs > kHighDelayThresholdMs) { + high_delay_counter_ = 0; + LOG(LS_WARNING) << "High audio device delay reported (render=" + << playDelayMs << " ms, capture=" << recDelayMs << " ms)"; } + } - _playDelayMS = playDelayMS; - _recDelayMS = recDelayMS; - _clockDrift = clockDrift; - - return 0; + _playDelayMS = playDelayMs; + _recDelayMS = recDelayMs; + _clockDrift = clockDrift; } // ---------------------------------------------------------------------------- diff --git a/webrtc/modules/audio_device/audio_device_buffer.h b/webrtc/modules/audio_device/audio_device_buffer.h index 77aaac7f36..86f4d6d7a3 100644 --- a/webrtc/modules/audio_device/audio_device_buffer.h +++ b/webrtc/modules/audio_device/audio_device_buffer.h @@ -54,9 +54,9 @@ public: int32_t SetRecordedBuffer(const void* audioBuffer, uint32_t nSamples); int32_t SetCurrentMicLevel(uint32_t level); - int32_t SetVQEData(uint32_t playDelayMS, - uint32_t recDelayMS, - int32_t clockDrift); + void SetVQEData(uint32_t playDelayMS, + uint32_t recDelayMS, + int32_t clockDrift); int32_t DeliverRecordedData(); uint32_t NewMicLevel() const; @@ -118,6 +118,7 @@ private: uint32_t _recDelayMS; int32_t _clockDrift; + int high_delay_counter_; }; } // namespace webrtc