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

📄 frameheader.h

📁 自己在wince的环境下做的一移动数字电视驱动
💻 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 + -