1/*
2 *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_MODULES_AUDIO_CODING_NETEQ_POST_DECODE_VAD_H_
12#define WEBRTC_MODULES_AUDIO_CODING_NETEQ_POST_DECODE_VAD_H_
13
14#include <string>  // size_t
15
16#include "webrtc/base/constructormagic.h"
17#include "webrtc/common_audio/vad/include/webrtc_vad.h"
18#include "webrtc/common_types.h"  // NULL
19#include "webrtc/modules/audio_coding/neteq/defines.h"
20#include "webrtc/modules/audio_coding/neteq/interface/audio_decoder.h"
21#include "webrtc/modules/audio_coding/neteq/packet.h"
22#include "webrtc/typedefs.h"
23
24namespace webrtc {
25
26class PostDecodeVad {
27 public:
28  PostDecodeVad()
29      : enabled_(false),
30        running_(false),
31        active_speech_(true),
32        sid_interval_counter_(0),
33        vad_instance_(NULL) {
34  }
35
36  virtual ~PostDecodeVad();
37
38  // Enables post-decode VAD.
39  void Enable();
40
41  // Disables post-decode VAD.
42  void Disable();
43
44  // Initializes post-decode VAD.
45  void Init();
46
47  // Updates post-decode VAD with the audio data in |signal| having |length|
48  // samples. The data is of type |speech_type|, at the sample rate |fs_hz|.
49  void Update(int16_t* signal, int length,
50              AudioDecoder::SpeechType speech_type, bool sid_frame, int fs_hz);
51
52  // Accessors.
53  bool enabled() const { return enabled_; }
54  bool running() const { return running_; }
55  bool active_speech() const { return active_speech_; }
56
57 private:
58  static const int kVadMode = 0;  // Sets aggressiveness to "Normal".
59  // Number of Update() calls without CNG/SID before re-enabling VAD.
60  static const int kVadAutoEnable = 3000;
61
62  bool enabled_;
63  bool running_;
64  bool active_speech_;
65  int sid_interval_counter_;
66  ::VadInst* vad_instance_;
67
68  DISALLOW_COPY_AND_ASSIGN(PostDecodeVad);
69};
70
71}  // namespace webrtc
72#endif  // WEBRTC_MODULES_AUDIO_CODING_NETEQ_POST_DECODE_VAD_H_
73