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