- cleanup + fixed AQuA reference leak (license counter was exhausted and MOS resulted in 0.0)

This commit is contained in:
Dmytro Bogovych 2020-09-25 16:58:20 +03:00
parent 8c4da74cc2
commit 5450c155d9
3 changed files with 52 additions and 30 deletions

View File

@ -361,8 +361,9 @@ void AgentImpl::processStartSession(Json::Value& request, Json::Value& answer)
auto qc = std::make_shared<sevana::aqua>();
if (!qc->is_open())
{
std::cerr << "Problem when initializing AQuA library" << std::endl;
ICELogError( << "Problem when initializing AQuA library");
}
else
qc->configure_with(config);
mAquaMap[sessionIter->first] = qc;
@ -443,9 +444,7 @@ void AgentImpl::processDestroySession(Json::Value& request, Json::Value& answer)
if (sessionIter != mSessionMap.end())
mSessionMap.erase(sessionIter);
#if defined(USE_AQUA_LIBRARY)
auto aquaIter = mAquaMap.find(sessionId);
if (aquaIter != mAquaMap.end())
mAquaMap.erase(aquaIter);
closeAqua(sessionId);
#endif
answer["status"] = Status_Ok;
}
@ -563,6 +562,8 @@ void AgentImpl::processGetMediaStats(Json::Value& request, Json::Value& answer)
ICELogCritical(<< "AQuA reference audio file is not set, skipping analyzing.");
}
else {
auto sa = mAquaMap[sessionIter->first];
if (sa) {
Audio::WavFileReader reader;
reader.open(StringHelper::makeTstring(aquaReference));
@ -576,19 +577,29 @@ void AgentImpl::processGetMediaStats(Json::Value& request, Json::Value& answer)
} while (wasRead == 1024);
}
auto sa = mAquaMap[sessionIter->first];
sevana::aqua::audio_buffer test(mAquaIncoming.data(), mAquaIncoming.size()),
reference(referenceAudio.data(), referenceAudio.size());
test.mRate = AUDIO_SAMPLERATE;
reference.mRate = AUDIO_SAMPLERATE;
test.mChannels = AUDIO_CHANNELS;
reference.mChannels = AUDIO_CHANNELS;
ICELogInfo(<< "Comparing test audio " << mAquaIncoming.size() << " bytes with reference audio " << referenceAudio.size() << " bytes.");
ICELogInfo(
<< "Comparing test audio " << mAquaIncoming.size() << " bytes with reference audio " << referenceAudio.size() << " bytes.");
auto r = sa->compare(reference, test);
ICELogInfo( << "MOS: " << r.mMos << ", faults: " << r.mFaultsText);
if (r.mErrorCode) {
ICELogInfo(
<< "Error code: " << r.mErrorCode << ", msg: " << r.mErrorMessage);
} else {
ICELogInfo(<< "MOS: " << r.mMos << ", faults: " << r.mFaultsText);
}
answer["aqua_mos"] = r.mMos;
answer["aqua_report"] = r.mFaultsText;
if (r.mErrorCode) {
answer["aqua_error_code"] = r.mErrorCode;
answer["aqua_error_message"] = r.mErrorMessage;
}
closeAqua(sessionIter->first);
}
// Remove test audio
mAquaIncoming.clear(); mAquaOutgoing.clear();
}
@ -932,3 +943,13 @@ void AgentImpl::addEvent(const Json::Value& v)
mEventListChangeCondVar.notify_one();
}
#if defined(USE_AQUA_LIBRARY)
void AgentImpl::closeAqua(int sessionId)
{
auto aquaIter = mAquaMap.find(sessionId);
if (aquaIter != mAquaMap.end()) {
aquaIter->second->close();
mAquaMap.erase(aquaIter);
}
}
#endif

View File

@ -44,6 +44,7 @@ protected:
typedef std::map<int, std::shared_ptr<sevana::aqua>> AquaMap;
AquaMap mAquaMap;
ByteBuffer mAquaIncoming, mAquaOutgoing;
void closeAqua(int sessionId);
#endif
std::shared_ptr<std::thread> mThread;