📄 videodev.h
字号:
#ifndef __LINUX_VIDEODEV_H#define __LINUX_VIDEODEV_H#include <linux/types.h>#include <linux/version.h>#define HAVE_V4L2 1#include <linux/videodev2.h>#ifdef __KERNEL__#include <linux/poll.h>#include <linux/mm.h>#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69)#include <linux/devfs_fs_kernel.h>#endif#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)#include <linux/device.h>#endifstruct video_device{ /* device info */#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) struct device *dev;#endif char name[32]; int type; /* v4l1 */ int type2; /* v4l2 */ int hardware; int minor; /* device ops + callbacks */ struct file_operations *fops; void (*release)(struct video_device *vfd);#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) /* old, obsolete interface -- dropped in 2.5.x, don't use it */ int (*open)(struct video_device *, int mode); void (*close)(struct video_device *); long (*read)(struct video_device *, char *, unsigned long, int noblock); long (*write)(struct video_device *, const char *, unsigned long, int noblock); unsigned int (*poll)(struct video_device *, struct file *, poll_table *); int (*ioctl)(struct video_device *, unsigned int , void *); int (*mmap)(struct video_device *, const char *, unsigned long); int (*initialize)(struct video_device *); #endif#if 1 /* to be removed in 2.7.x */ /* obsolete -- fops->owner is used instead */ struct module *owner; /* dev->driver_data will be used instead some day. * Use the video_{get|set}_drvdata() helper functions, * so the switch over will be transparent for you. * Or use {pci|usb}_{get|set}_drvdata() directly. */ void *priv;#endif /* for videodev.c intenal usage -- please don't touch */ int users; /* video_exclusive_{open|close} ... */ struct semaphore lock; /* ... helper function uses these */#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69) devfs_handle_t devfs_handle; /* devfs */#else char devfs_name[64]; /* devfs */#endif#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) struct class_device class_dev; /* sysfs */#endif};#define VIDEO_MAJOR 81#define VFL_TYPE_GRABBER 0#define VFL_TYPE_VBI 1#define VFL_TYPE_RADIO 2#define VFL_TYPE_VTX 3extern int video_register_device(struct video_device *, int type, int nr);extern void video_unregister_device(struct video_device *);extern struct video_device* video_devdata(struct file*);#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)#define to_video_device(cd) container_of(cd, struct video_device, class_dev)static inline voidvideo_device_create_file(struct video_device *vfd, struct class_device_attribute *attr){ class_device_create_file(&vfd->class_dev, attr);}static inline voidvideo_device_remove_file(struct video_device *vfd, struct class_device_attribute *attr){ class_device_remove_file(&vfd->class_dev, attr);}#endif/* helper functions to alloc / release struct video_device, the later can be used for video_device->release() */struct video_device *video_device_alloc(void);void video_device_release(struct video_device *vfd);/* helper functions to access driver private data. */static inline void *video_get_drvdata(struct video_device *dev){ return dev->priv;}static inline void video_set_drvdata(struct video_device *dev, void *data){ dev->priv = data;}extern int video_exclusive_open(struct inode *inode, struct file *file);extern int video_exclusive_release(struct inode *inode, struct file *file);extern int video_usercopy(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg, int (*func)(struct inode *inode, struct file *file, unsigned int cmd, void *arg));#endif /* __KERNEL__ */#define VID_TYPE_CAPTURE 1 /* Can capture */#define VID_TYPE_TUNER 2 /* Can tune */#define VID_TYPE_TELETEXT 4 /* Does teletext */#define VID_TYPE_OVERLAY 8 /* Overlay onto frame buffer */#define VID_TYPE_CHROMAKEY 16 /* Overlay by chromakey */#define VID_TYPE_CLIPPING 32 /* Can clip */#define VID_TYPE_FRAMERAM 64 /* Uses the frame buffer memory */#define VID_TYPE_SCALES 128 /* Scalable */#define VID_TYPE_MONOCHROME 256 /* Monochrome only */#define VID_TYPE_SUBCAPTURE 512 /* Can capture subareas of the image */#define VID_TYPE_MPEG_DECODER 1024 /* Can decode MPEG streams */#define VID_TYPE_MPEG_ENCODER 2048 /* Can encode MPEG streams */#define VID_TYPE_MJPEG_DECODER 4096 /* Can decode MJPEG streams */#define VID_TYPE_MJPEG_ENCODER 8192 /* Can encode MJPEG streams */struct video_capability{ char name[32]; int type; int channels; /* Num channels */ int audios; /* Num audio devices */ int maxwidth; /* Supported width */ int maxheight; /* And height */ int minwidth; /* Supported width */ int minheight; /* And height */};struct video_channel{ int channel; char name[32]; int tuners; __u32 flags;#define VIDEO_VC_TUNER 1 /* Channel has a tuner */#define VIDEO_VC_AUDIO 2 /* Channel has audio */ __u16 type;#define VIDEO_TYPE_TV 1#define VIDEO_TYPE_CAMERA 2 __u16 norm; /* Norm set by channel */};struct video_tuner{ int tuner; char name[32]; unsigned long rangelow, rangehigh; /* Tuner range */ __u32 flags;#define VIDEO_TUNER_PAL 1#define VIDEO_TUNER_NTSC 2#define VIDEO_TUNER_SECAM 4#define VIDEO_TUNER_LOW 8 /* Uses KHz not MHz */#define VIDEO_TUNER_NORM 16 /* Tuner can set norm */#define VIDEO_TUNER_STEREO_ON 128 /* Tuner is seeing stereo */#define VIDEO_TUNER_RDS_ON 256 /* Tuner is seeing an RDS datastream */#define VIDEO_TUNER_MBS_ON 512 /* Tuner is seeing an MBS datastream */ __u16 mode; /* PAL/NTSC/SECAM/OTHER */#define VIDEO_MODE_PAL 0#define VIDEO_MODE_NTSC 1#define VIDEO_MODE_SECAM 2#define VIDEO_MODE_AUTO 3 __u16 signal; /* Signal strength 16bit scale */};struct video_picture{ __u16 brightness; __u16 hue; __u16 colour; __u16 contrast; __u16 whiteness; /* Black and white only */ __u16 depth; /* Capture depth */ __u16 palette; /* Palette in use */#define VIDEO_PALETTE_GREY 1 /* Linear greyscale */#define VIDEO_PALETTE_HI240 2 /* High 240 cube (BT848) */#define VIDEO_PALETTE_RGB565 3 /* 565 16 bit RGB */#define VIDEO_PALETTE_RGB24 4 /* 24bit RGB */#define VIDEO_PALETTE_RGB32 5 /* 32bit RGB */ #define VIDEO_PALETTE_RGB555 6 /* 555 15bit RGB */#define VIDEO_PALETTE_YUV422 7 /* YUV422 capture */#define VIDEO_PALETTE_YUYV 8#define VIDEO_PALETTE_UYVY 9 /* The great thing about standards is ... */#define VIDEO_PALETTE_YUV420 10#define VIDEO_PALETTE_YUV411 11 /* YUV411 capture */#define VIDEO_PALETTE_RAW 12 /* RAW capture (BT848) */#define VIDEO_PALETTE_YUV422P 13 /* YUV 4:2:2 Planar */#define VIDEO_PALETTE_YUV411P 14 /* YUV 4:1:1 Planar */#define VIDEO_PALETTE_YUV420P 15 /* YUV 4:2:0 Planar */#define VIDEO_PALETTE_YUV410P 16 /* YUV 4:1:0 Planar */#define VIDEO_PALETTE_PLANAR 13 /* start of planar entries */#define VIDEO_PALETTE_COMPONENT 7 /* start of component entries */};struct video_audio{ int audio; /* Audio channel */ __u16 volume; /* If settable */ __u16 bass, treble; __u32 flags;#define VIDEO_AUDIO_MUTE 1#define VIDEO_AUDIO_MUTABLE 2#define VIDEO_AUDIO_VOLUME 4#define VIDEO_AUDIO_BASS 8#define VIDEO_AUDIO_TREBLE 16 #define VIDEO_AUDIO_BALANCE 32 char name[16];#define VIDEO_SOUND_MONO 1#define VIDEO_SOUND_STEREO 2#define VIDEO_SOUND_LANG1 4#define VIDEO_SOUND_LANG2 8 __u16 mode; __u16 balance; /* Stereo balance */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -