From bec7607e9dd73753c4f6dc4c90cb7b3ae9bace34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Voltz?= Date: Thu, 4 Feb 2010 05:33:14 +0100 Subject: [PATCH] fix pixel computing for gl646 scanners using a cksel different from 1 --- backend/genesys_gl646.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/backend/genesys_gl646.c b/backend/genesys_gl646.c index ee6e47804..4f36a3dcf 100644 --- a/backend/genesys_gl646.c +++ b/backend/genesys_gl646.c @@ -649,6 +649,7 @@ gl646_setup_registers (Genesys_Device * dev, Genesys_Register_Set *r; unsigned int used1, used2, vfinal; uint32_t z1, z2; + uint16_t ex, sx; int channels = 1, stagger, wpl, max_shift; size_t requested_buffer_size; size_t read_buffer_size; @@ -974,30 +975,20 @@ gl646_setup_registers (Genesys_Device * dev, gl646_set_triple_reg (regs, REG_LINCNT, linecnt); /* scanner's x coordinates are expressed in physical DPI but they must be divided by cksel */ - startx = startx / sensor->cksel; - endx = endx / sensor->cksel; + sx = startx / sensor->cksel; + ex = endx / sensor->cksel; if (half_ccd == SANE_TRUE) { - gl646_set_double_reg (regs, REG_STRPIXEL, startx / 2); - gl646_set_double_reg (regs, REG_ENDPIXEL, endx / 2); - DBG (DBG_info, - "gl646_setup_registers: startx=%d, endx=%d, half_ccd=%d\n", - startx / 2, endx / 2, half_ccd); - } - else - { - gl646_set_double_reg (regs, REG_STRPIXEL, startx); - gl646_set_double_reg (regs, REG_ENDPIXEL, endx); - DBG (DBG_info, - "gl646_setup_registers: startx=%d, endx=%d, half_ccd=%d\n", startx, - endx, half_ccd); + sx/=2; + ex/=2; } + gl646_set_double_reg (regs, REG_STRPIXEL, sx); + gl646_set_double_reg (regs, REG_ENDPIXEL, ex); + DBG (DBG_info, "gl646_setup_registers: startx=%d, endx=%d, half_ccd=%d\n", sx, ex , half_ccd); /* wpl must be computed according to the scan's resolution */ /* in fact, wpl _gives_ the actual scan resolution */ - wpl = - (((endx - - startx) * sensor->xdpi * sensor->cksel) / dev->sensor.optical_res); + wpl = (((endx - startx) * sensor->xdpi ) / dev->sensor.optical_res); if (depth == 16) wpl *= 2; if (dev->model->is_cis == SANE_FALSE)