#define WINAPI __stdcall是什么意思

本文介绍了函数调用约定的基本概念及几种常见的调用约定:__stdcall、__cdecl、__fastcall等,并阐述了各自的参数传递方式及堆栈清理机制。

调用约定(Calling   convention):决定函数参数传送时入栈和出栈的顺序,由调用者还是被调用者把参数弹出栈,以及编译器用来识别函数名字的修饰约定。  
  函数调用约定有多种,这里简单说一下:  
        1、__stdcall调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。  
          _stdcall是Pascal程序的缺省调用方式,通常用于Win32   Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。  
          2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。  
          _cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。是MFC缺省调用约定。  
          3、__fastcall调用约定是“人”如其名,它的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修饰约定方面,它和前两者均不同。  
          _fastcall方式的函数采用寄存器传递参数,VC将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。          
          4、thiscall仅仅应用于“C++”成员函数。this指针存放于CX寄存器,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。  
          5、naked   call采用1-4的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。naked   call不产生这样的代码。naked   call不是类型修饰符,故必须和_declspec共同使用。  
          关键字   __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前,也可以在编译环境的Setting.../C/C++   /Code   Generation项选择。当加在输出函数前的关键字与编译环境中的选择不同时,直接加在输出函数前的关键字有效。它们对应的命令行参数分别为/Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。  
          要完全模仿PASCAL调用约定首先必须使用__stdcall调用约定,至于函数名修饰约定,可以通过其它方法模仿。还有一个值得一提的是WINAPI宏,Windows.h支持该宏,它可以将出函数翻译成适当的调用约定,在WIN32中,它被定义为__stdcall。使用WINAPI宏可以创建自己的APIs。 

#ifndef _PLAY_H #define _PLAY_H #define PLAY_API __declspec(dllexport) #define CALLMETHOD __stdcall #define CALLBACK __stdcall #ifdef __cplusplus extern "C" { #endif #define FUNC_MAX_PORT 101 //最大播放通道数 //Wave coef range; #define MIN_WAVE_COEF -100 #define MAX_WAVE_COEF 100 //Timer type #define TIMER_1 1 //Only 16 timers for every process.Default TIMER; #define TIMER_2 2 //Not limit;But the precision less than TIMER_1; //缓冲类型 #define BUF_VIDEO_SRC 1 //视频源缓冲 #define BUF_AUDIO_SRC 2 //音频源缓冲 #define BUF_VIDEO_RENDER 3 //解码后视频数据缓冲 #define BUF_AUDIO_RENDER 4 //解码后音频数据缓冲 //错误类型 #define PLAY_NOERROR 0 //没有错误; #define PLAY_PARA_OVER 1 //输入参数非法; #define PLAY_ORDER_ERROR 2 //调用顺序不对; #define PLAY_TIMER_ERROR 3 //多媒体时钟设置失败; #define PLAY_DEC_VIDEO_ERROR 4 //视频解码失败; #define PLAY_DEC_AUDIO_ERROR 5 //音频解码失败; #define PLAY_ALLOC_MEMORY_ERROR 6 //分配内存失败; #define PLAY_OPEN_FILE_ERROR 7 //文件操作失败; #define PLAY_CREATE_OBJ_ERROR 8 //创建线程事件等失败; #define PLAY_CREATE_DDRAW_ERROR 9 //创建directDraw失败; #define PLAY_CREATE_OFFSCREEN_ERROR 10 //创建后端缓存失败; #define PLAY_BUF_OVER 11 //缓冲区满,输入流失败; #define PLAY_CREATE_SOUND_ERROR 12 //创建音频设备失败; #define PLAY_SET_VOLUME_ERROR 13 //设置音量失败; #define PLAY_SUPPORT_FILE_ONLY 14 //只能在播放文件时才能使用此接口; #define PLAY_SUPPORT_STREAM_ONLY 15 //只能在播放流时才能使用此接口; #define PLAY_SYS_NOT_SUPPORT 16 //系统不支持,解码器只能工作在Pentium 3以上; #define PLAY_FILEHEADER_UNKNOWN 17 //没有文件头; #define PLAY_VERSION_INCORRECT 18 //解码器和编码器版本不对应; #define PLAY_INIT_DECODER_ERROR 19 //初始化解码器失败; #define PLAY_CHECK_FILE_ERROR 20 //文件太短或码流无法识别; #define PLAY_INIT_TIMER_ERROR 21 //初始化多媒体时钟失败; #define PLAY_BLT_ERROR 22 //位拷贝失败; #define PLAY_UPDATE_ERROR 23 //显示overlay失败; //Max display regions. #define MAX_DISPLAY_WND 4 //Display type #define DISPLAY_NORMAL 1 #define DISPLAY_QUARTER 2 //Display buffers #define MAX_DIS_FRAMES 50 #define MIN_DIS_FRAMES 6 //chenfeng20090512 -s #define MAX_PLAYING_BUF_NUM (50) #define MIN_PLAYING_BUF_NUM (1) #define DEF_PLAYING_BUF_NUM (3) //chenfeng20090512 -e //Locate by #define BY_FRAMENUM 1 #define BY_FRAMETIME 2 //Source buffer #define SOURCE_BUF_MAX 1024*100000 #define SOURCE_BUF_MIN 1024*50 //Stream type #define STREAME_REALTIME 0 #define STREAME_FILE 1 //frame type #define T_AUDIO16 101 #define T_AUDIO8 100 #define T_CH2_AUDIO16 201 //双声道16位 #define T_CH2_AUDIO8 200 //双声道8位 #define T_UYVY 1 #define T_YV12 3 #define T_RGB32 7 //系统支持的功能,用于按位表示系统功能 #define SUPPORT_DDRAW 1 //支持DIRECTDRAW;如果不支持,则播放器不能工作。 #define SUPPORT_BLT 2 //显卡支持BLT操作;如果不支持,则播放器不能工作 #define SUPPORT_BLTFOURCC 4 //显卡BLT支持颜色转换; #define SUPPORT_BLTSHRINKX 8 //显卡BLT支持X轴缩小; #define SUPPORT_BLTSHRINKY 16 //显卡BLT支持Y轴缩小; #define SUPPORT_BLTSTRETCHX 32 //显卡BLT支持X轴放大; #define SUPPORT_BLTSTRETCHY 64 //显卡BLT支持Y轴放大; #define SUPPORT_SSE 128 //CPU支持SSE指令,Intel Pentium3以上支持SSE指令; #define SUPPORT_MMX 256 //CPU支持MMX指令集。 //Frame position typedef struct{ long nFilePos; long nFrameNum; long nFrameTime; long nErrorFrameNum; SYSTEMTIME *pErrorTime; long nErrorLostFrameNum; long nErrorFrameSize; }FRAME_POS,*PFRAME_POS; //Frame Info typedef struct{ long nWidth; //画面宽,单位像素。如果是音频数据则为0; long nHeight; //画面高。如果是音频数据则为0; long nStamp; //时标信息,单位毫秒。 long nType; //数据类型,T_AUDIO16,T_RGB32, T_YV12,详见宏定义说明。 long nFrameRate; //编码时产生的图像帧率。 }FRAME_INFO; typedef struct { char *pDataBuf; long nSize; long nFrameNum; BOOL bIsAudio; long nReserved; }FRAME_TYPE; //字体类型,目前只支持这些 typedef enum { OSD_TXT_FONT_ARIAL = 1, OSD_TXT_FONT_SERIF, OSD_TXT_FONT_SANS, OSD_TXT_FONT_SIMSUN = 101, // 中文字体,宋体 OSD_TXT_FONT_SIMHEI } DEFAULT_OSD_TXT_FONT; typedef enum { VIDEO_RENDER_DDRAW_OFFSCREEN, VIDEO_RENDER_DDRAW_OVERLAY, VIDEO_RENDER_GDI, VIDEO_RENDER_D3D, VIDEO_RENDER_OPENGL } VIDEO_RENDER_MODE; typedef struct { int pos_x; //相对位置(百分比) int pos_y; COLORREF color; //字体颜色 char text[256]; DEFAULT_OSD_TXT_FONT font_type; int font_size; //以窗口的百分比来表示 HFONT out_ft[16]; //创建的字体对象 int isBold; //是否粗体 int isTransparent; //是否透明底色 COLORREF bkColor; //背景色 } OSD_INFO_TXT; typedef void (CALLBACK* FPDrawFun)(long nPort, HDC hDc, long long nUser, unsigned long seq);//以下为对外接口,供用户作二次开发调用 //以下为对外接口,供用户作二次开发调用 //以下两个是可以不需要调用的接口 PLAY_API BOOL CALLMETHOD VN_PLAY_InitDDraw(HWND hWnd); PLAY_API BOOL CALLMETHOD VN_PLAY_RealeseDDraw(); PLAY_API BOOL CALLMETHOD VN_PLAY_GetPort(LONG* nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_FreePort(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_OpenFile(LONG nPort,LPSTR sFileName); PLAY_API BOOL CALLMETHOD VN_PLAY_CloseFile(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_OpenFileEx(LONG nPort,void *handle); PLAY_API BOOL CALLMETHOD VN_PLAY_CloseFileEx(LONG nPort); //nDisW用于指定缩放后的图像宽度 //nDisH用于指定缩放后的图像高度 //PLAY_API BOOL CALLMETHOD VN_PLAY_Play(LONG nPort, HWND hWnd, int noDisplay=0); PLAY_API BOOL CALLMETHOD VN_PLAY_Play(LONG nPort, HWND hWnd, int noDisplay=0, int nDisW=0, int nDisH=0); PLAY_API BOOL CALLMETHOD VN_PLAY_Stop(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_Pause(LONG nPort,DWORD nPause); PLAY_API BOOL CALLMETHOD VN_PLAY_Fast(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_Slow(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_OneByOne(LONG nPort);//网络回放单帧 PLAY_API BOOL CALLMETHOD VN_PLAY_SetPlayPos(LONG nPort,float fRelativePos); PLAY_API float CALLMETHOD VN_PLAY_GetPlayPos(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetFileEndMsg(LONG nPort,HWND hWnd,UINT nMsg); PLAY_API BOOL CALLMETHOD VN_PLAY_SetVolume(LONG nPort,WORD nVolume); PLAY_API BOOL CALLMETHOD VN_PLAY_StopSound(); PLAY_API BOOL CALLMETHOD VN_PLAY_PlaySound(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_OpenStream(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize); PLAY_API BOOL CALLMETHOD VN_PLAY_InputData(LONG nPort,PBYTE pBuf,DWORD nSize); PLAY_API BOOL CALLMETHOD VN_PLAY_CloseStream(LONG nPort); PLAY_API int CALLMETHOD VN_PLAY_GetCaps(); PLAY_API DWORD CALLMETHOD VN_PLAY_GetFileTime(LONG nPort); PLAY_API DWORD CALLMETHOD VN_PLAY_GetPlayedTime(LONG nPort); PLAY_API DWORD CALLMETHOD VN_PLAY_GetPlayedFrames(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_Back(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_BackOne(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDecCallBack(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf, long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long long nReserved2)); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDisplayCallBack(LONG nPort,void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long long nReserved), long long nUser = 0); PLAY_API BOOL CALLMETHOD VN_PLAY_ConvertToBmpFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType, char *sFileName); PLAY_API BOOL CALLMETHOD VN_PLAY_ConvertToBmpFileEx(char * pBuf,long nSize,long nWidth,long nHeight,long nType,void *fp); PLAY_API BOOL CALLMETHOD VN_PLAY_ConvertToJpgFile(char * pBuf,long nSize,long nWidth,long nHeight,long quality, char *fileName); PLAY_API BOOL CALLMETHOD VN_PLAY_ConvertToJpgFileEx(char * pBuf,long nSize,long nWidth,long nHeight,long quality, void *fp); PLAY_API DWORD CALLMETHOD VN_PLAY_GetFileTotalFrames(LONG nPort); PLAY_API DWORD CALLMETHOD VN_PLAY_GetCurrentFrameRate(LONG nPort); PLAY_API DWORD CALLMETHOD VN_PLAY_GetCurrentBitRate(LONG nPort); PLAY_API DWORD CALLMETHOD VN_PLAY_GetPlayedTimeEx(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetPlayedTimeEx(LONG nPort,DWORD nTime); PLAY_API DWORD CALLMETHOD VN_PLAY_GetCurrentFrameNum(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetStreamOpenMode(LONG nPort,DWORD nMode); PLAY_API DWORD CALLMETHOD VN_PLAY_GetFileHeadLength(); PLAY_API DWORD CALLMETHOD VN_PLAY_GetSdkVersion(); PLAY_API DWORD CALLMETHOD VN_PLAY_GetLastError(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_RefreshPlay(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_GetPictureSize(LONG nPort,LONG *pWidth,LONG *pHeight); PLAY_API BOOL CALLMETHOD VN_PLAY_SetPicQuality(LONG nPort,BOOL bHighQuality); PLAY_API BOOL CALLMETHOD VN_PLAY_PlaySoundShare(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_StopSoundShare(LONG nPort); PLAY_API LONG CALLMETHOD VN_PLAY_GetStreamOpenMode(LONG nPort); PLAY_API LONG CALLMETHOD VN_PLAY_GetOverlayMode(LONG nPort); PLAY_API COLORREF CALLMETHOD VN_PLAY_GetColorKey(LONG nPort); PLAY_API WORD CALLMETHOD VN_PLAY_GetVolume(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_GetPictureQuality(LONG nPort,BOOL *bHighQuality); PLAY_API DWORD CALLMETHOD VN_PLAY_GetSourceBufferRemain(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_ResetSourceBuffer(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetSourceBufCallBack(LONG nPort, DWORD nThreShold, void (CALLBACK *SourceBuf__stdcall)(long nPort, DWORD nBufSize, long long dwUser, void *pResvered), long long dwUser, void *pReserved); PLAY_API BOOL CALLMETHOD VN_PLAY_ResetSourceBufFlag(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDisplayBuf(LONG nPort,DWORD nNum); PLAY_API DWORD CALLMETHOD VN_PLAY_GetDisplayBuf(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_OneByOneBack(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetFileRefCallBack(LONG nPort, void (CALLBACK *pFileRefDone)(DWORD nPort,long long nUser), long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_SetCurrentFrameNum(LONG nPort,DWORD nFrameNum); PLAY_API BOOL CALLMETHOD VN_PLAY_GetKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos); PLAY_API BOOL CALLMETHOD VN_PLAY_GetNextKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos); PLAY_API BOOL CALLMETHOD VN_PLAY_InitDDrawDevice(); PLAY_API void CALLMETHOD VN_PLAY_ReleaseDDrawDevice(); PLAY_API DWORD CALLMETHOD VN_PLAY_GetDDrawDeviceTotalNums(); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDDrawDevice(LONG nPort,DWORD nDeviceNum); PLAY_API BOOL CALLMETHOD VN_PLAY_GetDDrawDeviceInfo(DWORD nDeviceNum,LPSTR lpDriverDescription,DWORD nDespLen,LPSTR lpDriverName ,DWORD nNameLen,long *hhMonitor); PLAY_API int CALLMETHOD VN_PLAY_GetCapsEx(DWORD nDDrawDeviceNum); PLAY_API BOOL CALLMETHOD VN_PLAY_ThrowBFrameNum(LONG nPort,DWORD nNum); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDisplayType(LONG nPort,LONG nType); PLAY_API long CALLMETHOD VN_PLAY_GetDisplayType(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDecCBStream(LONG nPort,DWORD nStream); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDisplayRegion(LONG nPort,DWORD nRegionNum, RECT *pSrcRect, HWND hDestWnd, BOOL bEnable); PLAY_API BOOL CALLMETHOD VN_PLAY_RefreshPlayEx(LONG nPort,DWORD nRegionNum); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDDrawDeviceEx(LONG nPort,DWORD nRegionNum,DWORD nDeviceNum); PLAY_API BOOL CALLMETHOD VN_PLAY_GetRefValue(LONG nPort,BYTE *pBuffer, DWORD *pSize); PLAY_API BOOL CALLMETHOD VN_PLAY_SetRefValue(LONG nPort,BYTE *pBuffer, DWORD nSize); PLAY_API BOOL CALLMETHOD VN_PLAY_OpenStreamEx(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize); PLAY_API BOOL CALLMETHOD VN_PLAY_CloseStreamEx(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_InputVideoData(LONG nPort,PBYTE pBuf,DWORD nSize); PLAY_API BOOL CALLMETHOD VN_PLAY_InputAudioData(LONG nPort,PBYTE pBuf,DWORD nSize); PLAY_API BOOL CALLMETHOD VN_PLAY_RigisterDrawFun(LONG nPort, FPDrawFun cb, long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_RigisterDrawFunEx(LONG nPort,void (CALLBACK* DrawFun)(long nPort,HDC hDc,HWND hWnd,int picW,int picH, long long nUser), long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_SetTimerType(LONG nPort,DWORD nTimerType,DWORD nReserved); PLAY_API BOOL CALLMETHOD VN_PLAY_GetTimerType(LONG nPort,DWORD *pTimerType,DWORD *pReserved); PLAY_API BOOL CALLMETHOD VN_PLAY_ResetBuffer(LONG nPort,DWORD nBufType); PLAY_API DWORD CALLMETHOD VN_PLAY_GetBufferValue(LONG nPort,DWORD nBufType); PLAY_API BOOL CALLMETHOD VN_PLAY_AdjustWaveAudio(LONG nPort,LONG nCoefficient); PLAY_API BOOL CALLMETHOD VN_PLAY_SetVerifyCallBack(LONG nPort, DWORD nBeginTime, DWORD nEndTime, void (CALLBACK * funVerify)(long nPort, FRAME_POS * pFilePos, DWORD bIsVideo, long long nUser), long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_SetAudioCallBack(LONG nPort, void (CALLBACK * funAudio)(long nPort, char * pAudioBuf, long nSize, long nStamp, long nType, long long nUser), long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_SetEncTypeChangeCallBack(LONG nPort,void(CALLBACK *funEncChange)(long nPort, long long nUser),long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_SetColor(LONG nPort, DWORD nRegionNum, int nBrightness, int nContrast, int nSaturation, int nHue); PLAY_API BOOL CALLMETHOD VN_PLAY_GetColor(LONG nPort, DWORD nRegionNum, int *pBrightness, int *pContrast, int *pSaturation, int *pHue); PLAY_API BOOL CALLMETHOD VN_PLAY_SetEncChangeMsg(LONG nPort,HWND hWnd,UINT nMsg); PLAY_API BOOL CALLMETHOD VN_PLAY_SetMDRange(LONG nPort,RECT* rc,DWORD nVauleBegin,DWORD nValueEnd,DWORD nType); PLAY_API BOOL CALLMETHOD VN_PLAY_SetMDThreShold(LONG nPort, DWORD ThreShold) ; PLAY_API DWORD CALLMETHOD VN_PLAY_GetMDPosition(LONG nPort, DWORD Direction, DWORD nFrame, DWORD* MDValue) ; PLAY_API BOOL CALLMETHOD VN_PLAY_CatchPic(LONG nPort,char* sFileName) ; PLAY_API BOOL CALLMETHOD VN_PLAY_CatchPicEx(LONG nPort,void* fp, int isJpeg) ; PLAY_API BOOL CALLMETHOD VN_PLAY_SetFileEndCallBack(LONG nPort, void (CALLBACK *pFileEnd)(DWORD nPort, long long nUser), long long nUser); //dataType 0 是原始码流, 1是AVI PLAY_API BOOL CALLMETHOD VN_PLAY_StartDataRecord(LONG nPort, char *sFileName, int idataType=0); PLAY_API BOOL CALLMETHOD VN_PLAY_StopDataRecord(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_StartDataRecordEx(LONG nPort, void *fp, int idataType=0); //return 8, change avi to dav outside of this api.It is for mjpeg recording PLAY_API BOOL CALLMETHOD VN_PLAY_StopDataRecordEx(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_AdjustFluency(LONG nPort, int level); PLAY_API BOOL CALLMETHOD VN_PLAY_ChangeRate(LONG nPort, int rate); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDemuxCallBack(LONG nPort, void (CALLBACK* DecCBFun)(long nPort,char * pBuf, long nSize,void * pParam, long nReserved,long long nUser), long long nUser); #define HIK_CMD_GetTime 1 #define HIK_CMD_GetFileRate 2 #define CMS_GetFileStartTime 5 #define CMS_GetFileEndTime 6 PLAY_API BOOL CALLMETHOD VN_PLAY_QueryInfo(LONG nPort , int cmdType, char* buf, int buflen, int* returnlen); typedef void (WINAPI *pCallFunction)(LPBYTE pDataBuffer, DWORD DataLength, long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_OpenAudioRecord(pCallFunction pProc, long nBitsPerSample, long nSamplesPerSec, long nLength, long nReserved, long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_CloseAudioRecord(); //reserved 0 表I帧帧数据水印信息 1 表帧水印 2 表水印校验 3表智能分析帧 typedef int (__stdcall* GetWaterMarkInfoCallbackFunc)(char* buf, long key, long len, long reallen, long reserved, long long nUser); //水印信息获取函数 typedef int (__stdcall* GetInfoFrmCallbackFunc)(int nPort, char* buf,long len, long reserved, long long nUser, unsigned char *tmp, long lenTemp, unsigned long seq); PLAY_API BOOL CALLMETHOD VN_PLAY_SetWaterMarkCallBack(LONG nPort, GetWaterMarkInfoCallbackFunc pFunc, long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_SetInfoFrmCallBack(LONG nPort, GetInfoFrmCallbackFunc pFunc, long long nUser); PLAY_API DWORD CALLMETHOD VN_PLAY_CreateFile(LPSTR sFileName); PLAY_API BOOL CALLMETHOD VN_PLAY_DestroyFile(LONG nPort); PLAY_API DWORD CALLMETHOD VN_PLAY_CreateStream(DWORD nBufPoolSize); PLAY_API BOOL CALLMETHOD VN_PLAY_DestroyStream(LONG nPort); PLAY_API BOOL CALLMETHOD VN_PLAY_SetPlayingBufNum(LONG nPort, int iBufNum); //chenfeng20090513 - #define PLAYPARAM_SETSVC 10 #define PLAYPARAM_SETSVACKEY 11 #define PLAYPARAM_SETSVACKEY2 12 #define PLAYPARAM_PASSWORDERRORCB 13 #define PLAYPARAM_EXTINFOCB 14 typedef struct _VN_SVC_PARAM { LONG type; HWND hwnd; }VN_SVC_PARAM; typedef struct _VN_SVAC_KEY_PARAM { HWND hWnd; UINT nMsg; char key[1024]; }VN_SVAC_KEY_PARAM; typedef struct _VN_SVAC_KEY2_PARAM { char key[1024]; }VN_SVAC_KEY2_PARAM; typedef struct _VN_PASSWORDERRORCB_PARAM { void* pcb_passworderror; void* pUser; }VN_PASSWORDERRORCB_PARAM; typedef struct _VN_EXTINFOCB_PARAM { void* pcb_extinfo; void* pUser; }VN_EXTINFOCB_PARAM; PLAY_API BOOL CALLMETHOD VN_PLAY_SetParam(LONG nPort, LONG iType, VOID * pParam); //type: //0, 默认方式,有增强层显示增强层,没有则显示普通层 //1, 普通层叠加在增强层左上角 //2, 普通层和增加层单独显示,hwnd为增强层的显示窗口句柄 PLAY_API BOOL CALLMETHOD VN_PLAY_SetSvc(LONG nPort, LONG type, HWND hwnd); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDecCallBackEx(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf, long nSize,FRAME_INFO * pFrameInfo, long nReserved, long long user), long long nUser); PLAY_API BOOL CALLMETHOD VN_PLAY_SetNeedDecodePasswordCallbackFun(long nPort, void(CALLBACK* pNeedDecodePasswordFun)(long nPort, long nErrorCode, void* pUser), void* pUser); PLAY_API BOOL CALLMETHOD VN_PLAY_SetDecodePassword(long nPort, char* sPassword); PLAY_API BOOL CALLMETHOD VN_PLAY_SetExtensionInfoCallbackFun(long nPort, void (CALLBACK* pExtensionInfoFun)(long nPort, LPCTSTR sExtensionInfo, void* pUser), void* pUser); PLAY_API BOOL CALLMETHOD VN_PLAY_InputDataEx(LONG nPort, PBYTE pBuffer, DWORD offset, DWORD nSize); PLAY_API VOID *CALLMETHOD VN_PLAY_GetFunAdress(char* funName); PLAY_API BOOL CALLMETHOD VN_PLAY_SetROI(LONG nPort, LONG type); PLAY_API BOOL CALLMETHOD VN_PLAY_GetBytesPS(LONG nPort, LONG* TotalBytesPS, LONG* BlBytesPS); PLAY_API BOOL CALLMETHOD VN_PLAY_SetVideoRenderMode(LONG nPort, VIDEO_RENDER_MODE mode, COLORREF color); //设置osd叠加信息,必须在openstream后,play之前设置,否则无效 PLAY_API int CALLMETHOD VN_PLAY_SetOsdTex(LONG nPort, OSD_INFO_TXT * txt); //删除osd叠加信息,nIndex是H264_PLAY_SetOsdTex的返回值 PLAY_API int CALLMETHOD VN_PLAY_DeleteOsdTex(LONG nPort, int nIndex); #ifdef __cplusplus } #endif #endif 看下这段代码
07-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值