xref: /aosp_15_r20/external/webrtc/modules/audio_coding/neteq/comfort_noise.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_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