File: videodev.h

package info (click to toggle)
zapping 0.10~cvs6-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 9,856 kB
  • ctags: 11,841
  • sloc: ansic: 111,154; asm: 11,770; sh: 9,812; xml: 2,742; makefile: 1,283; perl: 488
file content (388 lines) | stat: -rw-r--r-- 15,149 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
#ifndef __LINUX_VIDEODEV_H
#define __LINUX_VIDEODEV_H

#include <linux/types.h>
#include <linux/version.h>

#ifdef __KERNEL__

#if LINUX_VERSION_CODE >= 0x020100
#include <linux/poll.h>
#endif
#include <linux/devfs_fs_kernel.h>

struct video_device
{
     char name[32];
     int type;
     int hardware;

     int (*open)(struct video_device *, int mode);
     void (*close)(struct video_device *);
     long (*read)(struct video_device *, char *, unsigned long, int noblock);
     /* Do we need a write method ? */
     long (*write)(struct video_device *, const char *, unsigned long, int noblock);
#if LINUX_VERSION_CODE >= 0x020100
     unsigned int (*poll)(struct video_device *, struct file *, poll_table *);
#endif
     int (*ioctl)(struct video_device *, unsigned int , void *);
     int (*mmap)(struct video_device *, const char *, unsigned long);
     int (*initialize)(struct video_device *);       
     void *priv;             /* Used to be 'private' but that upsets C++ */
     int busy;
     int minor;
     devfs_handle_t devfs_handle;
};

extern int videodev_init(void);
#define VIDEO_MAJOR     81
extern int video_register_device(struct video_device *, int type);

#define VFL_TYPE_GRABBER        0
#define VFL_TYPE_VBI            1
#define VFL_TYPE_RADIO          2
#define VFL_TYPE_VTX            3

extern void video_unregister_device(struct video_device *);
#endif


#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      
     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 */
     __u16   step;           /* Step actual volume uses */
};

struct video_clip
{
     __s32   x,y;
     __s32   width, height;
     struct  video_clip *next;       /* For user use/driver use only */
};

struct video_window
{
     __u32   x,y;                    /* Position of window */
     __u32   width,height;           /* Its size */
     __u32   chromakey;
     __u32   flags;
     struct  video_clip *clips;      /* Set only */
     int     clipcount;
#define VIDEO_WINDOW_INTERLACE  1
#define VIDEO_WINDOW_CHROMAKEY  16      /* Overlay by chromakey */
#define VIDEO_CLIP_BITMAP       -1
/* bitmap is 1024x625, a '1' bit represents a clipped pixel */
#define VIDEO_CLIPMAP_SIZE      (128 * 625)
};

struct video_capture
{
     __u32   x,y;                    /* Offsets into image */
     __u32   width, height;          /* Area to capture */
     __u16   decimation;             /* Decimation divder */
     __u16   flags;                  /* Flags for capture */
#define VIDEO_CAPTURE_ODD               0       /* Temporal */
#define VIDEO_CAPTURE_EVEN              1
};

struct video_buffer
{
     void    *base;
     int     height,width;
     int     depth;
     int     bytesperline;
};

struct video_mmap
{
     unsigned        int frame;              /* Frame (0 - n) for double buffer */
     int             height,width;
     unsigned        int format;             /* should be VIDEO_PALETTE_* */
};

struct video_key
{
     __u8    key[8];
     __u32   flags;
};


#define VIDEO_MAX_FRAME         32

struct video_mbuf
{
     int     size;           /* Total memory to map */
     int     frames;         /* Frames */
     int     offsets[VIDEO_MAX_FRAME];
};
     

#define         VIDEO_NO_UNIT   (-1)

     
struct video_unit
{
     int     video;          /* Video minor */
     int     vbi;            /* VBI minor */
     int     radio;          /* Radio minor */
     int     audio;          /* Audio minor */
     int     teletext;       /* Teletext minor */
};

struct vbi_format {
     __u32   sampling_rate;  /* in Hz */
     __u32   samples_per_line;
     __u32   sample_format;  /* VIDEO_PALETTE_RAW only (1 byte) */
     __s32   start[2];       /* starting line for each frame */
     __u32   count[2];       /* count of lines for each frame */
     __u32   flags;
#define VBI_UNSYNC      1       /* can distingues between top/bottom field */
#define VBI_INTERLACED  2       /* lines are interlaced */
};

/* video_info is biased towards hardware mpeg encode/decode */
/* but it could apply generically to any hardware compressor/decompressor */
struct video_info
{
     __u32   frame_count;    /* frames output since decode/encode began */
     __u32   h_size;         /* current unscaled horizontal size */
     __u32   v_size;         /* current unscaled veritcal size */
     __u32   smpte_timecode; /* current SMPTE timecode (for current GOP) */
     __u32   picture_type;   /* current picture type */
     __u32   temporal_reference;     /* current temporal reference */
     __u8    user_data[256]; /* user data last found in compressed stream */
     /* user_data[0] contains user data flags, user_data[1] has count */
};

/* generic structure for setting playback modes */
struct video_play_mode
{
     int     mode;
     int     p1;
     int     p2;
};

/* for loading microcode / fpga programming */
struct video_code
{
     char    loadwhat[16];   /* name or tag of file being passed */
     int     datasize;
     __u8    *data;
};

#define VIDIOCGCAP              _IOR('v',1,struct video_capability)     /* Get capabilities */
#define VIDIOCGCHAN             _IOWR('v',2,struct video_channel)       /* Get channel info (sources) */
#define VIDIOCSCHAN             _IOW('v',3,struct video_channel)        /* Set channel  */
#define VIDIOCGTUNER            _IOWR('v',4,struct video_tuner)         /* Get tuner abilities */
#define VIDIOCSTUNER            _IOW('v',5,struct video_tuner)          /* Tune the tuner for the current channel */
#define VIDIOCGPICT             _IOR('v',6,struct video_picture)        /* Get picture properties */
#define VIDIOCSPICT             _IOW('v',7,struct video_picture)        /* Set picture properties */
#define VIDIOCCAPTURE           _IOW('v',8,int)                         /* Start, end capture */
#define VIDIOCGWIN              _IOR('v',9, struct video_window)        /* Get the video overlay window */
#define VIDIOCSWIN              _IOW('v',10, struct video_window)       /* Set the video overlay window - passes clip list for hardware smarts , chromakey etc */
#define VIDIOCGFBUF             _IOR('v',11, struct video_buffer)       /* Get frame buffer */
#define VIDIOCSFBUF             _IOW('v',12, struct video_buffer)       /* Set frame buffer - root only */
#define VIDIOCKEY               _IOR('v',13, struct video_key)          /* Video key event - to dev 255 is to all - cuts capture on all DMA windows with this key (0xFFFFFFFF == all) */
#define VIDIOCGFREQ             _IOR('v',14, unsigned long)             /* Set tuner */
#define VIDIOCSFREQ             _IOW('v',15, unsigned long)             /* Set tuner */
#define VIDIOCGAUDIO            _IOR('v',16, struct video_audio)        /* Get audio info */
#define VIDIOCSAUDIO            _IOW('v',17, struct video_audio)        /* Audio source, mute etc */
#define VIDIOCSYNC              _IOW('v',18, int)                       /* Sync with mmap grabbing */
#define VIDIOCMCAPTURE          _IOW('v',19, struct video_mmap)         /* Grab frames */
#define VIDIOCGMBUF             _IOR('v',20, struct video_mbuf)         /* Memory map buffer info */
#define VIDIOCGUNIT             _IOR('v',21, struct video_unit)         /* Get attached units */
#define VIDIOCGCAPTURE          _IOR('v',22, struct video_capture)      /* Get subcapture */
#define VIDIOCSCAPTURE          _IOW('v',23, struct video_capture)      /* Set subcapture */
#define VIDIOCSPLAYMODE         _IOW('v',24, struct video_play_mode)    /* Set output video mode/feature */
#define VIDIOCSWRITEMODE        _IOW('v',25, int)                       /* Set write mode */
#define VIDIOCGPLAYINFO         _IOR('v',26, struct video_info)         /* Get current playback info from hardware */
#define VIDIOCSMICROCODE        _IOW('v',27, struct video_code)         /* Load microcode into hardware */
#define VIDIOCGVBIFMT           _IOR('v',28, struct vbi_format)         /* Get VBI information */
#define VIDIOCSVBIFMT           _IOW('v',29, struct vbi_format)         /* Set VBI information */


#define BASE_VIDIOCPRIVATE      192             /* 192-255 are private */

/* VIDIOCSWRITEMODE */
#define VID_WRITE_MPEG_AUD              0
#define VID_WRITE_MPEG_VID              1
#define VID_WRITE_OSD                   2
#define VID_WRITE_TTX                   3
#define VID_WRITE_CC                    4
#define VID_WRITE_MJPEG                 5

/* VIDIOCSPLAYMODE */
#define VID_PLAY_VID_OUT_MODE           0
     /* p1: = VIDEO_MODE_PAL, VIDEO_MODE_NTSC, etc ... */
#define VID_PLAY_GENLOCK                1
     /* p1: 0 = OFF, 1 = ON */
     /* p2: GENLOCK FINE DELAY value */ 
#define VID_PLAY_NORMAL                 2
#define VID_PLAY_PAUSE                  3
#define VID_PLAY_SINGLE_FRAME           4
#define VID_PLAY_FAST_FORWARD           5
#define VID_PLAY_SLOW_MOTION            6
#define VID_PLAY_IMMEDIATE_NORMAL       7
#define VID_PLAY_SWITCH_CHANNELS        8
#define VID_PLAY_FREEZE_FRAME           9
#define VID_PLAY_STILL_MODE             10
#define VID_PLAY_MASTER_MODE            11
     /* p1: see below */
#define         VID_PLAY_MASTER_NONE    1
#define         VID_PLAY_MASTER_VIDEO   2
#define         VID_PLAY_MASTER_AUDIO   3
#define VID_PLAY_ACTIVE_SCANLINES       12
     /* p1 = first active; p2 = last active */
#define VID_PLAY_RESET                  13
#define VID_PLAY_END_MARK               14



#define VID_HARDWARE_BT848      1
#define VID_HARDWARE_QCAM_BW    2
#define VID_HARDWARE_PMS        3
#define VID_HARDWARE_QCAM_C     4
#define VID_HARDWARE_PSEUDO     5
#define VID_HARDWARE_SAA5249    6
#define VID_HARDWARE_AZTECH     7
#define VID_HARDWARE_SF16MI     8
#define VID_HARDWARE_RTRACK     9
#define VID_HARDWARE_ZOLTRIX    10
#define VID_HARDWARE_SAA7146    11
#define VID_HARDWARE_VIDEUM     12      /* Reserved for Winnov videum */
#define VID_HARDWARE_RTRACK2    13
#define VID_HARDWARE_PERMEDIA2  14      /* Reserved for Permedia2 */
#define VID_HARDWARE_RIVA128    15      /* Reserved for RIVA 128 */
#define VID_HARDWARE_PLANB      16      /* PowerMac motherboard video-in */
#define VID_HARDWARE_BROADWAY   17      /* Broadway project */
#define VID_HARDWARE_GEMTEK     18
#define VID_HARDWARE_TYPHOON    19
#define VID_HARDWARE_VINO       20      /* SGI Indy Vino */
#define VID_HARDWARE_CADET      21      /* Cadet radio */
#define VID_HARDWARE_TRUST      22      /* Trust FM Radio */
#define VID_HARDWARE_TERRATEC   23      /* TerraTec ActiveRadio */
#define VID_HARDWARE_CPIA       24
#define VID_HARDWARE_ZR36120    25      /* Zoran ZR36120/ZR36125 */
#define VID_HARDWARE_ZR36067    26      /* Zoran ZR36067/36060 */
#define VID_HARDWARE_OV511      27      
#define VID_HARDWARE_ZR356700   28      /* Zoran 36700 series */

/*
 *      Initialiser list
 */
 
struct video_init
{
     char *name;
     int (*init)(struct video_init *);
};

#endif