⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jb.h

📁 基于h323协议的软phone
💻 H
📖 第 1 页 / 共 2 页
字号:

/********************************************************************20**

     Name:    Jitter Buffer

     Type:    C include file

     Desc:    Defines required by Jitter Buffer

     File:    jb.h

     Sid:     jb.h 1.0  -  01/21/2000

     Prg:     sdg

     Revision History
	 09/27/2000			RFG			Changed JB_G729_FRAME_SIZE to 30
									Changed JB_G729_CODEC_INTERVAL to 3

************************************************************************/


#ifndef __JBH__
#define __JBH__

#include <vector.h>
#ifndef INCLUDE_RV_RTP
#include "RtpPacket.h"
#include "RtpManager.h"
#else
#include "rvrtp.h"
#include "rvwpt.h"
#endif

/***********************************************************************
               defines related to codecs
 ***********************************************************************/

typedef enum coderInfo
{
	JB_G711,
	JB_G722,
	JB_G723,
    /* slm: MR3580 add support for G726-32 (T8300 only) */
	JB_G726_32,
	JB_G729,
    JB_NUM_CODERS
} CoderInfo;

#define JB_10MS_TIMESTAMP           80  /* RTP timestamp for one 10ms interval */

/* slm: MR8849 change RAW FRAME definition for G711/G722/G726 to be for 1ms (not 10ms)
** this is required to interop with terminals that encode in non-multiples of 10ms */
#define JB_G711_RAW_FRAME_SIZE      8   /* size of 1ms g711 samples (size is negotiated per ms) */
#define JB_G722_RAW_FRAME_SIZE      8   /* size of 1ms g722 samples (size is negotiated per ms) */
#define JB_G723_6_RAW_FRAME_SIZE    24  /* size of a single 30ms g723 6.3kbps frame */
#define JB_G723_5_RAW_FRAME_SIZE    20  /* size of a single 30ms g723 5.3kbps frame */
/* slm: MR3327 add support for G723 SID frame */
#define JB_G723_SID_RAW_FRAME_SIZE  4   /* size of a single g723 Silence frame */
/* slm: MR3580 add support for G726-32 (T8300 only) */
#define JB_G726_32_RAW_FRAME_SIZE   4   /* size of 1ms g726 32kbps samples (size is negotiated per ms) */
#define JB_G729_RAW_FRAME_SIZE      10  /* size of a single 10ms g729 frame */

/* slm: MR4213 add support for variable rates */
#define JB_G723_MS_PER_FRAME        30
#define JB_G729_MS_PER_FRAME        10
/* GTC - milliseconds per frame for the other codecs */
#define JB_G711_MS_PER_FRAME        10
#define JB_G722_MS_PER_FRAME        10
#define JB_G726_32_MS_PER_FRAME     10

#define JB_MAX_MS                   120     /* maximum number of millisecs jb will hold (in 10ms steps) */
#define JB_MAX_BUF_SIZE             (JB_G711_RAW_FRAME_SIZE * JB_MAX_MS)

#define JB_G723_MAX_FRAMES          (JB_MAX_MS / JB_G723_MS_PER_FRAME)
#define JB_G729_MAX_FRAMES          (JB_MAX_MS / JB_G729_MS_PER_FRAME)

#define JB_G711_MAX_MS              (JB_MAX_MS)
#define JB_G722_MAX_MS              (JB_MAX_MS)
#define JB_G726_32_MAX_MS           (JB_MAX_MS)

/***********************************************************************
               macros for jb_utl.c
 ***********************************************************************/
#define MULTPERCENT(val, percent) \
	(U16)(((U32)(val)*(U32)percent*(U32)656)>>16)

#define GETRAWFRAMESIZE(Codec, frameSize) \
	switch (Codec) \
	{ \
	    case JB_G711: \
	    	frameSize = JB_G711_RAW_FRAME_SIZE; \
		    break; \
	    case JB_G722: \
	    	frameSize = JB_G722_RAW_FRAME_SIZE; \
		    break; \
	    case JB_G723: \
	    	frameSize = JB_G723_6_RAW_FRAME_SIZE; \
		    break; \
	    case JB_G726_32: \
	    	frameSize = JB_G726_32_RAW_FRAME_SIZE; \
		    break; \
	    case JB_G729: \
	    	frameSize = JB_G729_RAW_FRAME_SIZE; \
		    break; \
	}

#ifdef DEBUG_JB
#define JBSTATE(targetstate) \
	{ \
        extern int jbstate_print; \
		char *fromState, *toState; \
		switch (targetstate) \
		{ \
			case JB_UNDERFLOW_LONG_SILENCE: \
				toState = "JB_UNDERFLOW_LONG_SILENCE"; \
				break; \
			case JB_ACTIVE_HOLD: \
				toState = "JB_ACTIVE_HOLD"; \
				break; \
			case JB_ACTIVE_PLAY: \
				toState = "JB_ACTIVE_PLAY"; \
				break; \
			case JB_UNDERFLOW: \
				toState = "JB_UNDERFLOW"; \
				break; \
		} \
		switch (connCb->jitter.state) \
		{ \
			case JB_UNDERFLOW_LONG_SILENCE: \
				fromState = "JB_UNDERFLOW_LONG_SILENCE"; \
				break; \
			case JB_ACTIVE_HOLD: \
				fromState = "JB_ACTIVE_HOLD"; \
				break; \
			case JB_ACTIVE_PLAY: \
				fromState = "JB_ACTIVE_PLAY"; \
				break; \
			case JB_UNDERFLOW: \
				fromState = "JB_UNDERFLOW";\
				break; \
		} \
        if( jbstate_print ) \
		    printf("State changed from %s to %s\n", fromState, toState); \
	} \
	connCb->jitter.state = targetstate;
#else /* DEBUG_JB */
#define JBSTATE(targetstate) \
	connCb->jitter.state = targetstate;
#endif /* DEBUG_JB */
/***********************************************************************
                      general defines
 ***********************************************************************/
typedef enum configType
{
	GEN=0,
	JIT
} ConfigType;

typedef enum statsType
{
    CB=0,
    CONN
} StatsType;

typedef enum jbState
{
    JB_UNDERFLOW_LONG_SILENCE=0,
    JB_ACTIVE_HOLD,
    JB_ACTIVE_PLAY,
    JB_UNDERFLOW
} JbState;

typedef enum jbEvent
{
    JB_RECEIVE_PACKET=0,
    JB_PLAY_PACKET,
    JB_LONG_SILENCE
} JbEvent;

#define NMB_JB_EVNT 3
#define NMB_JB_ST 4
#define JB_TQSIZE 128

//#ifndef SS_VW
//#define JB_DEFAULT_TIMER_RES 10  /* 1s */
//#else
//#define JB_DEFAULT_TIMER_RES 1 /* 100ms */
//#endif
#define JB_DEFAULT_TIMER_RES 1 /* 100ms */

/* slm: MR8849 add define for max lines */
#define JB_MAX_LINENUMS  4
#define MAX_RTP_SESSION JB_MAX_LINENUMS
#define NULLTCSPAUSE			 0x800	/* Transmitter is paused due to 3rd-pty pause/transfer function */

#define NULLP         0           /* null pointer */

#define JB_MAX_TICKS 50

/* Unused function parameter macro */
#ifdef UNUSED
#undef UNUSED
#define UNUSED(x) (x=x)
#else
#define UNUSED(x) (x=x)
#endif /* UNUSED */

#ifdef MAX
#undef MAX
#define MAX(x, y) ((x) > (y) ? (x) : (y))            /* get maximum value */
#else
#define MAX(x, y) ((x) > (y) ? (x) : (y))            /* get maximum value */
#endif /* MAX */


#ifdef PUBLIC
#undef PUBLIC
#define PUBLIC                    /* public is c default scope */
#else /* not PUBLIC */
#define PUBLIC
#endif /* PUBLIC */

#ifdef PRIVATE
#undef PRIVATE
#define PRIVATE       static      /* private is c static scope */
#else /* not PRIVATE */
#define PRIVATE       static      /* private is c static scope */
#endif /* PRIVATE */

#ifdef EXTERN
#undef EXTERN
#define EXTERN  extern
#else /* not EXTERN */
#define EXTERN  extern
#endif /* EXTERN */

typedef char            S8;       /* signed - 8 bits */
typedef unsigned char U8;
typedef unsigned char   Bool;     /* boolean */
typedef short           S16;      /* signed - 16 bits */
typedef unsigned short U16;
typedef int S32;
typedef unsigned int U32;

typedef U8 Data;                  /* data */
typedef U32 Ticks;                /* system clock ticks */
typedef void Void;                /* void */
typedef U32  PTR;         /* pointer */

typedef struct dspBuffer
{
	U8 * putBuffer;
	U32 bufLen;
	U32 frames;
}DSPBuffer;

#ifndef INCLUDE_RV_RTP
typedef RtpPacket HrRtpHdr;
#else
class HrRtpHdr
{
public:
	HrRtpHdr()
	{
		_header = NULL;
		_payloadSize = 0;
		_payloadUsage = 0;
		_sequence = 0;
	}
	HrRtpHdr(rtpParam* param)
	{
		_header = param;
		_payloadSize = param->len - param->sByte;
		_payloadUsage = param->len - param->sByte;
		_sequence = param->sequenceNumber;
	}
	int getPayloadUsage(){return _payloadUsage;}
	void setPayloadUsage(int size){_payloadUsage = size;}
	int getPayloadSize(){return _payloadSize;}
	int getSequence(){return _sequence;}
	rtpParam* getHeader(){return _header;}

private:
	rtpParam* _header;
	int _payloadUsage;
	int _payloadSize;
	int _sequence;
};

extern CallInfo wpCallInfo[];
#endif

#define RETVALUE(v) return(v);
#define TRC3(a)         printf(#a "\n");
#define ARGS(a)  a
#define ROK         0                 /* ok */
#define RFAILED     1                 /* failed, general */

/*
 * The following is needed so that Core Trillium header files are not 
 * required to be included in a non-source release
 */
/* Audio/video application profile--standard payload types */
#define RTP_PT_PCMU             0       /* G.711 (ulaw) (8000 Hz)       */
#define RTP_PT_1016             1       /* 1016 (8000 Hz)               */
#define RTP_PT_G726_32          2       /* G.726-32 (8000 Hz)           */
#define RTP_PT_GSM              3       /* GSM (8000 Hz)                */
#define RTP_PT_G723             4       /* G.723 (8000 Hz)              */
#define RTP_PT_DVI4_8000        5       /* DVI4 (8000 Hz)               */
#define RTP_PT_DVI4_16000       6       /* DVI4 (16000 Hz)              */
#define RTP_PT_LPC              7       /* LPC (8000 Hz)                */
#define RTP_PT_PCMA             8       /* G.711 (alaw) (8000 Hz)       */
#define RTP_PT_G722             9       /* G.722 (16000 Hz)             */
#define RTP_PT_L16_2            10      /* Linear 16 (2 ch) (44100 Hz)  */
#define RTP_PT_L16_1            11      /* Linear 16 (1 ch) (44100 Hz)  */
#define RTP_PT_QCELP            12      /* QCELP (8000 Hz)              */
#define RTP_PT_MPA              14      /* MPEG-1/MPEG-2 (90000 Hz)     */
#define RTP_PT_G728             15      /* G.728 (8000 Hz)              */
#define RTP_PT_DVI4_11025       16      /* DVI4 (11025 Hz)              */
#define RTP_PT_DVI4_22050       17      /* DVI4 (22050 Hz)              */
#define RTP_PT_G729             18      /* G.729 (8000 Hz)              */
#define RTP_PT_CN               19      /* Comfort Noise (8000 Hz)      */
#define RTP_PT_CELB             25      /* Cell-B (90000 Hz)            */
#define RTP_PT_JPEG             26      /* JPEG (90000 Hz)              */
#define RTP_PT_NV               28      /* nv (90000 Hz)                */
#define RTP_PT_H261             31      /* H.261 (90000 Hz)             */
#define RTP_PT_MPV              32      /* MPEG-1/MPEG-2 (90000 Hz)     */
#define RTP_PT_MP2T             33      /* MPEG-2 transport (90000 Hz)  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -