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

📄 mpegdec.h

📁 jpeg and mpeg 编解码技术源代码
💻 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 + -