summaryrefslogtreecommitdiff
path: root/backend/fujitsu.c
diff options
context:
space:
mode:
Diffstat (limited to 'backend/fujitsu.c')
-rw-r--r--backend/fujitsu.c56
1 files changed, 37 insertions, 19 deletions
diff --git a/backend/fujitsu.c b/backend/fujitsu.c
index d17e015..52d0988 100644
--- a/backend/fujitsu.c
+++ b/backend/fujitsu.c
@@ -6,7 +6,7 @@
Copyright (C) 2000 Randolph Bentson
Copyright (C) 2001 Frederik Ramm
Copyright (C) 2001-2004 Oliver Schirrmeister
- Copyright (C) 2003-2021 m. allan noah
+ Copyright (C) 2003-2022 m. allan noah
JPEG output and low memory usage support funded by:
Archivista GmbH, www.archivista.ch
@@ -15,7 +15,7 @@
Automatic length detection support funded by:
Martin G. Miller, mgmiller at optonline.net
Software image enhancement routines and recent scanner support funded by:
- Fujitsu Computer Products of America, Inc. www.fcpa.com
+ PFU America, Inc., fujitsuscanners.com
--------------------------------------------------------------------------
@@ -611,6 +611,11 @@
- fix JPEG duplex memory corruption
- change window_gamma init (fixes bright/contrast for iX1500)
- only call send_lut after set_window (remove late_lut)
+ v138 2022-06-01, MAN
+ - minor updates to company name (FCPA -> PFU)
+ v139 2022-11-15, MAN
+ - move updated window_gamma logic to set_window
+ - use internal gamma table if possible (fixes #618)
SANE FLOW DIAGRAM
@@ -660,7 +665,7 @@
#include "fujitsu.h"
#define DEBUG 1
-#define BUILD 137
+#define BUILD 139
/* values for SANE_DEBUG_FUJITSU env var:
- errors 5
@@ -764,7 +769,7 @@ static struct fujitsu *fujitsu_devList = NULL;
SANE_Status
sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
{
- authorize = authorize; /* get rid of compiler warning */
+ (void) authorize; /* get rid of compiler warning */
DBG_INIT ();
DBG (10, "sane_init: start\n");
@@ -819,7 +824,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
int num_devices=0;
int i=0;
- local_only = local_only; /* get rid of compiler warning */
+ (void) local_only; /* get rid of compiler warning */
DBG (10, "sane_get_devices: start\n");
@@ -2107,12 +2112,6 @@ init_model (struct fujitsu *s)
s->ppl_mod_by_mode[MODE_GRAYSCALE] = 1;
s->ppl_mod_by_mode[MODE_COLOR] = 1;
- /* we prefer to use the downloaded (LUT) gamma table (0x80) if possible.
- * but if scanner has only built-in gamma tables, we use the first one (0) */
- if (s->num_download_gamma){
- s->window_gamma = 0x80;
- }
-
/* endorser type tells string length (among other things) */
if(s->has_endorser_b){
/*old-style is 40 bytes*/
@@ -2206,7 +2205,10 @@ init_model (struct fujitsu *s)
s->color_interlace = COLOR_INTERLACE_3091;
s->duplex_interlace = DUPLEX_INTERLACE_3091;
s->ghs_in_rs = 1;
- s->window_gamma = 0;
+
+ /* might be inaccurate */
+ s->num_internal_gamma = 1;
+ s->num_download_gamma = 0;
s->reverse_by_mode[MODE_LINEART] = 1;
s->reverse_by_mode[MODE_HALFTONE] = 1;
@@ -7055,12 +7057,11 @@ sane_start (SANE_Handle handle)
goto errors;
}
- /* send lut if scanner has no hardware brightness/contrast,
- * or we are going to ask it to use a downloaded gamma table */
- if (!s->brightness_steps || !s->contrast_steps || s->window_gamma & 0x80){
+ /* send lut if set_window said we would */
+ if ( s->window_gamma ){
ret = send_lut(s);
if (ret != SANE_STATUS_GOOD)
- DBG (5, "sane_start: WARNING: cannot late send_lut %d\n", ret);
+ DBG (5, "sane_start: WARNING: cannot send_lut %d\n", ret);
}
/* some scanners need the q table sent, even when not scanning jpeg */
@@ -7614,6 +7615,23 @@ set_window (struct fujitsu *s)
/* the remainder of the block varies based on model and mode,
* except for gamma and paper size, those are in the same place */
+ /* determine if we need to send gamma LUT.
+ * send lut if scanner supports it and any of:
+ * has no hardware brightness but user changed it
+ * has no hardware contrast but user changed it
+ * has no internal gamma table */
+ if ( s->num_download_gamma && (
+ (!s->brightness_steps && s->brightness != 0)
+ || (!s->contrast_steps && s->contrast != 0 )
+ || !s->num_internal_gamma
+ ) ){
+ s->window_gamma = 0x80;
+ }
+ /* otherwise, use the internal table */
+ else{
+ s->window_gamma = 0;
+ }
+
/*vuid c0*/
if(s->has_vuid_3091){
set_WD_vendor_id_code (desc1, WD_VUID_3091);
@@ -9270,7 +9288,7 @@ sense_handler (int fd, unsigned char * sensed_data, void *arg)
DBG (5, "sense_handler: start\n");
/* kill compiler warning */
- fd = fd;
+ (void) fd;
/* copy the rs return data into the scanner struct
so that the caller can use it if he wants */
@@ -9605,8 +9623,8 @@ do_scsi_cmd(struct fujitsu *s, int runRS, int shortTime,
int ret;
/*shut up compiler*/
- runRS=runRS;
- shortTime=shortTime;
+ (void) runRS;
+ (void) shortTime;
DBG(10, "do_scsi_cmd: start\n");