diff options
Diffstat (limited to 'src/StatsServer.cpp')
-rw-r--r-- | src/StatsServer.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
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 <errno.h> #include <string.h> +#include <math.h> #include <sstream> #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 << " } }"; |