diff -u --recursive --new-file nvsrc-3.3beta/src/Makefile nvsrc-3.3beta.linux.mcast.cu.qcam/src/Makefile --- nvsrc-3.3beta/src/Makefile Tue Jul 19 04:09:05 1994 +++ nvsrc-3.3beta.linux.mcast.cu.qcam/src/Makefile Wed Jan 24 14:09:26 1996 @@ -73,12 +73,22 @@ #CFLAGS = -g3 -O2 -DCPV_DECODE -DVIDEOLIVE -DX11GRAB $(INCS) #CPVOBJ = ../cpv/cpv_decode-hp.o +# +# Uncomment and edit these lines for Linux +# Note 1.1.73 or later is required for Multicast to work +# +INCS = -I/usr/X11/include -I/usr/include/tcl +NVLIBS = -L/usr/local/lib -ltk -ltcl -L/usr/X11/lib -lX11 -lm -lXext libqcam.a +#CFLAGS = -ansi -O2 -DLITTLE_BITFIELDS -DX11GRAB $(INCS) +CFLAGS = -ansi -O2 -DLITTLE_BITFIELDS -DX11GRAB -DQUICKCAM -DLINUX $(INCS) + OBJS = nv.o nv_init.o nv_decode.o nv_encode.o nv_getmulti.o nv_transform.o \ $(CPVOBJ) cellb_decode.o cellb_encode.o cellb_tables.o \ cuseeme_decode.o cuseeme_encode.o ibmvca_grab.o indigo_grab.o \ j300_grab.o jvdriverint.o parallax_grab.o parcvid_grab.o pip_grab.o \ sgivl_grab.o sunvideo_grab.o videolive_grab.o videopix_grab.o \ - x11_grab.o vid_color.o vid_grey.o vid_image.o vid_util.o vid_widget.o + x11_grab.o vid_color.o vid_grey.o vid_image.o vid_util.o vid_widget.o \ + quickcam_grab.o all: nv diff -u --recursive --new-file nvsrc-3.3beta/src/cuseeme_decode.c nvsrc-3.3beta.linux.mcast.cu.qcam/src/cuseeme_decode.c --- nvsrc-3.3beta/src/cuseeme_decode.c Tue Mar 22 11:41:04 1994 +++ nvsrc-3.3beta.linux.mcast.cu.qcam/src/cuseeme_decode.c Sat Feb 11 18:10:04 1995 @@ -23,11 +23,15 @@ */ #include +#include #include "sized_types.h" #include "vid_image.h" #include "vid_code.h" #include "cuseeme.h" +/* Mildly gross but moderately portable test for littleendian machines */ +#define LITTLEENDIAN (ntohl(0x12345678) != 0x12345678) + static int16 intraRowBytes[16] = { -1, -1, 0, 1, @@ -144,7 +148,7 @@ 0x11111000, 0x11111001, 0x11111010, 0x11111011, 0x11111100, 0x11111101, 0x11111110, 0x11111111 }; -static uint16 cvt4bitTo8bit[256] = +static uint16 pixpairMSB[256] = { 0xffff, 0xffee, 0xffdd, 0xffcc, 0xffbb, 0xffaa, 0xff99, 0xff88, 0xff77, 0xff66, 0xff55, 0xff44, 0xff33, 0xff22, 0xff11, 0xff00, 0xeeff, 0xeeee, 0xeedd, 0xeecc, 0xeebb, 0xeeaa, 0xee99, 0xee88, @@ -178,26 +182,63 @@ 0x00ff, 0x00ee, 0x00dd, 0x00cc, 0x00bb, 0x00aa, 0x0099, 0x0088, 0x0077, 0x0066, 0x0055, 0x0044, 0x0033, 0x0022, 0x0011, 0x0000 }; +static uint16 pixpairLSB[256] = + { 0xffff, 0xeeff, 0xddff, 0xccff, 0xbbff, 0xaaff, 0x99ff, 0x88ff, + 0x77ff, 0x66ff, 0x55ff, 0x44ff, 0x33ff, 0x22ff, 0x11ff, 0x00ff, + 0xffee, 0xeeee, 0xddee, 0xccee, 0xbbee, 0xaaee, 0x99ee, 0x88ee, + 0x77ee, 0x66ee, 0x55ee, 0x44ee, 0x33ee, 0x22ee, 0x11ee, 0x00ee, + 0xffdd, 0xeedd, 0xdddd, 0xccdd, 0xbbdd, 0xaadd, 0x99dd, 0x88dd, + 0x77dd, 0x66dd, 0x55dd, 0x44dd, 0x33dd, 0x22dd, 0x11dd, 0x00dd, + 0xffcc, 0xeecc, 0xddcc, 0xcccc, 0xbbcc, 0xaacc, 0x99cc, 0x88cc, + 0x77cc, 0x66cc, 0x55cc, 0x44cc, 0x33cc, 0x22cc, 0x11cc, 0x00cc, + 0xffbb, 0xeebb, 0xddbb, 0xccbb, 0xbbbb, 0xaabb, 0x99bb, 0x88bb, + 0x77bb, 0x66bb, 0x55bb, 0x44bb, 0x33bb, 0x22bb, 0x11bb, 0x00bb, + 0xffaa, 0xeeaa, 0xddaa, 0xccaa, 0xbbaa, 0xaaaa, 0x99aa, 0x88aa, + 0x77aa, 0x66aa, 0x55aa, 0x44aa, 0x33aa, 0x22aa, 0x11aa, 0x00aa, + 0xff99, 0xee99, 0xdd99, 0xcc99, 0xbb99, 0xaa99, 0x9999, 0x8899, + 0x7799, 0x6699, 0x5599, 0x4499, 0x3399, 0x2299, 0x1199, 0x0099, + 0xff88, 0xee88, 0xdd88, 0xcc88, 0xbb88, 0xaa88, 0x9988, 0x8888, + 0x7788, 0x6688, 0x5588, 0x4488, 0x3388, 0x2288, 0x1188, 0x0088, + 0xff77, 0xee77, 0xdd77, 0xcc77, 0xbb77, 0xaa77, 0x9977, 0x8877, + 0x7777, 0x6677, 0x5577, 0x4477, 0x3377, 0x2277, 0x1177, 0x0077, + 0xff66, 0xee66, 0xdd66, 0xcc66, 0xbb66, 0xaa66, 0x9966, 0x8866, + 0x7766, 0x6666, 0x5566, 0x4466, 0x3366, 0x2266, 0x1166, 0x0066, + 0xff55, 0xee55, 0xdd55, 0xcc55, 0xbb55, 0xaa55, 0x9955, 0x8855, + 0x7755, 0x6655, 0x5555, 0x4455, 0x3355, 0x2255, 0x1155, 0x0055, + 0xff44, 0xee44, 0xdd44, 0xcc44, 0xbb44, 0xaa44, 0x9944, 0x8844, + 0x7744, 0x6644, 0x5544, 0x4444, 0x3344, 0x2244, 0x1144, 0x0044, + 0xff33, 0xee33, 0xdd33, 0xcc33, 0xbb33, 0xaa33, 0x9933, 0x8833, + 0x7733, 0x6633, 0x5533, 0x4433, 0x3333, 0x2233, 0x1133, 0x0033, + 0xff22, 0xee22, 0xdd22, 0xcc22, 0xbb22, 0xaa22, 0x9922, 0x8822, + 0x7722, 0x6622, 0x5522, 0x4422, 0x3322, 0x2222, 0x1122, 0x0022, + 0xff11, 0xee11, 0xdd11, 0xcc11, 0xbb11, 0xaa11, 0x9911, 0x8811, + 0x7711, 0x6611, 0x5511, 0x4411, 0x3311, 0x2211, 0x1111, 0x0011, + 0xff00, 0xee00, 0xdd00, 0xcc00, 0xbb00, 0xaa00, 0x9900, 0x8800, + 0x7700, 0x6600, 0x5500, 0x4400, 0x3300, 0x2200, 0x1100, 0x0000 }; + static uint8 *CUSeeMe_DecodeRow(uint16 *ip, uint8 *data, int code, uint32 *rowdatap) { int intra; uint32 pix, rowdata; + uint16 *pixpair; + + pixpair = LITTLEENDIAN? pixpairLSB : pixpairMSB; rowdata = *rowdatap; if (code == 0) { pix = data[0]; rowdata = pix << 24; - ip[0] = cvt4bitTo8bit[pix]; + ip[0] = pixpair[pix]; pix = data[1]; rowdata += pix << 16; - ip[1] = cvt4bitTo8bit[pix]; + ip[1] = pixpair[pix]; pix = data[2]; rowdata += pix << 8; - ip[2] = cvt4bitTo8bit[pix]; + ip[2] = pixpair[pix]; pix = data[3]; rowdata += pix; - ip[3] = cvt4bitTo8bit[pix]; + ip[3] = pixpair[pix]; data += 4; } else { rowdata -= interRowDiff[code]; @@ -209,10 +250,10 @@ rowdata += longDiff[data[0]]; data++; } - ip[0] = cvt4bitTo8bit[rowdata >> 24]; - ip[1] = cvt4bitTo8bit[(rowdata >> 16) & 0xff]; - ip[2] = cvt4bitTo8bit[(rowdata >> 8) & 0xff]; - ip[3] = cvt4bitTo8bit[rowdata & 0xff]; + ip[0] = pixpair[rowdata >> 24]; + ip[1] = pixpair[(rowdata >> 16) & 0xff]; + ip[2] = pixpair[(rowdata >> 8) & 0xff]; + ip[3] = pixpair[rowdata & 0xff]; } *rowdatap = rowdata; diff -u --recursive --new-file nvsrc-3.3beta/src/cuseeme_encode.c nvsrc-3.3beta.linux.mcast.cu.qcam/src/cuseeme_encode.c --- nvsrc-3.3beta/src/cuseeme_encode.c Thu Jun 2 08:52:29 1994 +++ nvsrc-3.3beta.linux.mcast.cu.qcam/src/cuseeme_encode.c Sat Feb 11 18:10:04 1995 @@ -338,9 +338,9 @@ height = h; if ((w == CUSEEME_FULLWIDTH) && (h == CUSEEME_FULLHEIGHT)) { - cuseeme_type = CUSEEME_FULLSIZE; + cuseeme_type = htons(CUSEEME_FULLSIZE); } else if ((w == CUSEEME_HALFWIDTH) && (h == CUSEEME_HALFHEIGHT)) { - cuseeme_type = CUSEEME_HALFSIZE; + cuseeme_type = htons(CUSEEME_HALFSIZE); } else { cuseeme_type = 0; return; diff -u --recursive --new-file nvsrc-3.3beta/src/nv.c nvsrc-3.3beta.linux.mcast.cu.qcam/src/nv.c --- nvsrc-3.3beta/src/nv.c Tue Jun 28 07:58:06 1994 +++ nvsrc-3.3beta.linux.mcast.cu.qcam/src/nv.c Wed Jan 24 14:07:57 1996 @@ -78,6 +78,9 @@ #ifdef IBMVCA #include "ibmvca_grab.h" #endif +#ifdef QUICKCAM +#include "quickcam_grab.h" +#endif #define MAX_ICON_WIDTH 96 #define MAX_ICON_HEIGHT 72 @@ -159,6 +162,10 @@ #ifdef IBMVCA { "IBM VCA Video", "ibmvca", IBMVCA_Probe, IBMVCA_Attach, IBMVCA_Detach, IBMVCA_Start, IBMVCA_Stop, 0 }, +#endif +#ifdef QUICKCAM + { "Quickcam Video", "quickcam", QcamGrab_Probe, QcamGrab_Attach, QcamGrab_Detach, + QcamGrab_Start, QcamGrab_Stop, 0 }, #endif #ifdef X11GRAB { "X11 Screen Grab", "x11", X11Grab_Probe, X11Grab_Attach, diff -u --recursive --new-file nvsrc-3.3beta/src/nv_grabpanels.tcl nvsrc-3.3beta.linux.mcast.cu.qcam/src/nv_grabpanels.tcl --- nvsrc-3.3beta/src/nv_grabpanels.tcl Sat Jun 18 07:18:58 1994 +++ nvsrc-3.3beta.linux.mcast.cu.qcam/src/nv_grabpanels.tcl Wed Jan 24 14:01:36 1996 @@ -2,6 +2,64 @@ # nv_grabpanels.tcl - TK interface descriptions for video grabber controls # +# Quickcam +frame .grabControls.quickcam + +label .grabControls.quickcam.title -text "Quickcam Controls" + +frame .grabControls.quickcam.row1 + +set quickcamBpp [quickcam get BPP] + +frame .grabControls.quickcam.row1.radios +pack append .grabControls.quickcam.row1.radios \ + [frame .grabControls.quickcam.row1.radios.fill1] {top expand fill} \ + [radiobutton .grabControls.quickcam.row1.radios.bpp4 -text "4-bit" \ + -relief flat -width 10 -value 4 -anchor w \ + -variable quickcamBpp -command "quickcam set BPP 4" ] {top fill} \ + [frame .grabControls.quickcam.row1.radios.fill2] {top expand fill} \ + [radiobutton .grabControls.quickcam.row1.radios.bpp6 -text "6-bit" \ + -relief flat -width 10 -value 6 -anchor w \ + -variable quickcamBpp -command "quickcam set BPP 6" ] {top fill} \ + [frame .grabControls.quickcam.row1.radios.fill3] {top expand fill} + +frame .grabControls.quickcam.sliders +pack append .grabControls.quickcam.sliders \ + [scale .grabControls.quickcam.sliders.contrast \ + -length 100 -orient horizontal \ + -command "quickcam set CONTRAST" \ + -label "Contrast" -from 0 -to 255] \ + {top fill} \ + [scale .grabControls.quickcam.sliders.brightness \ + -length 100 -orient horizontal \ + -command "quickcam set BRIGHTNESS" \ + -label "Brightness" -from 0 -to 255] \ + {top fill} \ + [scale .grabControls.quickcam.sliders.whitebalance \ + -length 100 -orient horizontal \ + -command "quickcam set WHITEBALANCE" \ + -label "White Balance" -from 0 -to 255] \ + {top fill} + + +.grabControls.quickcam.sliders.contrast set [quickcam get CONTRAST] +.grabControls.quickcam.sliders.brightness set [quickcam get BRIGHTNESS] +.grabControls.quickcam.sliders.whitebalance set [quickcam get WHITEBALANCE] + + +pack append .grabControls.quickcam.row1 \ + [frame .grabControls.quickcam.row1.fill1] {left expand fill} \ + .grabControls.quickcam.sliders {left fill} \ + [frame .grabControls.quickcam.row1.fill2] {left expand fill} \ + .grabControls.quickcam.row1.radios {left fill} \ + [frame .grabControls.quickcam.row1.fill3] {left expand fill} + +pack append .grabControls.quickcam \ + .grabControls.quickcam.title {top fill} \ + .grabControls.quickcam.row1 {top fill} + +# End Quickcam + frame .grabControls.parcvid label .grabControls.parcvid.title -text "PARC Video controls" diff -u --recursive --new-file nvsrc-3.3beta/src/quickcam_grab.c nvsrc-3.3beta.linux.mcast.cu.qcam/src/quickcam_grab.c --- nvsrc-3.3beta/src/quickcam_grab.c Thu Jan 1 10:00:00 1970 +++ nvsrc-3.3beta.linux.mcast.cu.qcam/src/quickcam_grab.c Wed Jan 24 14:09:13 1996 @@ -0,0 +1,291 @@ +/* + * Copyright (c) 1996 + * Ipsilon Networks, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Ipsilon Networks, Inc. + * 4. The name of Ipsilon Networks, Inc., may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY IPSILON NETWORKS, INC., ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL IPSILON NETWORKS, INC., BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#ifdef QUICKCAM +#include +#include +#include +#ifdef LINUX +#include +#else +#include +#endif +#include +#include "sized_types.h" +#include "vid_image.h" +#include "vid_code.h" +#include "quickcam_grab.h" +#include +#include +#include +#include +#include + +#include "qcam.h" + +extern Tcl_Interp *interp; + +/*----------------------------------------------------------------------*/ + +#define DEFAULT_ROWS 120 +#define DEFAULT_COLUMNS 160 +#define DEFAULT_BPP 6 +#define DEFAULT_CONTRAST +#define DEFAULT_BRIGHTNESS +#define DEFAULT_WHITEBALANCE + +struct { + int rows; + int columns; + int contrast; + int brightness; + int whitebalance; + int bpp; +} qcamgl; + +struct qcam *qc; + +/* + * Grey-scale only + */ +static void QcamGrab_GetFrame8(uint8 *y_data) +{ + int i, size; + scanbuf *scan, *scantmp; + int shift; + size = qcamgl.rows*qcamgl.columns; + shift = (qcamgl.bpp == 4) ? 4 : 2; + scantmp = scan = qc_scan(qc); + + for (i = 0; i < size; i++) + *y_data++ = (*scantmp++ << shift) & 0xff; + + free(scan); +} + + +static int QcamGrab_GetFrame (uint8 *y_data, int8 *uv_data) +{ + QcamGrab_GetFrame8(y_data); + return (1); +} + +/* + * Set Quickcam registers. + * + * Usage: From Tcl: + * qcam get + * returns the value of + * qcam set + * + */ +#define CMD_UNKNOWN -1 +#define CMD_BPP 0 +#define CMD_CONTRAST 1 +#define CMD_BRIGHTNESS 2 +#define CMD_WHITEBALANCE 3 + +#define NAME 0 +#define GETSET 1 +#define CMD 2 +#define VALUE 3 + +static char *cmd_table[] = { + "BPP", + "CONTRAST", + "BRIGHTNESS", + "WHITEBALANCE", + NULL +}; + +int +QcamCmd(ClientData clientdata, Tcl_Interp *interp, int ac, char *av[]) +{ + int set; + int data; + static char buf[50]; + int error; + int cmd; + int i; + + error = TCL_OK; + data = 0; + cmd = CMD_UNKNOWN; + interp->result = "0"; + + if(ac < 3) { + interp->result = "wrong # arguments"; + return TCL_ERROR; + } + + set = 0; + if(strcmp(av[GETSET], "set") == 0) { + if(ac != 4) { + interp->result = "wrong # arguments (set)"; + return TCL_ERROR; + } + set = 1; + data = atoi(av[VALUE]); + } else if (ac != 3) { /* get */ + interp->result = "wrong # arguments (get)"; + return TCL_ERROR; + } + + for(i=0; cmd_table[i] != NULL; i++) { + if(strcmp(cmd_table[i], av[CMD]) == 0) { + cmd = i; + break; + } + } + if(cmd == CMD_UNKNOWN) { + sprintf(buf, "meteor: unknown command: %s", av[CMD]); + interp->result = buf; + return TCL_ERROR; + } + + switch(cmd) { + case CMD_BPP: + if(set) { + qcamgl.bpp = data; + (void) qc_setbitdepth(qc,data); + } else { + sprintf(buf, "%d", qcamgl.bpp); + } + break; + + case CMD_CONTRAST: + if(set) { + qcamgl.contrast = data; + (void) qc_setcontrast(qc,data); + } else { + sprintf(buf, "%d", qcamgl.contrast); + } + break; + + case CMD_BRIGHTNESS: + if(set) { + qcamgl.brightness = data; + (void) qc_setbrightness(qc,data); + } else { + sprintf(buf, "%d", qcamgl.brightness); + } + break; + + case CMD_WHITEBALANCE: + if(set) { + qcamgl.whitebalance = data; + (void) qc_setwhitebal(qc,data); + } else { + sprintf(buf, "%d", qcamgl.whitebalance); + } + break; + } + + if (set) + qc_set(qc); + + interp->result = buf; + return error; +} + +int +QcamGrab_Probe(void) +{ + /* call qcam open */ + qc = qc_init(); + + /* + * Set up default parms. + */ + qcamgl.rows = DEFAULT_ROWS; + qcamgl.columns = DEFAULT_COLUMNS; + qcamgl.bpp = DEFAULT_BPP; + + /* + * Get the other values from the library + */ + qcamgl.contrast = qc_getcontrast(qc); + qcamgl.brightness = qc_getbrightness(qc); + qcamgl.whitebalance = qc_getwhitebal(qc); + + if (qc_open(qc)) + return (0); + + qc_setresolution(qc,qcamgl.columns,qcamgl.rows); + qc_set(qc); + + Tcl_CreateCommand(interp, "quickcam", QcamCmd, (ClientData)NULL, + (Tcl_CmdDeleteProc *)NULL); + + return VID_SMALL|VID_MEDIUM|VID_LARGE|VID_GREYSCALE; +} + +char *QcamGrab_Attach(void) +{ + return ".grabControls.quickcam"; +} + +void QcamGrab_Detach(void) +{ +} + +/*ARGSUSED*/ +grabproc_t *QcamGrab_Start(int max_framerate, int config, + reconfigproc_t *reconfig) +{ + + switch (config & VID_SIZEMASK) { + case VID_SMALL: + qcamgl.rows = NTSC_HEIGHT/4; + qcamgl.columns = NTSC_WIDTH/4; + break; + case VID_MEDIUM: + qcamgl.rows = NTSC_HEIGHT/2; + qcamgl.columns = NTSC_WIDTH/2; + break; + case VID_LARGE: + qcamgl.rows = NTSC_HEIGHT; + qcamgl.columns = NTSC_WIDTH; + break; + } + + qc_setresolution(qc,qcamgl.columns,qcamgl.rows); + qc_set(qc); + + (*reconfig)(0, qcamgl.columns, qcamgl.rows); + + return QcamGrab_GetFrame; +} + +void QcamGrab_Stop(void) +{} + +#endif /* QUICKCAM */ diff -u --recursive --new-file nvsrc-3.3beta/src/quickcam_grab.h nvsrc-3.3beta.linux.mcast.cu.qcam/src/quickcam_grab.h --- nvsrc-3.3beta/src/quickcam_grab.h Thu Jan 1 10:00:00 1970 +++ nvsrc-3.3beta.linux.mcast.cu.qcam/src/quickcam_grab.h Wed Jan 24 14:00:12 1996 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 1996 + * Ipsilon Networks, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Ipsilon Networks, Inc. + * 4. The name of Ipsilon Networks, Inc., may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY IPSILON NETWORKS, INC., ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL IPSILON NETWORKS, INC., BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +extern int QcamGrab_Probe(void); +extern char *QcamGrab_Attach(void); +extern void QcamGrab_Detach(void); +extern grabproc_t *QcamGrab_Start(int framerate, int config, + reconfigproc_t *reconfig); +extern void QcamGrab_Stop(void);