linux/drivers/media/video/stv680.h
<<
>>
Prefs
   1/****************************************************************************
   2 *
   3 *  Filename: stv680.h
   4 *
   5 *  Description:
   6 *     This is a USB driver for STV0680 based usb video cameras.
   7 *
   8 *  This program is free software; you can redistribute it and/or modify
   9 *  it under the terms of the GNU General Public License as published by
  10 *  the Free Software Foundation; either version 2 of the License, or
  11 *  (at your option) any later version.
  12 *
  13 *  This program is distributed in the hope that it will be useful,
  14 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 *  GNU General Public License for more details.
  17 *
  18 *  You should have received a copy of the GNU General Public License
  19 *  along with this program; if not, write to the Free Software
  20 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21 *
  22 ****************************************************************************/
  23
  24/* size of usb transfers */
  25#define STV680_PACKETSIZE       4096
  26
  27/* number of queued bulk transfers to use, may have problems if > 1 */
  28#define STV680_NUMSBUF          1
  29
  30/* number of frames supported by the v4l part */
  31#define STV680_NUMFRAMES        2
  32
  33/* scratch buffers for passing data to the decoders: 2 or 4 are good */
  34#define STV680_NUMSCRATCH       2
  35
  36/* number of nul sized packets to receive before kicking the camera */
  37#define STV680_MAX_NULLPACKETS  200
  38
  39/* number of decoding errors before kicking the camera */
  40#define STV680_MAX_ERRORS       100
  41
  42#define USB_PENCAM_VENDOR_ID    0x0553
  43#define USB_PENCAM_PRODUCT_ID   0x0202
  44
  45#define USB_CREATIVEGOMINI_VENDOR_ID    0x041e
  46#define USB_CREATIVEGOMINI_PRODUCT_ID   0x4007
  47
  48#define PENCAM_TIMEOUT          1000
  49/* fmt 4 */
  50#define STV_VIDEO_PALETTE       VIDEO_PALETTE_RGB24
  51
  52static struct usb_device_id device_table[] = {
  53        {USB_DEVICE (USB_PENCAM_VENDOR_ID, USB_PENCAM_PRODUCT_ID)},
  54        {USB_DEVICE (USB_CREATIVEGOMINI_VENDOR_ID, USB_CREATIVEGOMINI_PRODUCT_ID)},
  55        {}
  56};
  57MODULE_DEVICE_TABLE (usb, device_table);
  58
  59struct stv680_sbuf {
  60        unsigned char *data;
  61};
  62
  63enum {
  64        FRAME_UNUSED,           /* Unused (no MCAPTURE) */
  65        FRAME_READY,            /* Ready to start grabbing */
  66        FRAME_GRABBING,         /* In the process of being grabbed into */
  67        FRAME_DONE,             /* Finished grabbing, but not been synced yet */
  68        FRAME_ERROR,            /* Something bad happened while processing */
  69};
  70
  71enum {
  72        BUFFER_UNUSED,
  73        BUFFER_READY,
  74        BUFFER_BUSY,
  75        BUFFER_DONE,
  76};
  77
  78/* raw camera data <- sbuf (urb transfer buf) */
  79struct stv680_scratch {
  80        unsigned char *data;
  81        volatile int state;
  82        int offset;
  83        int length;
  84};
  85
  86/* processed data for display ends up here, after bayer */
  87struct stv680_frame {
  88        unsigned char *data;    /* Frame buffer */
  89        volatile int grabstate; /* State of grabbing */
  90        unsigned char *curline;
  91        int curlinepix;
  92        int curpix;
  93};
  94
  95/* this is almost the video structure uvd_t, with extra parameters for stv */
  96struct usb_stv {
  97        struct video_device *vdev;
  98
  99        struct usb_device *udev;
 100
 101        unsigned char bulk_in_endpointAddr;     /* __u8  the address of the bulk in endpoint */
 102        char *camera_name;
 103
 104        unsigned int VideoMode; /* 0x0100 = VGA, 0x0000 = CIF, 0x0300 = QVGA */
 105        int SupportedModes;
 106        int CIF;
 107        int VGA;
 108        int QVGA;
 109        int cwidth;             /* camera width */
 110        int cheight;            /* camera height */
 111        int maxwidth;           /* max video width */
 112        int maxheight;          /* max video height */
 113        int vwidth;             /* current width for video window */
 114        int vheight;            /* current height for video window */
 115        unsigned long int rawbufsize;
 116        unsigned long int maxframesize; /* rawbufsize * 3 for RGB */
 117
 118        int origGain;
 119        int origMode;           /* original camera mode */
 120
 121        struct mutex lock;      /* to lock the structure */
 122        int user;               /* user count for exclusive use */
 123        int removed;            /* device disconnected */
 124        int streaming;          /* Are we streaming video? */
 125        char *fbuf;             /* Videodev buffer area */
 126        struct urb *urb[STV680_NUMSBUF];        /* # of queued bulk transfers */
 127        int curframe;           /* Current receiving frame */
 128        struct stv680_frame frame[STV680_NUMFRAMES];    /* # frames supported by v4l part */
 129        int readcount;
 130        int framecount;
 131        int error;
 132        int dropped;
 133        int scratch_next;
 134        int scratch_use;
 135        int scratch_overflow;
 136        struct stv680_scratch scratch[STV680_NUMSCRATCH];       /* for decoders */
 137        struct stv680_sbuf sbuf[STV680_NUMSBUF];
 138
 139        unsigned int brightness;
 140        unsigned int chgbright;
 141        unsigned int whiteness;
 142        unsigned int colour;
 143        unsigned int contrast;
 144        unsigned int hue;
 145        unsigned int palette;
 146        unsigned int depth;     /* rgb24 in bits */
 147
 148        wait_queue_head_t wq;   /* Processes waiting */
 149
 150        int nullpackets;
 151};
 152
 153
 154static const unsigned char red[256] = {
 155        0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
 156        18, 18, 18, 18, 18, 18, 18, 25, 30, 35, 38, 42,
 157        44, 47, 50, 53, 54, 57, 59, 61, 63, 65, 67, 69,
 158        71, 71, 73, 75, 77, 78, 80, 81, 82, 84, 85, 87,
 159        88, 89, 90, 91, 93, 94, 95, 97, 98, 98, 99, 101,
 160        102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
 161        114, 115, 116, 116, 117, 118, 119, 120, 121, 122, 123, 124,
 162        125, 125, 126, 127, 128, 129, 129, 130, 131, 132, 133, 134,
 163        134, 135, 135, 136, 137, 138, 139, 140, 140, 141, 142, 143,
 164        143, 143, 144, 145, 146, 147, 147, 148, 149, 150, 150, 151,
 165        152, 152, 152, 153, 154, 154, 155, 156, 157, 157, 158, 159,
 166        159, 160, 161, 161, 161, 162, 163, 163, 164, 165, 165, 166,
 167        167, 167, 168, 168, 169, 170, 170, 170, 171, 171, 172, 173,
 168        173, 174, 174, 175, 176, 176, 177, 178, 178, 179, 179, 179,
 169        180, 180, 181, 181, 182, 183, 183, 184, 184, 185, 185, 186,
 170        187, 187, 188, 188, 188, 188, 189, 190, 190, 191, 191, 192,
 171        192, 193, 193, 194, 195, 195, 196, 196, 197, 197, 197, 197,
 172        198, 198, 199, 199, 200, 201, 201, 202, 202, 203, 203, 204,
 173        204, 205, 205, 206, 206, 206, 206, 207, 207, 208, 208, 209,
 174        209, 210, 210, 211, 211, 212, 212, 213, 213, 214, 214, 215,
 175        215, 215, 215, 216, 216, 217, 217, 218, 218, 218, 219, 219,
 176        220, 220, 221, 221
 177};
 178
 179static const unsigned char green[256] = {
 180        0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
 181        21, 21, 21, 21, 21, 21, 21, 28, 34, 39, 43, 47,
 182        50, 53, 56, 59, 61, 64, 66, 68, 71, 73, 75, 77,
 183        79, 80, 82, 84, 86, 87, 89, 91, 92, 94, 95, 97,
 184        98, 100, 101, 102, 104, 105, 106, 108, 109, 110, 111, 113,
 185        114, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126,
 186        127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
 187        139, 140, 141, 142, 143, 144, 144, 145, 146, 147, 148, 149,
 188        150, 151, 151, 152, 153, 154, 155, 156, 156, 157, 158, 159,
 189        160, 160, 161, 162, 163, 164, 164, 165, 166, 167, 167, 168,
 190        169, 170, 170, 171, 172, 172, 173, 174, 175, 175, 176, 177,
 191        177, 178, 179, 179, 180, 181, 182, 182, 183, 184, 184, 185,
 192        186, 186, 187, 187, 188, 189, 189, 190, 191, 191, 192, 193,
 193        193, 194, 194, 195, 196, 196, 197, 198, 198, 199, 199, 200,
 194        201, 201, 202, 202, 203, 204, 204, 205, 205, 206, 206, 207,
 195        208, 208, 209, 209, 210, 210, 211, 212, 212, 213, 213, 214,
 196        214, 215, 215, 216, 217, 217, 218, 218, 219, 219, 220, 220,
 197        221, 221, 222, 222, 223, 224, 224, 225, 225, 226, 226, 227,
 198        227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233,
 199        233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239,
 200        239, 240, 240, 241, 241, 242, 242, 243, 243, 243, 244, 244,
 201        245, 245, 246, 246
 202};
 203
 204static const unsigned char blue[256] = {
 205        0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
 206        23, 23, 23, 23, 23, 23, 23, 30, 37, 42, 47, 51,
 207        55, 58, 61, 64, 67, 70, 72, 74, 78, 80, 82, 84,
 208        86, 88, 90, 92, 94, 95, 97, 100, 101, 103, 104, 106,
 209        107, 110, 111, 112, 114, 115, 116, 118, 119, 121, 122, 124,
 210        125, 126, 127, 128, 129, 132, 133, 134, 135, 136, 137, 138,
 211        139, 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, 151,
 212        152, 154, 155, 156, 157, 158, 158, 159, 160, 161, 162, 163,
 213        165, 166, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174,
 214        176, 176, 177, 178, 179, 180, 180, 181, 182, 183, 183, 184,
 215        185, 187, 187, 188, 189, 189, 190, 191, 192, 192, 193, 194,
 216        194, 195, 196, 196, 198, 199, 200, 200, 201, 202, 202, 203,
 217        204, 204, 205, 205, 206, 207, 207, 209, 210, 210, 211, 212,
 218        212, 213, 213, 214, 215, 215, 216, 217, 217, 218, 218, 220,
 219        221, 221, 222, 222, 223, 224, 224, 225, 225, 226, 226, 227,
 220        228, 228, 229, 229, 231, 231, 232, 233, 233, 234, 234, 235,
 221        235, 236, 236, 237, 238, 238, 239, 239, 240, 240, 242, 242,
 222        243, 243, 244, 244, 245, 246, 246, 247, 247, 248, 248, 249,
 223        249, 250, 250, 251, 251, 253, 253, 254, 254, 255, 255, 255,
 224        255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
 225        255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
 226        255, 255, 255, 255
 227};
 228