Index: webrtc/common_audio/vad/vad.cc |
diff --git a/webrtc/common_audio/vad/vad.cc b/webrtc/common_audio/vad/vad.cc |
index dc4eb6db3246d488d85e23e155ff305ab0099170..8973a68b733bec2d28b94869b6bab83066062eee 100644 |
--- a/webrtc/common_audio/vad/vad.cc |
+++ b/webrtc/common_audio/vad/vad.cc |
@@ -14,36 +14,50 @@ |
namespace webrtc { |
-Vad::Vad(enum Aggressiveness mode) : handle_(nullptr), aggressiveness_(mode) { |
- Reset(); |
-} |
+namespace { |
-Vad::~Vad() { |
- WebRtcVad_Free(handle_); |
-} |
+class VadImpl final : public Vad { |
+ public: |
+ explicit VadImpl(Aggressiveness aggressiveness) |
+ : handle_(nullptr), aggressiveness_(aggressiveness) { |
+ Reset(); |
+ } |
-enum Vad::Activity Vad::VoiceActivity(const int16_t* audio, |
- size_t num_samples, |
- int sample_rate_hz) { |
- int ret = WebRtcVad_Process(handle_, sample_rate_hz, audio, num_samples); |
- switch (ret) { |
- case 0: |
- return kPassive; |
- case 1: |
- return kActive; |
- default: |
- DCHECK(false) << "WebRtcVad_Process returned an error."; |
- return kError; |
+ ~VadImpl() override { WebRtcVad_Free(handle_); } |
+ |
+ Activity VoiceActivity(const int16_t* audio, |
+ size_t num_samples, |
+ int sample_rate_hz) override { |
+ int ret = WebRtcVad_Process(handle_, sample_rate_hz, audio, num_samples); |
+ switch (ret) { |
+ case 0: |
+ return kPassive; |
+ case 1: |
+ return kActive; |
+ default: |
+ DCHECK(false) << "WebRtcVad_Process returned an error."; |
+ return kError; |
+ } |
} |
-} |
-void Vad::Reset() { |
- if (handle_) |
- WebRtcVad_Free(handle_); |
- handle_ = WebRtcVad_Create(); |
- CHECK(handle_); |
- CHECK_EQ(WebRtcVad_Init(handle_), 0); |
- CHECK_EQ(WebRtcVad_set_mode(handle_, aggressiveness_), 0); |
+ void Reset() override { |
+ if (handle_) |
+ WebRtcVad_Free(handle_); |
+ handle_ = WebRtcVad_Create(); |
+ CHECK(handle_); |
+ CHECK_EQ(WebRtcVad_Init(handle_), 0); |
+ CHECK_EQ(WebRtcVad_set_mode(handle_, aggressiveness_), 0); |
+ } |
+ |
+ private: |
+ VadInst* handle_; |
+ Aggressiveness aggressiveness_; |
+}; |
+ |
+} // namespace |
+ |
+rtc::scoped_ptr<Vad> CreateVad(Vad::Aggressiveness aggressiveness) { |
+ return rtc::scoped_ptr<Vad>(new VadImpl(aggressiveness)); |
} |
} // namespace webrtc |