Mercurial > hg > vamp-plugin-sdk
diff vamp-sdk/hostext/PluginSummarisingAdapter.cpp @ 194:27cfae2a4155
* Make summarising adapter debug optional
* Tidy up template generator output a bit
* Clarify an error message
author | cannam |
---|---|
date | Tue, 30 Sep 2008 13:24:41 +0000 |
parents | d1bdcd4a226f |
children | 1e4c6f25ded6 |
line wrap: on
line diff
--- a/vamp-sdk/hostext/PluginSummarisingAdapter.cpp Mon Sep 22 13:40:00 2008 +0000 +++ b/vamp-sdk/hostext/PluginSummarisingAdapter.cpp Tue Sep 30 13:24:41 2008 +0000 @@ -40,6 +40,8 @@ #include <cmath> #include <climits> +//#define DEBUG_PLUGIN_SUMMARISING_ADAPTER 1 + namespace Vamp { namespace HostExt { @@ -218,12 +220,14 @@ PluginSummarisingAdapter::Impl::setSummarySegmentBoundaries(const SegmentBoundaries &b) { m_boundaries = b; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "PluginSummarisingAdapter::setSummarySegmentBoundaries: boundaries are:" << std::endl; for (SegmentBoundaries::const_iterator i = m_boundaries.begin(); i != m_boundaries.end(); ++i) { std::cerr << *i << " "; } std::cerr << std::endl; +#endif } Plugin::FeatureList @@ -381,7 +385,9 @@ // segment, with their full duration, then we should store them in a // single accumulator and distribute into segments only on reduce. +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "output " << output << ": timestamp " << timestamp << ", prev timestamp " << m_prevTimestamps[output] << ", final " << final << std::endl; +#endif // At each process step, accumulate() is called once for each // feature on each output within that process's returned feature @@ -420,16 +426,21 @@ if (m_prevDurations[output] != INVALID_DURATION) { prevDuration = m_prevDurations[output]; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "Previous duration from previous feature: " << prevDuration << std::endl; +#endif } else { prevDuration = timestamp - m_prevTimestamps[output]; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "Previous duration from diff: " << timestamp << " - " << m_prevTimestamps[output] << std::endl; +#endif } +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "output " << output << ": "; - std::cerr << "Pushing previous duration as " << prevDuration << std::endl; +#endif m_accumulators[output].results [m_accumulators[output].results.size() - 1] @@ -473,27 +484,35 @@ RealTime prevTimestamp = i->second; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "output " << output << ": "; +#endif if (m_prevDurations.find(output) != m_prevDurations.end() && m_prevDurations[output] != INVALID_DURATION) { +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "Pushing final duration from feature as " << m_prevDurations[output] << std::endl; +#endif m_accumulators[output].results[acount - 1].duration = m_prevDurations[output]; } else { +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "Pushing final duration from diff as " << m_lastTimestamp << " - " << m_prevTimestamps[output] << std::endl; +#endif m_accumulators[output].results[acount - 1].duration = m_lastTimestamp - m_prevTimestamps[output]; } +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "so duration for result no " << acount-1 << " is " << m_accumulators[output].results[acount-1].duration << std::endl; +#endif } } @@ -502,7 +521,9 @@ RealTime &start, RealTime &end) { +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "findSegmentBounds: t = " << t << std::endl; +#endif SegmentBoundaries::const_iterator i = std::upper_bound (m_boundaries.begin(), m_boundaries.end(), t); @@ -517,8 +538,10 @@ if (i != m_boundaries.begin()) { start = *--i; } - + +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "findSegmentBounds: " << t << " is in segment " << start << " -> " << end << std::endl; +#endif } void @@ -533,8 +556,10 @@ int output = i->first; OutputAccumulator &source = i->second; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "segment: total results for output " << output << " = " << source.results.size() << std::endl; +#endif //!!! This is basically nonsense if the results have no values //!!! (i.e. their times and counts are the only things of @@ -550,7 +575,9 @@ RealTime resultStart = source.results[n].time; RealTime resultEnd = resultStart + source.results[n].duration; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "output: " << output << ", result start = " << resultStart << ", end = " << resultEnd << std::endl; +#endif RealTime segmentStart = RealTime::zeroTime; RealTime segmentEnd = resultEnd - RealTime(1, 0); @@ -572,7 +599,9 @@ chunk.duration = chunkEnd - chunkStart; chunk.values = source.results[n].values; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "chunk for segment " << segmentStart << ": from " << chunk.time << ", duration " << chunk.duration << std::endl; +#endif m_segmentedAccumulators[output][segmentStart].results .push_back(chunk); @@ -637,15 +666,19 @@ int sz = accumulator.results.size(); +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "reduce: segment starting at " << segmentStart << " on output " << output << " has " << sz << " result(s)" << std::endl; +#endif double totalDuration = 0.0; //!!! is this right? if (sz > 0) { +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "last time = " << accumulator.results[sz-1].time << ", duration = " << accumulator.results[sz-1].duration << std::endl; +#endif totalDuration = toSec((accumulator.results[sz-1].time + accumulator.results[sz-1].duration) - segmentStart); @@ -695,13 +728,17 @@ summary.minimum = valvec[0].value; summary.maximum = valvec[sz-1].value; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "total duration = " << totalDuration << std::endl; +#endif +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "value vector for medians:" << std::endl; for (int k = 0; k < sz; ++k) { std::cerr << "(" << valvec[k].value << "," << valvec[k].duration << ") "; } std::cerr << std::endl; +#endif if (sz % 2 == 1) { summary.median = valvec[sz/2].value; @@ -720,8 +757,10 @@ } } +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "median_c = " << summary.median_c << std::endl; std::cerr << "median = " << summary.median << std::endl; +#endif std::map<float, int> distribution; @@ -771,8 +810,10 @@ sum_c += value; } +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "mean_c = " << sum_c << " / " << totalDuration << " = " << sum_c / totalDuration << " (sz = " << sz << ")" << std::endl; +#endif summary.mean_c = sum_c / totalDuration; @@ -788,8 +829,10 @@ float mean = summary.sum / summary.count; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER std::cerr << "mean = " << summary.sum << " / " << summary.count << " = " << summary.sum / summary.count << std::endl; +#endif for (int k = 0; k < sz; ++k) { float value = accumulator.results[k].values[bin];