LCOV - code coverage report
Current view: top level - media/webrtc/trunk/webrtc/modules/audio_coding/neteq - expand.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 8 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 8 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_EXPAND_H_
      12             : #define WEBRTC_MODULES_AUDIO_CODING_NETEQ_EXPAND_H_
      13             : 
      14             : #include <assert.h>
      15             : #include <memory>
      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             : class RandomVector;
      26             : class StatisticsCalculator;
      27             : class SyncBuffer;
      28             : 
      29             : // This class handles extrapolation of audio data from the sync_buffer to
      30             : // produce packet-loss concealment.
      31             : // TODO(hlundin): Refactor this class to divide the long methods into shorter
      32             : // ones.
      33           0 : class Expand {
      34             :  public:
      35             :   Expand(BackgroundNoise* background_noise,
      36             :          SyncBuffer* sync_buffer,
      37             :          RandomVector* random_vector,
      38             :          StatisticsCalculator* statistics,
      39             :          int fs,
      40             :          size_t num_channels);
      41             : 
      42             :   virtual ~Expand();
      43             : 
      44             :   // Resets the object.
      45             :   virtual void Reset();
      46             : 
      47             :   // The main method to produce concealment data. The data is appended to the
      48             :   // end of |output|.
      49             :   virtual int Process(AudioMultiVector* output);
      50             : 
      51             :   // Prepare the object to do extra expansion during normal operation following
      52             :   // a period of expands.
      53             :   virtual void SetParametersForNormalAfterExpand();
      54             : 
      55             :   // Prepare the object to do extra expansion during merge operation following
      56             :   // a period of expands.
      57             :   virtual void SetParametersForMergeAfterExpand();
      58             : 
      59             :   // Returns the mute factor for |channel|.
      60           0 :   int16_t MuteFactor(size_t channel) {
      61           0 :     assert(channel < num_channels_);
      62           0 :     return channel_parameters_[channel].mute_factor;
      63             :   }
      64             : 
      65             :   // Returns true if expansion has been faded down to zero amplitude (for all
      66             :   // channels); false otherwise.
      67             :   bool Muted() const;
      68             : 
      69             :   // Accessors and mutators.
      70             :   virtual size_t overlap_length() const;
      71           0 :   size_t max_lag() const { return max_lag_; }
      72             : 
      73             :  protected:
      74             :   static const int kMaxConsecutiveExpands = 200;
      75             :   void GenerateRandomVector(int16_t seed_increment,
      76             :                             size_t length,
      77             :                             int16_t* random_vector);
      78             : 
      79             :   void GenerateBackgroundNoise(int16_t* random_vector,
      80             :                                size_t channel,
      81             :                                int mute_slope,
      82             :                                bool too_many_expands,
      83             :                                size_t num_noise_samples,
      84             :                                int16_t* buffer);
      85             : 
      86             :   // Initializes member variables at the beginning of an expand period.
      87             :   void InitializeForAnExpandPeriod();
      88             : 
      89             :   bool TooManyExpands();
      90             : 
      91             :   // Analyzes the signal history in |sync_buffer_|, and set up all parameters
      92             :   // necessary to produce concealment data.
      93             :   void AnalyzeSignal(int16_t* random_vector);
      94             : 
      95             :   RandomVector* const random_vector_;
      96             :   SyncBuffer* const sync_buffer_;
      97             :   bool first_expand_;
      98             :   const int fs_hz_;
      99             :   const size_t num_channels_;
     100             :   int consecutive_expands_;
     101             : 
     102             :  private:
     103             :   static const size_t kUnvoicedLpcOrder = 6;
     104             :   static const size_t kNumCorrelationCandidates = 3;
     105             :   static const size_t kDistortionLength = 20;
     106             :   static const size_t kLpcAnalysisLength = 160;
     107             :   static const size_t kMaxSampleRate = 48000;
     108             :   static const int kNumLags = 3;
     109             : 
     110           0 :   struct ChannelParameters {
     111             :     ChannelParameters();
     112             :     int16_t mute_factor;
     113             :     int16_t ar_filter[kUnvoicedLpcOrder + 1];
     114             :     int16_t ar_filter_state[kUnvoicedLpcOrder];
     115             :     int16_t ar_gain;
     116             :     int16_t ar_gain_scale;
     117             :     int16_t voice_mix_factor; /* Q14 */
     118             :     int16_t current_voice_mix_factor; /* Q14 */
     119             :     AudioVector expand_vector0;
     120             :     AudioVector expand_vector1;
     121             :     bool onset;
     122             :     int mute_slope; /* Q20 */
     123             :   };
     124             : 
     125             :   // Calculate the auto-correlation of |input|, with length |input_length|
     126             :   // samples. The correlation is calculated from a downsampled version of
     127             :   // |input|, and is written to |output|.
     128             :   void Correlation(const int16_t* input,
     129             :                    size_t input_length,
     130             :                    int16_t* output) const;
     131             : 
     132             :   void UpdateLagIndex();
     133             : 
     134             :   BackgroundNoise* const background_noise_;
     135             :   StatisticsCalculator* const statistics_;
     136             :   const size_t overlap_length_;
     137             :   size_t max_lag_;
     138             :   size_t expand_lags_[kNumLags];
     139             :   int lag_index_direction_;
     140             :   int current_lag_index_;
     141             :   bool stop_muting_;
     142             :   size_t expand_duration_samples_;
     143             :   std::unique_ptr<ChannelParameters[]> channel_parameters_;
     144             : 
     145             :   RTC_DISALLOW_COPY_AND_ASSIGN(Expand);
     146             : };
     147             : 
     148             : struct ExpandFactory {
     149           0 :   ExpandFactory() {}
     150           0 :   virtual ~ExpandFactory() {}
     151             : 
     152             :   virtual Expand* Create(BackgroundNoise* background_noise,
     153             :                          SyncBuffer* sync_buffer,
     154             :                          RandomVector* random_vector,
     155             :                          StatisticsCalculator* statistics,
     156             :                          int fs,
     157             :                          size_t num_channels) const;
     158             : };
     159             : 
     160             : }  // namespace webrtc
     161             : #endif  // WEBRTC_MODULES_AUDIO_CODING_NETEQ_EXPAND_H_

Generated by: LCOV version 1.13