kopia lustrzana https://gitlab.com/sane-project/backends
Used GNU indent style.
rodzic
421fa4e12a
commit
2b54c3e7c4
|
@ -88,12 +88,14 @@
|
|||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
struct CHANLIST {
|
||||
struct CHANLIST
|
||||
{
|
||||
char *name;
|
||||
int freq;
|
||||
};
|
||||
|
||||
struct CHANLISTS {
|
||||
struct CHANLISTS
|
||||
{
|
||||
char *name;
|
||||
struct CHANLIST *list;
|
||||
int count;
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
#define VIDEO_RGB16_BE 6 /* 16 bpp big endian */
|
||||
#define VIDEO_BGR24 7 /* bgrbgrbgrbgr (LE) */
|
||||
#define VIDEO_BGR32 8 /* bgr-bgr-bgr- (LE) */
|
||||
#define VIDEO_RGB24 9 /* rgbrgbrgbrgb (BE)*/
|
||||
#define VIDEO_RGB32 10 /* -rgb-rgb-rgb (BE)*/
|
||||
#define VIDEO_RGB24 9 /* rgbrgbrgbrgb (BE) */
|
||||
#define VIDEO_RGB32 10 /* -rgb-rgb-rgb (BE) */
|
||||
#define VIDEO_LUT2 11 /* lookup-table 2 byte depth */
|
||||
#define VIDEO_LUT4 12 /* lookup-table 4 byte depth */
|
||||
|
||||
|
@ -17,37 +17,41 @@
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
struct STRTAB {
|
||||
struct STRTAB
|
||||
{
|
||||
long nr;
|
||||
char *str;
|
||||
};
|
||||
|
||||
struct OVERLAY_CLIP {
|
||||
int x1,x2,y1,y2;
|
||||
struct OVERLAY_CLIP
|
||||
{
|
||||
int x1, x2, y1, y2;
|
||||
};
|
||||
|
||||
struct GRABBER {
|
||||
struct GRABBER
|
||||
{
|
||||
char *name;
|
||||
int flags;
|
||||
struct STRTAB *norms;
|
||||
struct STRTAB *inputs;
|
||||
|
||||
int (*grab_open)(char *opt);
|
||||
int (*grab_close)(void);
|
||||
int (*grab_open) (char *opt);
|
||||
int (*grab_close) (void);
|
||||
|
||||
int (*grab_setupfb)(int sw, int sh, int format, void *base, int bpl);
|
||||
int (*grab_overlay)(int x, int y, int width, int height, int format,
|
||||
struct OVERLAY_CLIP *oc, int count);
|
||||
int (*grab_setupfb) (int sw, int sh, int format, void *base, int bpl);
|
||||
int (*grab_overlay) (int x, int y, int width, int height, int format,
|
||||
struct OVERLAY_CLIP * oc, int count);
|
||||
|
||||
int (*grab_setparams)(int format, int *width, int *height, int *linelength);
|
||||
void* (*grab_capture)(int single);
|
||||
void (*grab_cleanup)(void);
|
||||
int (*grab_setparams) (int format, int *width, int *height,
|
||||
int *linelength);
|
||||
void *(*grab_capture) (int single);
|
||||
void (*grab_cleanup) (void);
|
||||
|
||||
int (*grab_tune)(unsigned long freq);
|
||||
int (*grab_tuned)(void);
|
||||
int (*grab_input)(int input, int norm);
|
||||
int (*grab_picture)(int color, int bright, int hue, int contrast);
|
||||
int (*grab_audio)(int mute, int volume, int *mode);
|
||||
int (*grab_tune) (unsigned long freq);
|
||||
int (*grab_tuned) (void);
|
||||
int (*grab_input) (int input, int norm);
|
||||
int (*grab_picture) (int color, int bright, int hue, int contrast);
|
||||
int (*grab_audio) (int mute, int volume, int *mode);
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
@ -60,11 +64,11 @@ extern int fd_grab;
|
|||
extern struct GRABBER *grabber;
|
||||
|
||||
extern unsigned int format2depth[];
|
||||
extern unsigned char* format_desc[];
|
||||
extern unsigned char *format_desc[];
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
int grabber_open(int sw, int sh, void *base, int format, int width);
|
||||
int grabber_setparams(int format, int *width, int *height,
|
||||
int grabber_open (int sw, int sh, void *base, int format, int width);
|
||||
int grabber_setparams (int format, int *width, int *height,
|
||||
int *linelength, int lut_valid);
|
||||
void* grabber_capture(void *dest, int dest_linelength, int single);
|
||||
void *grabber_capture (void *dest, int dest_linelength, int single);
|
||||
|
|
205
backend/v4l.c
205
backend/v4l.c
|
@ -52,11 +52,11 @@
|
|||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
|
||||
#ifdef _AIX
|
||||
# include "lalloca.h" /* MUST come first for AIX! */
|
||||
# include "../include/lalloca.h" /* MUST come first for AIX! */
|
||||
#endif
|
||||
|
||||
#include "sane/config.h"
|
||||
#include "lalloca.h"
|
||||
#include "../include/sane/config.h"
|
||||
#include "../include/lalloca.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
|
@ -79,13 +79,13 @@
|
|||
#include <sys/stat.h>
|
||||
|
||||
|
||||
#include "sane/sane.h"
|
||||
#include "sane/sanei.h"
|
||||
#include "sane/saneopts.h"
|
||||
#include "../include/sane/sane.h"
|
||||
#include "../include/sane/sanei.h"
|
||||
#include "../include/sane/saneopts.h"
|
||||
|
||||
#include "v4l-grab.h"
|
||||
#if what_is_this
|
||||
# include "colorspace.h"
|
||||
# include "colorspace.h" /* ??? */
|
||||
#endif
|
||||
#include <sys/ioctl.h>
|
||||
#include <asm/types.h> /* XXX glibc */
|
||||
|
@ -99,74 +99,68 @@
|
|||
#include "v4l.h"
|
||||
|
||||
#define BACKEND_NAME v4l
|
||||
#include "sane/sanei_backend.h"
|
||||
#include "../include/sane/sanei_backend.h"
|
||||
|
||||
#ifndef PATH_MAX
|
||||
# define PATH_MAX 1024
|
||||
#endif
|
||||
|
||||
#include "sane/sanei_config.h"
|
||||
#include "../include/sane/sanei_config.h"
|
||||
#define V4L_CONFIG_FILE "v4l.conf"
|
||||
|
||||
static const SANE_Device ** devlist = NULL;
|
||||
static const SANE_Device **devlist = NULL;
|
||||
static int num_devices;
|
||||
static V4L_Device * first_dev;
|
||||
static V4L_Scanner * first_handle;
|
||||
static V4L_Device *first_dev;
|
||||
static V4L_Scanner *first_handle;
|
||||
static int v4ldev;
|
||||
static char *buffer;
|
||||
static int buffercount;
|
||||
|
||||
|
||||
static const SANE_String_Const resolution_list[] =
|
||||
{
|
||||
static const SANE_String_Const resolution_list[] = {
|
||||
"Low", /* million-mode */
|
||||
"High", /* billion-mode */
|
||||
0
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
static const SANE_Int color_depth_list[] =
|
||||
{
|
||||
3 , /* # of elements */
|
||||
static const SANE_Int color_depth_list[] = {
|
||||
3, /* # of elements */
|
||||
6, 8, 24 /* "thousand" mode not implemented yet */
|
||||
};
|
||||
};
|
||||
|
||||
static const SANE_Int xfer_scale_list[] =
|
||||
{
|
||||
static const SANE_Int xfer_scale_list[] = {
|
||||
4, /* # of elements */
|
||||
1, 2, 4 , 8
|
||||
};
|
||||
1, 2, 4, 8
|
||||
};
|
||||
|
||||
static const SANE_Range u8_range =
|
||||
{
|
||||
static const SANE_Range u8_range = {
|
||||
/* min, max, quantization */
|
||||
0, 255, 0
|
||||
};
|
||||
};
|
||||
|
||||
static const SANE_Range brightness_range =
|
||||
{
|
||||
static const SANE_Range brightness_range = {
|
||||
/* min, max, quantization */
|
||||
0, 255, 0 /* 255 is bulb mode! */
|
||||
};
|
||||
};
|
||||
|
||||
static SANE_Range x_range = {0,338,2};
|
||||
static SANE_Range x_range = { 0, 338, 2 };
|
||||
|
||||
static SANE_Range odd_x_range = {1,339,2};
|
||||
static SANE_Range odd_x_range = { 1, 339, 2 };
|
||||
|
||||
static SANE_Range y_range = {0,249,1};
|
||||
static SANE_Range y_range = { 0, 249, 1 };
|
||||
|
||||
static SANE_Range odd_y_range ={1,250,1};
|
||||
static SANE_Range odd_y_range = { 1, 250, 1 };
|
||||
|
||||
|
||||
static SANE_Parameters parms =
|
||||
{
|
||||
static SANE_Parameters parms = {
|
||||
SANE_FRAME_RGB,
|
||||
1, /* 1 = Last Frame , 0 = More Frames to come */
|
||||
0, /* Number of bytes returned per scan line: */
|
||||
0, /* Number of pixels per scan line. */
|
||||
0, /* Number of lines for the current scan. */
|
||||
8, /* Number of bits per sample. */
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
static struct video_capability capability;
|
||||
|
@ -176,9 +170,9 @@ static struct video_mbuf ov_mbuf;
|
|||
static struct video_mmap gb;
|
||||
|
||||
static SANE_Status
|
||||
attach (const char *devname, V4L_Device **devp)
|
||||
attach (const char *devname, V4L_Device ** devp)
|
||||
{
|
||||
V4L_Device * q;
|
||||
V4L_Device *q;
|
||||
|
||||
errno = 0;
|
||||
|
||||
|
@ -206,7 +200,7 @@ attach (const char *devname, V4L_Device **devp)
|
|||
|
||||
|
||||
static SANE_Status
|
||||
init_options (V4L_Scanner *s)
|
||||
init_options (V4L_Scanner * s)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -295,7 +289,7 @@ init_options (V4L_Scanner *s)
|
|||
parms.bytes_per_line = window.width * 3;
|
||||
break;
|
||||
}
|
||||
case VIDEO_PALETTE_UYVY: /*The great thing about standards is..*/
|
||||
case VIDEO_PALETTE_UYVY: /*The great thing about standards is.. */
|
||||
{
|
||||
parms.format = SANE_FRAME_RGB;
|
||||
parms.bytes_per_line = window.width * 3;
|
||||
|
@ -515,7 +509,7 @@ init_options (V4L_Scanner *s)
|
|||
s->opt[OPT_CONTRAST].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CONTRAST].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CONTRAST].constraint.range = &u8_range;
|
||||
s->val[OPT_CONTRAST].w = pict.contrast /256;
|
||||
s->val[OPT_CONTRAST].w = pict.contrast / 256;
|
||||
|
||||
/* black-level */
|
||||
s->opt[OPT_BLACK_LEVEL].name = SANE_NAME_BLACK_LEVEL;
|
||||
|
@ -537,7 +531,7 @@ init_options (V4L_Scanner *s)
|
|||
s->opt[OPT_WHITE_LEVEL].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_WHITE_LEVEL].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_WHITE_LEVEL].constraint.range = &u8_range;
|
||||
s->val[OPT_WHITE_LEVEL].w = pict.whiteness /256;
|
||||
s->val[OPT_WHITE_LEVEL].w = pict.whiteness / 256;
|
||||
|
||||
/* hue */
|
||||
s->opt[OPT_HUE].name = SANE_NAME_HUE;
|
||||
|
@ -558,20 +552,20 @@ init_options (V4L_Scanner *s)
|
|||
s->opt[OPT_SATURATION].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_SATURATION].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_SATURATION].constraint.range = &u8_range;
|
||||
s->val[OPT_SATURATION].w = pict.colour / 256 ;
|
||||
s->val[OPT_SATURATION].w = pict.colour / 256;
|
||||
|
||||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
SANE_Status
|
||||
sane_init (SANE_Int *version_code, SANE_Auth_Callback authorize)
|
||||
sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
|
||||
{
|
||||
char dev_name[PATH_MAX], * str;
|
||||
char dev_name[PATH_MAX], *str;
|
||||
size_t len;
|
||||
FILE *fp;
|
||||
|
||||
authorize = authorize; /* stop gcc from complaining */
|
||||
DBG_INIT();
|
||||
DBG_INIT ();
|
||||
|
||||
if (version_code)
|
||||
*version_code = SANE_VERSION_CODE (V_MAJOR, V_MINOR, 0);
|
||||
|
@ -583,7 +577,7 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authorize)
|
|||
return SANE_STATUS_INVAL;
|
||||
}
|
||||
|
||||
while (sanei_config_read(dev_name, sizeof (dev_name), fp))
|
||||
while (sanei_config_read (dev_name, sizeof (dev_name), fp))
|
||||
{
|
||||
if (dev_name[0] == '#') /* ignore line comments */
|
||||
continue;
|
||||
|
@ -604,12 +598,14 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authorize)
|
|||
attach (dev_name, 0);
|
||||
}
|
||||
else
|
||||
DBG (1, "sane_init: ioctl (%d, VIDIOCGCAP,..) failed on `%s': %s\n",
|
||||
DBG (1,
|
||||
"sane_init: ioctl (%d, VIDIOCGCAP,..) failed on `%s': %s\n",
|
||||
v4ldev, dev_name, strerror (errno));
|
||||
close (v4ldev);
|
||||
}
|
||||
else
|
||||
DBG (1, "sane_init: failed to open device `%s': %s\n", dev_name, strerror (errno));
|
||||
DBG (1, "sane_init: failed to open device `%s': %s\n", dev_name,
|
||||
strerror (errno));
|
||||
}
|
||||
fclose (fp);
|
||||
return SANE_STATUS_GOOD;
|
||||
|
@ -629,7 +625,7 @@ sane_exit (void)
|
|||
|
||||
if (NULL != devlist)
|
||||
{
|
||||
free(devlist);
|
||||
free (devlist);
|
||||
devlist = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -659,7 +655,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
|
|||
}
|
||||
|
||||
SANE_Status
|
||||
sane_open (SANE_String_Const devicename, SANE_Handle *handle)
|
||||
sane_open (SANE_String_Const devicename, SANE_Handle * handle)
|
||||
{
|
||||
SANE_Status status;
|
||||
V4L_Device *dev;
|
||||
|
@ -669,10 +665,10 @@ sane_open (SANE_String_Const devicename, SANE_Handle *handle)
|
|||
|
||||
if (devicename[0])
|
||||
{
|
||||
v4ldev = open ( devicename,O_RDWR);
|
||||
v4ldev = open (devicename, O_RDWR);
|
||||
if (-1 == v4ldev)
|
||||
return SANE_STATUS_DEVICE_BUSY;
|
||||
if (-1 == ioctl(v4ldev,VIDIOCGCAP,&capability))
|
||||
if (-1 == ioctl (v4ldev, VIDIOCGCAP, &capability))
|
||||
return SANE_STATUS_INVAL;
|
||||
status = attach (devicename, &dev);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
|
@ -697,14 +693,14 @@ sane_open (SANE_String_Const devicename, SANE_Handle *handle)
|
|||
syslog (LOG_NOTICE,"V4L Device is Monochrome");
|
||||
if (VID_TYPE_SUBCAPTURE & capability.type)
|
||||
syslog (LOG_NOTICE,"V4L Device can capture parts of the Image");
|
||||
*/
|
||||
if (-1 == ioctl(v4ldev,VIDIOCGPICT,&pict))
|
||||
*/
|
||||
if (-1 == ioctl (v4ldev, VIDIOCGPICT, &pict))
|
||||
return SANE_STATUS_INVAL;
|
||||
|
||||
if (-1 == ioctl(v4ldev,VIDIOCGWIN,&window))
|
||||
if (-1 == ioctl (v4ldev, VIDIOCGWIN, &window))
|
||||
return SANE_STATUS_INVAL;
|
||||
|
||||
if (-1 == ioctl(v4ldev,VIDIOCGMBUF,&ov_mbuf))
|
||||
if (-1 == ioctl (v4ldev, VIDIOCGMBUF, &ov_mbuf))
|
||||
DBG (1, "sane_open: no Fbuffer\n");
|
||||
}
|
||||
else
|
||||
|
@ -758,7 +754,7 @@ sane_close (SANE_Handle handle)
|
|||
|
||||
if (s->scanning)
|
||||
sane_cancel (handle);
|
||||
close(s->fd);
|
||||
close (s->fd);
|
||||
free (s);
|
||||
}
|
||||
|
||||
|
@ -774,7 +770,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
|
|||
|
||||
SANE_Status
|
||||
sane_control_option (SANE_Handle handle, SANE_Int option,
|
||||
SANE_Action action, void *val, SANE_Int *info)
|
||||
SANE_Action action, void *val, SANE_Int * info)
|
||||
{
|
||||
V4L_Scanner *s = handle;
|
||||
SANE_Status status;
|
||||
|
@ -793,7 +789,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
|
||||
if (action == SANE_ACTION_GET_VALUE)
|
||||
{
|
||||
init_options(s);
|
||||
init_options (s);
|
||||
switch (option)
|
||||
{
|
||||
/* word options: */
|
||||
|
@ -828,10 +824,10 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
if (status != SANE_STATUS_GOOD)
|
||||
return status;
|
||||
|
||||
if (-1 == ioctl(s->fd,VIDIOCGWIN,&window))
|
||||
if (-1 == ioctl (s->fd, VIDIOCGWIN, &window))
|
||||
{
|
||||
DBG (1, "sane_control_option: can not get window geometry\n");
|
||||
/*return SANE_STATUS_INVAL;*/
|
||||
/*return SANE_STATUS_INVAL; */
|
||||
}
|
||||
window.clipcount = 0;
|
||||
window.clips = 0;
|
||||
|
@ -853,21 +849,21 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
case OPT_TL_Y:
|
||||
break;
|
||||
case OPT_BR_X:
|
||||
window.width = *(SANE_Word *)val;
|
||||
parms.pixels_per_line = *(SANE_Word *)val;
|
||||
window.width = *(SANE_Word *) val;
|
||||
parms.pixels_per_line = *(SANE_Word *) val;
|
||||
if (info)
|
||||
*info |= SANE_INFO_RELOAD_PARAMS;
|
||||
break;
|
||||
case OPT_BR_Y:
|
||||
window.height = *(SANE_Word *)val;
|
||||
parms.lines = *(SANE_Word *)val;
|
||||
window.height = *(SANE_Word *) val;
|
||||
parms.lines = *(SANE_Word *) val;
|
||||
if (info)
|
||||
*info |= SANE_INFO_RELOAD_PARAMS;
|
||||
break;
|
||||
case OPT_XFER_SCALE:
|
||||
break;
|
||||
case OPT_DEPTH:
|
||||
pict.depth = *(SANE_Word *)val;
|
||||
pict.depth = *(SANE_Word *) val;
|
||||
if (info)
|
||||
*info |= SANE_INFO_RELOAD_PARAMS;
|
||||
break;
|
||||
|
@ -881,17 +877,17 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
case OPT_TEST:
|
||||
case OPT_DESPECKLE:
|
||||
case OPT_BRIGHTNESS:
|
||||
pict.brightness = *(SANE_Word *)val * 256;
|
||||
pict.brightness = *(SANE_Word *) val *256;
|
||||
if (info)
|
||||
*info |= SANE_INFO_RELOAD_PARAMS;
|
||||
break;
|
||||
case OPT_CONTRAST:
|
||||
pict.contrast = *(SANE_Word *)val * 256;
|
||||
/* if (info) *info |= SANE_INFO_RELOAD_PARAMS;*/
|
||||
pict.contrast = *(SANE_Word *) val *256;
|
||||
/* if (info) *info |= SANE_INFO_RELOAD_PARAMS; */
|
||||
break;
|
||||
case OPT_BLACK_LEVEL:
|
||||
case OPT_WHITE_LEVEL:
|
||||
pict.whiteness = *(SANE_Word *)val * 256;
|
||||
pict.whiteness = *(SANE_Word *) val *256;
|
||||
if (info)
|
||||
*info |= SANE_INFO_RELOAD_PARAMS;
|
||||
break;
|
||||
|
@ -899,19 +895,19 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
case OPT_SATURATION:
|
||||
s->val[option].w = *(SANE_Word *) val;
|
||||
}
|
||||
if (-1 == ioctl(s->fd,VIDIOCSWIN,&window))
|
||||
if (-1 == ioctl (s->fd, VIDIOCSWIN, &window))
|
||||
{
|
||||
DBG (1, "sane_control_option: can not set window geometry\n");
|
||||
/*return SANE_STATUS_INVAL;*/
|
||||
/*return SANE_STATUS_INVAL; */
|
||||
}
|
||||
if (-1 == ioctl(s->fd,VIDIOCGWIN,&window))
|
||||
if (-1 == ioctl (s->fd, VIDIOCGWIN, &window))
|
||||
{
|
||||
DBG (1, "sane_control_option: can not get window geometry\n");
|
||||
}
|
||||
if (-1 == ioctl(s->fd,VIDIOCSPICT,&pict))
|
||||
if (-1 == ioctl (s->fd, VIDIOCSPICT, &pict))
|
||||
{
|
||||
DBG (1, "sane_control_option: can not set picture parameters\n");
|
||||
/*return SANE_STATUS_INVAL;*/
|
||||
/*return SANE_STATUS_INVAL; */
|
||||
}
|
||||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
@ -931,11 +927,11 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
}
|
||||
|
||||
SANE_Status
|
||||
sane_get_parameters (SANE_Handle handle, SANE_Parameters *params)
|
||||
sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
|
||||
{
|
||||
V4L_Scanner *s = handle;
|
||||
|
||||
if (-1 == ioctl(s->fd,VIDIOCGWIN,&window))
|
||||
if (-1 == ioctl (s->fd, VIDIOCGWIN, &window))
|
||||
return SANE_STATUS_INVAL;
|
||||
parms.pixels_per_line = window.width;
|
||||
parms.bytes_per_line = window.width;
|
||||
|
@ -953,7 +949,7 @@ sane_start (SANE_Handle handle)
|
|||
int len;
|
||||
V4L_Scanner *s;
|
||||
|
||||
DBG(2, "sane_start\n");
|
||||
DBG (2, "sane_start\n");
|
||||
for (s = first_handle; s; s = s->next)
|
||||
{
|
||||
if (s == handle)
|
||||
|
@ -964,18 +960,19 @@ sane_start (SANE_Handle handle)
|
|||
DBG (1, "sane_start: bad handle %p\n", handle);
|
||||
return SANE_STATUS_INVAL; /* oops, not a handle we know about */
|
||||
}
|
||||
len = ioctl(v4ldev,VIDIOCGCAP,&capability);
|
||||
len = ioctl (v4ldev, VIDIOCGCAP, &capability);
|
||||
if (-1 == len)
|
||||
DBG (1, "sane_start: can not get capabilities\n");
|
||||
buffercount = 0;
|
||||
if (-1 == ioctl(s->fd,VIDIOCGMBUF,&ov_mbuf))
|
||||
if (-1 == ioctl (s->fd, VIDIOCGMBUF, &ov_mbuf))
|
||||
{
|
||||
s->mmap = FALSE;
|
||||
buffer = malloc(capability.maxwidth * capability.maxheight * pict.depth);
|
||||
buffer =
|
||||
malloc (capability.maxwidth * capability.maxheight * pict.depth);
|
||||
if (0 == buffer)
|
||||
return SANE_STATUS_NO_MEM;
|
||||
DBG (2, "sane_start: V4L READING Frame\n");
|
||||
len = read (s->fd,buffer,parms.bytes_per_line * parms.lines);
|
||||
len = read (s->fd, buffer, parms.bytes_per_line * parms.lines);
|
||||
DBG (2, "sane_start: V4L Frame read\n");
|
||||
}
|
||||
else
|
||||
|
@ -984,7 +981,8 @@ sane_start (SANE_Handle handle)
|
|||
DBG (2, "sane_start: MMAP Frame\n");
|
||||
DBG (2, "sane_start: Buffersize %d , Buffers %d , Offset %p\n",
|
||||
ov_mbuf.size, ov_mbuf.frames, ov_mbuf.offsets);
|
||||
buffer = mmap (0,ov_mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,s->fd,0);
|
||||
buffer =
|
||||
mmap (0, ov_mbuf.size, PROT_READ | PROT_WRITE, MAP_SHARED, s->fd, 0);
|
||||
DBG (2, "sane_start: MMAPed Frame, Capture 1 Pict into %p\n", buffer);
|
||||
gb.frame = 0;
|
||||
gb.width = window.width;
|
||||
|
@ -992,16 +990,17 @@ sane_start (SANE_Handle handle)
|
|||
gb.height = window.height;
|
||||
gb.height = parms.lines;
|
||||
gb.format = pict.palette;
|
||||
DBG (2,"sane_start: MMAPed Frame %d x %d with Palette %d\n",
|
||||
gb.width,gb.height,gb.format);
|
||||
len = ioctl(v4ldev,VIDIOCMCAPTURE,&gb);
|
||||
DBG (2, "sane_start: mmap-result %d\n",len);
|
||||
DBG (2, "sane_start: Frame %x\n",gb.frame);
|
||||
DBG (2, "sane_start: MMAPed Frame %d x %d with Palette %d\n",
|
||||
gb.width, gb.height, gb.format);
|
||||
len = ioctl (v4ldev, VIDIOCMCAPTURE, &gb);
|
||||
DBG (2, "sane_start: mmap-result %d\n", len);
|
||||
DBG (2, "sane_start: Frame %x\n", gb.frame);
|
||||
#if 0
|
||||
len = ioctl(v4ldev,VIDIOCSYNC,&(gb.frame));
|
||||
len = ioctl (v4ldev, VIDIOCSYNC, &(gb.frame));
|
||||
if (-1 == len)
|
||||
{
|
||||
DBG (1, "sane_start: Call to ioctl(%d, VIDIOCSYNC, ..) failed\n", v4ldev);
|
||||
DBG (1, "sane_start: Call to ioctl(%d, VIDIOCSYNC, ..) failed\n",
|
||||
v4ldev);
|
||||
return SANE_STATUS_INVAL;
|
||||
}
|
||||
#endif
|
||||
|
@ -1011,10 +1010,10 @@ sane_start (SANE_Handle handle)
|
|||
}
|
||||
|
||||
SANE_Status
|
||||
sane_read (SANE_Handle handle, SANE_Byte *buf, SANE_Int max_len,
|
||||
SANE_Int *lenp)
|
||||
sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
|
||||
SANE_Int * lenp)
|
||||
{
|
||||
int i,min;
|
||||
int i, min;
|
||||
V4L_Scanner *s = handle;
|
||||
|
||||
if ((buffercount + 1) > (parms.lines * parms.bytes_per_line))
|
||||
|
@ -1027,20 +1026,20 @@ sane_read (SANE_Handle handle, SANE_Byte *buf, SANE_Int max_len,
|
|||
min = (max_len + buffercount);
|
||||
if (s->mmap == FALSE)
|
||||
{
|
||||
for (i=buffercount;i<(min+0);i++)
|
||||
for (i = buffercount; i < (min + 0); i++)
|
||||
{
|
||||
*(buf + i - buffercount) = *(buffer +i);
|
||||
*(buf + i - buffercount) = *(buffer + i);
|
||||
};
|
||||
*lenp = (parms.lines * parms.bytes_per_line - buffercount);
|
||||
if (max_len < *lenp)
|
||||
*lenp = max_len;
|
||||
buffercount = i ;
|
||||
buffercount = i;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i=buffercount;i<(min+0);i++)
|
||||
for (i = buffercount; i < (min + 0); i++)
|
||||
{
|
||||
*(buf + i - buffercount) = *(buffer +i);
|
||||
*(buf + i - buffercount) = *(buffer + i);
|
||||
/*switch (i % 3)
|
||||
{
|
||||
case 0:
|
||||
|
@ -1051,13 +1050,13 @@ sane_read (SANE_Handle handle, SANE_Byte *buf, SANE_Int max_len,
|
|||
break;
|
||||
case 2:
|
||||
*(buf + i - buffercount) = *(buffer + i - 0);
|
||||
};*/
|
||||
}; */
|
||||
};
|
||||
*lenp = (parms.lines * parms.bytes_per_line - buffercount);
|
||||
if ((i - buffercount) < *lenp)
|
||||
*lenp = (i-buffercount);
|
||||
*lenp = (i - buffercount);
|
||||
/* syslog(LOG_NOTICE,"Transfering %d Bytes",*lenp);
|
||||
syslog(LOG_NOTICE,"Transfering from Byte %d to Byte %d",buffercount,i);*/
|
||||
syslog(LOG_NOTICE,"Transfering from Byte %d to Byte %d",buffercount,i); */
|
||||
buffercount = i;
|
||||
}
|
||||
return SANE_STATUS_GOOD;
|
||||
|
@ -1069,7 +1068,7 @@ sane_cancel (SANE_Handle handle)
|
|||
V4L_Scanner *s = handle;
|
||||
|
||||
if ((buffer != 0) && (s->mmap == FALSE))
|
||||
free(buffer);
|
||||
free (buffer);
|
||||
buffer = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,25 +50,25 @@
|
|||
#ifndef v4l_h
|
||||
#define v4l_h
|
||||
|
||||
#include <sane/sane.h>
|
||||
#include <../include/sane/sane.h>
|
||||
|
||||
typedef enum
|
||||
{
|
||||
{
|
||||
V4L_MONO = 0x01,
|
||||
V4L_COLOR = 0x10
|
||||
}
|
||||
}
|
||||
V4L_Model;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
{
|
||||
V4L_RES_LOW = 0,
|
||||
V4L_RES_HIGH
|
||||
}
|
||||
}
|
||||
V4L_Resolution;
|
||||
|
||||
/* commands common to all quick-cameras: */
|
||||
typedef enum
|
||||
{
|
||||
{
|
||||
V4L_SEND_VIDEO_FRAME = 7,
|
||||
V4L_SET_BRIGHTNESS = 11,
|
||||
V4L_SET_TOP = 13,
|
||||
|
@ -81,29 +81,29 @@ typedef enum
|
|||
V4L_SET_SATURATION = 35,
|
||||
V4L_SEND_STATUS = 41,
|
||||
V4L_SET_SPEED = 45
|
||||
}
|
||||
}
|
||||
V4L_Command;
|
||||
|
||||
/* commands for grayscale camera: */
|
||||
typedef enum
|
||||
{
|
||||
{
|
||||
V4L_MONO_SET_CONTRAST = 25,
|
||||
V4L_MONO_AUTO_ADJUST_OFFSET = 27,
|
||||
V4L_MONO_GET_OFFSET = 33
|
||||
}
|
||||
}
|
||||
V4L_Mono_Command;
|
||||
|
||||
/* commands for color camera: */
|
||||
typedef enum
|
||||
{
|
||||
{
|
||||
V4L_COL_LOAD_RAM = 27,
|
||||
V4L_COL_SET_HUE = 33,
|
||||
V4L_COL_SET_CONTRAST = 37
|
||||
}
|
||||
}
|
||||
V4L_Col_Command;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
{
|
||||
OPT_NUM_OPTS = 0,
|
||||
|
||||
OPT_MODE_GROUP,
|
||||
|
@ -129,46 +129,46 @@ typedef enum
|
|||
|
||||
/* must come last: */
|
||||
NUM_OPTIONS
|
||||
}
|
||||
}
|
||||
V4L_Option;
|
||||
|
||||
typedef union
|
||||
{
|
||||
{
|
||||
SANE_Word w;
|
||||
SANE_Word *wa; /* word array */
|
||||
SANE_String s;
|
||||
}
|
||||
}
|
||||
Option_Value;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
{
|
||||
V4L_UNIDIR,
|
||||
V4L_BIDIR
|
||||
}
|
||||
}
|
||||
V4L_Port_Mode;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
{
|
||||
size_t num_bytes; /* # of bytes to read */
|
||||
V4L_Resolution resolution; /* high-resolution? */
|
||||
SANE_Parameters params; /* other parameters */
|
||||
u_int mode; /* qcam scan code (get video data command) */
|
||||
int despeckle; /* apply despeckling filter? */
|
||||
}
|
||||
}
|
||||
V4L_Scan_Request;
|
||||
|
||||
typedef struct V4L_Device
|
||||
{
|
||||
struct V4L_Device * next;
|
||||
{
|
||||
struct V4L_Device *next;
|
||||
SANE_Device sane;
|
||||
V4L_Port_Mode port_mode;
|
||||
int version; /* camera version */
|
||||
int lock_fd; /* used for locking protocol */
|
||||
}
|
||||
}
|
||||
V4L_Device;
|
||||
|
||||
typedef struct V4L_Scanner
|
||||
{
|
||||
{
|
||||
struct V4L_Scanner *next;
|
||||
|
||||
SANE_Option_Descriptor opt[NUM_OPTIONS];
|
||||
|
@ -188,7 +188,7 @@ typedef struct V4L_Scanner
|
|||
/* internal state for v4l_readbytes(): */
|
||||
int readbytes_state;
|
||||
unsigned int saved_bits;
|
||||
}
|
||||
}
|
||||
V4L_Scanner;
|
||||
|
||||
#endif /* v4l_h */
|
||||
|
|
Ładowanie…
Reference in New Issue