зеркало из https://github.com/mozilla/gecko-dev.git
Bug 985714: Monitor AEC echo levels (ERLE/etc) in gUM r=jib
This commit is contained in:
Родитель
fe8fbce08a
Коммит
e22f2fc50a
|
@ -40,6 +40,7 @@
|
|||
#include "webrtc/voice_engine/include/voe_volume_control.h"
|
||||
#include "webrtc/voice_engine/include/voe_external_media.h"
|
||||
#include "webrtc/voice_engine/include/voe_audio_processing.h"
|
||||
#include "webrtc/voice_engine/include/voe_call_report.h"
|
||||
|
||||
// Video Engine
|
||||
#include "webrtc/video_engine/include/vie_base.h"
|
||||
|
@ -261,6 +262,7 @@ public:
|
|||
, mChannel(-1)
|
||||
, mInitDone(false)
|
||||
, mStarted(false)
|
||||
, mSamples(0)
|
||||
, mEchoOn(false), mAgcOn(false), mNoiseOn(false)
|
||||
, mEchoCancel(webrtc::kEcDefault)
|
||||
, mAGC(webrtc::kAgcDefault)
|
||||
|
@ -317,6 +319,7 @@ private:
|
|||
ScopedCustomReleasePtr<webrtc::VoEExternalMedia> mVoERender;
|
||||
ScopedCustomReleasePtr<webrtc::VoENetwork> mVoENetwork;
|
||||
ScopedCustomReleasePtr<webrtc::VoEAudioProcessing> mVoEProcessing;
|
||||
ScopedCustomReleasePtr<webrtc::VoECallReport> mVoECallReport;
|
||||
|
||||
// mMonitor protects mSources[] access/changes, and transitions of mState
|
||||
// from kStarted to kStopped (which are combined with EndTrack()).
|
||||
|
@ -329,6 +332,7 @@ private:
|
|||
TrackID mTrackID;
|
||||
bool mInitDone;
|
||||
bool mStarted;
|
||||
int mSamples; // int to avoid conversions when comparing/etc to samplingFreq & length
|
||||
|
||||
nsString mDeviceName;
|
||||
nsString mDeviceUUID;
|
||||
|
|
|
@ -221,8 +221,13 @@ MediaEngineWebRTCAudioSource::Config(bool aEchoOn, uint32_t aEcho,
|
|||
if (update_echo &&
|
||||
0 != (error = mVoEProcessing->SetEcStatus(mEchoOn, (webrtc::EcModes) aEcho))) {
|
||||
LOG(("%s Error setting Echo Status: %d ",__FUNCTION__, error));
|
||||
// Overhead of capturing all the time is very low (<0.1% of an audio only call)
|
||||
if (mEchoOn) {
|
||||
if (0 != (error = mVoEProcessing->SetEcMetricsStatus(true))) {
|
||||
LOG(("%s Error setting Echo Metrics: %d ",__FUNCTION__, error));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (update_agc &&
|
||||
0 != (error = mVoEProcessing->SetAgcStatus(mAgcOn, (webrtc::AgcModes) aAGC))) {
|
||||
LOG(("%s Error setting AGC Status: %d ",__FUNCTION__, error));
|
||||
|
@ -405,6 +410,11 @@ MediaEngineWebRTCAudioSource::Init()
|
|||
return;
|
||||
}
|
||||
|
||||
mVoECallReport = webrtc::VoECallReport::GetInterface(mVoiceEngine);
|
||||
if (!mVoECallReport) {
|
||||
return;
|
||||
}
|
||||
|
||||
mChannel = mVoEBase->CreateChannel();
|
||||
if (mChannel < 0) {
|
||||
return;
|
||||
|
@ -527,6 +537,24 @@ MediaEngineWebRTCAudioSource::Process(int channel,
|
|||
free(buffer);
|
||||
}
|
||||
|
||||
#ifdef PR_LOGGING
|
||||
mSamples += length;
|
||||
if (mSamples > samplingFreq) {
|
||||
mSamples %= samplingFreq; // just in case mSamples >> samplingFreq
|
||||
if (PR_LOG_TEST(GetMediaManagerLog(), PR_LOG_DEBUG)) {
|
||||
webrtc::EchoStatistics echo;
|
||||
|
||||
mVoECallReport->GetEchoMetricSummary(echo);
|
||||
#define DUMP_STATVAL(x) (x).min, (x).max, (x).average
|
||||
LOG(("Echo: ERL: %d/%d/%d, ERLE: %d/%d/%d, RERL: %d/%d/%d, NLP: %d/%d/%d",
|
||||
DUMP_STATVAL(echo.erl),
|
||||
DUMP_STATVAL(echo.erle),
|
||||
DUMP_STATVAL(echo.rerl),
|
||||
DUMP_STATVAL(echo.a_nlp)));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
MonitorAutoLock lock(mMonitor);
|
||||
if (mState != kStarted)
|
||||
return;
|
||||
|
|
Загрузка…
Ссылка в новой задаче