/* * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_MODULES_AUDIO_CODING_NETEQ_COMFORT_NOISE_H_ #define WEBRTC_MODULES_AUDIO_CODING_NETEQ_COMFORT_NOISE_H_ #include "webrtc/base/constructormagic.h" #include "webrtc/modules/audio_coding/neteq/audio_multi_vector.h" #include "webrtc/typedefs.h" namespace webrtc { // Forward declarations. class DecoderDatabase; class SyncBuffer; struct Packet; // This class acts as an interface to the CNG generator. class ComfortNoise { public: enum ReturnCodes { kOK = 0, kUnknownPayloadType, kInternalError, kMultiChannelNotSupported }; ComfortNoise(int fs_hz, DecoderDatabase* decoder_database, SyncBuffer* sync_buffer) : fs_hz_(fs_hz), first_call_(true), overlap_length_(5 * fs_hz_ / 8000), decoder_database_(decoder_database), sync_buffer_(sync_buffer), internal_error_code_(0) { } // Resets the state. Should be called before each new comfort noise period. void Reset(); // Update the comfort noise generator with the parameters in |packet|. // Will delete the packet. int UpdateParameters(Packet* packet); // Generates |requested_length| samples of comfort noise and writes to // |output|. If this is the first in call after Reset (or first after creating // the object), it will also mix in comfort noise at the end of the // SyncBuffer object provided in the constructor. int Generate(size_t requested_length, AudioMultiVector* output); // Returns the last error code that was produced by the comfort noise // decoder. Returns 0 if no error has been encountered since the last reset. int internal_error_code() { return internal_error_code_; } private: int fs_hz_; bool first_call_; size_t overlap_length_; DecoderDatabase* decoder_database_; SyncBuffer* sync_buffer_; int internal_error_code_; RTC_DISALLOW_COPY_AND_ASSIGN(ComfortNoise); }; } // namespace webrtc #endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_COMFORT_NOISE_H_