| /* | 
 |  *  Copyright (c) 2013 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_PROCESSING_TRANSIENT_MOVING_MOMENTS_H_ | 
 | #define WEBRTC_MODULES_AUDIO_PROCESSING_TRANSIENT_MOVING_MOMENTS_H_ | 
 |  | 
 | #include <queue> | 
 |  | 
 | #include "webrtc/system_wrappers/interface/scoped_ptr.h" | 
 |  | 
 | namespace webrtc { | 
 |  | 
 | // Calculates the first and second moments for each value of a buffer taking | 
 | // into account a given number of previous values. | 
 | // It preserves its state, so it can be multiple-called. | 
 | // TODO(chadan): Implement a function that takes a buffer of first moments and a | 
 | // buffer of second moments; and calculates the variances. When needed. | 
 | // TODO(chadan): Add functionality to update with a buffer but only output are | 
 | // the last values of the moments. When needed. | 
 | class MovingMoments { | 
 |  public: | 
 |   // Creates a Moving Moments object, that uses the last |length| values | 
 |   // (including the new value introduced in every new calculation). | 
 |   explicit MovingMoments(size_t length); | 
 |   ~MovingMoments(); | 
 |  | 
 |   // Calculates the new values using |in|. Results will be in the out buffers. | 
 |   // |first| and |second| must be allocated with at least |in_length|. | 
 |   void CalculateMoments(const float* in, size_t in_length, | 
 |                         float* first, float* second); | 
 |  | 
 |  private: | 
 |   size_t length_; | 
 |   // A queue holding the |length_| latest input values. | 
 |   std::queue<float> queue_; | 
 |   // Sum of the values of the queue. | 
 |   float sum_; | 
 |   // Sum of the squares of the values of the queue. | 
 |   float sum_of_squares_; | 
 | }; | 
 |  | 
 | }  // namespace webrtc | 
 |  | 
 |  | 
 | #endif  // WEBRTC_MODULES_AUDIO_PROCESSING_TRANSIENT_MOVING_MOMENTS_H_ |