#ifndef __DXMEDIACAP_2011__ #define __DXMEDIACAP_2011__ #include "datastru.h" /* 描述: 初始化 SDK ,必须在调用其他函数之前调用 参数: 无 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXInitialize(); void __stdcall DXUninitialize(); /* 描述: 获取初始化成功的设备总数 参数: 无 返回值: 匹配的设备总数 // */ unsigned __stdcall DXGetDeviceCount(); /* 描述: 枚举音视频编码过滤器 参数: devTags - [out] 用于返回获得的过滤器的 TAG 的数组 num - [in/out] 指定 devTags 数组的元素个数,返回时则是实际上获得的过滤器的 TAG 的个数 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXEnumVideoCodecs(PDEVICE_TAG devTags, unsigned& num); unsigned __stdcall DXEnumAudioCodecs(PDEVICE_TAG devTags, unsigned& num); /* 描述: 枚举视频捕捉设备过滤器 参数: devTags - [out] 用于返回获得的过滤器的 TAG 的数组 num - [in/out] 指定 devTags 数组的元素个数,返回时则是实际上获得的过滤器的 TAG 的个数 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXEnumVideoDevices(PDEVICE_TAG devTags, unsigned& num); /* 描述: 枚举音频捕捉和渲染设备过滤器 参数: devTags - [out] 用于返回获得的过滤器的 TAG 的数组 num - [in/out] 指定 devTags 数组的元素个数,返回时则是实际上获得的过滤器的 TAG 的个数 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXEnumAudioDevices(PDEVICE_TAG devTags, unsigned& num); unsigned __stdcall DXEnumSoundDevices(PDEVICE_TAG devTags, unsigned& num); /* 描述: 占用采集设备 参数: idx - [in] 设备在枚举过程中的序号 err - [out] 返回错误代码 返回值: 成功则返回设备句柄,否则返回 NULL。可通过 err 获得错误代码 // */ device_handle __stdcall DXOpenDevice(unsigned idx, unsigned* err = NULL); void __stdcall DXCloseDevice(device_handle device); /* 描述: 将属性页显示在制定窗体的指定区域 参数: device - [in] 设备句柄 attrID - [in] 属性类别 hOwner - [in] 父窗体的句柄。NULL - 隐藏属性页 rect - [in] 在父窗体上显示的区域。NULL - 表示父窗体的整个客户区 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXShowDeviceAttr(device_handle device, unsigned attrID, HWND hOwner, RECT* rect); // unsigned __stdcall DXShowDeviceAttr(device_handle device, HWND XBar, HWND Capture, HWND stream, HWND codec); /* 描述: 获取视频属性 参数: device - [in] 设备句柄 standard - [out] 视频制式 colorspace - [out] 色彩空间 width - [out] 视频宽度(单位:像素) height - [out] 视频高度(单位:像素) framerate - [out] 视频帧率(单位:帧/秒) 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXGetVideoPara(device_handle device, unsigned& standard, unsigned& colorspace, unsigned& width, unsigned& height, float& framerate); /* 描述: 设置视频属性 参数: device - [in] 设备句柄 standard - [in] 视频制式 colorspace - [in] 色彩空间 width - [in] 视频宽度(单位:像素) height - [in] 视频高度(单位:像素) framerate - [in] 视频帧率(单位:帧/秒) 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetVideoPara(device_handle device, unsigned standard, unsigned colorspace, unsigned width, unsigned height, float framerate); /* 描述: 获取显示属性的取值范围、默认值、步长、标志 参数: device - [in] 设备句柄 paraType - [in] 参数类型 0 - 亮度,1 - 对比度,2 - 饱和度,3 - 色度,4 - 锐度 pMin - [in] 最小值 pMax - [in] 最大值 pSteppingDelta - [in] 步长 pDefault - [in] 默认值 pCapsFlags - [in] 自动/手动标志 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXGetDisplayParaRange(device_handle device, unsigned paraType, long* pMin, long* pMax, long* pSteppingDelta, long* pDefault, long* pCapsFlags); /* 描述: 获取显示属性 参数: device - [in] 设备句柄 paraType - [in] 参数类型 0 - 亮度,1 - 对比度,2 - 饱和度,3 - 色度,4 - 锐度 value - [out] 参数值 flag - [out] 自动/手动标志 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXGetDisplayPara(device_handle device, unsigned paraType, long& value, long& flags); /* 描述: 设置显示属性 参数: device - [in] 设备句柄 paraType - [in] 参数类型 0 - 亮度,1 - 对比度,2 - 饱和度,3 - 色度,4 - 锐度 value - [in] 参数值 flag - [in] 自动/手动标志 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetDisplayPara(device_handle device, unsigned paraType, long value, long flags); /* 描述: 获取视频编码器属性 参数: device - [in] 设备句柄 mode - [out] 编码模式 bitrate - [out] 码率(单位:kbps) keyinterval - [out] 关键帧间隔 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXGetVideoCodecPara(device_handle device, unsigned& mode, unsigned& bitrate, unsigned& keyinterval); /* 描述: 设置视频编码器属性 参数: device - [in] 设备句柄 mode - [in] 编码模式 bitrate - [in] 码率(单位:kbps) keyinterval - [in] 关键帧间隔 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetVideoCodecPara(device_handle device, unsigned mode, unsigned bitrate, unsigned keyinterval); /* 描述: 获取设备当前选择的端子和包含的输入端子 参数: device - [in] 设备句柄 curSource - [out] 当前选择的输入端子的序号。NULL - 忽略 sources - [out] 包含的输入端子的类型数组(比如:S-VIDEO、DV...)。NULL - 忽略 num - [in/out] 端子数量。NULL - 忽略,此时尽可获取当前选择的输入端子 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXGetVideoSources(device_handle device, unsigned* curSource, unsigned* sources = NULL, unsigned char* num = NULL); /* 描述: 设置设备的输入端子 参数: device - [in] 设备句柄 source - [in] 当前选择的输入端子的序号 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetVideoSource(device_handle device, unsigned source); /* 描述: 获取设备的信号状态 参数: device - [in] 设备句柄 signal - [out] 信号状态。0 - 信号丢失;1 - 信号正常 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXGetSignalPresent(device_handle device, unsigned& signal); /* 描述: 控制设备运行状态 参数: device - [in] 设备句柄 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXDeviceRun(device_handle device); unsigned __stdcall DXDevicePause(device_handle device); unsigned __stdcall DXDeviceStop(device_handle device); /* 描述: 获取设备运行状态 参数: device - [in] 设备句柄 state - [out] 设备运行状态 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXGetDeviceState(device_handle device, unsigned& state); /* 描述: 将视频显示在指定窗体的矩形区域内 参数: device - [in] 设备句柄 hWnd - [in] 显示视频的窗体句柄。NULL - 停止显示视频 rect - [in] 视频显示的矩形区域。NULL - 占用整个窗体 vmrtype - [in] 该保留参数。(准备做指定显示过滤器只用) 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXStartPreview(device_handle device, HWND hWnd, PRECT rect, unsigned vmrtype); /* 描述: 停止预览 参数: device - [in] 设备句柄 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXStopPreview(device_handle device); /* 描述: 冻结视频显示部分 参数: device - [in] 设备句柄 bFreeze - [in] TRUE - 冻结显示,FALSE - 解冻显示 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXFreezePreview(device_handle device, BOOL bFreeze); /* 描述: 检查设备是否包含音频 参数: device - [in] 设备句柄 bHasAudio - [out] TRUE - 包含音频,FALSE - 没有音频 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXHasAudio(device_handle device, BOOL& bHasAudio); /* 描述: 为设备分配音频采集设备。 注意:!!! 只能在 state_stopped 状态下调用 参数: device - [in] 设备句柄 bSound - [in] TRUE - 开始声音输出,FALSE - 终止声音输出 audioDevice - [in] 音频采集设备。NULL - 使用设备自带的音频 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetAudioDevice(device_handle device, PDEVICE_TAG audioDevice = NULL); /* 描述: 开始或者终止声音输出。 注意:!!! 只有开始了声音输出,静音操作、音量调节、录像时包含音频等操作才能成功 参数: device - [in] 设备句柄 bSound - [in] TRUE - 开始声音输出,FALSE - 终止声音输出 soundDevice - [in] 声音输出设备。NULL - 使用默认设备 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetSoundOut(device_handle device, BOOL bSound/*, PDEVICE_TAG soundDevice = NULL*/); /* 描述: 静音操作 参数: device - [in] 设备句柄 bMute - [in] TRUE - 静音,FALSE - 非静音 返回值: 0 - 成功;失败则返回错误代码,一般失败原因是因为没有开始声音输出 // */ unsigned __stdcall DXEnableMute(device_handle device, BOOL bMute); /* 描述: 设置音量和平衡 参数: device - [in] 设备句柄 volume - [in] 音量大小,取值范围(0, 100] balance - [in] 左右平衡,取值范围[-10, 10],负数表示左声道强,正数表述右声道强,0 - 左右平衡 注意:!!! NULL - 表示不设置平衡 返回值: 0 - 成功;失败则返回错误代码,一般失败原因是因为没有开始声音输出 // */ unsigned __stdcall DXSetAudioVolume(device_handle device, unsigned char volume, unsigned char* const balance = NULL); /* 描述: 获取音量和平衡 参数: device - [in] 设备句柄 volume - [out] 音量大小,取值范围(0, 100] 注意:!!! NULL - 表示不获取音量 balance - [out] 左右平衡,取值范围[-10, 10],负数表示左声道强,正数表述右声道强,0 - 左右平衡 注意:!!! NULL - 表示不获取平衡 返回值: 0 - 成功;失败则返回错误代码,一般失败原因是因为没有开始声音输出 // */ unsigned __stdcall DXGetAudioVolume(device_handle device, unsigned char* volume, unsigned char* balance = NULL); /* 描述: 更换视频编码器 注意:!!! 当正在进行录像时,则操作失败 参数: device - [in] 设备句柄 videoEncoder - [in] 视频编码器的 TAG,NULL - 表示不用编码,即录像时采用原始数据 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetVideoCodec(device_handle device, PDEVICE_TAG videoEncoder); /* 描述: 更换音频编码器 注意:!!! 当正在进行录像时,则操作失败 参数: device - [in] 设备句柄 audioEncoder - [in] 音频编码器的 TAG,NULL - 表示不用编码,即录像时采用原始数据 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetAudioCodec(device_handle device, PDEVICE_TAG audioEncoder); /* 描述: 开始录像 参数: device - [in] 设备句柄 szFileName - [in] 指定录像文件全路径。NULL - 停止录像 saveAudio - [in] 是否将音频也录制到文件中 timeSize - [in] 限定录像文件的时间长度(单位:秒),NULL - 不限制 dataSize - [in] 限定录像文件的数据长度(单位:字节),NULL - 不限制 saveNotify - [in] 录像事件通知接口指针 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXStartCapture(device_handle device, TCHAR* szFileName, BOOL saveAudio, unsigned* timeSize = NULL, unsigned* dataSize = NULL, ISaveNotify* saveNotify = NULL); /* 描述: 停止录像 参数: device - [in] 设备句柄 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXStopCapture(device_handle device); /* 描述: 冻结录像部分(包括视频和音频) 注意:!!! 适用于需要多段时间录像的情况 参数: device - [in] 设备句柄 bFreeze - [in] TRUE - 冻结录像,FALSE - 解冻录像 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXFreezeCaputre(device_handle device, BOOL bFreeze); /* 描述: 插入视频效果(针对原始视频数据) 参数: device - [in] 设备句柄 ispTask - [in] 新插入的视频效果的接口指针 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXAttachIspTask(device_handle device, IispTask* ispTask); unsigned __stdcall DXDetachIspTask(device_handle device, IispTask* ispTask); /* 描述: 编码视频数据回调的函数原型 参数: fourcc - [in] 获取的编码数据的编码器的FOURCC buffer - [in] 缓冲区指针 bufferSize - [out] 获取的编码数据的缓冲区大小(单位:字节) context - [in] 回调函数的上下文 返回值: 0 - 成功;失败则返回错误代码 // */ typedef unsigned (__stdcall *fnEncVideoCallback)(unsigned fourcc, unsigned char* buffer, unsigned bufferSize, void* context); /* 描述: 设置编码视频数据回调的函数 参数: device - [in] 设备句柄 fn - [in] 回调函数指针,NULL - 停止回调 context - [in] 回调函数的上下文 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXSetEncVideoCallback(device_handle device, fnEncVideoCallback fn, void* context); /* 描述: 开始编码视频数据回调的函数 参数: device - [in] 设备句柄 fn - [in] 回调函数指针,NULL - 停止回调 context - [in] 回调函数的上下文 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXStartEncVideoCallback(device_handle device, fnEncVideoCallback fn, void* context); /* 描述: 停止编码视频数据回调的函数 参数: device - [in] 设备句柄 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXStopEncVideoCallback(device_handle device); /* 描述: 使能去隔行功能 参数: device - [in] 设备句柄 deinterlace - [in] 去隔行的算法类型 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXEnableDeinterlace(device_handle device, unsigned deinterlace); /* 描述: 使能去噪功能 参数: device - [in] 设备句柄 denoise - [in] 去噪的算法类型 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXEnableDenoise(device_handle device, unsigned denoise); /* 描述: 使能伪彩功能 参数: device - [in] 设备句柄 szPColorTemplateFile - [in] 伪彩的模板文件。NULL - 停止使用伪彩 pcolorDepth - [in] 伪彩的色深。此参数保留。 返回值: 0 - 成功;失败则返回错误代码 // */ unsigned __stdcall DXEnablePColor(device_handle device, TCHAR* szPColorTemplateFile, unsigned pcolorDepth); #endif // __DXMEDIACAP_2011__