From ce144ed46fe7b28b4e1753753651796af70fc47d Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 12 Sep 2019 18:27:45 +0300 Subject: [PATCH] genesys: Use common code path to compute session max_color_shift_lines --- backend/genesys_gl124.cc | 19 ++++++------------- backend/genesys_gl646.cc | 18 ++++++------------ backend/genesys_gl841.cc | 20 +++++--------------- backend/genesys_gl843.cc | 14 ++------------ backend/genesys_gl846.cc | 17 +++++------------ backend/genesys_gl847.cc | 19 +++++-------------- backend/genesys_low.cc | 3 ++- backend/genesys_settings.h | 1 - 8 files changed, 31 insertions(+), 80 deletions(-) diff --git a/backend/genesys_gl124.cc b/backend/genesys_gl124.cc index f64e27c24..f6dcf7869 100644 --- a/backend/genesys_gl124.cc +++ b/backend/genesys_gl124.cc @@ -1075,7 +1075,6 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens int dummy = 0; int slope_dpi = 0; int scan_step_type = 1; - int max_shift; size_t requested_buffer_size, read_buffer_size; DBG (DBG_info, "%s: optical_res=%d\n", __func__, session.optical_resolution); @@ -1131,10 +1130,7 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens /*** motor parameters ***/ - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres, - session.params.flags); - - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; /* add tl_y to base movement */ move = session.params.starty; @@ -1163,7 +1159,7 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens requested_buffer_size = 16 * bytes_per_line; read_buffer_size = 2 * requested_buffer_size + - ((max_shift + session.num_staggered_lines) * session.optical_pixels * + ((session.max_color_shift_lines + session.num_staggered_lines) * session.optical_pixels * session.params.channels * session.params.depth) / 8; dev->read_buffer.clear(); @@ -1191,7 +1187,7 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; dev->total_bytes_read = 0; if (session.params.depth == 1) { @@ -1214,7 +1210,7 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso unsigned int lincnt; int exposure_time; - int max_shift, dpihw; + int dpihw; DBG(DBG_info, "%s ", __func__); debug_dump(DBG_info, dev->settings); @@ -1252,9 +1248,6 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso DBG (DBG_info, "%s : exposure_time=%d pixels\n", __func__, exposure_time); - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, - session.params.yres, 0); - // compute hw dpi for sensor dpihw = sensor.get_register_hwdpi(session.params.xres); @@ -1262,7 +1255,7 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso session.ccd_size_divisor); dev->segnb = sensor_profile.custom_regs.get_value(0x98) & 0x0f; - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; dev->session = session; dev->current_setup.pixels = session.output_pixels; @@ -1272,7 +1265,7 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; } /** diff --git a/backend/genesys_gl646.cc b/backend/genesys_gl646.cc index 26fbf59f3..4f289ac92 100644 --- a/backend/genesys_gl646.cc +++ b/backend/genesys_gl646.cc @@ -362,7 +362,7 @@ static void gl646_setup_registers(Genesys_Device* dev, unsigned int bpp; /**> bytes per pixel */ uint32_t z1, z2; uint16_t ex, sx; - int words_per_line, max_shift; + int words_per_line; size_t requested_buffer_size; size_t read_buffer_size; SANE_Int xresolution; @@ -557,18 +557,12 @@ static void gl646_setup_registers(Genesys_Device* dev, regs->find_reg(0x23).value = motor->fwdbwd; regs->find_reg(0x24).value = motor->steps1; - /* scanned area height must be enlarged by max color shift needed */ - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, - session.params.yres, 0); - /* we adjust linecnt according to real motor dpi */ - linecnt = (linecnt * motor->ydpi) / session.params.yres + max_shift; + linecnt = (linecnt * motor->ydpi) / session.params.yres + session.max_color_shift_lines; /* at QUATER_STEP lines are 'staggered' and need correction */ linecnt += session.num_staggered_lines; - DBG(DBG_info, "%s : max_shift=%d lines\n", __func__, max_shift); - /* CIS scanners read one line per color channel * since gray mode use 'add' we also read 3 channels even not in * color mode */ @@ -616,8 +610,8 @@ static void gl646_setup_registers(Genesys_Device* dev, /* move distance must be adjusted to take into account the extra lines * read to reorder data */ feedl = move; - if (session.num_staggered_lines + max_shift > 0 && feedl != 0) { - int feed_offset = ((max_shift + session.num_staggered_lines) * dev->motor.optical_ydpi) / + if (session.num_staggered_lines + session.max_color_shift_lines > 0 && feedl != 0) { + int feed_offset = ((session.max_color_shift_lines + session.num_staggered_lines) * dev->motor.optical_ydpi) / motor->ydpi; if (feedl > feed_offset) { feedl = feedl - feed_offset; @@ -768,7 +762,7 @@ static void gl646_setup_registers(Genesys_Device* dev, /* we must use a round number of words_per_line */ requested_buffer_size = 8 * words_per_line; read_buffer_size = 2 * requested_buffer_size + - ((max_shift + session.num_staggered_lines) * session.params.pixels * + ((session.max_color_shift_lines + session.num_staggered_lines) * session.params.pixels * session.params.channels * session.params.depth) / 8; dev->read_buffer.clear(); @@ -796,7 +790,7 @@ static void gl646_setup_registers(Genesys_Device* dev, dev->current_setup.xres = session.output_resolution; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; /* total_bytes_to_read is the number of byte to send to frontend * total_bytes_read is the number of bytes sent to frontend diff --git a/backend/genesys_gl841.cc b/backend/genesys_gl841.cc index f7e5c296c..8f924c867 100644 --- a/backend/genesys_gl841.cc +++ b/backend/genesys_gl841.cc @@ -1772,7 +1772,6 @@ static void gl841_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens int slope_dpi = 0; int dummy = 0; int scan_step_type = 1; - int max_shift; size_t requested_buffer_size, read_buffer_size; /* @@ -1893,11 +1892,7 @@ dummy \ scanned lines /*** motor parameters ***/ - // scanned area must be enlarged by max color shift needed */ - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, - session.params.yres, session.params.flags); - - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; move = session.params.starty; DBG(DBG_info, "%s: move=%d steps\n", __func__, move); @@ -1939,7 +1934,7 @@ dummy \ scanned lines } read_buffer_size = 2 * requested_buffer_size + - ((max_shift + session.num_staggered_lines) * session.optical_pixels * + ((session.max_color_shift_lines + session.num_staggered_lines) * session.optical_pixels * session.params.channels * session.params.depth) / 8; dev->read_buffer.clear(); @@ -1966,7 +1961,7 @@ dummy \ scanned lines dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; /* TODO: should this be done elsewhere? */ /* scan bytes to send to the frontend */ @@ -2006,7 +2001,6 @@ static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Se int slope_dpi = 0; int dummy = 0; int scan_step_type = 1; - int max_shift; DBG(DBG_info, "%s ", __func__); debug_dump(DBG_info, dev->settings); @@ -2092,11 +2086,7 @@ dummy \ scanned lines session.optical_pixels); DBG(DBG_info, "%s : exposure_time=%d pixels\n", __func__, exposure_time); - /* scanned area must be enlarged by max color shift needed */ - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, - session.params.yres, 0); - - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; dev->session = session; dev->current_setup.pixels = session.output_pixels; @@ -2105,7 +2095,7 @@ dummy \ scanned lines dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; } // for fast power saving methods only, like disabling certain amplifiers diff --git a/backend/genesys_gl843.cc b/backend/genesys_gl843.cc index 008d784cd..3096a64e7 100644 --- a/backend/genesys_gl843.cc +++ b/backend/genesys_gl843.cc @@ -1193,9 +1193,6 @@ static void gl843_compute_session(Genesys_Device* dev, ScanSession& s, // compute optical and output resolutions s.hwdpi_divisor = sensor.get_hwdpi_divisor_for_dpi(s.params.xres); - s.max_color_shift_lines = sanei_genesys_compute_max_shift(dev, s.params.channels, - s.params.yres, s.params.flags); - s.output_line_count = s.params.lines + s.max_color_shift_lines + s.num_staggered_lines; s.optical_line_bytes = (s.optical_pixels * s.params.channels * s.params.depth) / 8; @@ -1371,8 +1368,6 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor unsigned int lincnt; int exposure; - int max_shift; - DBG(DBG_info, "%s ", __func__); debug_dump(DBG_info, dev->settings); @@ -1436,12 +1431,7 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor dev->ld_shift_b = dev->model->ld_shift_b; } - /* scanned area must be enlarged by max color shift needed */ - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, - session.params.yres, 0); - - /* lincnt */ - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; dev->session = session; dev->current_setup.pixels = session.output_pixels; @@ -1451,7 +1441,7 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; DBG(DBG_proc, "%s: completed\n", __func__); } diff --git a/backend/genesys_gl846.cc b/backend/genesys_gl846.cc index c6b0faa49..6e363ac17 100644 --- a/backend/genesys_gl846.cc +++ b/backend/genesys_gl846.cc @@ -960,7 +960,6 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens int slope_dpi = 0; int dummy = 0; int scan_step_type = 1; - int max_shift; size_t requested_buffer_size, read_buffer_size; /* compute scan parameters values */ @@ -1010,10 +1009,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens /*** motor parameters ***/ - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres, - session.params.flags); - - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; /* add tl_y to base movement */ move = session.params.starty; @@ -1040,7 +1036,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens requested_buffer_size = 8 * bytes_per_line; read_buffer_size = 2 * requested_buffer_size + - ((max_shift + session.num_staggered_lines) * session.optical_pixels * session.params.channels * + ((session.max_color_shift_lines + session.num_staggered_lines) * session.optical_pixels * session.params.channels * session.params.depth) / 8; dev->read_buffer.clear(); @@ -1067,7 +1063,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; /* TODO: should this be done elsewhere? */ /* scan bytes to send to the frontend */ @@ -1107,7 +1103,6 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor int slope_dpi; int dummy = 0; - int max_shift; DBG(DBG_info, "%s ", __func__); debug_dump(DBG_info, dev->settings); @@ -1154,9 +1149,7 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor exposure_time = get_sensor_profile(sensor, session.params.xres).exposure_lperiod; DBG(DBG_info, "%s : exposure_time=%d pixels\n", __func__, exposure_time); - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres, 0); - - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; dev->session = session; dev->current_setup.pixels = session.output_pixels; @@ -1165,7 +1158,7 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; } // for fast power saving methods only, like disabling certain amplifiers diff --git a/backend/genesys_gl847.cc b/backend/genesys_gl847.cc index 0623081fc..8db35e16b 100644 --- a/backend/genesys_gl847.cc +++ b/backend/genesys_gl847.cc @@ -979,7 +979,6 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens int slope_dpi = 0; int dummy = 0; int scan_step_type = 1; - int max_shift; size_t requested_buffer_size, read_buffer_size; /* compute scan parameters values */ @@ -1027,12 +1026,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens session.optical_pixels, session.params.channels, session.params.depth, session.params.color_filter); -/*** motor parameters ***/ - - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres, - session.params.flags); - - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; move = session.params.starty; DBG(DBG_info, "%s: move=%d steps\n", __func__, move); @@ -1058,7 +1052,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens requested_buffer_size = 8 * bytes_per_line; read_buffer_size = 2 * requested_buffer_size + - ((max_shift + session.num_staggered_lines) * session.optical_pixels * + ((session.max_color_shift_lines + session.num_staggered_lines) * session.optical_pixels * session.params.channels * session.params.depth) / 8; dev->read_buffer.clear(); @@ -1085,7 +1079,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; /* TODO: should this be done elsewhere? */ /* scan bytes to send to the frontend */ @@ -1124,7 +1118,6 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor int slope_dpi = 0; int dummy = 0; - int max_shift; DBG(DBG_info, "%s ", __func__); debug_dump(DBG_info, dev->settings); @@ -1172,9 +1165,7 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor exposure_time = get_sensor_profile(sensor, session.params.xres).exposure_lperiod; DBG(DBG_info, "%s : exposure_time=%d pixels\n", __func__, exposure_time); - max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres, 0); - - lincnt = session.params.lines + max_shift + session.num_staggered_lines; + lincnt = session.params.lines + session.max_color_shift_lines + session.num_staggered_lines; dev->session = session; dev->current_setup.pixels = session.output_pixels; @@ -1183,7 +1174,7 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor dev->current_setup.xres = session.params.xres; dev->current_setup.ccd_size_divisor = session.ccd_size_divisor; dev->current_setup.stagger = session.num_staggered_lines; - dev->current_setup.max_shift = max_shift + session.num_staggered_lines; + dev->current_setup.max_shift = session.max_color_shift_lines + session.num_staggered_lines; } // for fast power saving methods only, like disabling certain amplifiers diff --git a/backend/genesys_low.cc b/backend/genesys_low.cc index 26ffbdbf1..0e20a25d5 100644 --- a/backend/genesys_low.cc +++ b/backend/genesys_low.cc @@ -1210,7 +1210,6 @@ void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor& } } - if (dev->model->asic_type == AsicType::GL843) { if ((s.params.yres > 1200) && // FIXME: maybe ccd_size_divisor is the one that controls this? ((s.params.flags & SCAN_FLAG_IGNORE_LINE_DISTANCE) == 0) && @@ -1220,6 +1219,8 @@ void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor& } } + s.max_color_shift_lines = sanei_genesys_compute_max_shift(dev, s.params.channels, + s.params.yres, s.params.flags); } /** @brief initialize device diff --git a/backend/genesys_settings.h b/backend/genesys_settings.h index e0c01ce9a..2fc3844db 100644 --- a/backend/genesys_settings.h +++ b/backend/genesys_settings.h @@ -255,7 +255,6 @@ struct ScanSession { unsigned num_staggered_lines = 0; // the number of lines that color channels shift due to different physical positions of - // gl843-only // different color channels unsigned max_color_shift_lines = 0;