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