📄 usbvideo.h
字号:
#include "usbclient.h"
//一些常量定义
//USB相关
#define USB_TYPE_VENDOR (0x02 << 5)
#define USB_RECIP_DEVICE 0x00
#define USB_DIR_IN 0x80
//OV511相关
#define OV511_NUMSBUF 2
#define OV511_NUMFRAMES 2
//以下这些来自于Linux 2.4.18内核中的OV511.h
//寄存器具体功能可以参照OV511 Datasheet
//////////////////////////////////////////////////////////
/* Camera interface register numbers */
#define R511_CAM_DELAY 0x10
#define R511_CAM_EDGE 0x11
#define R511_CAM_PXCNT 0x12
#define R511_CAM_LNCNT 0x13
#define R511_CAM_PXDIV 0x14
#define R511_CAM_LNDIV 0x15
#define R511_CAM_UV_EN 0x16
#define R511_CAM_LINE_MODE 0x17
#define R511_CAM_OPTS 0x18
/* Snapshot mode camera interface register numbers */
#define R511_SNAP_FRAME 0x19
#define R511_SNAP_PXCNT 0x1A
#define R511_SNAP_LNCNT 0x1B
#define R511_SNAP_PXDIV 0x1C
#define R511_SNAP_LNDIV 0x1D
#define R511_SNAP_UV_EN 0x1E
#define R511_SNAP_OPTS 0x1F
/* DRAM register numbers */
#define R511_DRAM_FLOW_CTL 0x20
#define R511_DRAM_ARCP 0x21
#define R511_DRAM_MRC 0x22
#define R511_DRAM_RFC 0x23
#define R51x_SYS_RESET 0x50
#define R51x_SYS_INIT 0x53
#define OV511_NUMSBUF 2
#define FRAMES_PER_DESC 10
//////////////////////////////////////////////////////////////
#define MAXPACKETS 10
//视频相关处理函数
//分析视频接口
BOOL ParseStreamInterfaces (LPCUSB_DEVICE lpUsbDev, BYTE bIFStrm, BYTE bIFSubStrm, DWORD *pdwContext);
//进行OV511寄存器写操作
int RegisterWrite(PDRVCONTEXT pDrv, unsigned char reg, unsigned char value);
//进行OV511寄存器读操作
int RegisterRead(PDRVCONTEXT pDrv, unsigned char reg, unsigned char *value);
//给OV511寄存器赋初始值(在OV511初始化时调用)
int WriteRegvals(PDRVCONTEXT pDrv);
//停止OV511视频采集
int Ov51xStop(PDRVCONTEXT pDrv);
//重新开始OV511采集
int Ov51xRestart(PDRVCONTEXT pDrv);
//重置OV511
int Ov51xReset(PDRVCONTEXT pDrv,unsigned char reset_type);
//设置OV511传输包大小
//根据OV511 Datasheet
//视频接口有8种配置,每个的包大小分别为0,33,129,257,385,513,769,961
int Ov511SetPacketSize(PDRVCONTEXT pDrv,int size);
//设置视频接口
int SetStreamInterface(PDRVCONTEXT pDrv,BYTE nInterFace);
//设置默认参数
int Ov51xSetDefaultParams(PDRVCONTEXT pDrv);
//初始化寄存器
int Ov511ModeInitRegs(PDRVCONTEXT pDrv,int width, int height, int sub_flag);
//进行实时传输,这个函数来源于微软例程,参照usnclient.cpp中的IssueVendorTransfer完成
DWORD IssueIsochTransfer (
LPCUSB_FUNCS pUsbFuncs,
HANDLE hUsbDevice,
LPTRANSFER_NOTIFY_ROUTINE NotifyRoutine, // Transfer completion routine.
PVOID NotifyContext, // Single argument passed to the completion routine
DWORD Flags, // USB_XXX flags describing the transfer
DWORD dwStartingFrame, // Starting frame to read
DWORD dwNumFrames, // Number of frames to read
PDWORD pdwFrameLengths, // Array that receives the length of each frame
LPVOID pBuffer, // Pointer to transfer buffer
ULONG PhysAddr, // Specifies the physical address, which may be NULL, of the data buffer
LPDWORD pBytesTransferred, // Number of bytes transferred by USB
DWORD dwTimeout, // Timeout in msec
PUSB_ERROR pUsbRc // Returns USB_ERROR or USB_TRANSFER
);
//读取一帧画面
int Ov51xReadOneFrame(PDRVCONTEXT pDrv,unsigned char *pBuff,DWORD startaddress);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -