#include "remoting/host/audio_silence_detector.h"
#include <stdlib.h>
#include "base/check_op.h"
namespace remoting {
namespace {
int kSilencePeriodThresholdSeconds = 1;
}
AudioSilenceDetector::AudioSilenceDetector(int threshold)
: threshold_(threshold),
silence_length_max_(0),
silence_length_(0),
channels_(0) {
DCHECK_GE(threshold_, 0);
}
AudioSilenceDetector::~AudioSilenceDetector() = default;
void AudioSilenceDetector::Reset(int sampling_rate, int channels) {
DCHECK_GT(sampling_rate, 0);
DCHECK_GT(channels, 0);
silence_length_ = 0;
silence_length_max_ =
sampling_rate * channels * kSilencePeriodThresholdSeconds;
channels_ = channels;
}
bool AudioSilenceDetector::IsSilence(const int16_t* samples, size_t frames) {
const int samples_count = frames * channels();
bool silent_packet = true;
for (int i = 0; i < samples_count; ++i) {
if (abs(samples[i]) > threshold_) {
silent_packet = false;
break;
}
}
if (!silent_packet) {
silence_length_ = 0;
return false;
}
silence_length_ += samples_count;
return silence_length_ > silence_length_max_;
}
int AudioSilenceDetector::channels() const {
return channels_;
}
}