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

📄 v2u_ioctl.h

📁 vga(or dvi )to usb video4linux api sample
💻 H
字号:
/**************************************************************************** * * $Id: v2u_ioctl.h,v 1.63 2008/08/18 06:40:51 monich Exp $ * * Copyright (C) 2003-2008 Epiphan Systems, Inc. All rights reserved. * * Defines IOCTL interface to the VGA2USB driver. Included by the driver * and by the user level code. * ****************************************************************************/#ifndef _VGA2USB_IOCTL_H_#define _VGA2USB_IOCTL_H_ 1#include "v2u_defs.h"/* Structure packing */#ifdef _WIN32#  include <pshpack1.h>#endif#ifndef V2U_PACKED#  ifdef _WIN32#    define V2U_PACKED#  else#    define V2U_PACKED __attribute__((packed))#  endif#endif/* Platform specific magic */#ifdef _WIN32#  define FILE_DEVICE_VGA2USB       FILE_DEVICE_UNKNOWN#  define IOCTL_VGA2USB(x,a)        CTL_CODE(FILE_DEVICE_VGA2USB,x,METHOD_NEITHER,a)#  define IOCTL_VGA2USB_R(x,type)   IOCTL_VGA2USB(x,FILE_READ_ACCESS)#  define IOCTL_VGA2USB_W(x,type)   IOCTL_VGA2USB(x,FILE_WRITE_ACCESS)#  define IOCTL_VGA2USB_WR(x,type)  IOCTL_VGA2USB(x,FILE_ANY_ACCESS)#else  /* Unix */#  define IOCTL_VGA2USB(x)          _IO('V',x)#  define IOCTL_VGA2USB_R(x,type)   _IOR('V',x,type)#  define IOCTL_VGA2USB_W(x,type)   _IOW('V',x,type)#  define IOCTL_VGA2USB_WR(x,type)  _IOWR('V',x,type)#endif /* Unix *//* IOCTL definitions *//*  * IOCTL_VGA2USB_VIDEOMODE * * Detects video mode. If cable is disconnected, width and height are zero. * Note that the vertical refresh rate is measured in milliHertz.  * That is, the number 59900 represents 59.9 Hz. * * Support: Linux, Windows, MacOS X */#define IOCTL_VGA2USB_VIDEOMODE    IOCTL_VGA2USB_R(9,V2U_VideoMode)/*  * IOCTL_VGA2USB_DEFAULTPARAMS * IOCTL_VGA2USB_GETPARAMS * IOCTL_VGA2USB_SETPARAMS * * IOCTL_VGA2USB_DEFAULTPARAMS fills V2U_GrabParameters structure with * default capture parameters automatically selected by the driver. flags * field is returned as zero. The defaults may change over time, especially * after parameters of the input VGA signal have changed. * * Support: MacOS X *          Windows, Linux (IOCTL_VGA2USB_GET/SETPARAMS only) */typedef struct ioctl_setparams {    V2U_UINT32 flags;       /* Validity flags for fields below             */                            /* When any of the fields below is used,       */                            /* corresponding V2U_FLAG_VALID_* flag  is set */                            /* otherwise the field is ignored              */    V2U_INT32  hshift;      /* Shifts image left (<0) or right(>0).        */                             /* Valid range depends on the video mode.      */                            /* Invalid values are rounded to the nearest   */                            /* valid value                                 */    V2U_UINT8  phase;       /* Pixel sampling phase, [0,31]                */    V2U_UINT8  gain_r;      /* Gain for the red channel, [0,255]           */    V2U_UINT8  gain_g;      /* Gain for the green channel, [0,255]         */    V2U_UINT8  gain_b;      /* Gain for the blue channel, [0,255]          */    V2U_UINT8  offset_r;    /* Offset for the red channel, [0,63]          */    V2U_UINT8  offset_g;    /* Offset for the green channel, [0,63]        */    V2U_UINT8  offset_b;    /* Offset for the blue channel, [0,63]         */    V2U_UINT8  reserved;    /* added for alignment, don't use              */    V2U_INT32  vshift;      /* Shifts image up or down                     */                            /* Valid range depends on the video mode.      */                            /* Invalid values are rounded to the nearest   */                            /* valid value                                 */    V2U_INT32  pllshift;    /* Adjusts the PLL value                       */    V2U_INT32  grab_flags;  /* Sets grab_flags                             */    V2U_INT32  grab_flags_mask; /* Marks which bits from grab_flags are used  */} V2U_GrabParameters;/* Indicates that hshift field is used */#define V2U_FLAG_VALID_HSHIFT       0x0001/* Indicates that phase field is used */#define V2U_FLAG_VALID_PHASE        0x0002/* Indicates that all gain_{rgb} and offset_{rgb} fields are used */#define V2U_FLAG_VALID_OFFSETGAIN   0x0004/* Indicates that vshift field is used */#define V2U_FLAG_VALID_VSHIFT       0x0008/* Indicates that pllshift field is used */#define V2U_FLAG_VALID_PLLSHIFT     0x0010/* Indicates that grab_flags and grab_flags_mask are used */#define V2U_FLAG_VALID_GRABFLAGS    0x0020/* Legacy names */#define GRAB_BMP_BOTTOM_UP      V2U_GRAB_BMP_BOTTOM_UP#define GRAB_PREFER_WIDE_MODE   V2U_GRAB_PREFER_WIDE_MODE/* Flags allowed in grab_flags and grab_flags_mask fields *//* Grab image upside-down */#define V2U_GRAB_BMP_BOTTOM_UP      0x10000/* Sometimes 4:3 and wide modes with the same height are indistinguishable,  * so this flag can force choosing wide mode */#define V2U_GRAB_PREFER_WIDE_MODE   0x20000/*  * The rangles below are obsolete. They depend on the frame grabber model * as well as the video mode. Use V2UKey_AdjustmentsRange property to get * the ranges that are valid for the parcular frame grabber and current * video mode. */#define V2U_MIN_PHASE   0#define V2U_MAX_PHASE   31#define V2U_MIN_GAIN    0#define V2U_MAX_GAIN    255#define V2U_MIN_OFFSET  0#define V2U_MAX_OFFSET  63#define IOCTL_VGA2USB_DEFAULTPARAMS IOCTL_VGA2USB_R(5,V2U_GrabParameters)#define IOCTL_VGA2USB_GETPARAMS     IOCTL_VGA2USB_R(6,V2U_GrabParameters)#define IOCTL_VGA2USB_SETPARAMS     IOCTL_VGA2USB_W(8,V2U_GrabParameters)/*  * IOCTL_VGA2USB_GRABFRAME * * For pixel format check V2U_GRABFRAME_FORMAT_XXX constants in v2u_defs.h * * Support: Linux, Windows, MacOS X */typedef struct ioctl_grabframe {    void *      pixbuf;     /* IN  should be filled by user process */    V2U_INT32   pixbuflen;  /* IN  should be filled by user process */    V2U_INT32   width;      /* OUT width in pixels */    V2U_INT32   height;     /* OUT height in pixels */    V2U_INT32   bpp;        /* IN  pixel format */} V2U_GrabFrame;typedef struct ioctl_grabframe2 {    void *      pixbuf;     /* IN  should be filled by user process */    V2U_INT32   pixbuflen;  /* IN  should be filled by user process */    V2U_INT32   palette;    /* IN pixel format */    V2URect     crop;       /* IN/OUT cropping area; all zeros = full frame */     V2U_VideoMode mode;     /* OUT VGA mode */    V2U_INT32   imagelen;   /* OUT size of the image stored in pixbuf */    V2U_INT32   retcode;    /* OUT return/error code */} V2U_GrabFrame2;#define IOCTL_VGA2USB_GRABFRAME     IOCTL_VGA2USB_WR(10,V2U_GrabFrame)#define IOCTL_VGA2USB_GRABFRAME2    IOCTL_VGA2USB_WR(20,V2U_GrabFrame2)/* * Error codes */#define V2UERROR_OK             0#define V2UERROR_FAULT          1#define V2UERROR_INVALARG       2#define V2UERROR_SMALLBUF       3#define V2UERROR_OUTOFMEMORY    4/* * IOCTL_VGA2USB_GETSN * * Support: Windows, Linux, MacOS X */#define V2U_SN_BUFSIZ 32typedef struct ioctl_getsn {    char sn[V2U_SN_BUFSIZ]; /* OUT serial number string */} V2U_GetSN;#define IOCTL_VGA2USB_GETSN         IOCTL_VGA2USB_R(7,V2U_GetSN)/* * IOCTL_VGA2USB_SENDPS2 (KVM2USB capable products only) * * Support: Windows, Linux, MacOS X */typedef struct ioctl_sendps2 {    short addr;    short len;    unsigned char buf[64];} V2U_SendPS2;#define V2U_PS2ADDR_KEYBOARD        0x01#define V2U_PS2ADDR_MOUSE           0x02#define IOCTL_VGA2USB_SENDPS2       IOCTL_VGA2USB_W(16,V2U_SendPS2)/* * IOCTL_VGA2USB_GET_PROPERTY * IOCTL_VGA2USB_SET_PROPERTY * * Get or set the value of the specified property. * * Support: Windows, Linux, MacOS X * Required driver version: 3.6.22 or later. */typedef enum v2u_product_type {    V2UProductOther,    V2UProductVGA2USB,    V2UProductKVM2USB,    V2UProductDVI2USB,    V2UProductVGA2USBPro,    V2UProductVGA2USBLR,    V2UProductDVI2USBSolo,    V2UProductDVI2USBDuo,    V2UProductKVM2USBPro,    V2UProductKVM2USBLR} V2UProductType;typedef enum v2u_scale_mode {    V2UScaleNone,                   /* No scaling */    V2UScaleModeNearestNeighbor,    /* Nearest neighbor algorithm */    V2UScaleModeCount               /* Number of valid modes */} V2UScaleMode;typedef struct v2u_adjustment_range {    V2U_UINT32 flags;    V2U_UINT32 valid_flags;    V2U_INT16 hshift_min;    V2U_INT16 hshift_max;    V2U_INT16 phase_min;    V2U_INT16 phase_max;    V2U_INT16 offset_min;    V2U_INT16 offset_max;    V2U_INT16 gain_min;    V2U_INT16 gain_max;    V2U_INT16 vshift_min;    V2U_INT16 vshift_max;    V2U_INT16 pll_min;    V2U_INT16 pll_max;} V2UAdjRange;/* WARNING: custom vga mode part of API is not stable yet and is subject to change */#define VIDEOMODE_TYPE_VALID            0x01#define VIDEOMODE_TYPE_ENABLED          0x02#define VIDEOMODE_TYPE_DIGITAL          0x10#define VIDEOMODE_TYPE_INTERLACED       0x20#define VIDEOMODE_TYPE_HSYNCPOSITIVE    0x40#define VIDEOMODE_TYPE_VSYNCPOSITIVE    0x80/* Maximum number of custom videomodes */#define V2U_CUSTOM_VIDEOMODE_COUNT      8typedef struct vesa_videomode {    V2U_UINT32 VerFrequency;        /* mHz */    V2U_UINT16 HorAddrTime;         /* pixels */    V2U_UINT16 HorFrontPorch;       /* pixels */    V2U_UINT16 HorSyncTime;         /* pixels */    V2U_UINT16 HorBackPorch;        /* pixels */    V2U_UINT16 VerAddrTime;         /* lines */    V2U_UINT16 VerFrontPorch;       /* lines */    V2U_UINT16 VerSyncTime;         /* lines */    V2U_UINT16 VerBackPorch;        /* lines */    V2U_UINT32 Type;} V2UVideoModeDescr;/* * The first 8 (V2U_CUSTOM_VIDEOMODE_COUNT) entries in the video mode table * are reserved for custom video modes. The remaining entries are standard * video modes. */typedef struct custom_videomode {    V2U_INT32 idx;    V2UVideoModeDescr vesa_mode;} V2UVGAMode;typedef struct v2u_version {    V2U_INT32 major;    V2U_INT32 minor;    V2U_INT32 micro;    V2U_INT32 nano;} V2UVersion;#define V2U_DSHOW_LIMIT_FPS 0x200   /* V2UKey_DirectShowFlags */typedef enum v2u_property_key {    V2UKey_UsbProductID,            /* GET only [uint16] */    V2UKey_ProductType,             /* GET only [product_type] */    V2UKey_DirectShowFixRes,        /* GET/SET  [size], Windows only */    V2UKey_DirectShowFlags,         /* GET/SET  [uint32], Windows only */    V2UKey_DirectShowDefaultBmp,    /* GET/SET  [wstr], Windows only */    V2UKey_ModeMeasurmentsDump,     /* GET only [blob] */    V2UKey_ResetADC,                /* SET only [uint32] */    V2UKey_DirectShowScaleMode,     /* GET/SET  [scale], Windows only */    V2UKey_HardwareCompression,     /* GET only [boolean] */    V2UKey_AdjustmentsRange,        /* GET only [adj_range] */    V2UKey_Version,                 /* GET only [version] */    V2UKey_EDID,                    /* GET/SET  [edid] */    V2UKey_DirectShowMaxFps,        /* GET/SET  [uint32], Windows only */    V2UKey_KVMCapable,              /* GET only [boolean] */    V2UKey_VGAMode,                 /* GET/SET  [vgamode] */    V2UKey_CurrentVGAModeIndex      /* GET only [int32] (-1) if none */} V2UPropertyKey;                                typedef union v2u_property_value {    V2U_INT8        int8;    V2U_UINT8       uint8;    V2U_INT16       int16;    V2U_UINT16      uint16;    V2U_INT32       int32;    V2U_UINT32      uint32;    V2U_BOOL        boolean;    V2UProductType  product_type;    V2USize         size;    V2URect         rect;    V2UStrUcs2      wstr;    V2UScaleMode    scale;    V2UAdjRange     adj_range;    V2UVersion      version;    V2UVGAMode      vgamode;    V2U_UINT8       edid[128];    V2U_UINT8       blob[256];} V2UPropertyValue;typedef struct v2u_ioctl_property {    V2UPropertyKey key;             /* IN      property key */    V2UPropertyValue value;         /* IN/OUT  property value */} V2U_Property;#define IOCTL_VGA2USB_GET_PROPERTY  IOCTL_VGA2USB_WR(18,V2U_Property)#define IOCTL_VGA2USB_SET_PROPERTY  IOCTL_VGA2USB_W(19,V2U_Property)/**  * Restore previous packing  */#ifdef _WIN32#  include <poppack.h>#endif#endif /* _VGA2USB_IOCTL_H_ */

⌨️ 快捷键说明

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