📄 mpegdec.h
字号:
#ifndef __MPEGDEC_H__
#define __MPEGDEC_H__
#include <streams.h>
#include "asyncio.h"
#include "asyncrdr.h"
#include "memfile.h"
#include "GCommDef.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#define PWM_SETUP_SOURCE_FILTER (WM_USER+301)
typedef void (WINAPI *MPEGDEC_PDecoderBegin)(DWORD dwSlotNumber, DWORD dwParam1, DWORD dwParam2);
typedef struct _MPEGDEC_BUFFER
{
BYTE * pBuffer; // memory buffer pointer
DWORD dwLength; // total data length, unit byte
} MPEGDEC_BUFFER, *PMPEGDEC_BUFFER;
typedef enum _MPEGDEC_BIT_STREAM_TYPE
{
MPEG_UNKNOWN_TYPE, // decoder auto-detects bit stream type
MPEG_VIDEO_ELEMENT_STREAM, // video element stream only
MPEG_AUDIO_ELEMENT_STREAM, // audio element stream only
MPEG_VIDEO_SYSTEM, // video system layer stream only
MPEG_AUDIO_SYSTEM, // audio system layer stream only
MPEG_AUDIO_VIDEO_SYSTEM // audio and video system layer stream
} MPEGDEC_BIT_STREAM_TYPE;
typedef struct _MPEGDEC_ATRRIBUTE
{
MPEGDEC_BIT_STREAM_TYPE BitStreamType; // current MPEG type
BYTE * pFilename; // NULL means bit stream
// is sent by buffer
} MPEGDEC_ATTRIBUTE, *PMPEGDEC_ATTRIBUTE;
typedef enum
{
COMMAND_PLAY, // normal play
COMMAND_STOP, // stop
COMMAND_PAUSE, // pause
COMMAND_FAST, // fast play
COMMAND_SLOW, // slow play
COMMAND_PRIVATE // private use, for example, to set discontinuity
} MPEGDEC_COMMAND;
enum _MPEG_ERR
{
ERR_NOERROR,
ERR_NOINIT,
ERR_INITFAIL,
ERR_IGRAPHBUILDER,
ERR_OPENSTREAM,
ERR_PLAYSTREAM,
ERR_STOPSTREAM,
ERR_PAUSESTREAM,
ERR_WRITETEMPFILE
};
typedef enum
{
MPEGDEC_OK
} MPEGDEC_RETURN_CODE;
#define BUFFER_COUNT 6
typedef struct _MPEGDEC_OBJECT
{
DWORD dwSlotNumber;
DWORD State;
HWND hWindowHandle;
int iWinLeft, iWinTop;
DWORD dwWinWidth, dwWinLength;
CMemStream *pStream;
CMemReader *pRdr;
IFilterGraph *pFG;
BOOL fRealDecoding;
char fMpegFileName[MAX_PATH];
BOOL fUseMemoryBuffer; // playback file or memory
BOOL fDiscontinuous;
BOOL fOOS;
DWORD dwBitStreamType;
DWORD dwBitRate;
DWORD dwPlayStartTime;
char str255[256];
HANDLE hSetupOK; // set up source filter event, passing from View Control module
MPEGDEC_PDecoderBegin DecoderBeginCallback;
HANDLE hMpegDecThread;
DWORD dwMpegDecThreadID;
DWORD dwStartTicks;
char fLogFileName[MAX_PATH];
BOOL fUseSmallVideoBufferSize;
BOOL fUseLogFile;
DWORD BUFFER_SIZE; // must > (352*288*3/2) and be 32768x //the maximum size
DWORD dwWriteIndex;
DWORD dwReadIndex;
DWORD dwReadDataCount;
BOOL bHasData[BUFFER_COUNT];
BOOL bLastTimeDiscontinuous[BUFFER_COUNT];
BOOL bDiscontinuous[BUFFER_COUNT];
BYTE *pBuffer[BUFFER_COUNT];
HANDLE hHasData[BUFFER_COUNT];
BOOL bStopDecoding;
HANDLE hStopDecoding;
DWORD dwReadCount;
BOOL fFirstRead;
LONGLONG llLastPos;
HANDLE hThreadReadyEvent;
}MPEGDEC_OBJECT, *PMPEGDEC_OBJECT;
extern MPEGDEC_OBJECT *_pDecObj[_MAX_SLOT_NUMBER];
DWORD MPEGDEC_Open( DWORD dwSlotNumber, HWND hWnd, RECT DisplayRect, char *RegistryPath );
DWORD MPEGDEC_Close( DWORD dwSlotNumber );
DWORD MPEGDEC_IssueCommand(DWORD dwSlotNumber, MPEGDEC_COMMAND Command, DWORD dwParameter );
DWORD MPEGDEC_SendBuffer(DWORD dwSlotNumber, PMPEGDEC_BUFFER pstruBuffer );
DWORD MPEGDEC_SetAttribute(DWORD dwSlotNumber, PMPEGDEC_ATTRIBUTE pstruAttribute );
void MPEGDEC_WarmUp(DWORD dwSlotNumber);
BOOL MPEGDEC_IsMediaPlaying(DWORD dwSlotNumber, DWORD *dwPlayTime);
void MPEGDEC_SetupSourceFilter(DWORD dwSlotNumber, HANDLE hSetupOK);
DWORD MPEGDEC_FullScreenMode(DWORD dwSlotNumber, BOOL fFullScreen );
DWORD MPEGDEC_SetOutputArea(DWORD dwSlotNumber, RECT r );
void MPEGDEC_DecoderBeginCallback(DWORD dwSlotNumber, MPEGDEC_PDecoderBegin theCBFunction);
int MpegDecOpen(DWORD dwSlotNumber, HWND hWindowHandle, int iWinLeft, int iWinTop, DWORD dwWinWidth, DWORD dwWinLength, DWORD dwBufferInterval);
void MpegDecClose(DWORD dwSlotNumber);
int MpegDecPause(DWORD dwSlotNumber);
int MpegDecStop(DWORD dwSlotNumber);
BOOL MpegDecWaitPlayFinish(DWORD dwSlotNumber);
int MpegDecSendBuffer(DWORD dwSlotNumber, BOOL IsTheFirstBlock, unsigned char *ucBuffer, DWORD BufferSize);
//int MpegDecSendBuffer(BOOL IsTheFirstBlock, LPCTSTR lpszPathName);
int MpegDecPlay(DWORD dwSlotNumber);
int MpegDecSetup(DWORD dwSlotNumber);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif //__MPEGDEC_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -