96 lines
3.3 KiB
C
96 lines
3.3 KiB
C
/*
|
|
* 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.
|
|
*/
|
|
|
|
/*
|
|
* Calculates and stores the packet buffer statistics.
|
|
*/
|
|
|
|
#ifndef BUFFER_STATS_H
|
|
#define BUFFER_STATS_H
|
|
|
|
#include "automode.h"
|
|
#include "webrtc_neteq.h" /* to define enum WebRtcNetEQPlayoutMode */
|
|
|
|
/* NetEQ related decisions */
|
|
#define BUFSTATS_DO_NORMAL 0
|
|
#define BUFSTATS_DO_ACCELERATE 1
|
|
#define BUFSTATS_DO_MERGE 2
|
|
#define BUFSTATS_DO_EXPAND 3
|
|
#define BUFSTAT_REINIT 4
|
|
#define BUFSTATS_DO_RFC3389CNG_PACKET 5
|
|
#define BUFSTATS_DO_RFC3389CNG_NOPACKET 6
|
|
#define BUFSTATS_DO_INTERNAL_CNG_NOPACKET 7
|
|
#define BUFSTATS_DO_PREEMPTIVE_EXPAND 8
|
|
#define BUFSTAT_REINIT_DECODER 9
|
|
#define BUFSTATS_DO_DTMF_ONLY 10
|
|
/* Decisions related to when NetEQ is switched off (or in FAX mode) */
|
|
#define BUFSTATS_DO_ALTERNATIVE_PLC 11
|
|
#define BUFSTATS_DO_ALTERNATIVE_PLC_INC_TS 12
|
|
#define BUFSTATS_DO_AUDIO_REPETITION 13
|
|
#define BUFSTATS_DO_AUDIO_REPETITION_INC_TS 14
|
|
|
|
/* Reinit decoder states after this number of expands (upon arrival of new packet) */
|
|
#define REINIT_AFTER_EXPANDS 100
|
|
|
|
/* Wait no longer than this number of RecOut calls before using an "early" packet */
|
|
#define MAX_WAIT_FOR_PACKET 10
|
|
|
|
/* CNG modes */
|
|
#define CNG_OFF 0
|
|
#define CNG_RFC3389_ON 1
|
|
#define CNG_INTERNAL_ON 2
|
|
|
|
typedef struct
|
|
{
|
|
|
|
/* store statistical data here */
|
|
WebRtc_Word16 w16_cngOn; /* remember if CNG is interrupted by other event (e.g. DTMF) */
|
|
WebRtc_Word16 w16_noExpand;
|
|
WebRtc_Word32 uw32_CNGplayedTS;
|
|
|
|
/* VQmon data */
|
|
WebRtc_UWord16 avgDelayMsQ8;
|
|
WebRtc_Word16 maxDelayMs;
|
|
|
|
AutomodeInst_t Automode_inst;
|
|
|
|
} BufstatsInst_t;
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_BufstatsDecision()
|
|
*
|
|
* Gives a decision about what action that is currently desired
|
|
*
|
|
*
|
|
* Input:
|
|
* inst: The bufstat instance
|
|
* cur_size: Current buffer size in ms in Q3 domain
|
|
* targetTS: The desired timestamp to start playout from
|
|
* availableTS: The closest future value available in buffer
|
|
* noPacket 1 if no packet is available, makes availableTS undefined
|
|
* prevPlayMode mode of last NetEq playout
|
|
* timestampsPerCall number of timestamp for 10ms
|
|
*
|
|
* Output:
|
|
* Returns: A decision, as defined above (see top of file)
|
|
*
|
|
*/
|
|
|
|
WebRtc_UWord16 WebRtcNetEQ_BufstatsDecision(BufstatsInst_t *inst, WebRtc_Word16 frameSize,
|
|
WebRtc_Word32 cur_size, WebRtc_UWord32 targetTS,
|
|
WebRtc_UWord32 availableTS, int noPacket,
|
|
int cngPacket, int prevPlayMode,
|
|
enum WebRtcNetEQPlayoutMode playoutMode,
|
|
int timestampsPerCall, int NoOfExpandCalls,
|
|
WebRtc_Word16 fs_mult,
|
|
WebRtc_Word16 lastModeBGNonly, int playDtmf);
|
|
|
|
#endif
|