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

📄 bitparser.h

📁 神龙卡 SDK_84xx_DShow_145_02.zip 这个是 windows 上二个是linux
💻 H
字号:
#ifndef __PARSER_H_
#define __PARSER_H_

#include "iframe.h"


typedef struct
{
	DWORD dwAudioStreamId;
	DWORD dwVideoStreamId;
} AudioVideoId;

// Transport stream program definition
typedef struct 
{
	int iAudioElemStreamId;
	int iVideoElemStreamId;
	int iProgramNum;
} ProgramDefinition;


class CMpegProperties
{
	public:
		void SetPlayAudioChannel(WORD wAudio);
		void SetPlayVideoChannel(WORD wVideo);
		void SetAudioType(BYTE bAudioType);

	protected:
		// MediaSample parameters
		BYTE *m_bPayloadPtr;
		DWORD m_dwPayloadLength;
		LONGLONG m_llPts;
		LONGLONG m_llDts;	
		BOOL m_bPtsDtsFlag;
		BYTE m_bStreamType;
		ULONGLONG m_ullScr;
		LONG m_lSampleRate;

		BYTE m_bAudioType;
		BYTE m_bSubstreamId;
		// For DTS/AC3
		BYTE m_bNFrameHeaders;
		WORD m_iFirstAccessUnit;

		// Program stream with more than one video/audio channel
		AudioVideoId m_AVId;
		DWORD m_dwAStreamId;
		DWORD m_dwVStreamId;
		WORD m_wAudioChannelCount;
		WORD m_wVideoChannelCount;
		WORD m_wAudioChannelPlay;
		WORD m_wVideoChannelPlay;
		DWORD m_dwAudioMask;
		DWORD m_dwVideoMask;

		// Transport stream parameters
		LONGLONG m_llPcr;
		BOOL m_bPcrFlag;
		INT m_wPid;
		INT m_bContCounter;
		INT m_bDiscIndicator;
		INT m_wPrivateStreamPid;
		LONGLONG m_llVideoPts;
		LONGLONG m_llAudioPts;
		BOOL m_bVideoPtsFlag;
		BOOL m_bAudioPtsFlag;
		BOOL m_bPesPayload;

		// Transport stream with more than one program.
		WORD m_wProgramNumber;
		WORD m_wProgramPlay	;
		WORD m_wProgramCounter;
		ProgramDefinition m_ProgDef;
		DWORD m_dwProgramMask;
};

class CBitParser : public CMpegProperties
{
	public:
		void StopDemux ();
		void ResetDemux();
		void SetFastForward(BOOL bVal);
		virtual int Process(CBuffer* pCBuffer);
		void SetTransport(BOOL b) { m_bIsTransport = b; }

		CBitParser(MemManager *pMemManager);
		virtual ~CBitParser();

	protected:
		void SavePayload();
		void ProgramSample();
		void TransportSample();
		void SetMediaSampleParameters();

		DWORD GetByte();
		DWORD GetWord();
		DWORD GetDWord();
		DWORD ShowByte();
		DWORD SyncOnNextStartCode();
		BOOL GetMorePayload();

	protected:
		MemManager *m_pMemManager;
		BOOL m_bStopDemux;
		// For transport stream
		BOOL m_bIsTransport;
		BOOL m_bProcess;

		// Use these parameters to parse the buffer
		CBuffer *m_pCBuffer;
		BYTE *m_pBuffer;
		DWORD m_dwBufferSize;
		DWORD m_dwBufferIndex;

		// Packet between 2 buffers	
		CBuffer *m_pPreviousCBuffer;
		DWORD m_dwPreviousPacketIndex;
		// Payload between 2 buffers
		DWORD m_dwRightPayloadLength;
		BOOL m_bPacketBetween2Buffers;
		BOOL m_bPayloadBetween2Buffers;
		BOOL m_bEndOfBuffer;

		// Transport stream buffers
		CBuffer *m_pVideoCBuffer;
		CBuffer *m_pAudioCBuffer;
		BYTE *m_pVideoBuffer;
		BYTE *m_pAudioBuffer;
		DWORD m_dwVideoBufferLen;
		DWORD m_dwAudioBufferLen;		
		BOOL m_bVideoPesHeader;
		BOOL m_bAudioPesHeader;

		// Fast forward
		CIFrame *m_pIFrame;
		BOOL m_bFastForward; // (I-frame only)

		// Debug
		FILE *m_pVideoFile;
		FILE *m_pAudioFile;
};

#endif

⌨️ 快捷键说明

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