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

📄 usbvideo.h

📁 EVC 写的 wince usb camera 代码
💻 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 + -