Files
EF3-Interface/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/MVSDK.h
T
2014-08-12 13:56:06 +08:00

281 lines
21 KiB
C
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __MVVGA_H__
#define __MVVGA_H__
#include "COMM.h"
/////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// 设 备 相 关 控 制 部 件 /////////////////////////////////////
MVVGA long WINAPI MV_GetCardNumber();
/*******************************************************************************************/
/* 描述 : 创建/释放 MVVGA捕获设备 */
/* Description: "MVVGA" */
/* Index : 以0为下标的卡号, 最大支持一机4卡 */
/* hCap : 由Cap_Create()创建的MVVGA设备句柄 */
/* 返回值 : 返回设备的句柄, 下面的函数中对该设备的操作都需要该设备句柄. */
MVVGA HANDLE WINAPI Cap_Create( char *Description, ULONG Index );
MVVGA VOID WINAPI Cap_Destroy( HANDLE hCap );
/*******************************************************************************************/
/* 描述 : 运行/停止设备, 开始捕获图像数据, 如果希望用消息方式来获得图像数据则hWnd参数*/
/* 不为NULL, 是接收VGA_IMAGEDATA消息的窗口句柄, 该消息的WPARAM参数为图像缓冲指*/
/* 针, LPARAM参数为图像缓冲的字节大小. */
/* 强烈建议使用回调方式来获得图像数据, 而将该hWnd置为NULL; 消息方式获得图像数 */
/* 据是一种辅助手段. 当你的处理时间大于MVVGA设备回调时间时消息方式才是最有效的*/
/* hCap : 要运行的MVVGA设备句柄 */
/* hWnd : 接收VGA_IMAGEDATA消息的窗口句柄, 一般设置为NULL, 不使能消息方式. */
/* 返回值 : TRUE成功; FALSE失败 */
MVVGA BOOL WINAPI Cap_Start( HANDLE hCap );
MVVGA VOID WINAPI Cap_Stop( HANDLE hCap );
/*******************************************************************************************/
/* 描述 : 设置MVVGA捕获设备的图像数据的用户回调函数,当每一桢图像到达时该回调被调用. */
/* 回调函数可在任意时刻被设置,一旦设置即被生效. 要注意的是回调函数是用户写的代*/
/* 码被嵌入到系统中, 由中断驱动的,所以要尽可能的精悍, 尽量不要超过一帧的时间; */
/* 否则将严重拉慢系统. 如果采集回调不能满足上面的时间要求你可用消息方式 */
/* hCap : 已经创建的MVVGA设备句柄 */
/* pCall : 设备的用户回调函数,回调函数的原型在COMM.h中 */
/* pContext : 传入用户回调函数中的用户定义的上下文指针 */
/* 返回值 : 无 */
MVVGA VOID WINAPI Cap_SetCallBack( HANDLE hCap, PUSERCALL pCall, PVOID pContext );
/*******************************************************************************************/
/* 描述 : 设置输出高和宽, 得到输出高和宽用Cap_GetPropery来完成 */
/* High, Width: 输出图像高, 宽 */
/* hCap : 已经创建的MVVGA设备句柄 */
/* 返回值 : TRUE成功; FALSE失败; */
MVVGA BOOL WINAPI Cap_SetOutSize( HANDLE hCap, ULONG High, ULONG Width );
/*******************************************************************************************/
/* 描述 : 设置/得到板卡和输入信号/缩放/图像R/G/B分量进行调节控制属性 */
/* hCap : 已经创建的MVVGA设备句柄 */
/* Propery : 控制属性的类型; 看COMM.h */
/* Val : 设置该类型参数的值 */
/* Set返回值 : TRUE成功; FALSE失败; */
/* Get返回值 : 返回该类型参数的值 */
MVVGA BOOL WINAPI Cap_SetPropery( HANDLE hCap, VGAPROPERY Propery, ULONG Val );
MVVGA LONG WINAPI Cap_GetPropery( HANDLE hCap, VGAPROPERY Propery );
MVVGA LONG WINAPI Cap_GetProperyRange( HANDLE hCap, VGAPROPERY Propery,PLONG pMin,PLONG pMax,PLONG pDefault);
/*******************************************************************************************/
// 描述 : 弹出设备的图像输出控制调节对话框, 方便编程 */
// hCap : 已经创建的MVVGA设备句柄 */
// 返回值 : TRUE成功; FALSE失败 */
MVVGA BOOL WINAPI Cap_ShowOutputControl( HANDLE hCap );
/*******************************************************************************************/
/* 描述 : 手动同步方式得到一帧图像的数据, 直到得到图像后该函数才返回 */
/* hCap : 已经创建的MVVGA设备句柄 */
/* pBuf : 你传入的缓冲区指针; 如果为NULL, 则在该函数返回时得到的是内部缓冲区的指针 */
/* Len : 输入时是你传入的缓冲区的大小, 如果该长度小于当前图像的长度则, 则在该函数返 */
/* 回时得到的是内部缓冲区的指针. */
/* 返回值 : 返回你传入的缓冲区指针, 或内部的内部缓冲区指针, 或出错为NULL; */
/* *Len返回为实际的图像的大小. */
MVVGA PVOID WINAPI Cap_GetOutImage( HANDLE hCap, PUCHAR pBuf, ULONG* Len );
MVVGA PVOID WINAPI Cap_GetSignalImage( HANDLE hCap, PULONG pHigh, PULONG pWidth, PULONG pColor );
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////// MVVGA 显 示 部 件 //////////////////////////////////////
/*******************************************************************************************/
/* 描述 : 创建MVVGA的显示部件. 可以创建任意个该部件, 创建的显示部件分为Show和Draw两种,*/
/* Show方式只能显示不能在图像上叠加/OSD/重画, Draw方式能显示能在图像上叠加/OSD/*/
/* 重画. 每一种显示都可进行按照不同的缩放质量缩放. */
/* hWnd : 待显示的窗口句柄 */
/* High,Width: 输入的图像缓冲的原始高度, 宽度 */
/* nColor : 像素的位数(bits) */
/* pDrawCall : 用户重画的回调函数, 任选的可为NULL, 如果非NULL则在显示之前调用该回调, 回调中*/
/* 给你了一个HDC, 你可用它来重画希望的点/线/弧/圆/字串 */
/* pContext : 回调函数的参数, 任选的可为NULL, 在回调发生时传入用户回调 */
/* 返回值 : 返回创建的显示部件的句柄 */
MVVGA HANDLE WINAPI Disp_Create( HWND hWnd, ULONG High, ULONG Width, ULONG nColor,
USERDRAW pDrawCall, PVOID pContext );
MVVGA VOID WINAPI Disp_Destroy( HANDLE hShow ); // 释放MVVGA的显示部件
/*******************************************************************************************/
/* 描述 : 直接显示Show函数, 将pImage中的图像数据直接从左上角指定的位置显示, 无缩放 */
/* hShow : 显示部件句柄 */
/* pImage : 图像数据指针 */
/* Top, Left: 显示位置的左上方位置 */
MVVGA VOID WINAPI Disp_ShowDirect( HANDLE hShow, PVOID pImage, int Top, int Left );
/*******************************************************************************************/
/* 描述 : 直接显示Draw函数, 将pImage的图像数据直接从左上角指定的位置显示, 无缩放可叠加 */
/* hShow : 显示部件句柄 */
/* pImage : 图像数据指针 */
/* Top, Left: 显示位置的左上方位置 */
MVVGA VOID WINAPI Disp_DrawDirect( HANDLE hShow, int Top, int Left );
/*******************************************************************************************/
/* 描述 : 使用Draw或Show的缩放版函数时控制缩放质量的,注意越好的质量越暂用CPU */
/* hShow : 显示部件句柄 */
/* Quality : 显示质量,有四级显示质量: {0, 1, 2, 3} */
MVVGA VOID WINAPI Disp_ZoomQuality( HANDLE hShow, ULONG Quality );
/*******************************************************************************************/
/* 描述 : 缩放版的显示Show函数, 不可叠加 */
/* hShow : 显示部件句柄 */
/* pImage : 图像数据指针 */
/* Top, Left : 显示位置的左上方位置 */
/* High,Width: 要缩放显示的高度, 宽度 */
MVVGA VOID WINAPI Disp_ShowZoom( HANDLE hShow, PVOID pImage, int Top, int Left, int High,
int Width );
/*******************************************************************************************/
/* 描述 : 缩放版的显示Draw函数, 可叠加 */
/* hShow : 显示部件句柄 */
/* pImage : 图像数据指针 */
/* Top, Left : 显示位置的左上方位置 */
/* High,Width: 要缩放显示的高度, 宽度 */
MVVGA VOID WINAPI Disp_DrawZoom( HANDLE hShow, int Top, int Left, int High, int Width );
/*******************************************************************************************/
/* 描述 : 得到显示部件的显示表面的地址, 一般用Draw显示时, 在显示之前需要用户自己象该空*/
/* 间填充显示数据, 用该函数得到显示表面的地址然后用Disp_HelpDrawFill来填充它 */
/* hShow : 显示部件句柄 */
/* pLength : 调用返回时返回显示表面缓冲区的长度 */
/* bShow : 希望得到Draw方式还是Show方式的显示表面缓冲区                */
/* 返回值 : 返回显示表面缓冲区指针 */
MVVGA PVOID WINAPI Disp_HelpBuffer( HANDLE hShow, PULONG pLength, BOOL bShow );
/*******************************************************************************************/
/* 描述 : 帮助函数, 帮助象显示表面缓冲区填充要显示的数据,内部实际为memcpy */
/* hShow : 显示句柄 */
/* pImage : 显示内容 */
MVVGA VOID WINAPI Disp_HelpDrawFill( HANDLE hShow, PVOID pImage );
/*******************************************************************************************/
// 描述 : 帮助函数, 在使用Draw时可以叠加字符串,用该帮助函数设置显示时字体的颜色    */
// hShow : 显示句柄 */
// R/G/B : R分量/G分量/B分量 */
MVVGA VOID WINAPI Disp_HelpDrawTextColor( HANDLE hShow, UCHAR R, UCHAR G, UCHAR B );
/*******************************************************************************************/
/* 描述 : 帮助函数, 在使用Draw时可以叠加字符串,用该帮助函数设置显示时字体格式, 该函数 */
/* 被调用时将弹出Windows字体选择对话框                    */
/* hShow : 显示句柄 */
MVVGA VOID WINAPI Disp_HelpDrawTextFormat( HANDLE hShow );
/*******************************************************************************************/
/* 描述 : 帮助函数, 在使用Draw时可以叠加点/线/弧/圆/字串,用该帮助函数设置画线的宽度/ */
/* 样式和颜色                                  */
/* hShow : 显示句柄 */
/* Style : 画笔风格 */
/* Width : 画笔宽度 */
/* R/G/B : R分量/G分量/B分量 */
MVVGA VOID WINAPI Disp_HelpDrawPen( HANDLE hShow, PEN_STYLE Style, int Width, UCHAR R,
UCHAR G, UCHAR B );
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////// MVVGA 文 件 部 件 //////////////////////////////////////
/*******************************************************************************************/
/* 描述 : 创建文件部件,可创建任意多个.用来将图像存为Raw/JPG/BMP文件         */
/* FileName : 包含路径的文件名字串                            */
/* High,Width: 要存图像的高和宽 */
/* nColor : 要存图像的像素位宽32/24/16/8                   */
/* bFlip : 存储时是否上下翻转,注意Windows中BMP图像在显示和存放时是上下颠倒的     */
/* bColor  : 存储为JPG文件时是否将颜色去掉                        */
/* Quality : 存储为JPG文件时的压缩质量1- 100                      */
/* 返回值 : 返回创建的文件部件句柄 */
MVVGA HANDLE WINAPI File_Create( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor,
BOOL bFlip, BOOL bColor, ULONG Quality );
MVVGA VOID WINAPI File_Destroy( HANDLE hFile ); // 释放创建的文件部件
/*******************************************************************************************/
/* 描述 : 写为Raw/Bmp/Jpg文件                             */
/* hFile : 文件部件句柄 */
/* pData   : 要存图像的缓冲区指针 */
/* nImage : pData中存在几幅图像                           */
MVVGA VOID WINAPI File_WriteRaw( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为文件Raw
MVVGA VOID WINAPI File_WriteBmp( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为Bmp文件
MVVGA VOID WINAPI File_WriteJpg( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为Jpg文件
MVVGA VOID WINAPI VGA_ToBmp( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor, PUCHAR pData, BOOL bFlip );
MVVGA VOID WINAPI VGA_ToJpeg( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor, PUCHAR pData, BOOL bFlip, BOOL bColor, ULONG Quality );
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// MVVGA AVI 文 件 部 件 ////////////////////////////////////
/*******************************************************************************************/
/* 描述 : 创建AVI文件部件,可选择压缩或不压缩,可创建任意多个.可将创建的监控部件句柄 */
/* 用Cap_SetPropery(hCap,DEV_AVI, (ULONG)hAvi)来嵌入到设备中, 强烈不建议这样做 */
/* 但如果你能保证AVIStream_Write占用的时间小于设备桢回调的时间(要压缩, 且CPU够)*/
/* 强大,或用Raid双速系统)用迁入的方法将是首选的方法 */
/* bUpDown : 存储时是否上下翻转                             */
/* High,Width: 要存图像的高和宽 */
/* nColor : 要存图像的像素位宽32/24/16/8                   */
/* 返回值 : 返回创建的文件部件句柄 */
MVVGA HANDLE WINAPI AVIStream_Create( BOOL bUpDown, ULONG High, ULONG Width, ULONG nColor );
// 注意: 在调用AVIStream_Destroy之前为保险要用Cap_SetPropery( hCap, DEV_AVI, NULL );
MVVGA VOID WINAPI AVIStream_Destroy( HANDLE hAvi ); // 释放创建的文件部件
/*******************************************************************************************/
/* 描述 : 开始写AVI文件,在这之后的每一次对AVIStream_Write的调用都将向AVI文件中写入一 */
/* 桢图像                            */
/* hAvi : Avi文件部件句柄                            */
/* FileName : 包含路径的文件名字串                            */
/* dwRate : 写Avi文件的桢速率                           */
/* 返回值 : TRUE成功; FALSE失败 */
MVVGA BOOL WINAPI AVIStream_StartAviStream( HANDLE hAvi, char* FileName, ULONG dwRate );
MVVGA VOID WINAPI AVIStream_StopAviStream( HANDLE hAvi ); // 停止写AVI文件
/*******************************************************************************************/
/* 描述 : 开始写AVI文件之前可以用该函数选择是否使用压缩器,选择的压缩器是今后默认的, */
/* 直到用该函数又进行其它的选择.                      */
/* hAvi : Avi文件部件句柄                            */
MVVGA VOID WINAPI AVIStream_Select( HANDLE hAvi );
/*******************************************************************************************/
/* 描述 : 写AVI文件的主工作函数,它将你按照之前设置的方式工作,每调一次写入一桢图像  */
/* 如果你在创建hAvi之后将hAvi嵌入到MVVGA设备部件中则你不需调用该函数      */
/* hAvi : Avi文件部件句柄                            */
/* pData : 图像数据指针                              */
MVVGA BOOL WINAPI AVIStream_Write( HANDLE hAvi, PUCHAR pData );
/////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// MVVGA 很 少 使 用 的 文 件 部 件 //////////////////////////////
/*******************************************************************************************/
MVVGA HANDLE WINAPI RawStream_Create();
MVVGA VOID WINAPI RawStream_Destroy( HANDLE hRaw );
MVVGA VOID WINAPI RawStream_Stop( HANDLE hRaw );
MVVGA BOOL WINAPI RawStream_New( HANDLE hRaw, ULONG High, ULONG Width, ULONG nColor,
char* FileName );
MVVGA ULONG WINAPI RawStream_Open( HANDLE hRaw, PULONG High, PULONG Width, PULONG nColor,
char* FileName );
MVVGA ULONG WINAPI RawStream_Read( HANDLE hRaw, ULONG ImageIndex, PUCHAR pData );
MVVGA VOID WINAPI RawStream_Write( HANDLE hRaw, PUCHAR pData );
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////// MVVGA 缩 放 部 件 //////////////////////////////////////
/*******************************************************************************************/
/* 描述 : 创建MVVGA的缩放部件. 可以创建任意个该部件, 可进行按照不同的缩放质量缩放   */
/* nColor : 图像的像素位宽                 */
/* High,Width: 图像原始的高度宽度               */
/* DecsHigh : 图像被缩放后高度                */
/* DecsWidth : 图像被缩放后宽度                */
/* Quality : 缩放的质量,有四级显示质量: {0, 1, 2, 3} */
/* 返回值 : 返回创建的缩放部件句柄 */
MVVGA HANDLE WINAPI Stretch_Create( ULONG nColor, ULONG High, ULONG Width, ULONG DecsHigh,
ULONG DecsWidth, ULONG Quality );
MVVGA VOID WINAPI Stretch_Destroy( HANDLE hStretch ); // 释放创建的缩放部件
/*******************************************************************************************/
/* 描述 : 快速的2x2抽点抽行法缩放,图像高宽为原来的一半                */
/* hStretch : 缩放部件句柄                             */
/* pIn   : 输入图像缓冲区指针               */
/* pOut  : 输出图像缓冲区指针               */
MVVGA VOID WINAPI Stretch_Half( HANDLE hStretch, PUCHAR pIn, PUCHAR pOut );
/*******************************************************************************************/
/* 描述 : 快速的2x2抽点抽行法缩放,图像高宽为原来的一半                */
/* hStretch : 缩放部件句柄                             */
/* pIn   : 输入图像缓冲区指针               */
/* 返回值 : 返回被缩放的图像缓冲区指针  */
MVVGA PVOID WINAPI Stretch_Do( HANDLE hStretch, PUCHAR pIn );
//目前支持RGB24和RGB32
MVVGA VOID WINAPI Rotate_Hflip(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width);
MVVGA VOID WINAPI Rotate_Ang90(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width);
MVVGA VOID WINAPI Rotate_Ang180(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width);
MVVGA VOID WINAPI Rotate_Ang270(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width);
#endif //__MVVGA_H__