110,545
社区成员
发帖
与我相关
我的任务
分享
//回调
typedef bool (CALLBACK *DataCallBack)(int index, int type, BYTE *pData, int len, int param1, int param2);
//设置回调
DLL_EXPORT int WAPA_IPC_SetDataCallBack(DataCallBack fData);
//连接摄像机
DLL_EXPORT int WAPA_IPC_Login(char *sCameraIp, int dataFormat);
//初始化解码器
DLL_EXPORT int WAPA_IPC_InitDec(int index, int width, int height, int encodeFormat, int dataFormat);
//解码
DLL_EXPORT int WAPA_IPC_Dec(int index, unsigned char *istream, int istream_size, unsigned char *ostream);
//拍照并保存
DLL_EXPORT int WAPA_IPC_OnPhoto(int index, unsigned char* pImageBuf, int width, int height, int dataFormat, char* fileName = NULL);
publlic class WAPAMethods
{
//回调
public unsafe delegate bool DataCallBack(int index, int mode, byte* data, int len, int w, int h);
/// <summary>
/// 设置事件回调函数
/// </summary>
/// <param name="fEvent"></param>
/// <returns></returns>
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_SetEventCallBack", CallingConvention = CallingConvention.Cdecl)]
public static extern int WAPA_IPC_SetEventCallBack(EventCallBack fEvent);
/// <summary>
/// 连接到录像机
/// </summary>
/// <param name="sCameraIp">IP地址</param>
/// <param name="dataFormat">0:解码前数据;1:YUYV格式数据;2:RGB格式数据</param>
/// <returns></returns>
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_Login", CallingConvention = CallingConvention.Cdecl)]
public static extern int WAPA_IPC_Login(string sCameraIp, int dataFormat);
/// <summary>
/// 初始化解码器
/// </summary>
/// <param name="index"></param>
/// <param name="width">图像宽</param>
/// <param name="height">图像高</param>
/// <param name="encodeFormat">压缩数据格式 264:H.264;265:MPEG4</param>
/// <param name="dataFormat">输出的数据格式 1:YUYV;2:RGB</param>
/// <returns></returns>
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_InitDec", CallingConvention = CallingConvention.Cdecl)]
public static extern int WAPA_IPC_InitDec(int index, int width, int height, int encodeFormat, int dataFormat);
/// <summary>
/// 解码
/// </summary>
/// <param name="index">解码器索引号</param>
/// <param name="istream">编码数据</param>
/// <param name="istream_size">编码的数据大小</param>
/// <param name="ostream">解码后的数据</param>
/// <returns></returns>
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_Dec", CallingConvention = CallingConvention.Cdecl)]
//DLL_EXPORT int WAPA_IPC_Dec(int index, unsigned char *istream, int istream_size, unsigned char *ostream);
public static extern unsafe int WAPA_IPC_Dec(int index, byte* istream, int istream_size, byte* ostream);
//拍照. pImageBuf:返回的数据. dataFormat:YUYV,RGB
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_OnPhoto", CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe int WAPA_IPC_OnPhoto(int index,byte* pImageBuf, int width, int height, int dataFormat, string fileName = null);
}
public partial class Form1 : Form
{
private WAPAMethods.DataCallBack _dataCallBack;
private unsafe byte* frameBuf;
private unsafe void Form1_Load(object sender, EventArgs e)
{
_dataCallBack = DataOnReceived;
WAPAMethods.WAPA_IPC_SetDataCallBack(_dataCallBack);
Reconnected();
}
public void Reconnected()
{
//连接摄像机
_cameraIndex = WAPAMethods.WAPA_IPC_Login(_ip,2);
if(_cameraIndex==206)return;
//连接成功后初始化解码器
WAPAMethods.WAPA_IPC_InitDec(_cameraIndex, 1280, 960, 264, 2);
}
private unsafe bool DataOnReceived(int index, int mode, byte* data, int len, int w, int h)
{
//解码
var ret = WAPAMethods.WAPA_IPC_Dec(index,data, len, frameBuf);
//拍照
ret = WAPAMethods.WAPA_IPC_OnPhoto(index, frameBuf, w, h, 2, null);
return true;
}
}