From 5e0caa5b45c1e7d788dc987a4b4c51463a92402c Mon Sep 17 00:00:00 2001 From: Frank Zago Date: Thu, 7 Mar 2002 23:57:40 +0000 Subject: [PATCH] Fixed color scan problem. --- backend/sceptre.c | 22 +++++++++++++--------- backend/sceptre.desc | 2 +- backend/sceptre.h | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/backend/sceptre.c b/backend/sceptre.c index 0e891df2a..942348cce 100644 --- a/backend/sceptre.c +++ b/backend/sceptre.c @@ -49,7 +49,7 @@ /*--------------------------------------------------------------------------*/ -#define BUILD 7 /* 2002-03-02 */ +#define BUILD 8 /* 2002-03-07 */ #define BACKEND_NAME sceptre #define SCEPTRE_CONFIG_FILE "sceptre.conf" @@ -1556,6 +1556,8 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) if (!(dev->scanning)) { + /* Prepare the parameters for the caller. */ + memset (&dev->params, 0, sizeof (SANE_Parameters)); if (dev->val[OPT_PREVIEW].w == SANE_TRUE) { @@ -1629,9 +1631,6 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) break; } - /* Prepare the parameters for the caller. */ - memset (&dev->params, 0, sizeof (SANE_Parameters)); - /* this scanner does only one pass */ dev->params.last_frame = SANE_TRUE; dev->params.depth = dev->depth; @@ -1677,8 +1676,9 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) } } - dev->params.bytes_per_line = - dev->params.pixels_per_line * (dev->depth / 8); + dev->params.bytes_per_line = dev->params.pixels_per_line; + if (dev->scan_mode == SCEPTRE_COLOR) + dev->params.bytes_per_line *= 3; /* lines number rounding rules: * 2n + [0.0 .. 2.0[ -> round to 2n @@ -1825,14 +1825,18 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, /* * Try to read the maximum number of bytes. * - * The windows driver reads no more than 0xffff byte, I've tried + * The windows driver reads no more than 0xffff bytes, I've tried * some bigger values, but the scanner is losing data!!! */ - size = data_left; + size = dev->bytes_left; if (size > dev->buffer_size) { size = dev->buffer_size; } + if (size > data_left) + { + size = data_left; + } /* If it is a preview, read only what we have been asked * for. Else, try to maximize the throughput. @@ -1878,7 +1882,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, /* Still got some data. Send it. */ if (size > (size_t) max_len) size = max_len; - if (size > (size_t) dev->bytes_left) + if (size > dev->bytes_left) size = dev->bytes_left; memcpy (buf, dev->image + dev->image_begin, size); diff --git a/backend/sceptre.desc b/backend/sceptre.desc index 122f44fb2..d1d4fc35e 100644 --- a/backend/sceptre.desc +++ b/backend/sceptre.desc @@ -10,7 +10,7 @@ ; :backend "sceptre" -:version "1.0-7" ; version of backend +:version "1.0-8" ; version of backend :status :new ; :alpha, :beta, :stable, :new :manpage "sane-sceptre" ; name of manpage :url "http://www.geocities.com/harikus2000/sane" ; backend's web page diff --git a/backend/sceptre.h b/backend/sceptre.h index af904705c..61213b44e 100644 --- a/backend/sceptre.h +++ b/backend/sceptre.h @@ -345,7 +345,7 @@ typedef struct Sceptre_Scanner int depth; /* depth per color */ int halftone_param; /* haltone number, valid for SCEPTRE_HALFTONE */ - int bytes_left; /* number of bytes promised to backend + size_t bytes_left; /* number of bytes promised to backend * left to read. */ int color_shift; /* for color scan: number of lines to