00001 /* These are the MJPEG API extensions for the Video4Linux API, 00002 first introduced by the Iomega Buz driver by Rainer Johanni 00003 <rainer@johanni.de> 00004 */ 00005 00006 /* This is identical with the mgavideo internal params struct, 00007 please tell me if you change this struct here ! <gz@lysator.liu.se) */ 00008 struct mjpeg_params 00009 { 00010 00011 /* The following parameters can only be queried */ 00012 00013 int major_version; /* Major version number of driver */ 00014 int minor_version; /* Minor version number of driver */ 00015 00016 /* Main control parameters */ 00017 00018 int input; /* Input channel: 0 = Composite, 1 = S-VHS */ 00019 int norm; /* Norm: VIDEO_MODE_PAL or VIDEO_MODE_NTSC */ 00020 int decimation; /* decimation of captured video, 00021 enlargement of video played back. 00022 Valid values are 1, 2, 4 or 0. 00023 0 is a special value where the user 00024 has full control over video scaling */ 00025 00026 /* The following parameters only have to be set if decimation==0, 00027 for other values of decimation they provide the data how the image is captured */ 00028 00029 int HorDcm; /* Horizontal decimation: 1, 2 or 4 */ 00030 int VerDcm; /* Vertical decimation: 1 or 2 */ 00031 int TmpDcm; /* Temporal decimation: 1 or 2, 00032 if TmpDcm==2 in capture every second frame is dropped, 00033 in playback every frame is played twice */ 00034 int field_per_buff; /* Number of fields per buffer: 1 or 2 */ 00035 int img_x; /* start of image in x direction */ 00036 int img_y; /* start of image in y direction */ 00037 int img_width; /* image width BEFORE decimation, 00038 must be a multiple of HorDcm*16 */ 00039 int img_height; /* image height BEFORE decimation, 00040 must be a multiple of VerDcm*8 */ 00041 00042 /* --- End of parameters for decimation==0 only --- */ 00043 00044 /* JPEG control parameters */ 00045 00046 int quality; /* Measure for quality of compressed images. 00047 Scales linearly with the size of the compressed images. 00048 Must be beetween 0 and 100, 100 is a compression 00049 ratio of 1:4 */ 00050 00051 int odd_even; /* Which field should come first ??? 00052 This is more aptly named "top_first", 00053 i.e. (odd_even==1) --> top-field-first */ 00054 00055 int APPn; /* Number of APP segment to be written, must be 0..15 */ 00056 int APP_len; /* Length of data in JPEG APPn segment */ 00057 char APP_data[60]; /* Data in the JPEG APPn segment. */ 00058 00059 int COM_len; /* Length of data in JPEG COM segment */ 00060 char COM_data[60]; /* Data in JPEG COM segment */ 00061 00062 unsigned long jpeg_markers; /* Which markers should go into the JPEG output. 00063 Unless you exactly know what you do, leave them untouched. 00064 Inluding less markers will make the resulting code 00065 smaller, but there will be fewer aplications 00066 which can read it. 00067 The presence of the APP and COM marker is 00068 influenced by APP0_len and COM_len ONLY! */ 00069 #define JPEG_MARKER_DHT (1<<3) /* Define Huffman Tables */ 00070 #define JPEG_MARKER_DQT (1<<4) /* Define Quantization Tables */ 00071 #define JPEG_MARKER_DRI (1<<5) /* Define Restart Interval */ 00072 #define JPEG_MARKER_COM (1<<6) /* Comment segment */ 00073 #define JPEG_MARKER_APP (1<<7) /* App segment, driver will allways use APP0 */ 00074 00075 int VFIFO_FB; /* Flag for enabling Video Fifo Feedback. 00076 If this flag is turned on and JPEG decompressing 00077 is going to the screen, the decompress process 00078 is stopped every time the Video Fifo is full. 00079 This enables a smooth decompress to the screen 00080 but the video output signal will get scrambled */ 00081 00082 /* Misc */ 00083 00084 char reserved[312]; /* Makes 512 bytes for this structure */ 00085 }; 00086 00087 struct mjpeg_requestbuffers 00088 { 00089 unsigned long count; /* Number of buffers for MJPEG grabbing */ 00090 unsigned long size; /* Size PER BUFFER in bytes */ 00091 }; 00092 00093 struct mjpeg_sync 00094 { 00095 unsigned long frame; /* Frame (0 - n) for double buffer */ 00096 unsigned long length; /* number of code bytes in buffer (capture only) */ 00097 unsigned long seq; /* frame sequence number */ 00098 struct timeval timestamp; /* timestamp */ 00099 }; 00100 00101 struct mjpeg_status 00102 { 00103 int input; /* Input channel, has to be set prior to BUZIOC_G_STATUS */ 00104 int signal; /* Returned: 1 if valid video signal detected */ 00105 int norm; /* Returned: VIDEO_MODE_PAL or VIDEO_MODE_NTSC */ 00106 int color; /* Returned: 1 if color signal detected */ 00107 }; 00108 00109 /* 00110 Private IOCTL to set up for displaying MJPEG 00111 */ 00112 #define MJPIOC_G_PARAMS _IOR ('v', BASE_VIDIOCPRIVATE+0, struct mjpeg_params) 00113 #define MJPIOC_S_PARAMS _IOWR('v', BASE_VIDIOCPRIVATE+1, struct mjpeg_params) 00114 #define MJPIOC_REQBUFS _IOWR('v', BASE_VIDIOCPRIVATE+2, struct mjpeg_requestbuffers) 00115 #define MJPIOC_QBUF_CAPT _IOW ('v', BASE_VIDIOCPRIVATE+3, int) 00116 #define MJPIOC_QBUF_PLAY _IOW ('v', BASE_VIDIOCPRIVATE+4, int) 00117 #define MJPIOC_SYNC _IOR ('v', BASE_VIDIOCPRIVATE+5, struct mjpeg_sync) 00118 #define MJPIOC_G_STATUS _IOWR('v', BASE_VIDIOCPRIVATE+6, struct mjpeg_status)
1.5.5