LCOV - code coverage report
Current view: top level - media/webrtc/trunk/webrtc/modules/audio_coding/neteq - time_stretch.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 10 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 3 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_CODING_NETEQ_TIME_STRETCH_H_
      12             : #define WEBRTC_MODULES_AUDIO_CODING_NETEQ_TIME_STRETCH_H_
      13             : 
      14             : #include <assert.h>
      15             : #include <string.h>  // memset, size_t
      16             : 
      17             : #include "webrtc/base/constructormagic.h"
      18             : #include "webrtc/modules/audio_coding/neteq/audio_multi_vector.h"
      19             : #include "webrtc/typedefs.h"
      20             : 
      21             : namespace webrtc {
      22             : 
      23             : // Forward declarations.
      24             : class BackgroundNoise;
      25             : 
      26             : // This is the base class for Accelerate and PreemptiveExpand. This class
      27             : // cannot be instantiated, but must be used through either of the derived
      28             : // classes.
      29             : class TimeStretch {
      30             :  public:
      31             :   enum ReturnCodes {
      32             :     kSuccess = 0,
      33             :     kSuccessLowEnergy = 1,
      34             :     kNoStretch = 2,
      35             :     kError = -1
      36             :   };
      37             : 
      38           0 :   TimeStretch(int sample_rate_hz, size_t num_channels,
      39             :               const BackgroundNoise& background_noise)
      40           0 :       : sample_rate_hz_(sample_rate_hz),
      41           0 :         fs_mult_(sample_rate_hz / 8000),
      42             :         num_channels_(num_channels),
      43             :         master_channel_(0),  // First channel is master.
      44             :         background_noise_(background_noise),
      45           0 :         max_input_value_(0) {
      46           0 :     assert(sample_rate_hz_ == 8000 ||
      47             :            sample_rate_hz_ == 16000 ||
      48             :            sample_rate_hz_ == 32000 ||
      49             :            sample_rate_hz_ == 48000);
      50           0 :     assert(num_channels_ > 0);
      51           0 :     assert(master_channel_ < num_channels_);
      52           0 :     memset(auto_correlation_, 0, sizeof(auto_correlation_));
      53           0 :   }
      54             : 
      55           0 :   virtual ~TimeStretch() {}
      56             : 
      57             :   // This method performs the processing common to both Accelerate and
      58             :   // PreemptiveExpand.
      59             :   ReturnCodes Process(const int16_t* input,
      60             :                       size_t input_len,
      61             :                       bool fast_mode,
      62             :                       AudioMultiVector* output,
      63             :                       size_t* length_change_samples);
      64             : 
      65             :  protected:
      66             :   // Sets the parameters |best_correlation| and |peak_index| to suitable
      67             :   // values when the signal contains no active speech. This method must be
      68             :   // implemented by the sub-classes.
      69             :   virtual void SetParametersForPassiveSpeech(size_t input_length,
      70             :                                              int16_t* best_correlation,
      71             :                                              size_t* peak_index) const = 0;
      72             : 
      73             :   // Checks the criteria for performing the time-stretching operation and,
      74             :   // if possible, performs the time-stretching. This method must be implemented
      75             :   // by the sub-classes.
      76             :   virtual ReturnCodes CheckCriteriaAndStretch(
      77             :       const int16_t* input,
      78             :       size_t input_length,
      79             :       size_t peak_index,
      80             :       int16_t best_correlation,
      81             :       bool active_speech,
      82             :       bool fast_mode,
      83             :       AudioMultiVector* output) const = 0;
      84             : 
      85             :   static const size_t kCorrelationLen = 50;
      86             :   static const size_t kLogCorrelationLen = 6;  // >= log2(kCorrelationLen).
      87             :   static const size_t kMinLag = 10;
      88             :   static const size_t kMaxLag = 60;
      89             :   static const size_t kDownsampledLen = kCorrelationLen + kMaxLag;
      90             :   static const int kCorrelationThreshold = 14746;  // 0.9 in Q14.
      91             : 
      92             :   const int sample_rate_hz_;
      93             :   const int fs_mult_;  // Sample rate multiplier = sample_rate_hz_ / 8000.
      94             :   const size_t num_channels_;
      95             :   const size_t master_channel_;
      96             :   const BackgroundNoise& background_noise_;
      97             :   int16_t max_input_value_;
      98             :   int16_t downsampled_input_[kDownsampledLen];
      99             :   // Adding 1 to the size of |auto_correlation_| because of how it is used
     100             :   // by the peak-detection algorithm.
     101             :   int16_t auto_correlation_[kCorrelationLen + 1];
     102             : 
     103             :  private:
     104             :   // Calculates the auto-correlation of |downsampled_input_| and writes the
     105             :   // result to |auto_correlation_|.
     106             :   void AutoCorrelation();
     107             : 
     108             :   // Performs a simple voice-activity detection based on the input parameters.
     109             :   bool SpeechDetection(int32_t vec1_energy, int32_t vec2_energy,
     110             :                        size_t peak_index, int scaling) const;
     111             : 
     112             :   RTC_DISALLOW_COPY_AND_ASSIGN(TimeStretch);
     113             : };
     114             : 
     115             : }  // namespace webrtc
     116             : #endif  // WEBRTC_MODULES_AUDIO_CODING_NETEQ_TIME_STRETCH_H_

Generated by: LCOV version 1.13