📄 cpacker.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 + -