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_COMFORT_NOISE_H_ 12 #define MODULES_AUDIO_CODING_NETEQ_COMFORT_NOISE_H_ 13 14 #include <stddef.h> 15 16 namespace webrtc { 17 18 // Forward declarations. 19 class AudioMultiVector; 20 class DecoderDatabase; 21 class SyncBuffer; 22 struct Packet; 23 24 // This class acts as an interface to the CNG generator. 25 class ComfortNoise { 26 public: 27 enum ReturnCodes { 28 kOK = 0, 29 kUnknownPayloadType, 30 kInternalError, 31 kMultiChannelNotSupported 32 }; 33 ComfortNoise(int fs_hz,DecoderDatabase * decoder_database,SyncBuffer * sync_buffer)34 ComfortNoise(int fs_hz, 35 DecoderDatabase* decoder_database, 36 SyncBuffer* sync_buffer) 37 : fs_hz_(fs_hz), 38 first_call_(true), 39 overlap_length_(5 * fs_hz_ / 8000), 40 decoder_database_(decoder_database), 41 sync_buffer_(sync_buffer) {} 42 43 ComfortNoise(const ComfortNoise&) = delete; 44 ComfortNoise& operator=(const ComfortNoise&) = delete; 45 46 // Resets the state. Should be called before each new comfort noise period. 47 void Reset(); 48 49 // Update the comfort noise generator with the parameters in `packet`. 50 int UpdateParameters(const Packet& packet); 51 52 // Generates `requested_length` samples of comfort noise and writes to 53 // `output`. If this is the first in call after Reset (or first after creating 54 // the object), it will also mix in comfort noise at the end of the 55 // SyncBuffer object provided in the constructor. 56 int Generate(size_t requested_length, AudioMultiVector* output); 57 58 // Returns the last error code that was produced by the comfort noise 59 // decoder. Returns 0 if no error has been encountered since the last reset. internal_error_code()60 int internal_error_code() { return internal_error_code_; } 61 62 private: 63 int fs_hz_; 64 bool first_call_; 65 size_t overlap_length_; 66 DecoderDatabase* decoder_database_; 67 SyncBuffer* sync_buffer_; 68 int internal_error_code_; 69 }; 70 71 } // namespace webrtc 72 #endif // MODULES_AUDIO_CODING_NETEQ_COMFORT_NOISE_H_ 73