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

📄 cpacker.h

📁 这是G.723和G.729的音频编解码的源代码
💻 H
字号:

//CPacker.h
//this class use '0xf0' as the frame flag
//use '0xef' as the escape code
#ifndef __PACKER_H__
#define __PACKER_H__

#define FRAME_FLAG 0xf0
#define ESCAPE_CODE 0xef
#define ESCAPE_FLAG 0x00

#define FLOW_CONTROL_XON  0x3c
#define FLOW_CONTROL_XOFF 0xc3
#define IDLE_CODE         0x96

#define ESCAPE_FLOW_CONTROL_XON  0x01
#define ESCAPE_FLOW_CONTROL_XOFF 0x02
#define ESCAPE_IDLE_CODE         0x03

#define MT_FILEDATA 5
#define MT_VIDEO	4
#define MT_AUDIO	3
#define MT_DATA		2
#define MT_COMMAND	1
#define MT_ERR		-1
#define MT_MASK		0x0f

#define PT_END		0x10
#define PT_CONTINUE 0
#define PT_MASK		0x10

class CPacker
{
private:
	BYTE m_byMediaType;
	BYTE m_byPacketType;
	BYTE m_byPM;
	BOOL UniPack(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,UINT uInputLength,UINT& uPackedLength);

protected:
	UINT m_uLength;
	
public:
	CPacker();
	virtual ~CPacker();

	BOOL PackData(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,
				  UINT uInputLength,UINT& uPackedLength,BYTE byPT);

	BOOL PackAudio(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,
				   UINT uInputLength,UINT& uPackedLength,BYTE byPT);

	BOOL PackVideo(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,
				   UINT uInputLength,UINT& uPackedLength,BYTE byPT);	

	BOOL PackCommand(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,
					 UINT uInputLength,UINT& uPackedLength,BYTE byPT);	
	
	BOOL Pack(BYTE * pbyIn,int nInLength,
			  BYTE* pbyOut,int nOutLength,
			  int* npPacketLength,BYTE byMT,BYTE byPT);
	//this function return the frame type
	int Unpack(BYTE * pbyInputFrame,UINT& uLength);
	int Unpack(BYTE* pbyIn,int nInLength,int* npOutLength);
};

inline BOOL CPacker::Pack(BYTE * pbyIn,int nInLength,
						  BYTE* pbyOut,int nOutLength,
						  int* npPacketLength,BYTE byMT,BYTE byPT)
{	
	m_byMediaType=byMT;
	m_byPacketType=byPT;
	m_byPM=byMT|byPT;

	UINT uTemp=(UINT)nOutLength;

	BOOL b=UniPack(pbyIn,pbyOut,nInLength,uTemp);

	*npPacketLength=(int)uTemp;
	return b;
}

inline BOOL CPacker::PackData(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,
							  UINT uInputLength,UINT& uPackedLength,BYTE byPT)
{
	m_byMediaType=MT_DATA;
	m_byPacketType=byPT;
	m_byPM=m_byMediaType|m_byPacketType;

	return UniPack(pbyInputFrame,pbyPackedFrame,uInputLength,uPackedLength);
}

inline BOOL CPacker::PackCommand(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,
								 UINT uInputLength,UINT& uPackedLength,BYTE byPT)
{
	m_byMediaType=MT_COMMAND;
	m_byPacketType=byPT;
	m_byPM=m_byMediaType|m_byPacketType;

	return UniPack(pbyInputFrame,pbyPackedFrame,uInputLength,uPackedLength);

}

inline BOOL CPacker::PackAudio(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,
							   UINT uInputLength,UINT& uPackedLength,BYTE byPT)
{
	m_byMediaType=MT_AUDIO;
	m_byPacketType=byPT;
	m_byPM=m_byMediaType|m_byPacketType;

	return UniPack(pbyInputFrame,pbyPackedFrame,uInputLength,uPackedLength);

}

inline BOOL CPacker::PackVideo(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,
							   UINT uInputLength,UINT& uPackedLength,BYTE byPT)
{
	m_byMediaType=MT_VIDEO;
	m_byPacketType=byPT;
	m_byPM=m_byMediaType|m_byPacketType;

	return UniPack(pbyInputFrame,pbyPackedFrame,uInputLength,uPackedLength);
}

//去掉填充码和转义玛
inline int CPacker::Unpack(BYTE* pbyIn,int nInLength,int* npOutLength)
{
	UINT uTemp=(UINT)nInLength;
	int nr=Unpack(pbyIn,uTemp);
	*npOutLength=(int)uTemp;
	return nr;
}

#endif//__PACKER_H__

⌨️ 快捷键说明

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