?? dsstream.h
字號:
/*************************************************
**
** 文件名:DSStream.h
**
** 創建者:10Moons xiyi
**
** 創建時間:2001.02.25
**
** 最后更新:2001.07.31
**
** 說明:DSStream.dll API 函數的聲明文件, ver 5.2
**
**************************************************/
#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;
RECT rcSource;
RECT rcTarget;
DWORD dwBitRate;
DWORD dwBitErrorRate;
LONGLONG AvgTimePerFrame;//幀率
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;
//初始化和反初始化
HRESULT DSStream_Initialize();
void DSStream_Uninitialize();
//枚舉系統中存在的視頻、音頻捕捉設備
HRESULT DSStream_EnumVideoCaptureDev(
char szDevName[MAX_DEVICE_NUM][MAX_DEVICE_NAME_LEN],
int *pDevNum);
HRESULT DSStream_EnumAudioCaptureDev(
char szDevName[MAX_DEVICE_NUM][MAX_DEVICE_NAME_LEN],
int *pDevNum);
//連接和斷開視頻捕捉設備
// iVideoDevID:視頻捕捉設備的序號(以0為基數)
// bOverlay:TURE-Overlay, FALSE-Preview
HRESULT DSStream_ConnectDevice(int iCardID, BOOL bOverlay, HWND hParentWnd = NULL);
HRESULT DSStream_DisconnectDevice(int iCardID);
//獲得關于多卡的數據
HRESULT DSStream_GetCardNumber(int * pCardNum);
HRESULT DSStream_IsConnected(int iCardID, BOOL * bConnected);
//誰獲得聲卡的使用權
void DSStream_WhoIsCapturingAudio(int * pCardID);
//視頻顯示窗口的父窗口
HRESULT DSStream_SetOwnerWnd(int iCardID, HWND hParentWnd);
HRESULT DSStream_GetOwnerWnd(int iCardID, HWND* phParentWnd);
//視頻顯示窗口在父窗口中的位置
HRESULT DSStream_SetWindowPos(int iCardID, RECT rc);
HRESULT DSStream_GetWindowPos(int iCardID, RECT* prc);
//錄像時的.avi文件名
void DSStream_SetCaptureFile(int iCardID, LPCTSTR szFileName);
//開始錄像
void DSStream_StartCapture(int iCardID);
//停止錄像
void DSStream_StopCapture(int iCardID);
//是否正在錄像
void DSStream_IsCapturing(int iCardID, BOOL* bIsCapturing);
//設置后,視頻顯示窗口的鍵盤和鼠標消息將發往窗口 hWnd
HRESULT DSStream_SetMessageDrain(int iCardID, HWND hWnd);
//設置后,每當DSStreamError產生時,窗口 hWnd 都將收到消息 lMsg(LPARAM = DSStreamError)
HRESULT DSStream_SetNotifyWindow(int iCardID, HWND hWnd, long lMsg);
//分析當前產生的事件,發送消息 lMsg 到窗口 hWnd
void DSStream_ManageNotifyMessage(int iCardID);
//全屏
HRESULT DSStream_FullScreen(int iCardID, BOOL bFullSrc);
HRESULT DSStream_IsFullSrcMode(int iCardID, BOOL* bIsFull);
//視頻流的信息
// pin:CAPTURE Pin 或 PREVIEW Pin
HRESULT DSStream_GetVideoInfo(int iCardID, VIDEOSTREAMINFO * pVSI, int pin);
HRESULT DSStream_SetVideoInfo(int iCardID, VIDEOSTREAMINFO vsi, int pin);
//調用系統對話框設置各種音、視頻屬性
// id:屬性代號
// hParentWnd:系統對話框的父窗口
// szCaption:系統對話框的標題
HRESULT DSStream_DisplayPropertyDialogs(int iCardID, PropertyDialog id, HWND hParentWnd, LPCTSTR szCaption=NULL);
//各種音、視頻屬性是否可被調用
HRESULT DSStream_IsPropertyExist(int iCardID, PropertyDialog id, BOOL* bReturn);
//各種視頻圖像屬性
HRESULT DSStream_GetVideoPropertyValue(int iCardID, VideoProperty id, VIDEOPROPERTYRANGE* pVPR);
HRESULT DSStream_SetVideoPropertyValue(int iCardID, VideoProperty id, long value);
//專用于四路卡:在四路同屏時調節單路圖像的視頻屬性
HRESULT DSStream_GetVideoPropertyValue_Ex(int iCardID, long lWay, VideoProperty id, long * pValue);
HRESULT DSStream_SetVideoPropertyValue_Ex(int iCardID, long lWay, VideoProperty id, long lValue);
//視頻端口
HRESULT DSStream_RouteInPinToOutPin(int iCardID, int idInPin, int idOutPin);
HRESULT DSStream_WhatInPinRouteToOutPin(int iCardID, int idOutPin, long* pInPin);
//視頻制式
// VideoStandard:當前制式
// pAvailable:返回設備支持的所有制式
HRESULT DSStream_GetVideoStandard(int iCardID, VideoStandard* pVideoStandard, long* pAvailable);
HRESULT DSStream_SetVideoStandard(int iCardID, VideoStandard vs);
//快照:JPG
// szFileName:.jpg 文件的全路徑名
// iQuality:壓縮質量(10-100)
HRESULT DSStream_SaveToJpgFile(int iCardID, LPCTSTR szFileName, int iQuality);
//快照:BMP
HRESULT DSStream_SaveToBmpFile(int iCardID, LPCTSTR szFileName);
//得到當前圖像的 DIB 數據。若 pBuffer 等于 NULL,pSize 得到保存圖像所需要的內存大小
HRESULT DSStream_GetCurrentDib(int iCardID, BYTE* pBuffer, long* pSize);
//當前的顯示狀態
HRESULT DSStream_GetStreamStatus(int iCardID, int* pStatus);
HRESULT DSStream_SetStreamStatus(int iCardID, int status);
//錄像時是否使用自定義的幀率(duFrameRate = 0-30)
void DSStream_SetFrameRateOnCapture(int iCardID, BOOL bUseFrameRate, double duFrameRate);
void DSStream_IsUseFrameRate(int iCardID, BOOL* pYesOrNo);
//錄像時是否捕捉音頻
void DSStream_IsCaptureAudio(int iCardID, BOOL* bCaptureAudio);
void DSStream_SetCaptureAudio(int iCardID, BOOL* bCaptureAudio);
//斷開、連接某個Pin上連接的所有Filter
void DSStream_DisconnectPin(int iCardID, int pin);
void DSStream_ConnectPin(int iCardID, int pin);
//調試用:打印所有Filter的連接狀況到文件 szFile 中
void DSStream_ListAllFilter(int iCardID, LPCTSTR szFile);
//察看 PREVIEW Pin 是否存在
HRESULT DSStream_IsPreviewPinExisted(int iCardID, BOOL* pbExisted);
//獲取DIB數據流
extern "C"
{
typedef void (__stdcall *VideoStreamProc) (const BYTE* pDIBHead, const BYTE* pDIBits, LPVOID pParam);
}
HRESULT DSStream_GetVideoStream(int iCardID, VideoStreamProc proc, LPVOID pParam);
//設置Logo、Time、Date的顯示
// 設置表示Logo的BMP文件,必須為24位,最左下角的一點為透明色
HRESULT DSStream_SetLogoFile(int iCardID, LPCTSTR szFilename);
// 顯示或隱藏Logo
HRESULT DSStream_ShowLogo(int iCardID, BOOL bShow, int x, int y);
// 顯示或隱藏Time
HRESULT DSStream_ShowTime(int iCardID, BOOL bShow, int x, int y);
// 顯示或隱藏Date
HRESULT DSStream_ShowDate(int iCardID, BOOL bShow, int x, int y);
// 是否在由DSStream_GetVideoStream()得到的數據流中顯示Logo、Time、Date
// 影響的函數:
// DSStream_GetVideoStream()
HRESULT DSStream_ShowLogoTimeOnUserStream(int iCardID, BOOL bShow);
//專用于帶矩陣的四路卡:矩陣調節,以 0 為基數
//idCamera >= 32 時,第 idWay 路無圖像。
HRESULT DSStream_ChooseCamera_Ex(int iCardID, BYTE idWay, BYTE idCamera);
//得到視頻壓縮Filter的信息
HRESULT DSStream_EnumVideoCompressor(VideoCompressorInfo * pInfo, int * piVidCompNum);
//選擇視頻壓縮算法
HRESULT DSStream_ChooseVideoCompressor(LPCTSTR szCompName);
//看看當前使用的是什么壓縮算法
HRESULT DSStream_GetCurrentVideoCompressor(LPSTR pszCompName);
//視頻壓縮的質量(0--100)
HRESULT DSStream_GetVideoCompressorQuality(int * piQuality);
HRESULT DSStream_SetVideoCompressorQuality(int iQuality);
//檢測當前的視頻輸入端口上是否有信號輸入
HRESULT DSStream_IsVideoSignalLocked(int iCardID, BOOL * bIsSignalLocked);
#endif //!defined(DSSTREAM_H_2000_10_18)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -