⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsstream.h

📁 停车场用
💻 H
字号:
//DSStream.h

#if !defined(DSSTREAM_H_2000_10_18)
#define DSSTREAM_H_2000_10_18

//用于枚举设备
//涉及函数:
//	DSStream_EnumVideoCaptureDev()
//	DSStream_EnumAudioCaptureDev()
#define MAX_DEVICE_NAME_LEN	80
#define MAX_DEVICE_NUM		32

//用于控制视频流的状态
//涉及函数:
//	DSStream_GetStreamStatus()
//	DSStream_SetStreamStatus()
#define RUN		0
#define PAUSE	1
#define STOP	2

//分别代表 Capture Pin 和 Preview Pin
//前者用于渲染录像流,后者用于渲染显示流
//涉及函数:
//	DSStream_GetVideoInfo()
//	DSStream_SetVideoInfo()
//	DSStream_ConnectPin()
//	DSStream_DeconnectPin()
#define CAPTURE	1
#define PREVIEW	2

//分别表示无人使用音频设备和音频设备不存在
//涉及函数:
//	DSStream_WhoIsCapturingAudio()
#define AUDIO_DEVICE_NO_USED	-1
#define AUDIO_DEVICE_NO_EXIST	-2

//视频的子类型:RGB555、RGB24、YV12
//涉及:
//	结构 VIDEOSTREAMINFO
typedef enum
{
	VideoSubType_None = -1,
	VideoSubType_RGB555 = 0,
	VideoSubType_RGB24,
	VideoSubType_YUY2,
	VideoSubType_YVU9,
	VideoSubType_YV12,
} VideoSubType;

//视频流的各种信息
//涉及函数:
//	DSStream_GetVideoInfo()
//	DSStream_SetVideoInfo()
typedef struct
{
//	VideoSubType		subtype;
  LONG subtype;
	RECT				rcSource;
	RECT				rcTarget;
	DWORD				dwBitRate;
	DWORD				dwBitErrorRate;
	LONG			AvgTimePerFrame;//帧率
  LONG  nReserve1,nReserve2;
	BITMAPINFOHEADER	bmiHeader;		//宽、高、颜色位率等
} VIDEOSTREAMINFO;

//调用系统对话框设置各种音、视频属性
//涉及函数:
//	DSStream_IsPropertyExist()
//	DSStream_DisplayPropertyDialogs()
typedef enum
{
	PropertyDlg_VideoCaptureFilter = 0,
	PropertyDlg_VideoCapturePin,	// *
	PropertyDlg_VideoPreviewPin,	// *
	PropertyDlg_VideoCrossbar,
	PropertyDlg_AudioCaptureFilter,
	PropertyDlg_AudioCapturePin,
	PropertyDlg_AudioCrossbar,
	PropertyDlg_TVAudioFilter,
	PropertyDlg_TVTuner,
	PropertyDlg_VfwCaptureFormat,	// *
	PropertyDlg_VfwCaptureSource,
	PropertyDlg_VfwCaptureDisplay,
} PropertyDialog;

//调用DirectShow COM 接口函数设置各种视频图像属性
//涉及函数:
//	DSStream_GetVideoPropertyValue()
//	DSStream_SetVideoPropertyValue()
typedef enum
{
	VideoProperty_Brightness = 0,	//亮度
	VideoProperty_Contrast,			//对比度
	VideoProperty_Hue,				//色度
	VideoProperty_Saturation,		//饱和度
	VideoProperty_Gamma,			//Gamma校验
	VideoProperty_ColorEnable,		
	VideoProperty_WhiteBalance,		//白平衡
	VideoProperty_BacklightCompensation,
} VideoProperty;

//视频图像属性的各个值
//涉及函数:
//	DSStream_GetVideoPropertyValue()
typedef struct 
{
	long lValue;		//当前值
	long lMin;			//最小值
	long lMax;			//最大值
	long lStepDelta;	//最小步进值
	long lDefault;		//默认值
	long lCapsFlags;	//风格
} VIDEOPROPERTYRANGE;

//各种视频端口
//涉及函数:
//	DSStream_GetVideoStandard()
//	DSStream_SetVideoStandard()
typedef enum
{
	VideoStandard_None		= 0x00000000,
	VideoStandard_NTSC_M	= 0x00000001,
	VideoStandard_NTSC_M_J	= 0x00000002,  
	VideoStandard_NTSC_433	= 0x00000004,
	VideoStandard_PAL_B		= 0x00000010,
	VideoStandard_PAL_D		= 0x00000020,
	VideoStandard_PAL_H		= 0x00000080,
	VideoStandard_PAL_I		= 0x00000100,
	VideoStandard_PAL_M		= 0x00000200,
	VideoStandard_PAL_N		= 0x00000400,
	VideoStandard_PAL_60	= 0x00000800,
	VideoStandard_SECAM_B	= 0x00001000,
	VideoStandard_SECAM_D	= 0x00002000,
	VideoStandard_SECAM_G	= 0x00004000,
	VideoStandard_SECAM_H	= 0x00008000,
	VideoStandard_SECAM_K	= 0x00010000,
	VideoStandard_SECAM_K1	= 0x00020000,
	VideoStandard_SECAM_L	= 0x00040000,
	VideoStandard_SECAM_L1	= 0x00080000,
} VideoStandard;

//视频状态改变或录像错误的代号:
//它作为LPARAM的低两个字节传给窗口(LPARAM的高两个字节表示卡号),
//即:Card ID = (LPARAM>>16) & 0x0000FFFFL,Errod code = (LPARAM & 0x0000FFFFL)
//涉及函数:
//	DSStream_SetNotifyWindow()
//	DSStream_ManageNotifyMessage()
typedef enum
{
	Error_FirstNotifyMsg = 0x1234,	//收到这个错误,必须调用 DSStream_ManageNotifyMessage()
	Error_DiskFull,				//磁盘已满:wparam=0
	Error_VideoSizeChange,		//视频流尺寸改变:height=HIWORD(wparam), width=LOWORD(wparam)
	Error_StreamStatusChange,	//视频流状态改变:wparam=0
	Error_CaptureError,			//录像异常:wparam=HRESULT: error value
} DSStreamError;

//视频压缩Filter的信息
//涉及函数:
//	DSStream_EnumVideoCompressor()
typedef struct VIDEOCOMPRESSORINFO
{
	char szName[80];
} VideoCompressorInfo;

#define IMAGEPROC PASCAL
//初始化和反初始化
typedef  HRESULT (*tdDSStream_Initialize)();
typedef  void	(*tdDSStream_Uninitialize)();

//枚举系统中存在的视频、音频捕捉设备
typedef HRESULT	(*tdDSStream_EnumVideoCaptureDev)(
		char szDevName[MAX_DEVICE_NUM][MAX_DEVICE_NAME_LEN],
		int *pDevNum);
typedef HRESULT	(*tdDSStream_EnumAudioCaptureDev)(
		char szDevName[MAX_DEVICE_NUM][MAX_DEVICE_NAME_LEN],
		int *pDevNum);

//连接和断开视频捕捉设备
//	iVideoDevID:视频捕捉设备的序号(以0为基数)
//	bOverlay:TURE-Overlay, FALSE-Preview
typedef  HRESULT (* tdDSStream_ConnectDevice)(int iCardID, BOOL bOverlay, HWND hParentWnd = NULL);
typedef  HRESULT (* tdDSStream_DisconnectDevice)(int iCardID);

//获得关于多卡的数据
typedef  HRESULT (* tdDSStream_GetCardNumber)(int * pCardNum);
typedef  HRESULT (* tdDSStream_IsConnected)(int iCardID, BOOL * bConnected);

//谁获得声卡的使用权
typedef  void (* tdDSStream_WhoIsCapturingAudio)(int * pCardID);

//视频显示窗口的父窗口
typedef  HRESULT (* tdDSStream_SetOwnerWnd)(int iCardID, HWND hParentWnd);
typedef  HRESULT (* tdDSStream_GetOwnerWnd)(int iCardID, HWND* phParentWnd);

//视频显示窗口在父窗口中的位置
typedef  HRESULT (* tdDSStream_SetWindowPos)(int iCardID, RECT rc);
typedef  HRESULT (* tdDSStream_GetWindowPos)(int iCardID, RECT* prc);

//录像时的.avi文件名
typedef  void (* tdDSStream_SetCaptureFile)(int iCardID, LPCTSTR szFileName);
//开始录像
typedef  void (* tdDSStream_StartCapture)(int iCardID);
//停止录像
typedef  void (* tdDSStream_StopCapture)(int iCardID);
//是否正在录像
typedef  void (* tdDSStream_IsCapturing)(int iCardID, BOOL* bIsCapturing);

//设置后,视频显示窗口的键盘和鼠标消息将发往窗口 hWnd
typedef  HRESULT (* tdDSStream_SetMessageDrain)(int iCardID, HWND hWnd);

//设置后,每当(* tdDSStreamError产生时,窗口 hWnd 都将收到消息 lMsg(LPARAM = (* tdDSStreamError)
typedef  HRESULT (* tdDSStream_SetNotifyWindow)(int iCardID, HWND hWnd, long lMsg);
//分析当前产生的事件,发送消息 lMsg 到窗口 hWnd
typedef  void (* tdDSStream_ManageNotifyMessage)(int iCardID);

//全屏
typedef  HRESULT (* tdDSStream_FullScreen)(int iCardID, BOOL bFullSrc);
typedef  HRESULT (* tdDSStream_IsFullSrcMode)(int iCardID, BOOL* bIsFull);

//视频流的信息
//	pin:CAPTURE Pin 或 PREVIEW Pin
typedef  HRESULT (* tdDSStream_GetVideoInfo)(int iCardID, VIDEOSTREAMINFO * pVSI, int pin);
typedef  HRESULT (* tdDSStream_SetVideoInfo)(int iCardID, VIDEOSTREAMINFO vsi, int pin);

//调用系统对话框设置各种音、视频属性
//	id:属性代号
//	hParentWnd:系统对话框的父窗口
//	szCaption:系统对话框的标题
typedef  HRESULT (* tdDSStream_DisplayPropertyDialogs)(int iCardID, PropertyDialog id, HWND hParentWnd, LPCTSTR szCaption=NULL);
//各种音、视频属性是否可被调用
typedef  HRESULT (* tdDSStream_IsPropertyExist)(int iCardID, PropertyDialog id, BOOL* bReturn);

//各种视频图像属性
typedef  HRESULT (* tdDSStream_GetVideoPropertyValue)(int iCardID, VideoProperty id, VIDEOPROPERTYRANGE* pVPR);
typedef  HRESULT (* tdDSStream_SetVideoPropertyValue)(int iCardID, VideoProperty id, long value);
//专用于四路卡:在四路同屏时调节单路图像的视频属性
typedef  HRESULT (* tdDSStream_GetVideoPropertyValue_Ex)(int iCardID, long lWay, VideoProperty id, long * pValue);
typedef  HRESULT (* tdDSStream_SetVideoPropertyValue_Ex)(int iCardID, long lWay, VideoProperty id, long lValue);

//视频端口
typedef  HRESULT (* tdDSStream_RouteInPinToOutPin)(int iCardID, int idInPin, int idOutPin);
typedef  HRESULT (* tdDSStream_WhatInPinRouteToOutPin)(int iCardID, int idOutPin, long* pInPin);

//视频制式
//	VideoStandard:当前制式
//	pAvailable:返回设备支持的所有制式
typedef  HRESULT (* tdDSStream_GetVideoStandard)(int iCardID, VideoStandard* pVideoStandard, long* pAvailable);
typedef  HRESULT (* tdDSStream_SetVideoStandard)(int iCardID, VideoStandard vs);

//快照:JPG
//	szFileName:.jpg 文件的全路径名
//	iQuality:压缩质量(10-100)
typedef  HRESULT (* tdDSStream_SaveToJpgFile)(int iCardID, LPCTSTR szFileName, int iQuality);
//快照:BMP
typedef  HRESULT (* tdDSStream_SaveToBmpFile)(int iCardID, LPCTSTR szFileName);
//得到当前图像的 DIB 数据。若 pBuffer 等于 NULL,pSize 得到保存图像所需要的内存大小
typedef  HRESULT (* tdDSStream_GetCurrentDib)(int iCardID, BYTE* pBuffer, long* pSize);

//当前的显示状态
typedef  HRESULT (* tdDSStream_GetStreamStatus)(int iCardID, int* pStatus);
typedef  HRESULT (* tdDSStream_SetStreamStatus)(int iCardID, int status);

//录像时是否使用自定义的帧率(duFrameRate = 0-30)
typedef  void (* tdDSStream_SetFrameRateOnCapture)(int iCardID, BOOL bUseFrameRate, double duFrameRate);
typedef  void (* tdDSStream_IsUseFrameRate)(int iCardID, BOOL* pYesOrNo);

//录像时是否捕捉音频
typedef  void (* tdDSStream_IsCaptureAudio)(int iCardID, BOOL* bCaptureAudio);
typedef  void (* tdDSStream_SetCaptureAudio)(int iCardID, BOOL* bCaptureAudio);

//断开、连接某个Pin上连接的所有Filter
typedef  void (* tdDSStream_DisconnectPin)(int iCardID, int pin);
typedef  void (* tdDSStream_ConnectPin)(int iCardID, int pin);

//调试用:打印所有Filter的连接状况到文件 szFile 中
typedef  void (* tdDSStream_ListAllFilter)(int iCardID, LPCTSTR szFile);

//察看 PREVIEW Pin 是否存在
typedef  HRESULT (* tdDSStream_IsPreviewPinExisted)(int iCardID, BOOL* pbExisted);

//获取DIB数据流
extern  "C"
{
typedef void  (__stdcall *VideoStreamProc)(const BYTE* pDIBHead, const BYTE* pDIBits, LPVOID pParam);
}

typedef  HRESULT (* tdDSStream_GetVideoStream)(int iCardID, VideoStreamProc proc, LPVOID pParam);

//设置Logo、Time、Date的显示
//	设置表示Logo的BMP文件,必须为24位,最左下角的一点为透明色
typedef  HRESULT (* tdDSStream_SetLogoFile)(int iCardID, LPCTSTR szFilename);
//	显示或隐藏Logo
typedef  HRESULT (* tdDSStream_ShowLogo)(int iCardID, BOOL bShow, int x, int y);
//	显示或隐藏Time
typedef  HRESULT (* tdDSStream_ShowTime)(int iCardID, BOOL bShow, int x, int y);
//	显示或隐藏Date
typedef  HRESULT (* tdDSStream_ShowDate)(int iCardID, BOOL bShow, int x, int y);
//	是否在由(* tdDSStream_GetVideoStream)()得到的数据流中显示Logo、Time、Date
//	影响的函数:
//		(* tdDSStream_GetVideoStream)()
typedef  HRESULT (* tdDSStream_ShowLogoTimeOnUserStream)(int iCardID, BOOL bShow);

//专用于带矩阵的四路卡:矩阵调节,以 0 为基数
//idCamera >= 32 时,第 idWay 路无图像。
typedef  HRESULT (* tdDSStream_ChooseCamera_Ex)(int iCardID, BYTE idWay, BYTE idCamera);

//得到视频压缩Filter的信息
typedef  HRESULT (* tdDSStream_EnumVideoCompressor)(VideoCompressorInfo * pInfo, int * piVidCompNum);
//选择视频压缩算法
typedef  HRESULT (* tdDSStream_ChooseVideoCompressor)(LPCTSTR szCompName);
//看看当前使用的是什么压缩算法
typedef  HRESULT (* tdDSStream_GetCurrentVideoCompressor)(LPSTR pszCompName);
//视频压缩的质量)(0--100)
typedef  HRESULT (* tdDSStream_GetVideoCompressorQuality)(int * piQuality);
typedef  HRESULT (* tdDSStream_SetVideoCompressorQuality)(int iQuality);

//检测当前的视频输入端口上是否有信号输入
typedef  HRESULT (* tdDSStream_IsVideoSignalLocked)(int iCardID, BOOL * bIsSignalLocked);

#endif //!defined(DSSTREAM_H_2000_10_18)



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -