社区
CUDA on Windows XP
帖子详情
可以将YUV数据直接显示到屏幕上?
wz0276
2012-02-21 05:04:53
从文件读YUV数据,传送到显卡里,显卡不转换成RGB,而是直接将YUV数据传送到显示器上进行显示。
请问能这么做,如果能的话,需要什么样的显卡和什么样的显示器才能支持?
求专业人士详细讲解。@.@。
即。能或不能,如果能,怎么做。。。
...全文
466
回复
打赏
收藏
可以将YUV数据直接显示到屏幕上?
从文件读YUV数据,传送到显卡里,显卡不转换成RGB,而是直接将YUV数据传送到显示器上进行显示。 请问能这么做,如果能的话,需要什么样的显卡和什么样的显示器才能支持? 求专业人士详细讲解。@.@。 即。能或不能,如果能,怎么做。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
YUV
iew:具有高级分析工具集的免费和开源跨平台
YUV
Viewer
宇观
YUV
iew是基于QT的跨平台
YUV
播放器,具有高级分析工具集。 建置状态 描述
YUV
iew的核心是
YUV
播放器和分析工具。 但是,它可以做的更多: 视频中的简单导航/缩放 使用各种子采样和位单位支持各种
YUV
格式 支持原始RGB文件,图像文件和图像序列 通过内部可视化(如预测模式和运动矢量等)
直接
对原始h.265 / HEVC比特流进行解码 用于参考软件解码器HM和JEM的可视化界面 支持使用FFmpeg打开几乎所有文件 使用并排和比较视图进行图像比较 计算和
显示
差异(在
YUV
或RGB色彩空间中) 保存和加载播放列表 用统计
数据
覆盖视频 ... 还有很多 这些功能的更多详细信息可以在或在。
YUV
iew的
屏幕
截图: 下载 您可以从下载适用于Windows和MAC的预编译二进制文件,这些文件均已在travis CI上进行了编译。 在发布页面上,您可以找到: Windows
海康视频卡动态库
using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; namespace DS40XXSDK { #region enum ///
/// 板卡类型 ///
public enum BOARD_TYPE_DS : uint { DS400XM = 0, //M卡 DS400XH = 1, //H卡 DS4004HC = 2, //4004HC DS4008HC = 3, //4008HC DS4016HC = 4, //4016HC DS4001HF = 5, //4001HF DS4004HF = 6, //4004HF DS4002MD = 7, //4002MD DS4004MD = 8, //4004MD DS4016HCS = 9, //4016HCS DS4002HT = 10, //4002HT DS4004HT = 11, //4004HT DS4008HT = 12, //4008HT DS4004HC_PLUS = 13, //4004HC+ DS4008HC_PLUS = 14, //4008HC+ DS4016HC_PLUS = 15, //4016HC+ DS4008HF = 16, //4008HF DS4008MD = 17, //4008MD DS4008HS = 18, //4008HS DS4016HS = 19, //4016HS INVALID_BOARD_TYPE = 0xffffffff, } ///
/// 视频预览格式 ///
public enum TypeVideoFormat { vdfRGB8A_233 = 0x00000001, vdfRGB8R_332 = 0x00000002, vdfRGB15Alpha = 0x00000004, ///
/// 16位RGB视频压缩格式 ///
vdfRGB16 = 0x00000008, ///
/// 24位RGB视频压缩格式 ///
vdfRGB24 = 0x00000010, vdfRGB24Alpha = 0x00000020, vdf
YUV
420Planar = 0x00000040, ///
///
YUV
422视频压缩格式 ///
vdf
YUV
422Planar = 0x00000080, vdf
YUV
411Planar = 0x00000100, vdf
YUV
420Interspersed = 0x00000200, vdf
YUV
422Interspersed = 0x00000400, vdf
YUV
411Interspersed = 0x00000800, vdf
YUV
422Sequence = 0x00001000, /* U0, Y0, V0, Y1: For VO overlay */ vdf
YUV
422SequenceAlpha = 0x00002000, /* U0, Y0, V0, Y1: For VO overlay, with low bit for alpha blending */ vdfMono = 0x00004000, /* 8 bit monochrome */ vdf
YUV
444Planar = 0x00008000, }; ///
/// 视频制式 ///
public enum VideoStandard_t : uint { ///
/// 无视频信号 ///
StandardNone = 0x80000000, ///
/// NTSC制式 ///
StandardNTSC = 0x00000001, ///
/// PAL制式 ///
StandardPAL = 0x00000002, StandardSECAM = 0x00000004, } ; ///
/// 编码图像分辨率 ///
public enum PictureFormat_t { ENC_CIF_FORMAT = 0, ENC_QCIF_FORMAT = 1, ENC_2CIF_FORMAT = 2, ENC_4CIF_FORMAT = 3, ENC_QQCIF_FORMAT = 4, ENC_CIFQCIF_FORMAT = 5, ENC_CIFQQCIF_FORMAT = 6, ENC_DCIF_FORMAT = 7 }; ///
/// 码流控制方式 ///
public enum BitrateControlType_t { ///
/// 变码率 ///
brCBR = 0, ///
/// 恒定码率 ///
brVBR = 1, }; public enum FrameType_t { PktError = 0, PktIFrames = 0x0001, PktPFrames = 0x0002, PktBBPFrames = 0x0004, PktAudioFrames = 0x0008, PktMotionDetection = 0x00010, PktDspStatus = 0x00020, PktOrigImage = 0x00040, PktSysHeader = 0x00080, PktBPFrames = 0x00100, PktSFrames = 0x00200, PktSubIFrames = 0x00400, PktSubPFrames = 0x00800, PktSubBBPFrames = 0x01000, PktSubSysHeader = 0x02000 }; #endregion #region struct ///
/// 板卡信息结构体 ///
public struct DS_BOARD_DETAIL { ///
/// 板卡类型 ///
BOARD_TYPE_DS type; ///
/// 序列号 /// BYTE sn[16]; ///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] byte[] sn; ///
/// 板卡包含的DSP个数 ///
uint dspCount; ///
/// 板卡上第一个DSP的索引 ///
uint firstDspIndex; ///
/// 板卡包含的编码通道个数 ///
uint encodeChannelCount; ///
/// 板卡上第一个编码通道的索引 ///
uint firstEncodeChannelIndex; ///
/// 板卡包含的解码通道个数 ///
uint decodeChannelCount; ///
/// 板卡上第一个解码通道的索引 ///
uint firstDecodeChannelIndex; ///
/// 板卡包含的视频输出通道个数 ///
uint displayChannelCount; ///
/// 板卡上第一个视频输出通道的索引 ///
uint firstDisplayChannelIndex; uint reserved1; uint reserved2; uint reserved3; ///
/// 硬件版本,format:major.minor.build,major:bit 16-19,minor: bit 8-15,build: bit 0-7 ///
uint version; } ///
/// DSP信息结构体 ///
public struct DSP_DETAIL { ///
/// 此DSP所包含的编码通道个数 ///
uint encodeChannelCount; ///
/// 此DSP上第一个编码通道在所有编码通道中的索引 ///
uint firstEncodeChannelIndex; ///
/// 此DSP所包含的解码通道个数 ///
uint decodeChannelCount; ///
/// 此DSP上第一个解码通道在所有解码通道中的索引 ///
uint firstDecodeChannelIndex; ///
/// 此DSP包含的
显示
通道个数 ///
uint displayChannelCount; ///
/// 此DSP上第一个
显示
通道在所有
显示
通道中的索引 ///
uint firstDisplayChannelIndex; uint reserved1; uint reserved2; uint reserved3; uint reserved4; } ///
/// 特殊功能结构体 ///
public struct CHANNEL_CAPABILITY { ///
/// 音频预览 ///
byte[] bAudioPreview; ///
/// 报警信号 ///
byte[] bAlarmIO; ///
/// 看家狗 ///
byte[] bWatchDog; } ///
/// 版本信息 ///
public struct PVERSION_INFO { ///
/// DSP版本号,DSP的BUILD号,用于软件升级时标明该版本的最后修改时间 ///
UInt64 DspVersion, DspBuildNum; ///
/// Driver版本号,Driver的BUILD号,用于软件升级时标明该版本的最后修改时间 ///
UInt64 DriverVersion, DriverBuildNum; ///
/// SDK版本号,SDK的BUILD号,用于软件升级时标明该版本的最后修改时间 ///
UInt64 SDKVersion, SDKBuildNum; } ///
///
显示
窗口内的矩形区域 ///
//[StructLayout(LayoutKind. //public struct RECT //{ // public Int32 left; // public Int32 top; // public Int32 right; // public Int32 bottom; //} ///
/// 帧统计信息结构体 ///
public struct PFRAMES_STATISTICS { ///
/// 视频帧 ///
UInt64 VideoFrames; ///
/// 音频帧 ///
UInt64 AudioFrames; ///
/// 丢失帧 ///
UInt64 FramesLost; ///
/// 丢失的码流(字节) ///
UInt64 QueueOverflow; ///
/// 当前的帧率(bps) ///
UInt64 CurBps; } ///
/// 版本信息结构体 ///
public struct PHW_VERSION { ///
/// DSP程序的版本号和Build号 ///
UInt64 DspVersion, DspBuildNum; ///
/// 驱动程序的版本号和Build号 ///
UInt64 DriverVersion, DriverBuildNum; ///
/// SDK 的版本号和Build号 ///
UInt64 SDKVersion, SDKBuildNum; } ///
/// 系统时间 ///
public struct SYSTEMTIME { ushort wYear; ushort wMonth; ushort wDayOfWeek; ushort wDay; ushort wHour; ushort wMinute; ushort wSecond; ushort wMilliseconds; } #endregion #region delegate ///
/// 原始图像流设置 /// /// typedef void (*IMAGE_STREAM_CALLBACK)(UINT channelNumber,void *context); ///
///
通道号 ///
设备上下文 public delegate void IMAGE_STREAM_CALLBACK(uint channelNumber, IntPtr context); ///
/// 编码
数据
流
直接
读取回调函数 /// /// typedef int (*STREAM_DIRECT_READ_CALLBACK)(UInt64 channelNumber,void *DataBuf,DWORD Length,int FrameType,void *context); ///
///
通道号 ///
缓冲区地址 ///
缓冲区长度 ///
缓冲区
数据
帧类型 ///
设备上下文 ///
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] //public delegate int STREAM_DIRECT_READ_CALLBACK(uint channelNumber, byte[] DataBuf, uint Length, FrameType_t FrameType, IntPtr context); public delegate int STREAM_DIRECT_READ_CALLBACK(int channelNumber, IntPtr DataBuf, int Length, FrameType_t FrameType, IntPtr context); //public unsafe delegate int STREAM_DIRECT_READ_CALLBACK(uint channelNumber, void * DataBuf, uint Length, int FrameType, IntPtr context); ///
///
直接
读取码流回调函数 /// /// typedef int (*STREAM_READ_CALLBACK)(UInt64 channelNumber, void *context) ///
///
通道号 ///
设备上下文 ///
public delegate int STREAM_READ_CALLBACK(UInt64 channelNumber, IntPtr context); ///
/// 移动侦测结果回调函数 /// /// typedef void (*MOTION_DETECTION_CALLBACK)(UInt64 channelNumber, BOOL bMotionDetected,void *context) ///
///
通道号 ///
/// 移动侦测发生标志,如果当前通道所设置的移动侦测 /// 区域内产生了移动侦测,则被置为True;如果当前通道所设置的移动侦测区域内自上 /// 一次产生移动侦测后delay秒内没有发生移动侦测,则被置为False。 /// ///
设备上下文 public delegate void MOTION_DETECTION_CALLBACK(UInt64 channelNumber, bool bMotionDetected, IntPtr context); ///
/// 画图回调函数 /// /// #define DRAWFUN(x) void (CALLBACK* x)(Int32 nPort,HDC hDc,Int32 nUser) ///
///
通道号 ///
offscreen表面设备上下文,相当于
显示
窗口中的DC ///
用户
数据
public delegate void DrawFun(Int32 nPort, IntPtr HDC, Int32 nUser); ///
/// 解码回调函数 /// /// typedef void (*DECODER_VIDEO_CAPTURE_CALLBACK)(UINT nChannelNumber, void *DataBuf,UINT width,UINT height,UINT nFrameNum,UINT nFrameTime, SYSTEMTIME *pFrameAbsoluteTime,void *context) ///
///
解码通道句柄 ///
缓冲区地址 ///
图像宽度 ///
图像高度 ///
捕获的当前帧的序号 ///
捕获的当前帧的相对时间,单位:毫秒 ///
捕获的当前帧的绝对时间 ///
设备上下文 public delegate void DECODER_VIDEO_CAPTURE_CALLBACK(uint nChannelNumber, IntPtr DataBuf, uint width, uint height, uint nFrameNum, uint nFrameTime, SYSTEMTIME pFrameAbsoluteTime, IntPtr context); ///
/// 创建索引完成回调函数 /// /// typedef void (*FILE_REF_DONE_CALLBACK)(UINT nChannel,UINT nSize) ///
///
通道号 ///
索引大小(暂时无效,以后可以增加索引导出、导入功能) public delegate void FILE_REF_DONE_CALLBACK(uint nChannel, uint nSize); #endregion ///
/// DS40xxSDK.dll ///
public class HikVisionSDK { ///
/// 状态 ///
public static readonly List
state = new List
(new string[]{ "", "正在打开", "音频信号丢失", "视频信号丢失", "有物体移动", //0-4 "自动分割录像", "开始录像", "停止录像", "启动声音监听", "停止声音监听", //5-9 "启动视频预览", "停止视频预览", "启动录像", "停止录像", "启动视频报警", //10-14 "关闭视频报警", "启动音频报警", "停止音频报警", "启动移动侦测", "停止移动侦测", //15-19 "启动视频遮挡", "关闭视频遮挡", "开始
屏幕
输出", "停止
屏幕
输出", "启动视频LOGO", //20-24 "停止视频LOGO", "开始视频OSD", "停止视频OSD", "切换为黑白视频", "切换为彩色视频", //25-29 "切换为黑屏
显示
", "切换为白屏
显示
", "视频色彩复位", "启动全屏
显示
", "采集卡已经加载", //30-34 "采集卡已经卸截", "视频服务启动成功", "视频服务已停止", "静音", "音量恢复", //35-39 "云台控制命令发送", "系统出现未知错误", "录像文件大小", "配置端口号成功", "连接服务端成功", //40-44 "正在连接", "开始接收图象", "异常退出", "接收完毕,退出", "无法联系服务端", //45-49 "服务端拒绝访问", "无效", "停止客户端连接", "图像抓取成功", "初始化服务端网络连接成功", //50-54 "视频服务启动失败", "退出全屏预览", "", "", "" //55-59 }); //可以用新版函数替代功能或者无效的API //GetTotalChannels:可用GetEncodeChannelCount替代 //GetTotalDSPs:可用GetDspCount 替代 //SetupDateTime:4.0版本起无效 //HW_GetChannelNum:无效,请使用GetBoardDetail //HW_GetDeviceSerialNo:无效,请使用GetBoardDetail //HW_SetVideoOutStandard:无效,请使用SetDisplayStandard或SetDefaultVideoStandard //HW_SetDspDeadlockMsg:无效 //HW_ResetDsp:无效 //HW_SetDisplayPara:DISPLAY_PARA结构中bToVideoOut无效,MD卡模拟视频输出功能 //已经整合到视频矩阵之中。 #region 流类型宏定义 ///
/// 视频流 /// #define STREAM_TYPE_VIDEO ///
private const int STREAM_TYPE_VIDEO = 1; ///
/// 音频流 /// #define STREAM_TYPE_AUDIO ///
private const int STREAM_TYPE_AUDIO = 2; ///
/// 音视频复合流 /// #define STREAM_TYPE_AVSYNC ///
private const int STREAM_TYPE_AVSYNC = 3; #endregion #region 1.板卡初始化及卸载 ///
/// 1.1初始化DSP InitDSPs /// 说 明: 初始化系统中每一块板卡,应在应用软件程序启动时完成。如果返回值为0则表 /// 明初始化失败,可能没有找到相应的DSP软件模块。 /// /// int __stdcall InitDSPs() ///
///
系统内可用的编码通道个数。
[DllImport("DS40xxSDK.dll")] public static extern int InitDSPs(); ///
/// 1.2卸载DSP DeInitDSPs /// 说 明: 关闭每一块板卡上的功能,应在应用软件程序退出时调用。 /// /// int __stdcall DeInitDSPs() ///
///
0
[DllImport("DS40xxSDK.dll")] public static extern int DeInitDSPs(); #endregion #region 2.板卡信息获取 ///
/// 2.1获取系统中板卡的张数GetBoardCount /// 说 明: 获取系统中所有板卡的张数,包含编码卡和解码卡。 /// /// unsigned int __stdcall GetBoardCount() ///
///
系统中板卡的总张数。
[DllImport("DS40xxSDK.dll")] public static extern uint GetBoardCount(); ///
/// 2.2获取系统中DSP的个数GetDspCount /// 说 明: 获取系统中所有板卡的DSP的个数。 /// /// unsigned int __stdcall GetDspCount() ///
///
系统中DSP的总个数
[DllImport("DS40xxSDK.dll")] public static extern uint GetDspCount(); ///
/// GetTotalDSPs:可用GetDspCount 替代 /// 获得实际可用DSP ///
///
[DllImport("DS40xxSDK.dll")] public static extern int GetTotalDSPs(); ///
/// 2.3获取系统中编码通道的个数GetEncodeChannelCount /// 说 明: 获取系统中所有编码卡的编码通道总个数,包含H系列和HC系列编码卡。 /// /// unsigned int __stdcall GetEncodeChannelCount() ///
///
系统中编码通道的个数
[DllImport("DS40xxSDK.dll")] public static extern uint GetEncodeChannelCount(); ///
/// 2.4获取系统中解码通道的个数GetDecodeChannelCount /// 说 明: 获取系统中MD卡的解码通道个数 /// /// unsigned int __stdcall GetDecodeChannelCount() ///
///
[DllImport("DS40xxSDK.dll")] public static extern uint GetDecodeChannelCount(); ///
/// 2.5获取系统中解码
显示
通道的个数GetDisplayChannelCount /// 说 明: 获取系统中MD卡
显示
通道的个数,即模拟视频输出通道的个数 /// /// unsigned int __stdcall GetDisplayChannelCount() ///
///
系统中
显示
通道的个数
[DllImport("DS40xxSDK.dll")] public static extern uint GetDisplayChannelCount(); ///
/// 2.6获取板卡详细信息GetBoardDetail /// 说 明: 获取某张板卡的详细信息 /// /// int __stdcall GetBoardDetail(UINT boardNum,DS_BOARD_DETAIL *pBoardDetail) ///
///
板卡索引 ///
板卡信息 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int GetBoardDetail(uint boardNum, ref DS_BOARD_DETAIL pBoardDetail); ///
/// 2.7获取DSP详细信息GetDspDetail /// 说 明: 获取某个DSP的详细信息 /// /// int __stdcall GetDspDetail(UINT dspNum,DSP_DETAIL *pDspDetail) ///
///
DSP索引 ///
DSP信息 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int GetDspDetail(uint dspNum, ref DSP_DETAIL pDspDetail); ///
/// 2.8获取板卡型号及序列号信息GetBoardInfo /// 说 明: 获取板卡的型号及序列号信息 /// /// int __stdcall GetBoardInfo(HANDLE hChannelHandle, UInt64 *BoardType, UCHAR *SerialNo) ///
///
通道句柄 ///
板卡型号 ///
/// 板卡ID号, 内容为板卡序列号的ASCII的数值,次序为SerialNo[0] 对应最高位, /// SerialNo[11]对应最低位。比如卡号为“40000002345”的值对应为 4,0,0,0,0,1,0,0,2,3,4,5 的整形数组。 /// ///
成功为0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int GetBoardInfo(IntPtr hChannelHandle, UInt64 BoardType, byte[] SerialNo); ///
/// 2.9获取板卡特殊功能信息GetCapability /// 说 明: 获取板卡特殊功能信息 /// /// int __stdcall GetCapability(HANDLE hChannelHandle, CHANNEL_CAPABILITY *Capability) ///
///
通道句柄 ///
特殊功能 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int GetCapability(IntPtr hChannelHandle, CHANNEL_CAPABILITY Capability); ///
/// 2.10获取板卡SDK信息GetSDKVersion /// 说 明: 获取当前所使用的DSP、Driver、SDK版本号 /// /// int __stdcall GetSDKVersion(PVERSION_INFO VersionInfo) ///
///
版本信息 ///
成功返回0;失败返回错误号。
[DllImport("DS40xxSDK.dll")] public static extern int GetSDKVersion(ref PVERSION_INFO VersionInfo); ///
/// 2.11获取板卡SDK及DSP错误报告GetLastErrorNum*,此函数只对H卡有效 /// 说 明: 获取SDK及DSP错误报告。此函数只对H卡有效,用于HC卡上返回0且无效 /// /// int __stdcall GetLastErrorNum(HANDLE hChannelHandle, UInt64 *DspError, UInt64 *SdkError) ///
///
通道句柄 ///
DSP错误 ///
SDK错误 ///
DSP错误信息、SDK错误信息
[DllImport("DS40xxSDK.dll")] public static extern int GetLastErrorNum(IntPtr hChannelHandle, ref int DspError, ref int SdkError); #endregion #region 3.编码卡API #region 3.1通道打开及关闭 ///
/// 3.1.1打开通道ChannelOpen /// 说 明: 打开通道,获取编码通道的操作句柄,与通道相关的操作需使用相对应的句柄。 /// /// HANDLE __stdcall ChannelOpen(int ChannelNum) ///
///
通道号(从0开始) ///
成功返回有效句柄(值可能为0);失败返回0xFFFFFFFF。
[DllImport("DS40xxSDK.dll")] public static extern IntPtr ChannelOpen(int ChannelNum); ///
/// 3.1.2关闭通道ChannelClose /// 说 明: 关闭通道,释放相关资源 /// /// int __stdcall ChannelClose(HANDLE hChannelHandle) ///
///
通道句柄 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int ChannelClose(IntPtr hChannelHandle); #endregion #region 3.2视频预览 #region 3.2.1 Overlay预览模式 // 释 义: overlay预览模式 //Overlay通常被称为重叠页面或者是覆盖层,是一种需要特定的硬件支持的页面,通常 //被用于
显示
实时视频于主页面之上,而不需要Blit操作到主页面或用任何方法改变主页面的 //内容。使用该方式进行预览可以提高预览的画质和降低CPU利用率。 ///
/// 3.2.1.1设置视频预览模式SetPreviewOverlayMode /// 说 明: SDK自3.2版本起在部分显卡中实现了HC卡以overlay方式预览的功能(此功 /// 能不支持与H卡混插的状态下),可以提高预览的画质和降低CPU利用率。当预览画面小 /// 于704*576时,需要调用该函数来启动overlay模式,如不设置则自动切换到offscreen模式 /// 进行预览
显示
,当预览画面大于704*576时,SDK自动切换到overlay模式 /// /// int __stdcall SetPreviewOverlayMode(BOOL bTrue) ///
///
是否设置overlay预览方式,也适用于MD卡 ///
0表示显卡支持板卡的overlay预览方式;其他值表示显卡不支持
[DllImport("DS40xxSDK.dll")] public static extern int SetPreviewOverlayMode(bool bTrue); ///
/// 3.2.1.2设置overlay关键色SetOverlayColorKey /// 注意:需要在StartVideoPreview前调用该函数。 /// 说 明: 板卡在
显示
范围小于704*576时,调用SetPreviewOverlayMode可以开启overlay /// 预览模式,需调用SetOverlayColorKey设置overlay关键色;当
显示
范围大于704*576时, /// 板卡自动切换到overlay预览模式,关键色默认设置为RGB(10,10,10),也可调用 /// SetOverlayColorKey修改关键色。在这两种情况下,都需要将
显示
窗口的底色设置为和关键 /// 色相一致。否则图像将难以
显示
。 /// /// /// int __stdcall SetOverlayColorKey(COLORREF DestColorKey) ///
///
overlay关键色参数(RGB(*,*,*)) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetOverlayColorKey(int DestColorKey); //public static extern int SetOverlayColorKey(Color DestColorKey); ///
/// 3.2.1.3恢复当前丢失的表面RestoreOverlay /// 说 明: 恢复当前丢失的表面,例如:当系统按下CTRL+ALT+DEL时系统的OVERLAY /// 表面会被强制关闭,调用该函数可以恢复OVERLAY表面 /// /// int __stdcall RestoreOverlay() ///
///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int RestoreOverlay(); #endregion #region 3.2.2 开启及停止视频预览 ///
/// 3.2.2.1开启视频预览StartVideoPreview /// 说 明: 启动视频预览,调用SetPreviewOverlayMode后,可进行overlay模式预览,否则, /// 将默认采用offscreen模式预览。当画面大于704*576时,SDK自动切换到overlay预览模式。 /// /// int __stdcall StartVideoPreview(HANDLE hChannelHandle,HWND WndHandle, RECT *rect,BOOLEAN bOverlay, int VideoFormat, int FrameRate) ///
///
通道句柄 ///
显示
窗口句柄 ///
///
显示
窗口内的矩形区域 /// Rect.right 必须为8的倍数 /// Rect.bottom必须为16的倍数 /// ///
是否启用Overlay预览模式 ///
视频预览格式(目前无效) ///
视频预览帧率(PAL:1-25,NTSC:1-30) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int StartVideoPreview(IntPtr hChannelHandle, IntPtr WndHandle, ref Rectangle rect, bool bOverlay, int VideoFormat, int FrameRate); //public static extern int StartVideoPreview(IntPtr hChannelHandle, IntPtr WndHandle, ref RECT rect, bool bOverlay, int VideoFormat, int FrameRate); ///
/// 3.2.2.2停止视频预览StopVideoPreview /// 说 明: 停止视频预览 /// /// int __stdcall StopVideoPreview(HANDLE hChannelHandle) ///
///
通道句柄 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int StopVideoPreview(IntPtr hChannelHandle); #endregion #region 3.2.3 视频参数的设置及获取 ///
/// 3.2.3.1设置视频参数SetVideoPara /// 说 明: 设置视频参数 /// /// int __stdcall SetVideoPara(HANDLE hChannelHandle, int Brightness, int Contrast, int Saturation, int Hue) ///
///
通道句柄 ///
亮度值(0-255) ///
对比度(0-127) ///
饱和度(0-127) ///
色调(0-255) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetVideoPara(IntPtr hChannelHandle, int Brightness, int Contrast, int Saturation, int Hue); ///
/// 3.2.3.2获取视频参数GetVideoPara /// 说 明: 获取视频参数 /// /// int __stdcall GetVideoPara(HANDLE hChannelHandle, VideoStandard_t *VideoStandard, int*Brightness, int *Contrast, int *Saturation, int *Hue) ///
///
通道句柄 ///
视频制式 ///
亮度指针值(0-255) ///
对比度指针值(0-127) ///
饱和度指针值(0-127) ///
色调指针值(0-255) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int GetVideoPara(IntPtr hChannelHandle, VideoStandard_t VideoStandard, out int Brightness, out int Contrast, out int Saturation, out int Hue); #endregion #endregion #region 3.3视频信号设置(制式、状况、输入位置等) ///
/// 3.3.1设置视频制式SetVideoStandard,此函数只对H卡有效 /// 说 明: 设置视频制式,在某一制式的摄像头已经接好的情况下启动系统时可不必调用该 /// 函数,如果没有接摄像头的情况下启动系统然后再接NTSC制式的摄像头则必须调用该函 /// 数,或者中途调换不同制式的摄像头也必须调用该函数。 /// /// int __stdcall SetVideoStandard(HANDLE hChannelHandle, VideoStandard_t VideoStandard) ///
///
通道句柄 ///
视频制式 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetVideoStandard(IntPtr hChannelHandle, VideoStandard_t VideoStandard); ///
/// 3.3.2设置系统默认的视频制式SetDefaultVideoStandard /// 注意:该函数只能在系统初始化(InitDSPs)之前运行,否则无效 /// 说 明: 设置系统默认的视频制式,系统中所有的视频输入通道如果无视频输入或者在系 /// 统启动的时候,通道会按照所设置的系统默认视频制式进行处理。 /// /// int __stdcall SetDefaultVideoStandard(VideoStandard_t VideoStandard) ///
///
视频制式,默认为PAL ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetDefaultVideoStandard(VideoStandard_t VideoStandard); ///
/// 3.3.3设置视频信号灵敏度SetVideoDetectPrecision /// 说 明: 设置视频信号检测的灵敏度。如果视频信号的强度比较弱,或者信号通断的切换 /// 比较频繁,会出现“无视频信号”的提示字样,为了避免提示字样影响图像,可以更改视频 /// 信号检测的灵敏度。灵敏度取值越大,检测精度越低,出现“无视频信号”提示字样的频率 /// 越低。当将value值设置为0xffffffff时,将不会再出现“无视频信号”的提示字样。 /// /// int __stdcall SetVideoDetectPrecision(HANDLE hChannel,unsigned int value) ///
///
通道句柄 ///
灵敏度。取值范围:0-100,默认为20 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetVideoDetectPrecision(IntPtr hChannel, uint value); ///
/// 3.3.4获取视频信号输入情况GetVideoSignal /// 说 明: 获取视频信号的输入情况,用于视频丢失报警 /// /// int __stdcall GetVideoSignal(HANDLE hChannelHandle) ///
///
通道句柄 ///
信号正常返回0;返回其他值说明信号异常或有错误
[DllImport("DS40xxSDK.dll")] public static extern int GetVideoSignal(IntPtr hChannelHandle); ///
/// 3.3.5调整视频信号输入位置SetInputVideoPosition /// 说 明: 设置视频信号的输入位置。(x,y)为系统处理图像的左上角在摄像机输入的原 /// 始图像中的坐标,某些摄像机输入的图像在预览时可能在左边会有黑边,可以通过此函数进 /// 行调节,x必须设置为2的整数倍。(x,y)的取值和摄像机的型号有关,如果指定的值和 /// 摄像机的输入参数不匹配,可能会导致图像静止、水平垂直方向滚动或者黑屏,请谨慎使用。 /// /// int __stdcall SetInputVideoPosition(HANDLE hChannel,UINT x,UINT y) ///
///
通道句柄 ///
X轴坐标,默认值为8 ///
Y轴坐标,默认值为2 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetInputVideoPosition(IntPtr hChannel, uint x, uint y); ///
/// 3.3.6设置反隔行变换及强度SetDeInterlace /// 说 明: 设置是否采用反隔行算法,已经采用反隔行时的强度 /// /// 释 义: 反隔行变换 /// 如果该通道的图像需要进行4CIF的预览或编码,此时的图像中会同时包含奇、偶两 /// 场的
数据
,由于奇场图像和偶场图像不同步,导致图像中运动的部分发生错位、边缘模糊, /// 此时需要对图像进行反隔行变换来去掉这种现象。如果用户能够确定使用的是逐行扫描格式 /// 的摄像机,或者主要应用在静止场景,此时可以关掉反隔行变换功能,或者降低强度,这样 /// 可以提高系统运行效率,并降低反隔行变换对图像质量带来的损失。 /// /// int __stdcall SetDeInterlace(HANDLE hChannelHandle,UINT mode,UINT level) ///
///
通道句柄 ///
/// 0表示该通道不进行反隔行变换,此时level参数无效; /// 1表示使用旧的算法; /// 2表示使用默认算法(系统默认值)。 /// ///
/// mode=1时有效,其它时无效。 /// 0-10,反隔行变换的强度逐渐加强,0最弱,对图像的损失最小,10最强,对图像的损失最大。 /// ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetDeInterlace(IntPtr hChannelHandle, uint mode, uint level); #endregion #region 3.4视频编码参数设置 // 释 义: 双编码功能(主、子通道) // 对一路视频图像进行两路视频编码,两路视频可以有不同的码流类型、不同分辨率、不 //同码率等。3.0版本对双编码功能做了增强,子通道的所有参数都可以任意设置。 //双编码中主通道和子通道唯一的区别在于:子通道占用的系统资源比主通道少,优先级 //比主通道低。当系统忙时,会尽量保证主通道编码,并先从子通道开始丢帧。由于占用资源 //少,因此可以利用子通道来实现多路高分辨率的非实时编码。例如:可以把DS-4000HC中 //的每个子通道全部设置为4CIF分辨率(SetSubStreamType),而不使用主通道编码,这样就 //可以实现全部通道的4CIF编码。在一般场景下,每路图像都可以达到15帧以上。 ///
/// 3.4.1主、子通道切换SetupSubChannel /// 说 明: 配合双编码模式使用。当设置某个通道为双编码模式时,如主通道编码CIF,子 /// 通道编码QCIF,这时可对主/子通道分别设置某些参数。关键帧间隔、OSD、LOGO等参数 /// 对主/子通道是一样的;在设置帧率、量化系数、变码流/定码流模式、码流大小等参数时应 /// 调用此函数分别对主/子通道进行设置,缺省是对主通道进行设置 /// /// int __stdcall SetupSubChannel(HANDLE hChannelHandle, int iSubChannel) ///
///
通道句柄 ///
子通道号(0表示主通道,1表示主通道) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetupSubChannel(IntPtr hChannelHandle, int iSubChannel); ///
/// 3.4.2获取双编码时
数据
流类型GetSubChannelStreamType /// 说 明: 配合双编码模式使用,当设置双编码模式时,启动录像后,DSP会向上送两种 ///
数据
流,调用此函数得到主通道和子通道的
数据
流类型,供应用程序使用。 /// /// int __stdcall GetSubChannelStreamType(void *DataBuf, int FrameType) ///
///
数据
缓存区 ///
帧类型 ///
/// 0 其他
数据
/// 1 主通道
数据
流的文件头 /// 2 子通道
数据
流的文件头 /// 3 主通道
数据
流的视频帧类型 /// 4 子通道
数据
流的视频帧类型 /// 5
数据
流的音频帧 ///
[DllImport("DS40xxSDK.dll")] public static extern int GetSubChannelStreamType(IntPtr DataBuf, int FrameType); #region 3.4.3编码流类型的设置及获取(不支持动态修改) ///
/// 3.4.3.1设置主通道编码流类型SetStreamType /// 说 明: 设置主通道编码流类型。此函数需在启动编码前进行设置 /// /// int __stdcall SetStreamType(HANDLE hChannelHandle, USHORT Type) ///
///
通道句柄 ///
流类型 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetStreamType(IntPtr hChannelHandle, ushort Type); ///
/// 3.4.3.2获取主通道编码流类型GetStreamType /// 说 明: 获取主通道编码流类型 /// /// int __stdcall GetStreamType(HANDLE hChannelHandle, USHORT *StreamType) ///
///
通道句柄 ///
流类型 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int GetStreamType(IntPtr hChannelHandle, ref ushort StreamType); ///
/// 3.4.3.3设置子通道编码流类型SetSubStreamType /// 说 明: 设置子通道编码流类型,此函数需在启动编码前进行设置 /// /// int __stdcall SetSubStreamType(HANDLE hChannelHandle, USHORT Type) ///
///
通道句柄 ///
流类型 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetSubStreamType(IntPtr hChannelHandle, ref ushort Type); ///
/// 3.4.3.4获取子通道编码流类型GetSubStreamType /// 说 明: 获取子通道编码流类型 /// /// int __stdcall GetSubStreamType(HANDLE hChannelHandle, USHORT *StreamType) ///
///
通道句柄 ///
流类型 ///
[DllImport("DS40xxSDK.dll")] public static extern int GetSubStreamType(IntPtr hChannelHandle, ref ushort StreamType); #endregion #region 3.4.4(支持动态修改)的编码参数设置 ///
/// 3.4.4.1设置编码图像质量SetDefaultQuant /// 说 明: 设置图像量化系数,用于调整图像质量。量化系数越小图像质量越高。系统默认量化系数值为18,18,23。 /// 释 义: 量化系数 /// 量化系数是强烈影响MPEG标准中编码图像质量和码率的参数,当量化系数越低,图 /// 像质量就会越高,码率也就越高,反之,图形质量就会越低,码率也就越低 /// /// int __stdcall SetDefaultQuant(HANDLE hChannelHandle, int IQuantVal, int PQuantVal, int BQuantVal) ///
///
通道句柄 ///
I帧量化系数,取值范围:12-30 ///
P帧量化系数。取值范围:12-30(目前无效) ///
B帧量化系数。取值范围:12-30(目前无效) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetDefaultQuant(IntPtr hChannelHandle, int IQuantVal, int PQuantVal, int BQuantVal); ///
/// 3.4.4.2设置编码帧结构、帧率SetIBPMode /// 说 明: 设置编码帧结构和帧率。支持动态修改 /// 释 义: 关键帧间隔 /// 关键帧为编码码流中采用帧内压缩的图像帧,其特点是图像清晰度好,但
数据
量大,通 /// 常作为帧间编码的原始参考帧。关键帧间隔是连续的帧间编码的帧个数,因H264(MPEG4) /// 编码是有损压缩,关键帧的个数会影响图像质量,因此关键帧的间隔需要合理设计。 /// /// int __stdcall SetIBPMode(HANDLE hChannelHandle, int KeyFrameIntervals, int BFrames, int PFrames, int FrameRate) ///
///
通道句柄 ///
关键帧间隔。取值范围1-400,系统默认为100 ///
B帧数量,取值为0或者2,系统默认为2 ///
P帧数量。目前暂取值无效 ///
帧率,帧率范围1-25(PAL)、1-30(NTSC) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetIBPMode(IntPtr hChannelHandle, int KeyFrameIntervals, int BFrames, int PFrames, int FrameRate); #region 3.4.4.3设置编码分辨率 ///
/// 3.4.4.3.1设置主通道分辨率SetEncoderPictureFormat /// 说 明: 设置主通道编码分辨率。支持动态修改。 /// /// int __stdcall SetEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat) ///
///
通道句柄 ///
编码图像分辨率(4CIF、DCIF、2CIF、CIF、QCIF) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetEncoderPictureFormat(IntPtr hChannelHandle, PictureFormat_t PictureFormat); ///
/// 3.4.4.3.2设置子通道编码分辨率SetSubEncoderPictureFormat /// 说 明: 设置双编码模式时子通道的编码分辨率,支持动态修改。 /// /// int __stdcall SetSubEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat) ///
///
子通道句柄 ///
子通道编码图像分辨率(4CIF、DCIF、2CIF、CIF、 QCIF) ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetSubEncoderPictureFormat(IntPtr hChannelHandle, PictureFormat_t PictureFormat); #endregion #region 3.4.4.4设置码率及码流控制模式 ///
/// 3.4.4.4.1设置码流最大比特率SetupBitrateControl /// 说 明: 设置编码的最大比特率。设置为0时码流控制无效,设置为某一最大比特率时, /// 当编码码流超过该值时,DSP会自动调整编码参数来保证不超过最大比特率,当编码码流 /// 低于最大比特率时,DSP不进行干涉。调整误差<10% /// /// int __stdcall SetupBitrateControl(HANDLE hChannelHandle, UInt64 MaxBps) ///
///
通道句柄 ///
最大比特率。取值:10000以上 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetupBitrateControl(IntPtr hChannelHandle, Int32 MaxBps); ///
/// 3.4.4.4.2设置码流控制方式SetBitrateControlMode /// 说 明: 设置编码码流控制方式。配合SetupBitrateControl使用。当设置为变码率(brVBR) /// 时,最大比特率将作为编码码流上限,由DSP在码流上限下自动控制码率,一般会自动回 /// 落到最低的状态(由设定的图像质量参数和关键帧间隔决定),能最大程度地降低带宽和存 /// 储空间,但存储容量一般难以估算;当设置为定码率(brCBR)时,以最大比特率作为编码 /// 码率参数恒定输出码流,不会自动回落到低码流状态,存储容量可根据设定码率的大小进行估算。 /// /// int __stdcall SetBitrateControlMode(HANDLE hChannelHandle, BitrateControlType_t brc) ///
///
通道句柄 ///
码流控制方式,分为变码率(brVBR)和恒定码率 (brCBR)两种方式 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetBitrateControlMode(IntPtr hChannelHandle, BitrateControlType_t brc); #endregion ///
/// 3.4.5强制设定I帧CaptureIFrame /// 说 明: 将当前编码帧强制设定为I帧模式,可从码流中提取该帧单独用于网络传送。 /// /// int __stdcall CaptureIFrame(HANDLE hChannelHandle) ///
///
通道句柄 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int CaptureIFrame(IntPtr hChannelHandle); ///
/// 3.4.6获取帧统计信息GetFramesStatistics /// 说 明: 获取帧统计信息 /// /// int __stdcall GetFramesStatistics(HANDLE hChannelHandle,PFRAMES_STATISTICS framesStatistics) ///
///
通道句柄 ///
帧统计信息 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int GetFramesStatistics(IntPtr hChannelHandle, PFRAMES_STATISTICS framesStatistics); #endregion #endregion #region 3.5
数据
捕获 #region 3.5.1抓图(获取单帧图像
数据
) #region 3.5.1.1抓取BMP格式图像 ///
/// 3.5.1.1.1获取原始
yuv
422格式
数据
GetOriginalImage /// 说 明: 获得原始
yuv
422格式图像,DS4000HC原始图像是4CIF图像格式(包括QCIF编码), /// DS-4000HS原始图像为CIF图像格式,DS400xH卡的原始图象是CIF图象格式。 /// /// int __stdcall GetOriginalImage(HANDLE hChannelHandle, UCHAR *ImageBuf, UInt64 *Size) ///
///
通道句柄 ///
原始
yuv
422格式图像指针 ///
原始
yuv
422格式图像尺寸,函数调用前是ImageBuf的大小,调用后是实际图像所占用的字节数 ///
成功返回0,失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int GetOriginalImage(IntPtr hChannelHandle, byte[] ImageBuf, out int Size); ///
/// 3.5.1.1.2图像格式转换
YUV
toBMP Save
YUV
ToBmpFile /// 说 明: 用户程序可调用此函数来生成24位的bmp文件,如果是DS4000HC卡抓图则 /// Width 为704,Height 为576PAL/480NTSC,如果是DS400xH卡抓图则Width可能为352 /// 或176,Height为288、240、144或120,要根据缓冲区的大小来判断。 /// /// int __stdcall Save
YUV
ToBmpFile(char *FileName, unsigned char *
yuv
, int Width, int Height) ///
///
文件名 ///
yuv
422格式图像指针 ///
图像宽度 ///
图像高度 ///
[DllImport("DS40xxSDK.dll")] public static extern int Save
YUV
ToBmpFile(string FileName, byte[]
yuv
, int Width, int Height); ///
/// 3.5.1.2抓取JPEG格式图像GetJpegImage /// 说 明: 抓取JPEG格式图像 /// /// int __stdcall GetJpegImage(HANDLE hChannelHandle,UCHAR *ImageBuf, UInt64 *Size,UINT nQuality) ///
///
通道句柄 ///
JPEG图像指针 ///
JPEG图像尺寸,函数调用前是ImageBuf的大小,调用后是实际图像所占用的字节数 ///
JPEG图像质量,取值范围1-100,取值100时质量最好 ///
[DllImport("DS40xxSDK.dll")] public static extern int GetJpegImage(IntPtr hChannelHandle, byte[] ImageBuf, out int Size, uint nQuality); #endregion #region 3.5.2原始图像
数据
流捕获(获取
YUV
420格式
数据
流) ///
/// 3.5.2.1注册原始图像
数据
流回调函数RegisterImageStreamCallback /// 说 明: 注册获取原始图像
数据
流函数,用户可以获取实时的
YUV
420格式的预览
数据
/// /// int __stdcall RegisterImageStreamCallback (IMAGE_STREAM_CALLBACK ImageStreamCallback,void *context) ///
///
原始图像
数据
流回调函数 ///
设备上下文 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int RegisterImageStreamCallback(IMAGE_STREAM_CALLBACK ImageStreamCallback, IntPtr context); ///
/// 3.5.2.2开启及停止原始
数据
流捕获SetImageStream /// 说明: 开启或停止原始图像
数据
流捕获,此函数依赖主机的处理速度。DS-4000HS只能捕获不大于CIF格式的
数据
流 /// /// 函 数: int __stdcall SetImageStream(HANDLE hChannel,BOOL bStart,UINT fps, UINT width,UINT height,unsigned char *imageBuffer) ///
///
通道句柄 ///
是否启动捕获 ///
帧率 ///
图像宽度,必须是4CIF宽度的1/8,1/4,1/2或原始大小704 ///
图象高度,必须是4CIF高度的1/8,1/4,1/2或原始大小576PAL/480NTSC ///
数据
存储缓存 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetImageStream(IntPtr hChannel, bool bStart, uint fps, uint width, uint height, char[] imageBuffer); #endregion #region 3.5.3编码
数据
流捕获(获取编码后H.264格式
数据
流)即录像 //注意:注册
直接
回调或者消息回调后,需要启动编码
数据
流捕获函数才能进行
数据
回调。三 //种
数据
回调方式,只需选取其中一种使用即可。对于HC系列板卡(包括HC、HC+、HCS、 //HS),推荐使用第一种读取方式。对于H系列板卡,只能使用后两种读取方式。 #region 3.5.3.1编码
数据
流捕获方式设置 ///
/// 3.5.3.1.1.1注册编码图像
数据
流
直接
读取回调函数 /// 说 明: DS4000HC系列板卡新增的一种
数据
流读取方式,当启动
数据
捕获后, /// StreamDirectReadCallback会提供
数据
流的地址、长度、帧类型等,供用户程序
直接
处理。 /// /// 函 数: int __stdcall RegisterStreamDirectReadCallback (STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback,void *Context) ///
///
编码
数据
流
直接
读取回调函数 ///
设备上下文 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int RegisterStreamDirectReadCallback(STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback, IntPtr context); #endregion #region 3.5.3.1.2方式二、消息读取方式 ///
/// 3.5.3.1.2.1设置消息读取伐值,此函数只对H卡有效 /// 说 明: 设置消息读取的伐值,可以将缓冲区的
数据
在OnDataReady中一次性取走 /// /// int __stdcall SetupNotifyThreshold(HANDLE hChannelHandle, int iFramesThreshold) ///
///
通道句柄 ///
读取消息伐值,范围1-10 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int SetupNotifyThreshold(IntPtr hChannelHandle, int iFramesThreshold); ///
/// 3.5.3.1.2.2注册消息读取码流函数 /// 说 明: 当
数据
准备好时,SDK会向hWnd窗口发送MessageId消息,目标窗口收到 /// Message后调用ReadStreamData读取一帧
数据
。如果HC卡与H卡混插,可以先调用 /// RegisterStreamDirectReadCallback函数来注册HC卡取码流回调函数,再调用 /// RegisterMessageNotifyHandle函数来注册H卡取码流消息函数。 /// HC系列板卡建议使用方式一进行
数据
捕获。 /// /// int __stdcall RegisterMessageNotifyHandle(HWND hWnd, UINT MessageId) ///
///
通道句柄 ///
自定义消息 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int RegisterMessageNotifyHandle(IntPtr hWnd, uint MessageId); #endregion #region 3.5.3.1.3方式三、另一种
直接
读取方式 ///
/// 3.5.3.1.3.1注册
直接
读取码流回调函数 /// 说 明: 另一种
数据
流读取方式 /// /// int __stdcall RegisterStreamReadCallback (STREAM_READ_CALLBACK StreamReadCallback, void *Context) ///
///
直接
读取码流回调函数 ///
设备上下文 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int RegisterStreamReadCallback(STREAM_READ_CALLBACK StreamReadCallback, IntPtr Context); #endregion ///
/// 3.5.3.2读取码流函数 /// 说 明: 读指定长度的
数据
流,适用于方式二及方式三。当调用StartVideoCapture 或 /// StartMotionDetection后,SDK线程会向已注册的用户窗口消息处理函数发送指定的消息, /// 并提供消息来源的通道号。当用户程序收到该消息时,可调用本函数来读取
数据
,Length 在 /// 作为输入时必须提供缓冲的大小,ReadStreamData会判断缓冲是否足够,如果缓冲足够大 /// 则返回值为当前的读取的帧长度,否则返回错误。 /// 在HC卡中,如果已经先调用了RegisterStreamDirectReadCallback()函数,则不需调用 /// ReadStreamData来读取
数据
,因为音视频
数据
会在RegisterStreamDirectReadCallback所注册 /// 的回调函数中
直接
返回。 /// /// int __stdcall ReadStreamData(HANDLE hChannelHandle, void *DataBuf, DWORD *Length, int *FrameType) ///
///
通道句柄 ///
自定义的
数据
缓存区 ///
输入:缓存区的大小;输出:一帧
数据
的大小 ///
帧类型 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int ReadStreamData(IntPtr hChannelHandle, byte[] DataBuf, out UInt64 Length, out int FrameType); #region 3.5.3.3开启及停止录像 ///
/// 3.5.3.3.1启动主通道编码
数据
流捕获 /// 说 明: 启动主通道编码
数据
流捕获。用户程序可以使用
直接
读取方式,使用 /// StreamDirectReadCallback回调函数
直接
对
数据
流进行处理;也可以与H卡一样,通过消息 /// 读取方式,等SDK向用户程序发送在RegisterMessageNotifyHandle中注册的消息,用户程 /// 序使用ReadStreamData来读取
数据
流。 /// /// int __stdcall StartVideoCapture(HANDLE hChannelHandle) ///
///
通道句柄 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int StartVideoCapture(IntPtr hChannelHandle); ///
/// 3.5.3.3.2停止主通道编码
数据
流捕获 /// 说 明: 停止主通道编码
数据
流捕获 /// /// int __stdcall StopVideoCapture(HANDLE hChannelHandle) ///
///
通道句柄 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int StopVideoCapture(IntPtr hChannelHandle); ///
/// 3.5.3.3.3启动子通道编码
数据
流捕获 /// 说 明: 启动子通道编码
数据
流捕获 /// /// int __stdcall StartSubVideoCapture(HANDLE hChannelHandle) ///
///
通道句柄 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int StartSubVideoCapture(IntPtr hChannelHandle); ///
/// 3.5.3.3.4停止子通道编码
数据
流捕获 /// 说 明: 停止子通道编码
数据
流捕获 /// /// int __stdcall StopSubVideoCapture(HANDLE hChannelHandle) ///
///
通道句柄 ///
成功返回0;失败返回错误号
[DllImport("DS40xxSDK.dll")] public static extern int StopSubVideoCapture(IntPtr hChannelHandle); #endregion #endregion #endregion #endregion #region 3.6移动侦测 // 释 义: 移动侦测 //DS4000HC提供运动强度信息来处理运动检测,设置移动侦测区域时以32*32像素块为 //单位,按4CIF(704*576)分辨率计算,每行有22个块(704/32),PAL时18行(576/32), //NTSC时15行(480/32),与编码格式无关。经过测试,这种方法比H卡提高了灵敏度和可 //靠性,并简化了返回的
数据
,返回的值是18个DWORD,对应
屏幕
高度576/32=18行(PAL), //每个DWORD的0-21位对应
屏幕
宽度704/32=22, 其中1为运动,0为静止,也可以调用原有 //MotionAnalyzer分析结果 //4.0版本的SDK新增了接口函数SetupMotionDetectionEx,
Android
直接
显示
yuv
数据
通过Awesomeplayer方式
直接
显示
(一)
研究了一段时间Android的surface系统,一直执着地认为所有在surface或者
屏幕
上
显示
的画面,必须要转换成RGB才能
显示
,
yuv
数据
也要通过颜色空间转换成RGB才能
显示
。可最近在研究stagefright视频
显示
时发现,根本找不到omx解码后的
yuv
是怎么转换成RGB的代码,
yuv
数据
在render之后就找不到去向了,可画面确确实实的
显示
出来了,这从此颠覆了
yuv
必须要转换成RGB才能
使用DirectDraw
直接
显示
YUV
视频
数据
最近在编写一个进行视频播放的ActiveX控件,工作已经接近尾声,现将其中
显示
YUV
数据
的使用DirectDraw的一些经验总结如下:(解码部分不是我编写的,我负责从网络接收
数据
,将
数据
传给解码器,并将解码得到的
YUV
数据
进行
显示
,最初在
显示
部分我是先将
YUV
数据
转换为RGB
数据
,再以位图的形式
显示
到
屏幕
上,但发现CPU占用率比较高,后来改用DirectDraw
直接
显示
YUV
数据
) 1.在Dir
v4l2摄像头
数据
获取并
显示
到fb上,
yuv
格式处理
使用v4l2采集摄像头
数据
,将
yuv
图像解码成rgb,并
显示
到fb上主要流程v4l2驱动采集摄像头
数据
折腾了一个多星期,总算实现了摄像头
数据
采集并
显示
到
屏幕
上,整理一下嵌入式Linux从摄像头获取
数据
并
显示
到fb
屏幕
上的过程。使用尽量少的依赖,只用了v4l2视频设备驱动以及fb驱动,更加深入的理解了计算机底层图像处理的原理。 主要流程 整个处理的主要步骤分为以下: Linux v4l2驱动采集...
CUDA on Windows XP
231
社区成员
424
社区内容
发帖
与我相关
我的任务
CUDA on Windows XP
CUDA on Windows XP
复制链接
扫一扫
分享
社区描述
CUDA on Windows XP
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章