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