Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Side by Side Diff: webrtc/modules/audio_processing/agc/circular_buffer.h

Issue 1181933002: Pull the Voice Activity Detector out from the AGC (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Remove unused files from isolate Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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_PROCESSING_AGC_CIRCULAR_BUFFER_H_
12 #define WEBRTC_MODULES_AUDIO_PROCESSING_AGC_CIRCULAR_BUFFER_H_
13
14 #include "webrtc/base/scoped_ptr.h"
15
16 namespace webrtc {
17
18 // A circular buffer tailored to the need of this project. It stores last
19 // K samples of the input, and keeps track of the mean of the last samples.
20 //
21 // It is used in class "PitchBasedActivity" to keep track of posterior
22 // probabilities in the past few seconds. The posterior probabilities are used
23 // to recursively update prior probabilities.
24 class AgcCircularBuffer {
25 public:
26 static AgcCircularBuffer* Create(int buffer_size);
27 ~AgcCircularBuffer();
28
29 // If buffer is wrapped around.
30 bool is_full() const { return is_full_; }
31 // Get the oldest entry in the buffer.
32 double Oldest() const;
33 // Insert new value into the buffer.
34 void Insert(double value);
35 // Reset buffer, forget the past, start fresh.
36 void Reset();
37
38 // The mean value of the elements in the buffer. The return value is zero if
39 // buffer is empty, i.e. no value is inserted.
40 double Mean();
41 // Remove transients. If the values exceed |val_threshold| for a period
42 // shorter then or equal to |width_threshold|, then that period is considered
43 // transient and set to zero.
44 int RemoveTransient(int width_threshold, double val_threshold);
45
46 private:
47 explicit AgcCircularBuffer(int buffer_size);
48 // Get previous values. |index = 0| corresponds to the most recent
49 // insertion. |index = 1| is the one before the most recent insertion, and
50 // so on.
51 int Get(int index, double* value) const;
52 // Set a given position to |value|. |index| is interpreted as above.
53 int Set(int index, double value);
54 // Return the number of valid elements in the buffer.
55 int BufferLevel();
56
57 // Convert an index with the interpretation as get() method to the
58 // corresponding linear index.
59 int ConvertToLinearIndex(int* index) const;
60
61 rtc::scoped_ptr<double[]> buffer_;
62 bool is_full_;
63 int index_;
64 int buffer_size_;
65 double sum_;
66 };
67
68 } // namespace webrtc
69 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AGC_CIRCULAR_BUFFER_H_
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/agc/agc_manager_direct.cc ('k') | webrtc/modules/audio_processing/agc/circular_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698