LCOV - code coverage report
Current view: top level - media/webrtc/trunk/webrtc/modules/audio_processing/agc - loudness_histogram.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 1 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          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_PROCESSING_AGC_LOUDNESS_HISTOGRAM_H_
      12             : #define WEBRTC_MODULES_AUDIO_PROCESSING_AGC_LOUDNESS_HISTOGRAM_H_
      13             : 
      14             : #include <string.h>
      15             : 
      16             : #include <memory>
      17             : 
      18             : #include "webrtc/typedefs.h"
      19             : 
      20             : namespace webrtc {
      21             : 
      22             : // This class implements the histogram of loudness with circular buffers so that
      23             : // the histogram tracks the last T seconds of the loudness.
      24             : class LoudnessHistogram {
      25             :  public:
      26             :   // Create a non-sliding LoudnessHistogram.
      27             :   static LoudnessHistogram* Create();
      28             : 
      29             :   // Create a sliding LoudnessHistogram, i.e. the histogram represents the last
      30             :   // |window_size| samples.
      31             :   static LoudnessHistogram* Create(int window_size);
      32             :   ~LoudnessHistogram();
      33             : 
      34             :   // Insert RMS and the corresponding activity probability.
      35             :   void Update(double rms, double activity_probability);
      36             : 
      37             :   // Reset the histogram, forget the past.
      38             :   void Reset();
      39             : 
      40             :   // Current loudness, which is actually the mean of histogram in loudness
      41             :   // domain.
      42             :   double CurrentRms() const;
      43             : 
      44             :   // Sum of the histogram content.
      45             :   double AudioContent() const;
      46             : 
      47             :   // Number of times the histogram has been updated.
      48           0 :   int num_updates() const { return num_updates_; }
      49             : 
      50             :  private:
      51             :   LoudnessHistogram();
      52             :   explicit LoudnessHistogram(int window);
      53             : 
      54             :   // Find the histogram bin associated with the given |rms|.
      55             :   int GetBinIndex(double rms);
      56             : 
      57             :   void RemoveOldestEntryAndUpdate();
      58             :   void InsertNewestEntryAndUpdate(int activity_prob_q10, int hist_index);
      59             :   void UpdateHist(int activity_prob_q10, int hist_index);
      60             :   void RemoveTransient();
      61             : 
      62             :   // Number of histogram bins.
      63             :   static const int kHistSize = 77;
      64             : 
      65             :   // Number of times the histogram is updated
      66             :   int num_updates_;
      67             :   // Audio content, this should be equal to the sum of the components of
      68             :   // |bin_count_q10_|.
      69             :   int64_t audio_content_q10_;
      70             : 
      71             :   // LoudnessHistogram of input RMS in Q10 with |kHistSize_| bins. In each
      72             :   // 'Update(),' we increment the associated histogram-bin with the given
      73             :   // probability. The increment is implemented in Q10 to avoid rounding errors.
      74             :   int64_t bin_count_q10_[kHistSize];
      75             : 
      76             :   // Circular buffer for probabilities
      77             :   std::unique_ptr<int[]> activity_probability_;
      78             :   // Circular buffer for histogram-indices of probabilities.
      79             :   std::unique_ptr<int[]> hist_bin_index_;
      80             :   // Current index of circular buffer, where the newest data will be written to,
      81             :   // therefore, pointing to the oldest data if buffer is full.
      82             :   int buffer_index_;
      83             :   // Indicating if buffer is full and we had a wrap around.
      84             :   int buffer_is_full_;
      85             :   // Size of circular buffer.
      86             :   int len_circular_buffer_;
      87             :   int len_high_activity_;
      88             : };
      89             : 
      90             : }  // namespace webrtc
      91             : 
      92             : #endif  // WEBRTC_MODULES_AUDIO_PROCESSING_AGC_LOUDNESS_HISTOGRAM_H_

Generated by: LCOV version 1.13