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