genesys: Use common code path to compute session max_color_shift_lines

merge-requests/155/head
Povilas Kanapickas 2019-09-12 18:27:45 +03:00
rodzic 9afaf9a2cf
commit ce144ed46f
8 zmienionych plików z 31 dodań i 80 usunięć

Wyświetl plik

@ -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;
}
/**

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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__);
}

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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;