xref: /aosp_15_r20/external/webrtc/modules/audio_coding/neteq/normal.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2012 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 MODULES_AUDIO_CODING_NETEQ_NORMAL_H_
12 #define MODULES_AUDIO_CODING_NETEQ_NORMAL_H_
13 
14 #include <stdint.h>
15 #include <string.h>  // Access to size_t.
16 
17 #include "api/neteq/neteq.h"
18 #include "modules/audio_coding/neteq/statistics_calculator.h"
19 #include "rtc_base/checks.h"
20 #include "rtc_base/numerics/safe_conversions.h"
21 
22 namespace webrtc {
23 
24 // Forward declarations.
25 class AudioMultiVector;
26 class BackgroundNoise;
27 class DecoderDatabase;
28 class Expand;
29 
30 // This class provides the "Normal" DSP operation, that is performed when
31 // there is no data loss, no need to stretch the timing of the signal, and
32 // no other "special circumstances" are at hand.
33 class Normal {
34  public:
Normal(int fs_hz,DecoderDatabase * decoder_database,const BackgroundNoise & background_noise,Expand * expand,StatisticsCalculator * statistics)35   Normal(int fs_hz,
36          DecoderDatabase* decoder_database,
37          const BackgroundNoise& background_noise,
38          Expand* expand,
39          StatisticsCalculator* statistics)
40       : fs_hz_(fs_hz),
41         decoder_database_(decoder_database),
42         background_noise_(background_noise),
43         expand_(expand),
44         samples_per_ms_(rtc::CheckedDivExact(fs_hz_, 1000)),
45         default_win_slope_Q14_(
46             rtc::dchecked_cast<uint16_t>((1 << 14) / samples_per_ms_)),
47         statistics_(statistics) {}
48 
~Normal()49   virtual ~Normal() {}
50 
51   Normal(const Normal&) = delete;
52   Normal& operator=(const Normal&) = delete;
53 
54   // Performs the "Normal" operation. The decoder data is supplied in `input`,
55   // having `length` samples in total for all channels (interleaved). The
56   // result is written to `output`. The number of channels allocated in
57   // `output` defines the number of channels that will be used when
58   // de-interleaving `input`. `last_mode` contains the mode used in the previous
59   // GetAudio call (i.e., not the current one).
60   int Process(const int16_t* input,
61               size_t length,
62               NetEq::Mode last_mode,
63               AudioMultiVector* output);
64 
65  private:
66   int fs_hz_;
67   DecoderDatabase* decoder_database_;
68   const BackgroundNoise& background_noise_;
69   Expand* expand_;
70   const size_t samples_per_ms_;
71   const int16_t default_win_slope_Q14_;
72   StatisticsCalculator* const statistics_;
73 };
74 
75 }  // namespace webrtc
76 #endif  // MODULES_AUDIO_CODING_NETEQ_NORMAL_H_
77