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

📄 viewctl.h

📁 jpeg and mpeg 编解码技术源代码
💻 H
字号:
#ifndef __VIEWCTL_H__
#define __VIEWCTL_H__

#include "GUM.H"
#include "GCommDef.H"


#define PWM_LIVE_VIDEO_PASS_THROUGH (WM_USER+201)
#define PWM_LIVE_VIDEO_ENCODING (WM_USER+202)
#define PWM_INIT_DDRAW (WM_USER+103)
#define PWM_CLOSE_DDRAW (WM_USER+104)


#define RING_BUFFER_COUNT 3
#define RING_BUFFER_SIZE 352L*288*3/2    //the maximum size
#define RGB_BUFFER_SIZE 352L*288*3 // the maximum size

typedef enum VIEWCTL_VIDEO_DATATYPE
{
	DATATYPE_YUV420_DATA,
	DATATYPE_MPEG1_SYSTEM_DATA,
	DATATYPE_MPEG1_VIDEO_DATA,
	DATATYPE_MPEG1_SYSTEM_FILE,
	DATATYPE_MPEG1_VIDEO_FILE
};



#ifdef __cplusplus
extern "C" {
#endif	// __cplusplus

typedef void (WINAPI *VIEWCTL_PDecoderBegin)(DWORD dwSlotNumber, DWORD dwParam1, DWORD dwParam2);

typedef struct _VIEWCTL__SNAPSHOT
{
	UINT					iMessage;
	HWND					hWnd;
	char					filename[MAX_PATH];
} VIEWCTL_SNAPSHOT, *PVIEWCTL__SNAPSHOT;

typedef struct _VIEWCTL_DISPLAYINFO
{
	DWORD					dwSlotNumber;
	VIEWCTL_VIDEO_DATATYPE	dwDataType;
	HWND					hWnd;
	RECT					rOutputArea;
	DWORD					dwImageWidth;
	DWORD					dwImageHeight;
	BYTE					bColorKeyRed;
	BYTE					bColorKeyGreen;
	BYTE					bColorKeyBlue;
} VIEWCTL_DISPLAYINFO, *PVIEWCTL_DISPLAYINFO;
/*
typedef struct _VIEWCTL_VIDEOBUFFERINFO
{
	DWORD					dwSlotNumber;
	LPBYTE					lpBuffer;
	DWORD					dwNumberOfBytes;
	DWORD					dwBufferIndex;
} VIEWCTL_VIDEOBUFFERINFO, *PVIEWCTL_VIDEOBUFFERINFO;

*/

int WINAPI VIEWCTL_Init(char *RegistryPath);
int WINAPI VIEWCTL_Close();
int WINAPI VIEWCTL_CreateDisplay(VIEWCTL_DISPLAYINFO nDisplayInfo);
int WINAPI VIEWCTL_CloseDisplay(DWORD dwSlotNumber, BOOL bCleanUp);
int WINAPI VIEWCTL_HandleVideoBuffer(PCOMMON_BUFFER_INFO pVideoBufferInfo);
int WINAPI VIEWCTL_DoSnapShot(VIEWCTL_SNAPSHOT SnapShot);
BOOL WINAPI VIEWCTL_IsMediaPlaying(DWORD dwSlotNumber, DWORD *dwPlayTime);
DWORD WINAPI VIEWCTL_FullScreenMode(BOOL fFullScreen, RECT r);
DWORD WINAPI VIEWCTL_SetOutputArea(DWORD dwSlotNumber, RECT r);
void WINAPI VIEWCTL_DecoderBeginCallback(DWORD dwSlotNumber, VIEWCTL_PDecoderBegin theCBFunction);

void MessageLog_ViewCtl( char *str255, BOOL showTime=TRUE );;
int WINAPI VIEWCTL_Test(HWND hWnd);
int WINAPI VIEWCTL_Play(DWORD dwSlotNumber);
void WINAPI VIEWCTL_Playback(DWORD dwSlotNumber, char *filename);
void WINAPI VIEWCTL_SetDiscontinuous(DWORD dwSlotNumber, DWORD dwPauseTicks);


#ifdef __cplusplus
}
#endif	// __cplusplus


class CViewCtlClass
{

public:
	BOOL m_bResourceAllocated;
	DWORD m_dwSlotNumber;
	HWND m_hDisplayWnd;
	RECT m_rOutputArea;
	int m_iXGlobalPos;
	int m_iYGlobalPos;

	DWORD m_dwFrameCount;
	HANDLE m_hWriteRingBufferEvent;
	HANDLE m_hDisplayStopEvent;
	HANDLE m_hSourceFilterSetupOK;
	HANDLE	m_hThreadReadyEvent;

	char m_csTempDirectory[MAX_PATH];
	char m_fFilename[MAX_PATH];

	VIEWCTL_VIDEO_DATATYPE m_dwDataType;

	//VIEWCTL_SNAPSHOT m_SnapShot;

	BOOL m_fDoSnapShot;

	DWORD m_dwViewDelayCount;
	DWORD m_dwBufferCount;

	BOOL m_fDisplayCreated;
	BOOL m_fDirectDrawInit;
	BOOL m_fUseDirectDraw;
	BOOL m_fUseDirectShow;
	BOOL m_fUseScreenAxis;
	// Thread control
	BYTE *m_pRGBBuf;
	HANDLE m_hViewControlThread;
	DWORD m_dwViewControlThreadID;
	BYTE* m_RingBuffer[RING_BUFFER_COUNT];
	DWORD m_dwWriteIndex;
	DWORD m_dwReadIndex;
	BOOL  m_bStopDisplay;
	DWORD m_dwWriteFrameSkipedCount;
	DWORD m_dwReadFrameSkipedCount;

	DWORD m_dwImageWidth;
	DWORD m_dwImageHeight;
	DWORD m_dwCount;
	DWORD m_dwDisplayInterval;

	BITMAPFILEHEADER m_bmpHeader;
	BITMAPINFO m_bmpInfo;
	
	//color key
	BYTE	m_bColorKeyRed;
	BYTE	m_bColorKeyGreen;
	BYTE	m_bColorKeyBlue;

	LPVOID m_lpDrawFrameObj;

public:
	CViewCtlClass();
	~CViewCtlClass();
	int CreateDisplay(VIEWCTL_DISPLAYINFO nDisplayInfo);
	int CloseDisplay(BOOL bCleanUp);
	int HandleVideoBuffer(COMMON_BUFFER_INFO nVideoBufferInfo);
	BOOL IsMediaPlaying(DWORD *dwPlayTime);
	DWORD SetOutputArea(RECT r);
	void CallbackFunction(VIEWCTL_PDecoderBegin theCBFunction);

	void Playback(char *filename);
	void SetDiscontinuous(DWORD dwPauseTicks);

	BOOL CreateViewControlThread();
	void Displayer_LVPT();
	BOOL AllocateBuffers();
	BOOL FreeBuffers();
	BOOL WriteRingBuffer(BYTE *lpBuffer, DWORD dwNumberOfByte);
	BOOL DisplayRingBuffer();

	static DWORD InitialThreadProc(LPVOID pv) {
	CViewCtlClass * pThis = (CViewCtlClass*) pv;
	return pThis->ViewControlThread(NULL);
    };
	DWORD WINAPI ViewControlThread(LPVOID lpdwParam);
	BOOL FreeResources();

	BOOL CreateBMPInfo();
	BOOL DisplayFrame(BYTE *lpBuffer, HDC hDC, RECT rOutputArea, DWORD dwImageWidth, DWORD dwImageHeight);
	
	void InitDDraw();
	void CloseDDraw();

};

#endif	// __VIEWCTL_H__

⌨️ 快捷键说明

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