blob: 3bd91b9edbec7401a96aef76c1db74632e096fda [file] [log] [blame]
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +00001/*
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_AUDIO_CODING_NETEQ_POST_DECODE_VAD_H_
12#define MODULES_AUDIO_CODING_NETEQ_POST_DECODE_VAD_H_
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000013
Yves Gerey988cc082018-10-23 12:03:01 +020014#include <stddef.h>
15#include <stdint.h>
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000016
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "api/audio_codecs/audio_decoder.h"
18#include "common_audio/vad/include/webrtc_vad.h"
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000019
20namespace webrtc {
21
22class PostDecodeVad {
23 public:
24 PostDecodeVad()
25 : enabled_(false),
26 running_(false),
27 active_speech_(true),
28 sid_interval_counter_(0),
Yves Gerey665174f2018-06-19 15:03:05 +020029 vad_instance_(NULL) {}
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000030
pbos@webrtc.org2d1a55c2013-07-31 15:54:00 +000031 virtual ~PostDecodeVad();
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000032
Byoungchan Lee604fd2f2022-01-21 09:49:39 +090033 PostDecodeVad(const PostDecodeVad&) = delete;
34 PostDecodeVad& operator=(const PostDecodeVad&) = delete;
35
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000036 // Enables post-decode VAD.
37 void Enable();
38
39 // Disables post-decode VAD.
40 void Disable();
41
42 // Initializes post-decode VAD.
43 void Init();
44
Artem Titovd00ce742021-07-28 20:00:17 +020045 // Updates post-decode VAD with the audio data in `signal` having `length`
46 // samples. The data is of type `speech_type`, at the sample rate `fs_hz`.
Yves Gerey665174f2018-06-19 15:03:05 +020047 void Update(int16_t* signal,
48 size_t length,
49 AudioDecoder::SpeechType speech_type,
50 bool sid_frame,
51 int fs_hz);
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000052
53 // Accessors.
54 bool enabled() const { return enabled_; }
55 bool running() const { return running_; }
56 bool active_speech() const { return active_speech_; }
57
58 private:
59 static const int kVadMode = 0; // Sets aggressiveness to "Normal".
60 // Number of Update() calls without CNG/SID before re-enabling VAD.
61 static const int kVadAutoEnable = 3000;
62
63 bool enabled_;
64 bool running_;
65 bool active_speech_;
66 int sid_interval_counter_;
67 ::VadInst* vad_instance_;
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000068};
69
70} // namespace webrtc
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020071#endif // MODULES_AUDIO_CODING_NETEQ_POST_DECODE_VAD_H_