+ unsigned candidate_bin = best_bin / i;
+ if (best_bin == candidate_bin ||
+ candidate_bin < 5 ||
+ candidate_bin >= num_samples / 2 - 1) {
+ continue;
+ }
+
+ // Check that we indeed have a peak in this area.
+ if (candidate_bin - 1 != best_bin &&
+ in[candidate_bin - 1] > in[candidate_bin] &&
+ in[candidate_bin - 1] > in[candidate_bin - 2]) {
+ --candidate_bin;
+ } else if (candidate_bin + 1 != best_bin &&
+ in[candidate_bin + 1] > in[candidate_bin] &&
+ in[candidate_bin + 1] > in[candidate_bin + 2]) {
+ ++candidate_bin;
+ } else if (in[candidate_bin] < in[candidate_bin - 1] ||
+ in[candidate_bin] < in[candidate_bin + 1]) {
+ continue;
+ }
+
+ std::pair<double, double> candidate_peak =
+ interpolate_peak(in[candidate_bin - 1],
+ in[candidate_bin],
+ in[candidate_bin + 1]);
+ if (candidate_peak.second + 20.0f > peak.second) {