diff options
Diffstat (limited to 'chromium/third_party/webrtc/modules/audio_coding/neteq/automode.h')
-rw-r--r-- | chromium/third_party/webrtc/modules/audio_coding/neteq/automode.h | 274 |
1 files changed, 0 insertions, 274 deletions
diff --git a/chromium/third_party/webrtc/modules/audio_coding/neteq/automode.h b/chromium/third_party/webrtc/modules/audio_coding/neteq/automode.h deleted file mode 100644 index c5dd829b834..00000000000 --- a/chromium/third_party/webrtc/modules/audio_coding/neteq/automode.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright (c) 2011 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. - */ - -/* - * This file contains the functionality for automatic buffer level optimization. - */ - -#ifndef AUTOMODE_H -#define AUTOMODE_H - -#include "typedefs.h" - -/*************/ -/* Constants */ -/*************/ - -/* The beta parameter defines the trade-off between delay and underrun probability. */ -/* It is defined through its inverse in Q30 */ -#define AUTOMODE_BETA_INV_Q30 53687091 /* 1/20 in Q30 */ -#define AUTOMODE_STREAMING_BETA_INV_Q30 536871 /* 1/2000 in Q30 */ - -/* Forgetting factor for the inter-arrival time statistics */ -#define IAT_PROB_FACT 32745 /* 0.9993 in Q15 */ - -/* Maximum inter-arrival time to register (in "packet-times") */ -#define MAX_IAT 64 -#define PEAK_HEIGHT 20 /* 0.08s in Q8 */ - -/* The value (1<<5) sets maximum accelerate "speed" to about 100 ms/s */ -#define AUTOMODE_TIMESCALE_LIMIT (1<<5) - -/* Peak mode related parameters */ -/* Number of peaks in peak vector; must be a power of 2 */ -#define NUM_PEAKS 8 - -/* Must be NUM_PEAKS-1 */ -#define PEAK_INDEX_MASK 0x0007 - -/* Longest accepted peak distance */ -#define MAX_PEAK_PERIOD 10 -#define MAX_STREAMING_PEAK_PERIOD 600 /* 10 minutes */ - -/* Number of peaks required before peak mode can be engaged */ -#define NUM_PEAKS_REQUIRED 3 - -/* Drift term for cumulative sum */ -#define CSUM_IAT_DRIFT 2 - -/*******************/ -/* Automode struct */ -/*******************/ - -/* The automode struct is a sub-struct of the - bufstats-struct (BufstatsInst_t). */ - -typedef struct -{ - - /* Filtered current buffer level */ - uint16_t levelFiltFact; /* filter forgetting factor in Q8 */ - int buffLevelFilt; /* filtered buffer level in Q8 */ - - /* Inter-arrival time (iat) statistics */ - int32_t iatProb[MAX_IAT + 1]; /* iat probabilities in Q30 */ - int16_t iatProbFact; /* iat forgetting factor in Q15 */ - uint32_t packetIatCountSamp; /* time (in timestamps) elapsed since last - packet arrival, based on RecOut calls */ - int optBufLevel; /* current optimal buffer level in Q8 */ - - /* Packet related information */ - int16_t packetSpeechLenSamp; /* speech samples per incoming packet */ - int16_t lastPackCNGorDTMF; /* indicates that the last received packet - contained special information */ - uint16_t lastSeqNo; /* sequence number for last packet received */ - uint32_t lastTimeStamp; /* timestamp for the last packet received */ - int firstPacketReceived; /* set to zero implicitly when the instance is - filled with zeros */ - int32_t sampleMemory; /* memory position for keeping track of how many - samples we cut during expand */ - int16_t prevTimeScale; /* indicates that the last mode was an accelerate - or pre-emptive expand operation */ - uint32_t timescaleHoldOff; /* counter that is shifted one step right each - RecOut call; time-scaling allowed when it has - reached 0 */ - int16_t extraDelayMs; /* extra delay for sync with video */ - - int minimum_delay_ms; /* Desired delay, NetEq maintains this amount of - delay unless jitter statistics suggests a higher value. */ - int maximum_delay_ms; /* Max desired delay, NetEq will not go above this - amount of delay even if jitter statistics suggests a higher value. */ - - int required_delay_q8; /* Smallest delay required. This is computed - according to inter-arrival time and playout mode. It has the same unit - as |optBufLevel|. */ - - /* Peak-detection */ - /* vector with the latest peak periods (peak spacing in samples) */ - uint32_t peakPeriodSamp[NUM_PEAKS]; - /* vector with the latest peak heights (in packets) */ - int16_t peakHeightPkt[NUM_PEAKS]; - int16_t peakIndex; /* index for the vectors peakPeriodSamp and peakHeightPkt; - -1 if still waiting for first peak */ - uint16_t peakThresholdPkt; /* definition of peak (in packets); - calculated from PEAK_HEIGHT */ - uint32_t peakIatCountSamp; /* samples elapsed since last peak was observed */ - uint32_t curPeakPeriod; /* current maximum of peakPeriodSamp vector */ - int16_t curPeakHeight; /* derived from peakHeightPkt vector; - used as optimal buffer level in peak mode */ - int16_t peakModeDisabled; /* ==0 if peak mode can be engaged; >0 if not */ - uint16_t peakFound; /* 1 if peaks are detected and extra delay is applied; - * 0 otherwise. */ - - /* Post-call statistics */ - uint32_t countIAT500ms; /* number of times we got small network outage */ - uint32_t countIAT1000ms; /* number of times we got medium network outage */ - uint32_t countIAT2000ms; /* number of times we got large network outage */ - uint32_t longestIATms; /* mSec duration of longest network outage */ - - int16_t cSumIatQ8; /* cumulative sum of inter-arrival times */ - int16_t maxCSumIatQ8; /* max cumulative sum IAT */ - uint32_t maxCSumUpdateTimer;/* time elapsed since maximum was observed */ -} AutomodeInst_t; - -/*************/ -/* Functions */ -/*************/ - -/**************************************************************************** - * WebRtcNetEQ_UpdateIatStatistics(...) - * - * Update the packet inter-arrival time statistics when a new packet arrives. - * This function should be called for every arriving packet, with some - * exceptions when using DTX/VAD and DTMF. A new optimal buffer level is - * calculated after the update. - * - * Input: - * - inst : Automode instance - * - maxBufLen : Maximum number of packets the buffer can hold - * - seqNumber : RTP sequence number of incoming packet - * - timeStamp : RTP timestamp of incoming packet - * - fsHz : Sample rate in Hz - * - mdCodec : Non-zero if the current codec is a multiple- - * description codec - * - streamingMode : A non-zero value will increase jitter robustness (and delay) - * - * Output: - * - inst : Updated automode instance - * - * Return value : 0 - Ok - * <0 - Error - */ - -int WebRtcNetEQ_UpdateIatStatistics(AutomodeInst_t *inst, int maxBufLen, - uint16_t seqNumber, uint32_t timeStamp, - int32_t fsHz, int mdCodec, int streamingMode); - -/**************************************************************************** - * WebRtcNetEQ_CalcOptimalBufLvl(...) - * - * Calculate the optimal buffer level based on packet inter-arrival time - * statistics. - * - * Input: - * - inst : Automode instance - * - fsHz : Sample rate in Hz - * - mdCodec : Non-zero if the current codec is a multiple- - * description codec - * - timeIatPkts : Currently observed inter-arrival time in packets - * - streamingMode : A non-zero value will increase jitter robustness (and delay) - * - * Output: - * - inst : Updated automode instance - * - * Return value : >0 - Optimal buffer level - * <0 - Error - */ - -int16_t WebRtcNetEQ_CalcOptimalBufLvl(AutomodeInst_t *inst, int32_t fsHz, - int mdCodec, uint32_t timeIatPkts, - int streamingMode); - -/**************************************************************************** - * WebRtcNetEQ_BufferLevelFilter(...) - * - * Update filtered buffer level. The function must be called once for each - * RecOut call, since the timing of automode hinges on counters that are - * updated by this function. - * - * Input: - * - curSizeMs8 : Total length of unused speech data in packet buffer - * and sync buffer, in ms * 8 - * - inst : Automode instance - * - sampPerCall : Number of samples per RecOut call - * - fsMult : Sample rate in Hz divided by 8000 - * - * Output: - * - inst : Updated automode instance - * - * Return value : 0 - Ok - * : <0 - Error - */ - -int WebRtcNetEQ_BufferLevelFilter(int32_t curSizeMs8, AutomodeInst_t *inst, - int sampPerCall, int16_t fsMult); - -/**************************************************************************** - * WebRtcNetEQ_SetPacketSpeechLen(...) - * - * Provide the number of speech samples extracted from a packet to the - * automode instance. Several of the calculations within automode depend - * on knowing the packet size. - * - * - * Input: - * - inst : Automode instance - * - newLenSamp : Number of samples per RecOut call - * - fsHz : Sample rate in Hz - * - * Output: - * - inst : Updated automode instance - * - * Return value : 0 - Ok - * <0 - Error - */ - -int WebRtcNetEQ_SetPacketSpeechLen(AutomodeInst_t *inst, int16_t newLenSamp, - int32_t fsHz); - -/**************************************************************************** - * WebRtcNetEQ_ResetAutomode(...) - * - * Reset the automode instance. - * - * - * Input: - * - inst : Automode instance - * - maxBufLenPackets : Maximum number of packets that the packet - * buffer can hold (>1) - * - * Output: - * - inst : Updated automode instance - * - * Return value : 0 - Ok - */ - -int WebRtcNetEQ_ResetAutomode(AutomodeInst_t *inst, int maxBufLenPackets); - -/**************************************************************************** - * WebRtcNetEQ_AverageIAT(...) - * - * Calculate the average inter-arrival time based on current statistics. - * The average is expressed in parts per million relative the nominal. That is, - * if the average inter-arrival time is equal to the nominal frame time, - * the return value is zero. A positive value corresponds to packet spacing - * being too large, while a negative value means that the packets arrive with - * less spacing than expected. - * - * - * Input: - * - inst : Automode instance. - * - * Return value : Average relative inter-arrival time in samples. - */ - -int32_t WebRtcNetEQ_AverageIAT(const AutomodeInst_t *inst); - -#endif /* AUTOMODE_H */ |