kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Use common code path to compute session max_color_shift_lines
rodzic
9afaf9a2cf
commit
ce144ed46f
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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__);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue