From 463f5f4364b8e702369af10f28fb78bc7b253633 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 12 Sep 2019 20:06:36 +0300 Subject: [PATCH 1/3] genesys: Don't duplicate data passed to *_init_optical_regs_scan() --- backend/genesys_gl124.cc | 46 +++++++++++++++++----------------------- backend/genesys_gl841.cc | 41 ++++++++++++++--------------------- backend/genesys_gl846.cc | 33 ++++++++++++---------------- backend/genesys_gl847.cc | 35 ++++++++++++------------------ 4 files changed, 63 insertions(+), 92 deletions(-) diff --git a/backend/genesys_gl124.cc b/backend/genesys_gl124.cc index 8d8419195..e97effc2d 100644 --- a/backend/genesys_gl124.cc +++ b/backend/genesys_gl124.cc @@ -824,14 +824,10 @@ static void gl124_setup_sensor(Genesys_Device * dev, */ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set* reg, unsigned int exposure_time, - const ScanSession& session, int used_res, - unsigned int start, unsigned int pixels, - int channels, int depth, unsigned ccd_size_divisor, - ColorFilter color_filter) + const ScanSession& session, unsigned int start) { - DBG_HELPER_ARGS(dbg, "exposure_time=%d, used_res=%d, start=%d, pixels=%d, channels=%d, depth=%d, " - "ccd_size_divisor=%d\n", - exposure_time, used_res, start, pixels, channels, depth, ccd_size_divisor); + DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d\n", + exposure_time, start); unsigned int words_per_line, segcnt; unsigned int startx, endx, segnb; unsigned int dpiset, dpihw, factor; @@ -845,18 +841,18 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens // to manage high resolution device while keeping good low resolution scanning speed, we // make hardware dpi vary - dpihw = sensor.get_register_hwdpi(used_res * ccd_pixels_per_system_pixel); - factor = sensor.get_hwdpi_divisor_for_dpi(used_res * ccd_pixels_per_system_pixel); + dpihw = sensor.get_register_hwdpi(session.params.xres * ccd_pixels_per_system_pixel); + factor = sensor.get_hwdpi_divisor_for_dpi(session.params.xres * ccd_pixels_per_system_pixel); DBG (DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor); // sensor parameters - gl124_setup_sensor(dev, sensor, reg, dpihw, ccd_size_divisor); - dpiset = used_res * ccd_pixels_per_system_pixel; + gl124_setup_sensor(dev, sensor, reg, dpihw, session.ccd_size_divisor); + dpiset = session.params.xres * ccd_pixels_per_system_pixel; /* start and end coordinate in optical dpi coordinates */ /* startx = start / ccd_pixels_per_system_pixel + sensor.dummy_pixel; XXX STEF XXX */ startx = start / ccd_pixels_per_system_pixel; - endx = startx + pixels / ccd_pixels_per_system_pixel; + endx = startx + session.optical_pixels / ccd_pixels_per_system_pixel; /* pixel coordinate factor correction when used dpihw is not maximal one */ startx/=factor; @@ -880,7 +876,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens r->value &= ~REG01_SCAN; r = sanei_genesys_get_address (reg, REG03); - if((dev->model->ccd_type!=CIS_CANONLIDE120)&&(used_res>=600)) + if((dev->model->ccd_type!=CIS_CANONLIDE120)&&(session.params.xres>=600)) { r->value &= ~REG03_AVEENB; DBG (DBG_io, "%s: disabling AVEENB\n", __func__); @@ -900,7 +896,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* monochrome / color scan */ r = sanei_genesys_get_address (reg, REG04); - switch (depth) + switch (session.params.depth) { case 1: r->value &= ~REG04_BITSET; @@ -916,9 +912,9 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens } r->value &= ~REG04_FILTER; - if (channels == 1) + if (session.params.channels == 1) { - switch (color_filter) + switch (session.params.color_filter) { case ColorFilter::RED: r->value |= 0x10; @@ -944,7 +940,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens r->value |= REG05_GMMENB; } - unsigned dpiset_reg = dpiset * ccd_size_divisor; + unsigned dpiset_reg = dpiset * session.ccd_size_divisor; if (sensor.dpiset_override != 0) { dpiset_reg = sensor.dpiset_override; } @@ -998,8 +994,8 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* words(16bit) before gamma, conversion to 8 bit or lineart */ words_per_line = (used_pixels * dpiset) / dpihw; - bytes = depth / 8; - if (depth == 1) + bytes = session.params.depth / 8; + if (session.params.depth == 1) { words_per_line = (words_per_line >> 3) + ((words_per_line & 7) ? 1 : 0); } @@ -1018,14 +1014,14 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens dev->line_interp = 0; DBG (DBG_io2, "%s: used_pixels =%d\n", __func__, used_pixels); - DBG (DBG_io2, "%s: pixels =%d\n", __func__, pixels); - DBG (DBG_io2, "%s: depth =%d\n", __func__, depth); + DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels); + DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth); DBG (DBG_io2, "%s: dev->bpl =%lu\n", __func__, (unsigned long)dev->bpl); DBG (DBG_io2, "%s: dev->len =%lu\n", __func__, (unsigned long)dev->len); DBG (DBG_io2, "%s: dev->dist =%lu\n", __func__, (unsigned long)dev->dist); DBG (DBG_io2, "%s: dev->line_interp=%lu\n", __func__, (unsigned long)dev->line_interp); - words_per_line *= channels; + words_per_line *= session.params.channels; dev->wpl = words_per_line; /* allocate buffer for odd/even pixels handling */ @@ -1120,11 +1116,7 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens */ // now _LOGICAL_ optical values used are known, setup registers - gl124_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, session.params.xres, - start, - session.optical_pixels, session.params.channels, - session.params.depth, session.ccd_size_divisor, - session.params.color_filter); + gl124_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, start); /* add tl_y to base movement */ move = session.params.starty; diff --git a/backend/genesys_gl841.cc b/backend/genesys_gl841.cc index 21fc13bcd..30768205c 100644 --- a/backend/genesys_gl841.cc +++ b/backend/genesys_gl841.cc @@ -1453,27 +1453,21 @@ static void gl841_init_optical_regs_off(Genesys_Register_Set* reg) static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set* reg, unsigned int exposure_time, - const ScanSession& session, unsigned int used_res, - unsigned int start, - unsigned int pixels, int channels, - int depth, unsigned ccd_size_divisor, - ColorFilter color_filter) + const ScanSession& session, unsigned int start) { - DBG_HELPER_ARGS(dbg, "exposure_time=%d, used_res=%d, start=%d, pixels=%d, channels=%d, " - "depth=%d, ccd_size_divisor=%d", - exposure_time, used_res, start, pixels, channels, depth, ccd_size_divisor); + DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start); unsigned int words_per_line; unsigned int end; unsigned int dpiset; GenesysRegister* r; uint16_t expavg, expr, expb, expg; - end = start + pixels; + end = start + session.optical_pixels; gl841_set_fe(dev, sensor, AFE_SET); /* adjust used_res for chosen dpihw */ - used_res = used_res * gl841_get_dpihw(dev) / sensor.optical_res; + unsigned used_res = session.params.xres * gl841_get_dpihw(dev) / sensor.optical_res; /* with ccd_size_divisor==2 the optical resolution of the ccd is halved. We don't apply this @@ -1482,13 +1476,13 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens For the scanner only the ratio of dpiset and dpihw is of relevance to scale down properly. */ - dpiset = used_res * ccd_size_divisor; + dpiset = used_res * session.ccd_size_divisor; /* gpio part.*/ if (dev->model->gpo_type == GPO_CANONLIDE35) { r = sanei_genesys_get_address (reg, REG6C); - if (ccd_size_divisor > 1) { + if (session.ccd_size_divisor > 1) { r->value &= ~0x80; } else { r->value |= 0x80; @@ -1497,7 +1491,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens if (dev->model->gpo_type == GPO_CANONLIDE80) { r = sanei_genesys_get_address (reg, REG6C); - if (ccd_size_divisor > 1) { + if (session.ccd_size_divisor > 1) { r->value &= ~0x40; r->value |= 0x20; } else { @@ -1534,7 +1528,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* monochrome / color scan */ r = sanei_genesys_get_address (reg, 0x04); - switch (depth) { + switch (session.params.depth) { case 1: r->value &= ~REG04_BITSET; r->value |= REG04_LINEART; @@ -1554,9 +1548,9 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens if (session.params.flags & SCAN_FLAG_ENABLE_LEDADD) { r->value |= 0x10; /* no filter */ } - else if (channels == 1) + else if (session.params.channels == 1) { - switch (color_filter) + switch (session.params.color_filter) { case ColorFilter::RED: r->value |= 0x14; @@ -1614,7 +1608,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens } /* sensor parameters */ - sanei_gl841_setup_sensor(dev, sensor, &dev->reg, 1, ccd_size_divisor); + sanei_gl841_setup_sensor(dev, sensor, &dev->reg, 1, session.ccd_size_divisor); r = sanei_genesys_get_address (reg, 0x29); r->value = 255; /*<<<"magic" number, only suitable for cis*/ @@ -1625,14 +1619,14 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens DBG(DBG_io2, "%s: STRPIXEL=%d, ENDPIXEL=%d\n", __func__, start, end); /* words(16bit) before gamma, conversion to 8 bit or lineart*/ - words_per_line = (pixels * dpiset) / gl841_get_dpihw(dev); + words_per_line = (session.optical_pixels * dpiset) / gl841_get_dpihw(dev); - words_per_line *= channels; + words_per_line *= session.params.channels; - if (depth == 1) + if (session.params.depth == 1) words_per_line = (words_per_line >> 3) + ((words_per_line & 7)?1:0); else - words_per_line *= depth / 8; + words_per_line *= session.params.depth / 8; dev->wpl = words_per_line; dev->bpl = words_per_line; @@ -1883,10 +1877,7 @@ dummy \ scanned lines session.params.flags |= SCAN_FLAG_DISABLE_GAMMA; } - gl841_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, session.params.xres, start, - session.optical_pixels, session.params.channels, - session.params.depth, session.ccd_size_divisor, - session.params.color_filter); + gl841_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, start); move = session.params.starty; DBG(DBG_info, "%s: move=%d steps\n", __func__, move); diff --git a/backend/genesys_gl846.cc b/backend/genesys_gl846.cc index adccb4d97..b0306bba1 100644 --- a/backend/genesys_gl846.cc +++ b/backend/genesys_gl846.cc @@ -722,12 +722,9 @@ static void gl846_init_motor_regs_scan(Genesys_Device* dev, */ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set* reg, unsigned int exposure_time, - const ScanSession& session, int used_res, - unsigned int start, unsigned int pixels, - int channels, int depth, ColorFilter color_filter) + const ScanSession& session, unsigned int start) { - DBG_HELPER_ARGS(dbg, "exposure_time=%d, used_res=%d, start=%d, pixels=%d, channels=%d, depth=%d", - exposure_time, used_res, start, pixels, channels, depth); + DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start); unsigned int words_per_line; unsigned int dpiset, dpihw, segnb, factor; unsigned int bytes; @@ -739,18 +736,18 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens // to manage high resolution device while keeping good low resolution scanning speed, // we make hardware dpi vary - dpihw = sensor.get_register_hwdpi(used_res * ccd_pixels_per_system_pixel); + dpihw = sensor.get_register_hwdpi(session.params.xres * ccd_pixels_per_system_pixel); factor = sensor.optical_res/dpihw; DBG(DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor); // sensor parameters const auto& sensor_profile = get_sensor_profile(sensor, dpihw); gl846_setup_sensor(dev, sensor, reg, dpihw); - dpiset = used_res * ccd_pixels_per_system_pixel ; + dpiset = session.params.xres * ccd_pixels_per_system_pixel ; // start and end coordinate in optical dpi coordinates unsigned startx = start / ccd_pixels_per_system_pixel + sensor.CCD_start_xoffset; - unsigned endx = startx + pixels / ccd_pixels_per_system_pixel; + unsigned endx = startx + session.optical_pixels / ccd_pixels_per_system_pixel; /* sensors are built from 600 dpi segments for LiDE 100/200 * and 1200 dpi for the 700F */ @@ -810,7 +807,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* monochrome / color scan */ r = sanei_genesys_get_address (reg, REG04); - switch (depth) + switch (session.params.depth) { case 1: r->value &= ~REG04_BITSET; @@ -826,9 +823,9 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens } r->value &= ~(REG04_FILTER | REG04_AFEMOD); - if (channels == 1) + if (session.params.channels == 1) { - switch (color_filter) + switch (session.params.color_filter) { case ColorFilter::RED: r->value |= 0x24; @@ -876,8 +873,8 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* words(16bit) before gamma, conversion to 8 bit or lineart*/ words_per_line = (used_pixels * dpiset) / dpihw; - bytes=depth/8; - if (depth == 1) + bytes=session.params.depth/8; + if (session.params.depth == 1) { words_per_line = (words_per_line+7)/8 ; dev->len = (dev->len >> 3) + ((dev->len & 7) ? 1 : 0); @@ -904,14 +901,14 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens DBG (DBG_io2, "%s: endx =%d\n", __func__, endx); DBG (DBG_io2, "%s: used_pixels=%d\n", __func__, used_pixels); - DBG (DBG_io2, "%s: pixels =%d\n", __func__, pixels); - DBG (DBG_io2, "%s: depth =%d\n", __func__, depth); + DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels); + DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth); DBG (DBG_io2, "%s: dev->bpl =%lu\n", __func__, (unsigned long)dev->bpl); DBG (DBG_io2, "%s: dev->len =%lu\n", __func__, (unsigned long)dev->len); DBG (DBG_io2, "%s: dev->dist =%lu\n", __func__, (unsigned long)dev->dist); DBG (DBG_io2, "%s: dev->segnb =%lu\n", __func__, (unsigned long)dev->segnb); - words_per_line *= channels; + words_per_line *= session.params.channels; dev->wpl = words_per_line; dev->oe_buffer.clear(); @@ -1001,9 +998,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens /* we enable true gray for cis scanners only, and just when doing * scan since color calibration is OK for this mode */ - gl846_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, session.params.xres, start, - session.optical_pixels, session.params.channels, session.params.depth, - session.params.color_filter); + gl846_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, start); /*** motor parameters ***/ diff --git a/backend/genesys_gl847.cc b/backend/genesys_gl847.cc index 30b8dcd12..92c24e591 100644 --- a/backend/genesys_gl847.cc +++ b/backend/genesys_gl847.cc @@ -741,14 +741,9 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev, */ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set* reg, unsigned int exposure_time, - const ScanSession& session, int used_res, - unsigned int start, unsigned int pixels, - int channels, int depth, - ColorFilter color_filter) + const ScanSession& session, unsigned int start) { - DBG_HELPER_ARGS(dbg, "exposure_time=%d, used_res=%d, start=%d, pixels=%d, channels=%d, " - "depth=%d", - exposure_time, used_res, start, pixels, channels, depth); + DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start); unsigned int words_per_line; unsigned dpiset, dpihw, segnb, factor; unsigned int bytes; @@ -760,18 +755,18 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens // to manage high resolution device while keeping good low resolution scanning speed, we make // hardware dpi vary - dpihw = sensor.get_register_hwdpi(used_res * ccd_pixels_per_system_pixel); + dpihw = sensor.get_register_hwdpi(session.params.xres * ccd_pixels_per_system_pixel); factor=sensor.optical_res/dpihw; DBG(DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor); // sensor parameters const auto& sensor_profile = get_sensor_profile(sensor, dpihw); gl847_setup_sensor(dev, sensor, reg, dpihw); - dpiset = used_res * ccd_pixels_per_system_pixel; + dpiset = session.params.xres * ccd_pixels_per_system_pixel; // start and end coordinate in optical dpi coordinates unsigned startx = start / ccd_pixels_per_system_pixel + sensor.CCD_start_xoffset; - unsigned endx = startx + pixels / ccd_pixels_per_system_pixel; + unsigned endx = startx + session.optical_pixels / ccd_pixels_per_system_pixel; /* sensors are built from 600 dpi segments for LiDE 100/200 * and 1200 dpi for the 700F */ @@ -831,7 +826,7 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* monochrome / color scan */ r = sanei_genesys_get_address (reg, REG04); - switch (depth) + switch (session.params.depth) { case 1: r->value &= ~REG04_BITSET; @@ -847,9 +842,9 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens } r->value &= ~(REG04_FILTER | REG04_AFEMOD); - if (channels == 1) + if (session.params.channels == 1) { - switch (color_filter) + switch (session.params.color_filter) { case ColorFilter::RED: @@ -897,8 +892,8 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* words(16bit) before gamma, conversion to 8 bit or lineart*/ words_per_line = (used_pixels * dpiset) / dpihw; - bytes=depth/8; - if (depth == 1) + bytes=session.params.depth/8; + if (session.params.depth == 1) { words_per_line = (words_per_line+7)/8 ; dev->len = (dev->len >> 3) + ((dev->len & 7) ? 1 : 0); @@ -925,14 +920,14 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens DBG (DBG_io2, "%s: endx =%d\n", __func__, endx); DBG (DBG_io2, "%s: used_pixels=%d\n", __func__, used_pixels); - DBG (DBG_io2, "%s: pixels =%d\n", __func__, pixels); - DBG (DBG_io2, "%s: depth =%d\n", __func__, depth); + DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels); + DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth); DBG (DBG_io2, "%s: dev->bpl =%lu\n", __func__, (unsigned long)dev->bpl); DBG (DBG_io2, "%s: dev->len =%lu\n", __func__, (unsigned long)dev->len); DBG (DBG_io2, "%s: dev->dist =%lu\n", __func__, (unsigned long)dev->dist); DBG (DBG_io2, "%s: dev->segnb =%lu\n", __func__, (unsigned long)dev->segnb); - words_per_line *= channels; + words_per_line *= session.params.channels; dev->wpl = words_per_line; dev->oe_buffer.clear(); @@ -1020,9 +1015,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens /* we enable true gray for cis scanners only, and just when doing * scan since color calibration is OK for this mode */ - gl847_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, session.params.xres, start, - session.optical_pixels, session.params.channels, - session.params.depth, session.params.color_filter); + gl847_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, start); move = session.params.starty; DBG(DBG_info, "%s: move=%d steps\n", __func__, move); From 96a893bb0d9c46ae2ce0a4824d7fc63f863e8c0d Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 12 Sep 2019 20:06:37 +0300 Subject: [PATCH 2/3] genesys: Simplify words_per_line calculations --- backend/genesys_gl124.cc | 27 ++++++++------------------- backend/genesys_gl841.cc | 37 ++++--------------------------------- backend/genesys_gl841.h | 1 + backend/genesys_gl846.cc | 17 +++-------------- backend/genesys_gl847.cc | 17 +++-------------- 5 files changed, 19 insertions(+), 80 deletions(-) diff --git a/backend/genesys_gl124.cc b/backend/genesys_gl124.cc index e97effc2d..1afad93ce 100644 --- a/backend/genesys_gl124.cc +++ b/backend/genesys_gl124.cc @@ -830,8 +830,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens exposure_time, start); unsigned int words_per_line, segcnt; unsigned int startx, endx, segnb; - unsigned int dpiset, dpihw, factor; - unsigned int bytes; + unsigned int dpihw, factor; GenesysRegister *r; uint32_t expmax; @@ -841,13 +840,12 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens // to manage high resolution device while keeping good low resolution scanning speed, we // make hardware dpi vary - dpihw = sensor.get_register_hwdpi(session.params.xres * ccd_pixels_per_system_pixel); - factor = sensor.get_hwdpi_divisor_for_dpi(session.params.xres * ccd_pixels_per_system_pixel); + dpihw = sensor.get_register_hwdpi(session.output_resolution * ccd_pixels_per_system_pixel); + factor = sensor.get_hwdpi_divisor_for_dpi(session.output_resolution * ccd_pixels_per_system_pixel); DBG (DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor); // sensor parameters gl124_setup_sensor(dev, sensor, reg, dpihw, session.ccd_size_divisor); - dpiset = session.params.xres * ccd_pixels_per_system_pixel; /* start and end coordinate in optical dpi coordinates */ /* startx = start / ccd_pixels_per_system_pixel + sensor.dummy_pixel; XXX STEF XXX */ @@ -857,7 +855,6 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* pixel coordinate factor correction when used dpihw is not maximal one */ startx/=factor; endx/=factor; - unsigned used_pixels = endx - startx; gl124_set_fe(dev, sensor, AFE_SET); @@ -940,7 +937,8 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens r->value |= REG05_GMMENB; } - unsigned dpiset_reg = dpiset * session.ccd_size_divisor; + unsigned dpiset_reg = session.output_resolution * ccd_pixels_per_system_pixel * + session.ccd_size_divisor; if (sensor.dpiset_override != 0) { dpiset_reg = sensor.dpiset_override; } @@ -992,17 +990,9 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens reg->set24(REG_ENDPIXEL, endx / segnb); DBG (DBG_io2, "%s: endpixel used=%d\n", __func__, endx/segnb); - /* words(16bit) before gamma, conversion to 8 bit or lineart */ - words_per_line = (used_pixels * dpiset) / dpihw; - bytes = session.params.depth / 8; - if (session.params.depth == 1) - { - words_per_line = (words_per_line >> 3) + ((words_per_line & 7) ? 1 : 0); - } - else - { - words_per_line *= bytes; - } + // words(16bit) before gamma, conversion to 8 bit or lineart + words_per_line = multiply_by_depth_ceil(session.output_pixels / session.ccd_size_divisor, + session.params.depth); dev->bpl = words_per_line; dev->cur = 0; @@ -1013,7 +1003,6 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens dev->line_count = 0; dev->line_interp = 0; - DBG (DBG_io2, "%s: used_pixels =%d\n", __func__, used_pixels); DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels); DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth); DBG (DBG_io2, "%s: dev->bpl =%lu\n", __func__, (unsigned long)dev->bpl); diff --git a/backend/genesys_gl841.cc b/backend/genesys_gl841.cc index 30768205c..acbef40aa 100644 --- a/backend/genesys_gl841.cc +++ b/backend/genesys_gl841.cc @@ -1456,9 +1456,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens const ScanSession& session, unsigned int start) { DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start); - unsigned int words_per_line; unsigned int end; - unsigned int dpiset; GenesysRegister* r; uint16_t expavg, expr, expb, expg; @@ -1466,18 +1464,6 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens gl841_set_fe(dev, sensor, AFE_SET); - /* adjust used_res for chosen dpihw */ - unsigned used_res = session.params.xres * gl841_get_dpihw(dev) / sensor.optical_res; - -/* - with ccd_size_divisor==2 the optical resolution of the ccd is halved. We don't apply this - to dpihw, so we need to double dpiset. - - For the scanner only the ratio of dpiset and dpihw is of relevance to scale - down properly. -*/ - dpiset = used_res * session.ccd_size_divisor; - /* gpio part.*/ if (dev->model->gpo_type == GPO_CANONLIDE35) { @@ -1613,30 +1599,15 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens r = sanei_genesys_get_address (reg, 0x29); r->value = 255; /*<<<"magic" number, only suitable for cis*/ - reg->set16(REG_DPISET, dpiset); + reg->set16(REG_DPISET, gl841_get_dpihw(dev) * session.output_resolution / session.optical_resolution); reg->set16(REG_STRPIXEL, start); reg->set16(REG_ENDPIXEL, end); DBG(DBG_io2, "%s: STRPIXEL=%d, ENDPIXEL=%d\n", __func__, start, end); - /* words(16bit) before gamma, conversion to 8 bit or lineart*/ - words_per_line = (session.optical_pixels * dpiset) / gl841_get_dpihw(dev); + dev->wpl = session.output_line_bytes; + dev->bpl = session.output_line_bytes; - words_per_line *= session.params.channels; - - if (session.params.depth == 1) - words_per_line = (words_per_line >> 3) + ((words_per_line & 7)?1:0); - else - words_per_line *= session.params.depth / 8; - - dev->wpl = words_per_line; - dev->bpl = words_per_line; - - r = sanei_genesys_get_address (reg, 0x35); - r->value = LOBYTE (HIWORD (words_per_line)); - r = sanei_genesys_get_address (reg, 0x36); - r->value = HIBYTE (LOWORD (words_per_line)); - r = sanei_genesys_get_address (reg, 0x37); - r->value = LOBYTE (LOWORD (words_per_line)); + reg->set24(REG_MAXWD, session.output_line_bytes); reg->set16(REG_LPERIOD, exposure_time); diff --git a/backend/genesys_gl841.h b/backend/genesys_gl841.h index e1f06924b..d986f3d21 100644 --- a/backend/genesys_gl841.h +++ b/backend/genesys_gl841.h @@ -174,6 +174,7 @@ #define REG_DPISET 0x2c #define REG_STRPIXEL 0x30 #define REG_ENDPIXEL 0x32 +#define REG_MAXWD 0x35 #define REG_LPERIOD 0x38 #define REG40_HISPDFLG 0x04 diff --git a/backend/genesys_gl846.cc b/backend/genesys_gl846.cc index b0306bba1..93f416090 100644 --- a/backend/genesys_gl846.cc +++ b/backend/genesys_gl846.cc @@ -727,7 +727,6 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start); unsigned int words_per_line; unsigned int dpiset, dpihw, segnb, factor; - unsigned int bytes; GenesysRegister *r; // resolution is divided according to ccd_pixels_per_system_pixel() @@ -873,19 +872,9 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* words(16bit) before gamma, conversion to 8 bit or lineart*/ words_per_line = (used_pixels * dpiset) / dpihw; - bytes=session.params.depth/8; - if (session.params.depth == 1) - { - words_per_line = (words_per_line+7)/8 ; - dev->len = (dev->len >> 3) + ((dev->len & 7) ? 1 : 0); - dev->dist = (dev->dist >> 3) + ((dev->dist & 7) ? 1 : 0); - } - else - { - words_per_line *= bytes; - dev->dist *= bytes; - dev->len *= bytes; - } + words_per_line = multiply_by_depth_ceil(words_per_line, session.params.depth); + dev->len = multiply_by_depth_ceil(dev->len, session.params.depth); + dev->dist = multiply_by_depth_ceil(dev->dist, session.params.depth); dev->bpl = words_per_line; dev->cur=0; diff --git a/backend/genesys_gl847.cc b/backend/genesys_gl847.cc index 92c24e591..a68cc9bb3 100644 --- a/backend/genesys_gl847.cc +++ b/backend/genesys_gl847.cc @@ -746,7 +746,6 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start); unsigned int words_per_line; unsigned dpiset, dpihw, segnb, factor; - unsigned int bytes; GenesysRegister *r; // resolution is divided according to ccd_pixels_per_system_pixel() @@ -892,19 +891,9 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens /* words(16bit) before gamma, conversion to 8 bit or lineart*/ words_per_line = (used_pixels * dpiset) / dpihw; - bytes=session.params.depth/8; - if (session.params.depth == 1) - { - words_per_line = (words_per_line+7)/8 ; - dev->len = (dev->len >> 3) + ((dev->len & 7) ? 1 : 0); - dev->dist = (dev->dist >> 3) + ((dev->dist & 7) ? 1 : 0); - } - else - { - words_per_line *= bytes; - dev->dist *= bytes; - dev->len *= bytes; - } + words_per_line = multiply_by_depth_ceil(words_per_line, session.params.depth); + dev->len = multiply_by_depth_ceil(dev->len, session.params.depth); + dev->dist = multiply_by_depth_ceil(dev->dist, session.params.depth); dev->bpl = words_per_line; dev->cur=0; From 88d6cdcc32c13114531b9879ece1410b56e3de09 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 12 Sep 2019 20:06:38 +0300 Subject: [PATCH 3/3] genesys: Rename read_bytes_left -> read_bytes_left_after_deseg --- backend/genesys.cc | 21 +++++++++++---------- backend/genesys_device.h | 5 +++-- backend/genesys_gl124.cc | 5 +++-- backend/genesys_gl646.cc | 18 +++++++++--------- backend/genesys_gl841.cc | 7 ++++--- backend/genesys_gl843.cc | 38 ++++++++++++++++++-------------------- backend/genesys_gl846.cc | 15 ++++++++------- backend/genesys_gl847.cc | 6 ++++-- 8 files changed, 60 insertions(+), 55 deletions(-) diff --git a/backend/genesys.cc b/backend/genesys.cc index 8bd316aa1..2814aa4bb 100644 --- a/backend/genesys.cc +++ b/backend/genesys.cc @@ -3562,9 +3562,8 @@ static void genesys_fill_read_buffer(Genesys_Device* dev) /* Some setups need the reads to be multiples of 256 bytes */ size &= ~0xff; - if (dev->read_bytes_left < size) - { - size = dev->read_bytes_left; + if (dev->read_bytes_left_after_deseg < size) { + size = dev->read_bytes_left_after_deseg; /*round up to a multiple of 256 bytes */ size += (size & 0xff) ? 0x100 : 0x00; size &= ~0xff; @@ -3604,10 +3603,11 @@ static void genesys_fill_read_buffer(Genesys_Device* dev) dev->cmd_set->bulk_read_data(dev, 0x45, work_buffer_dst, size); } - if (size > dev->read_bytes_left) - size = dev->read_bytes_left; + if (size > dev->read_bytes_left_after_deseg) { + size = dev->read_bytes_left_after_deseg; + } - dev->read_bytes_left -= size; + dev->read_bytes_left_after_deseg -= size; dev->read_buffer.produce(size); } @@ -3695,9 +3695,9 @@ static void genesys_read_ordered_data(Genesys_Device* dev, SANE_Byte* destinatio DBG(DBG_info, "%s: %lu lines left by output\n", __func__, ((dev->total_bytes_to_read - dev->total_bytes_read) * 8UL) / (dev->settings.requested_pixels * channels * depth)); - DBG(DBG_info, "%s: %lu lines left by input\n", __func__, - ((dev->read_bytes_left + dev->read_buffer.avail()) * 8UL) / - (src_pixels * channels * depth)); + DBG(DBG_info, "%s: %lu lines left by input\n", __func__, + ((dev->read_bytes_left_after_deseg + dev->read_buffer.avail()) * 8UL) / + (src_pixels * channels * depth)); if (channels == 1) { @@ -6524,7 +6524,8 @@ sane_read_impl(SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, SANE_Int* DBG(DBG_proc, "%s: start, %d maximum bytes required\n", __func__, max_len); DBG(DBG_io2, "%s: bytes_to_read=%lu, total_bytes_read=%lu\n", __func__, (u_long) dev->total_bytes_to_read, (u_long) dev->total_bytes_read); - DBG(DBG_io2, "%s: physical bytes to read = %lu\n", __func__, (u_long) dev->read_bytes_left); + DBG(DBG_io2, "%s: desegmented bytes to read = %lu\n", __func__, + (u_long) dev->read_bytes_left_after_deseg); if(dev->total_bytes_read>=dev->total_bytes_to_read) { diff --git a/backend/genesys_device.h b/backend/genesys_device.h index 3a7eddc61..90e3676a5 100644 --- a/backend/genesys_device.h +++ b/backend/genesys_device.h @@ -282,8 +282,9 @@ struct Genesys_Device // local buffer for gray data during dynamix lineart Genesys_Buffer local_buffer; - // bytes to read from scanner - size_t read_bytes_left = 0; + // bytes to read from desegmentation step. This is not the same as physical bytes read from + // scanners, see `wpl` which corresponds to this information on certain scanners. + size_t read_bytes_left_after_deseg = 0; // total bytes read sent to frontend size_t total_bytes_read = 0; diff --git a/backend/genesys_gl124.cc b/backend/genesys_gl124.cc index 1afad93ce..7ee17af70 100644 --- a/backend/genesys_gl124.cc +++ b/backend/genesys_gl124.cc @@ -1145,9 +1145,10 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens dev->out_buffer.clear(); dev->out_buffer.alloc((8 * dev->settings.pixels * session.params.channels * session.params.depth) / 8); - dev->read_bytes_left = session.output_line_bytes * session.output_line_count; + dev->read_bytes_left_after_deseg = session.output_line_bytes * session.output_line_count; - DBG(DBG_info, "%s: physical bytes to read = %lu\n", __func__, (u_long) dev->read_bytes_left); + DBG(DBG_info, "%s: desegmented bytes to read = %lu\n", __func__, + (u_long) dev->read_bytes_left_after_deseg); dev->read_active = SANE_TRUE; dev->session = session; diff --git a/backend/genesys_gl646.cc b/backend/genesys_gl646.cc index b807b5556..4a9a01879 100644 --- a/backend/genesys_gl646.cc +++ b/backend/genesys_gl646.cc @@ -742,9 +742,10 @@ static void gl646_setup_registers(Genesys_Device* dev, /* scan bytes to read */ unsigned cis_channel_multiplier = dev->model->is_cis ? session.params.channels : 1; - dev->read_bytes_left = session.output_line_bytes * session.output_line_count * cis_channel_multiplier; + dev->read_bytes_left_after_deseg = session.output_line_bytes * session.output_line_count * cis_channel_multiplier; - DBG(DBG_info, "%s: physical bytes to read = %lu\n", __func__, (u_long) dev->read_bytes_left); + DBG(DBG_info, "%s: desegmented bytes to read = %lu\n", __func__, + (u_long) dev->read_bytes_left_after_deseg); dev->read_active = SANE_TRUE; dev->session = session; @@ -1511,7 +1512,7 @@ static void gl646_detect_document_end(Genesys_Device* dev) */ DBG(DBG_io, "%s: total_bytes_to_read=%lu\n", __func__, (u_long) dev->total_bytes_to_read); DBG(DBG_io, "%s: total_bytes_read =%lu\n", __func__, (u_long) dev->total_bytes_read); - DBG(DBG_io, "%s: read_bytes_left =%lu\n", __func__, (u_long) dev->read_bytes_left); + DBG(DBG_io, "%s: read_bytes_left_after_deseg =%lu\n", __func__, (u_long) dev->read_bytes_left_after_deseg); // amount of data available from scanner is what to scan sanei_genesys_read_valid_words(dev, &bytes_left); @@ -1526,14 +1527,13 @@ static void gl646_detect_document_end(Genesys_Device* dev) if (dev->session.params.channels > 1) { bytes_left = 3 * bytes_left; } - if (bytes_left < dev->read_bytes_left) - { - dev->total_bytes_to_read = dev->total_bytes_read + bytes_left; - dev->read_bytes_left = bytes_left; - } + if (bytes_left < dev->read_bytes_left_after_deseg) { + dev->total_bytes_to_read = dev->total_bytes_read + bytes_left; + dev->read_bytes_left_after_deseg = bytes_left; + } DBG(DBG_io, "%s: total_bytes_to_read=%lu\n", __func__, (u_long) dev->total_bytes_to_read); DBG(DBG_io, "%s: total_bytes_read =%lu\n", __func__, (u_long) dev->total_bytes_read); - DBG(DBG_io, "%s: read_bytes_left =%lu\n", __func__, (u_long) dev->read_bytes_left); + DBG(DBG_io, "%s: read_bytes_left =%lu\n", __func__, (u_long) dev->read_bytes_left_after_deseg); } } diff --git a/backend/genesys_gl841.cc b/backend/genesys_gl841.cc index acbef40aa..66c064d6a 100644 --- a/backend/genesys_gl841.cc +++ b/backend/genesys_gl841.cc @@ -1902,9 +1902,10 @@ dummy \ scanned lines dev->out_buffer.clear(); dev->out_buffer.alloc((8 * dev->settings.pixels * session.params.channels * session.params.depth) / 8); - dev->read_bytes_left = session.output_line_bytes * session.output_line_count; + dev->read_bytes_left_after_deseg = session.output_line_bytes * session.output_line_count; - DBG(DBG_info, "%s: physical bytes to read = %lu\n", __func__, (u_long) dev->read_bytes_left); + DBG(DBG_info, "%s: desegmented bytes to read = %lu\n", __func__, + (u_long) dev->read_bytes_left_after_deseg); dev->read_active = SANE_TRUE; dev->session = session; @@ -2433,7 +2434,7 @@ static void gl841_detect_document_end(Genesys_Device* dev) sanei_genesys_read_scancnt(dev, &scancnt); } catch (...) { dev->total_bytes_to_read = dev->total_bytes_read; - dev->read_bytes_left = 0; + dev->read_bytes_left_after_deseg = 0; throw; } diff --git a/backend/genesys_gl843.cc b/backend/genesys_gl843.cc index 446260a97..1bd6c1c66 100644 --- a/backend/genesys_gl843.cc +++ b/backend/genesys_gl843.cc @@ -1322,9 +1322,10 @@ static void gl843_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens dev->out_buffer.alloc((8 * session.params.pixels * session.params.channels * session.params.depth) / 8); - dev->read_bytes_left = session.output_line_bytes * session.output_line_count; + dev->read_bytes_left_after_deseg = session.output_line_bytes * session.output_line_count; - DBG(DBG_info, "%s: physical bytes to read = %lu\n", __func__, (u_long) dev->read_bytes_left); + DBG(DBG_info, "%s: physical bytes to read = %lu\n", __func__, + (u_long) dev->read_bytes_left_after_deseg); dev->read_active = SANE_TRUE; dev->session = session; @@ -1569,7 +1570,7 @@ static void gl843_detect_document_end(Genesys_Device* dev) unsigned channels = dev->session.params.channels; unsigned depth = dev->session.params.depth; - read_bytes_left = (int) dev->read_bytes_left; + read_bytes_left = (int) dev->read_bytes_left_after_deseg; DBG(DBG_io, "%s: read_bytes_left=%d\n", __func__, read_bytes_left); // get lines read @@ -1641,16 +1642,13 @@ static void gl843_detect_document_end(Genesys_Device* dev) dev->total_bytes_to_read -= sub_bytes; - /* then adjust the physical bytes to read */ - if (read_bytes_left > sub_bytes) - { - dev->read_bytes_left -= sub_bytes; - } - else - { - dev->total_bytes_to_read = dev->total_bytes_read; - dev->read_bytes_left = 0; - } + /* then adjust the desegmented bytes to read */ + if (read_bytes_left > sub_bytes) { + dev->read_bytes_left_after_deseg -= sub_bytes; + } else { + dev->total_bytes_to_read = dev->total_bytes_read; + dev->read_bytes_left_after_deseg = 0; + } DBG(DBG_io, "%s: sublines=%d\n", __func__, sublines); DBG(DBG_io, "%s: subbytes=%d\n", __func__, sub_bytes); @@ -2154,7 +2152,7 @@ static void gl843_search_start_position(Genesys_Device* dev) // send to scanner dev->write_registers(local_reg); - size = dev->read_bytes_left; + size = dev->read_bytes_left_after_deseg; std::vector data(size); @@ -2392,7 +2390,7 @@ static void gl843_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso // the pixel number may be updated to conform to scanner constraints dev->calib_pixels = dev->current_setup.pixels; - dev->calib_total_bytes_to_read = dev->read_bytes_left; + dev->calib_total_bytes_to_read = dev->read_bytes_left_after_deseg; dev->scanhead_position_in_steps += dev->calib_lines + move; @@ -2574,7 +2572,7 @@ static SensorExposure gl843_led_calibration(Genesys_Device* dev, const Genesys_S dev->write_registers(regs); - total_size = dev->read_bytes_left; + total_size = dev->read_bytes_left_after_deseg; std::vector line(total_size); @@ -2812,8 +2810,8 @@ static void gl843_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& sanei_genesys_set_motor_power(regs, false); - /* allocate memory for scans */ - total_size = dev->read_bytes_left; + // allocate memory for scans + total_size = dev->read_bytes_left_after_deseg; std::vector first_line(total_size); std::vector second_line(total_size); @@ -3042,7 +3040,7 @@ static void gl843_coarse_gain_calibration(Genesys_Device* dev, const Genesys_Sen dev->write_registers(regs); - total_size = dev->read_bytes_left; + total_size = dev->read_bytes_left_after_deseg; std::vector line(total_size); @@ -3417,7 +3415,7 @@ static void gl843_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor gl843_init_scan_regs(dev, calib_sensor, &local_reg, session); - size = dev->read_bytes_left; + size = dev->read_bytes_left_after_deseg; std::vector data(size); /* set up for reverse or forward */ diff --git a/backend/genesys_gl846.cc b/backend/genesys_gl846.cc index 93f416090..d553d1454 100644 --- a/backend/genesys_gl846.cc +++ b/backend/genesys_gl846.cc @@ -726,7 +726,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens { DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start); unsigned int words_per_line; - unsigned int dpiset, dpihw, segnb, factor; + unsigned int dpihw, segnb, factor; GenesysRegister *r; // resolution is divided according to ccd_pixels_per_system_pixel() @@ -742,7 +742,6 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens // sensor parameters const auto& sensor_profile = get_sensor_profile(sensor, dpihw); gl846_setup_sensor(dev, sensor, reg, dpihw); - dpiset = session.params.xres * ccd_pixels_per_system_pixel ; // start and end coordinate in optical dpi coordinates unsigned startx = start / ccd_pixels_per_system_pixel + sensor.CCD_start_xoffset; @@ -871,7 +870,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens } /* words(16bit) before gamma, conversion to 8 bit or lineart*/ - words_per_line = (used_pixels * dpiset) / dpihw; + words_per_line = (used_pixels * session.params.xres * ccd_pixels_per_system_pixel) / sensor.get_register_hwdpi(session.params.xres * ccd_pixels_per_system_pixel); words_per_line = multiply_by_depth_ceil(words_per_line, session.params.depth); dev->len = multiply_by_depth_ceil(dev->len, session.params.depth); dev->dist = multiply_by_depth_ceil(dev->dist, session.params.depth); @@ -881,8 +880,9 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens dev->segnb=segnb; dev->line_interp = 0; - reg->set16(REG_DPISET,dpiset); - DBG (DBG_io2, "%s: dpiset used=%d\n", __func__, dpiset); + unsigned dpiset = session.params.xres * ccd_pixels_per_system_pixel; + reg->set16(REG_DPISET, dpiset); + DBG(DBG_io2, "%s: dpiset used=%d\n", __func__, dpiset); reg->set16(REG_STRPIXEL,startx); reg->set16(REG_ENDPIXEL,endx); @@ -1027,9 +1027,10 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens dev->out_buffer.clear(); dev->out_buffer.alloc((8 * session.params.pixels * session.params.channels * session.params.depth) / 8); - dev->read_bytes_left = session.output_line_bytes * session.output_line_count; + dev->read_bytes_left_after_deseg = session.output_line_bytes * session.output_line_count; - DBG(DBG_info, "%s: physical bytes to read = %lu\n", __func__, (u_long) dev->read_bytes_left); + DBG(DBG_info, "%s: desegmented bytes to read = %lu\n", __func__, + (u_long) dev->read_bytes_left_after_deseg); dev->read_active = SANE_TRUE; dev->session = session; diff --git a/backend/genesys_gl847.cc b/backend/genesys_gl847.cc index a68cc9bb3..cc463ae7a 100644 --- a/backend/genesys_gl847.cc +++ b/backend/genesys_gl847.cc @@ -1041,9 +1041,11 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens dev->out_buffer.clear(); dev->out_buffer.alloc((8 * session.params.pixels * session.params.channels * session.params.depth) / 8); - dev->read_bytes_left = session.output_line_bytes * session.output_line_count; + dev->read_bytes_left_after_deseg = session.output_line_bytes * session.output_line_count; + + DBG(DBG_info, "%s: desegment bytes to read = %lu\n", __func__, + (u_long) dev->read_bytes_left_after_deseg); - DBG(DBG_info, "%s: physical bytes to read = %lu\n", __func__, (u_long) dev->read_bytes_left); dev->read_active = SANE_TRUE; dev->session = session;