📄 frameheader.h
字号:
/////////////////
//Wenson Chen.
//Innofidei.com
//2007/Dec/01
/*++ Demux Base Core Code for CMMB, which provided the demuxing service
Copyright (C) 2007-2008 Innofidei, Inc.
Module Name: FrameHeader.h
Abstract:
--*/
#ifndef FRAMEHEADERDEF_H
#define FRAMEHEADERDEF_H
#include "port.h"
enum
{
MAX_SUBFRAME_NUM = 15,
MAX_FREQ_DOT_NUM = 15,
MAX_NEIGHBOR_ZONE_NUM = 15,
MAX_MF_NUM = 40,
MAX_SERVICE_NUM = 256,
MAX_VIDEO_SEG_NUM = 7,
MAX_AUDIO_SEG_NUM = 7,
MAX_DATAUNIT_NUM = 256,
MAX_VIDEO_UNIT_NUM = 100,
MAX_AUDIO_UNIT_NUM = 255
};
inline DWORD STEP4(LPBYTE& rP)
{
DWORD ret = (rP[0]<<24) + (rP[1] <<16) + (rP[2]<<8) + rP[3];
rP+=4;
return ret;
}
inline DWORD STEP3(LPBYTE& rP)
{
DWORD ret = (rP[0] <<16) + (rP[1]<<8) + rP[2];
rP+=3;
return ret;
}
inline WORD STEP2(LPBYTE& rP)
{
WORD ret = (rP[0]<<8) + rP[1];
rP+=2;
return ret;
}
inline BYTE STEP1(LPBYTE& rP)
{
BYTE ret = rP[0];
rP++;
return ret;
}
inline void STEPS(LPBYTE const dst, LPBYTE& p, size_t size)
{
if(dst)
{
size_t i;
for(i=0;i<size;i++)
{
dst[i] = p[i];
}
}
p+=size;
}
inline void STEPTIME(LPBYTE & rlpIn, BYTE&nHour, BYTE&nMinute,BYTE&nSecond)
{
BYTE nTemp = STEP1(rlpIn);
nHour = (nTemp>>4) * 10 + (nTemp & 0xf);
nTemp = STEP1(rlpIn);
nMinute = (nTemp>>4) * 10 + (nTemp & 0xf);
nTemp = STEP1(rlpIn);
nSecond = (nTemp>>4) * 10 + (nTemp & 0xf);
}
enum //error code
{
DEMUX_NO_ERROR = 0,
DEMUX_CRC_ERROR = 1,
DEMUX_FRAME_HEADER_LEN_ERROR= 2 // the frame header length is wrong
};
API DWORD CalcCRC32(const LPBYTE inData, size_t inLen);
API bool CheckCRC32(const LPBYTE lpIn, size_t len);
API BYTE CalcCRC8(const LPBYTE pbuf, size_t len) ;
inline DWORD GET4(const LPBYTE p) {return (p[0]<<24) + (p[1] <<16) + (p[2]<<8) + p[3];}
inline WORD GET2(const LPBYTE p) {return (p[0]<<8) + p[1];}
inline BYTE GET1(const LPBYTE p) {return p[0];}
struct API CFrameHeader
{
BYTE nHeaderLen; //Not include dwCRC
BYTE nVersion;
BYTE nMinVersion;
BYTE nMfID;
BYTE nUrgencyFlag;
BYTE nNextFrameFlag;
BYTE nSnUpdateFlag;
BYTE NIT_USN;
BYTE CMCT_USN;
BYTE CSCT_USN;
BYTE SMCT_USN;
BYTE SSCT_USN;
BYTE ESG_USN;
BYTE demuxStatus;
BYTE nSubFrameNum;
DWORD dwSubFrameLen[MAX_SUBFRAME_NUM];
struct CNextFramePara
{
BYTE nMFHeaderLen;
BYTE nFirstSubFrameHeaderLen;
DWORD dwFirstSubFrameLen;
}tPareOfNextFrame;
int getHeaderLen();
int getFrameLen();
DWORD ParseHeader(LPBYTE);
static WORD GetFrequency(BYTE id);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -