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