From 450300013cdcc34570365832b31024959e19b107 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 25 Apr 2014 11:34:46 +0200 Subject: Add peak audio levels to statistics --- src/StatsServer.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/StatsServer.cpp') diff --git a/src/StatsServer.cpp b/src/StatsServer.cpp index 2e89134..be40920 100644 --- a/src/StatsServer.cpp +++ b/src/StatsServer.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include "StatsServer.h" #include "Log.h" @@ -69,6 +70,27 @@ void StatsServer::notifyBuffer(std::string id, long bufsize) } } +void StatsServer::notifyPeakLevels(std::string id, int peak_left, int peak_right) +{ + boost::mutex::scoped_lock lock(m_mutex); + + if (m_inputStats.count(id) == 0) { + etiLog.level(error) << + "Stats Server id '" << + id << "' does was not registered"; + return; + } + + InputStat& is = m_inputStats[id]; + if (peak_left > is.peak_left) { + is.peak_left = peak_left; + } + + if (peak_right > is.peak_right) { + is.peak_right = peak_right; + } +} + void StatsServer::notifyUnderrun(std::string id) { boost::mutex::scoped_lock lock(m_mutex); @@ -252,10 +274,16 @@ std::string InputStat::encodeJSON() { std::ostringstream ss; + /* convert to dB */ + int dB_l = peak_left ? round(20*log10((double)peak_left / INT16_MAX)) : -90; + int dB_r = peak_right ? round(20*log10((double)peak_right / INT16_MAX)) : -90; + ss << "{ \"inputstat\" : {" "\"min_fill\": " << min_fill_buffer << ", " "\"max_fill\": " << max_fill_buffer << ", " + "\"peak_left\": " << dB_l << ", " + "\"peak_right\": " << dB_r << ", " "\"num_underruns\": " << num_underruns << ", " "\"num_overruns\": " << num_overruns << " } }"; -- cgit v1.2.3