genesys: Use common code path to compute session num_staggered_lines

merge-requests/151/head
Povilas Kanapickas 2019-09-12 17:59:47 +03:00
rodzic 6b7052c4cf
commit 453a6b75be
8 zmienionych plików z 96 dodań i 156 usunięć

Wyświetl plik

@ -1071,7 +1071,6 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
unsigned int lincnt;
unsigned int mflags;
int exposure_time;
int stagger;
int dummy = 0;
int slope_dpi = 0;
@ -1081,20 +1080,12 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
DBG (DBG_info, "%s: optical_res=%d\n", __func__, session.optical_resolution);
/* stagger */
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG (DBG_info, "gl124_init_scan_regs : stagger=%d lines\n", stagger);
/* compute scan parameters values */
/* pixels are allways given at full optical resolution */
/* use detected left margin and fixed value */
start = session.params.startx;
if (stagger > 0) {
if (session.num_staggered_lines > 0) {
start |= 1;
}
@ -1143,7 +1134,7 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres,
session.params.flags);
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
/* add tl_y to base movement */
move = session.params.starty;
@ -1172,8 +1163,8 @@ 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 + stagger) * session.optical_pixels * session.params.channels *
session.params.depth) / 8;
((max_shift + session.num_staggered_lines) * session.optical_pixels *
session.params.channels * session.params.depth) / 8;
dev->read_buffer.clear();
dev->read_buffer.alloc(read_buffer_size);
@ -1199,8 +1190,8 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
dev->current_setup.exposure_time = exposure_time;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + session.num_staggered_lines;
dev->total_bytes_read = 0;
if (session.params.depth == 1) {
@ -1222,7 +1213,6 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso
unsigned int lincnt;
int exposure_time;
int stagger;
int max_shift, dpihw;
@ -1272,15 +1262,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;
/* stagger */
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG (DBG_info, "%s: stagger=%d lines\n", __func__, stagger);
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
dev->session = session;
dev->current_setup.pixels = (session.optical_pixels * session.params.xres) / sensor.optical_res;
@ -1289,8 +1271,8 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso
dev->current_setup.exposure_time = exposure_time;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + 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 stagger, words_per_line, max_shift;
int words_per_line, max_shift;
size_t requested_buffer_size;
size_t read_buffer_size;
SANE_Int xresolution;
@ -565,18 +565,9 @@ static void gl646_setup_registers(Genesys_Device* dev,
linecnt = (linecnt * motor->ydpi) / session.params.yres + max_shift;
/* at QUATER_STEP lines are 'staggered' and need correction */
stagger = 0;
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
// for HP3670, stagger happens only at >=1200 dpi
if ((dev->model->motor_type != MOTOR_HP3670 && dev->model->motor_type != MOTOR_HP2400)
|| session.params.yres >= (unsigned) sensor.optical_res)
{
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
}
}
linecnt += stagger;
linecnt += session.num_staggered_lines;
DBG(DBG_info, "%s : max_shift=%d, stagger=%d lines\n", __func__, max_shift, stagger);
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
@ -625,13 +616,12 @@ 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 (stagger + max_shift > 0 && feedl != 0)
{
if (feedl >
((max_shift + stagger) * dev->motor.optical_ydpi) / motor->ydpi)
feedl =
feedl -
((max_shift + stagger) * dev->motor.optical_ydpi) / motor->ydpi;
if (session.num_staggered_lines + max_shift > 0 && feedl != 0) {
int feed_offset = ((max_shift + session.num_staggered_lines) * dev->motor.optical_ydpi) /
motor->ydpi;
if (feedl > feed_offset) {
feedl = feedl - feed_offset;
}
}
/* we assume all scans are done with 2 tables */
@ -778,7 +768,8 @@ 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 + stagger) * session.params.pixels * session.params.channels * session.params.depth) / 8;
((max_shift + session.num_staggered_lines) * session.params.pixels *
session.params.channels * session.params.depth) / 8;
dev->read_buffer.clear();
dev->read_buffer.alloc(read_buffer_size);
@ -804,8 +795,8 @@ static void gl646_setup_registers(Genesys_Device* dev,
dev->current_setup.exposure_time = sensor.exposure_lperiod;
dev->current_setup.xres = sensor.real_resolution;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + 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

@ -1767,7 +1767,6 @@ static void gl841_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
int move;
unsigned int lincnt;
int exposure_time;
int stagger;
int avg;
int slope_dpi = 0;
@ -1804,15 +1803,6 @@ independent of our calculated values:
dev->bytes_to_read
*/
/* stagger */
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG(DBG_info, "%s : stagger=%d lines\n", __func__, stagger);
gl841_assert_supported_resolution(session);
/* compute scan parameters values */
@ -1824,8 +1814,9 @@ independent of our calculated values:
start += sensor.dummy_pixel + 1;
if (stagger > 0)
start |= 1;
if (session.num_staggered_lines > 0) {
start |= 1;
}
/* in case of SHDAREA, we need to align start
* on pixel average factor, startx is different of
@ -1906,7 +1897,7 @@ dummy \ scanned lines
max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels,
session.params.yres, session.params.flags);
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
move = session.params.starty;
DBG(DBG_info, "%s: move=%d steps\n", __func__, move);
@ -1948,7 +1939,8 @@ dummy \ scanned lines
}
read_buffer_size = 2 * requested_buffer_size +
((max_shift + stagger) * session.optical_pixels * session.params.channels * session.params.depth) / 8;
((max_shift + session.num_staggered_lines) * session.optical_pixels *
session.params.channels * session.params.depth) / 8;
dev->read_buffer.clear();
dev->read_buffer.alloc(read_buffer_size);
@ -1973,8 +1965,8 @@ dummy \ scanned lines
dev->current_setup.exposure_time = exposure_time;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + session.num_staggered_lines;
/* TODO: should this be done elsewhere? */
/* scan bytes to send to the frontend */
@ -2010,7 +2002,6 @@ static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Se
unsigned int lincnt;
int exposure_time;
int stagger;
int slope_dpi = 0;
int dummy = 0;
@ -2044,15 +2035,6 @@ static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Se
gl841_compute_session(dev, session, sensor);
/* stagger */
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG(DBG_info, "%s: stagger=%d lines\n", __func__, stagger);
gl841_assert_supported_resolution(session);
/* compute scan parameters values */
@ -2062,9 +2044,9 @@ static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Se
start += sensor.dummy_pixel + 1;
if (stagger > 0) {
start |= 1;
}
if (session.num_staggered_lines > 0) {
start |= 1;
}
/* dummy lines: may not be usefull, for instance 250 dpi works with 0 or 1
dummy line. Maybe the dummy line adds correctness since the motor runs
@ -2114,7 +2096,7 @@ dummy \ scanned lines
max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels,
session.params.yres, 0);
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
dev->session = session;
dev->current_setup.pixels = (session.optical_pixels * session.params.xres) / session.optical_resolution;
@ -2122,8 +2104,8 @@ dummy \ scanned lines
dev->current_setup.exposure_time = exposure_time;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + session.num_staggered_lines;
}
// for fast power saving methods only, like disabling certain amplifiers

Wyświetl plik

@ -1197,14 +1197,7 @@ static void gl843_compute_session(Genesys_Device* dev, ScanSession& s,
// to retrieve from the chip
s.output_pixels = (s.optical_pixels * s.output_resolution) / s.optical_resolution;
// Note: staggering is not applied for calibration. Staggering starts at 2400 dpi
s.num_staggered_lines = 0;
if ((s.params.yres > 1200) &&
((s.params.flags & SCAN_FLAG_IGNORE_LINE_DISTANCE) == 0) &&
(dev->model->flags & GENESYS_FLAG_STAGGERED_LINE))
{
s.num_staggered_lines = (4 * s.params.yres) / dev->motor.base_ydpi;
}
s.max_color_shift_lines = sanei_genesys_compute_max_shift(dev, s.params.channels,
s.params.yres, s.params.flags);
@ -1383,7 +1376,6 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
unsigned int lincnt;
int exposure;
int stagger;
int max_shift;
@ -1428,14 +1420,6 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
gl843_compute_session(dev, session, sensor);
/* stagger */
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG(DBG_info, "%s: stagger=%d lines\n", __func__, stagger);
/* compute scan parameters values */
/* pixels are allways given at half or full CCD optical resolution */
/* use detected left margin and fixed value */
@ -1463,7 +1447,7 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
session.params.yres, 0);
/* lincnt */
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
dev->session = session;
dev->current_setup.pixels = (session.optical_pixels * session.params.xres) / session.optical_resolution;
@ -1472,8 +1456,8 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
dev->current_setup.exposure_time = exposure;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + session.num_staggered_lines;
DBG(DBG_proc, "%s: completed\n", __func__);
}

Wyświetl plik

@ -956,7 +956,6 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
unsigned int lincnt;
unsigned int mflags; /**> motor flags */
int exposure_time;
int stagger;
int slope_dpi = 0;
int dummy = 0;
@ -964,14 +963,6 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
int max_shift;
size_t requested_buffer_size, read_buffer_size;
/* stagger */
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG(DBG_info, "%s : stagger=%d lines\n", __func__, stagger);
/* compute scan parameters values */
/* pixels are allways given at full optical resolution */
/* use detected left margin and fixed value */
@ -979,7 +970,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
/* add x coordinates */
start = session.params.startx;
if (stagger > 0) {
if (session.num_staggered_lines > 0) {
start |= 1;
}
@ -1022,8 +1013,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres,
session.params.flags);
/* lincnt */
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
/* add tl_y to base movement */
move = session.params.starty;
@ -1050,7 +1040,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 + stagger) * session.optical_pixels * session.params.channels *
((max_shift + session.num_staggered_lines) * session.optical_pixels * session.params.channels *
session.params.depth) / 8;
dev->read_buffer.clear();
@ -1076,8 +1066,8 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
dev->current_setup.exposure_time = exposure_time;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + session.num_staggered_lines;
/* TODO: should this be done elsewhere? */
/* scan bytes to send to the frontend */
@ -1114,7 +1104,6 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
unsigned int lincnt;
int exposure_time;
int stagger;
int slope_dpi;
int dummy = 0;
@ -1145,13 +1134,6 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
gl846_compute_session(dev, session, sensor);
if (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG(DBG_info, "%s: stagger=%d lines\n", __func__, stagger);
/* compute scan parameters values */
/* pixels are allways given at half or full CCD optical resolution */
/* use detected left margin and fixed value */
@ -1174,7 +1156,7 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres, 0);
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
dev->session = session;
dev->current_setup.pixels = (session.optical_pixels * session.params.xres) / sensor.optical_res;
@ -1182,8 +1164,8 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
dev->current_setup.exposure_time = exposure_time;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + session.num_staggered_lines;
}
// for fast power saving methods only, like disabling certain amplifiers

Wyświetl plik

@ -975,7 +975,6 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
unsigned int lincnt;
unsigned int mflags; /**> motor flags */
int exposure_time;
int stagger;
int slope_dpi = 0;
int dummy = 0;
@ -983,14 +982,6 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
int max_shift;
size_t requested_buffer_size, read_buffer_size;
/* stagger */
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG(DBG_info, "%s : stagger=%d lines\n", __func__, stagger);
/* compute scan parameters values */
/* pixels are allways given at full optical resolution */
/* use detected left margin and fixed value */
@ -998,7 +989,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
/* add x coordinates */
start = session.params.startx;
if (stagger > 0) {
if (session.num_staggered_lines > 0) {
start |= 1;
}
@ -1041,7 +1032,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres,
session.params.flags);
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
move = session.params.starty;
DBG(DBG_info, "%s: move=%d steps\n", __func__, move);
@ -1067,8 +1058,8 @@ 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 + stagger) * session.optical_pixels * session.params.channels *
session.params.depth) / 8;
((max_shift + session.num_staggered_lines) * session.optical_pixels *
session.params.channels * session.params.depth) / 8;
dev->read_buffer.clear();
dev->read_buffer.alloc(read_buffer_size);
@ -1093,8 +1084,8 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
dev->current_setup.exposure_time = exposure_time;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + session.num_staggered_lines;
/* TODO: should this be done elsewhere? */
/* scan bytes to send to the frontend */
@ -1130,7 +1121,6 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
unsigned int lincnt;
int exposure_time;
int stagger;
int slope_dpi = 0;
int dummy = 0;
@ -1166,15 +1156,6 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
/* optical_res */
optical_res = sensor.optical_res;
/* stagger */
if (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE) {
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
} else {
stagger = 0;
}
DBG(DBG_info, "%s: stagger=%d lines\n", __func__, stagger);
/* compute scan parameters values */
/* pixels are allways given at half or full CCD optical resolution */
/* use detected left margin and fixed value */
@ -1198,7 +1179,7 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
max_shift = sanei_genesys_compute_max_shift(dev, session.params.channels, session.params.yres, 0);
lincnt = session.params.lines + max_shift + stagger;
lincnt = session.params.lines + max_shift + session.num_staggered_lines;
dev->session = session;
dev->current_setup.pixels = (session.optical_pixels * session.params.xres) / optical_res;
@ -1206,8 +1187,8 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
dev->current_setup.exposure_time = exposure_time;
dev->current_setup.xres = session.params.xres;
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
dev->current_setup.stagger = stagger;
dev->current_setup.max_shift = max_shift + stagger;
dev->current_setup.stagger = session.num_staggered_lines;
dev->current_setup.max_shift = max_shift + session.num_staggered_lines;
}
// for fast power saving methods only, like disabling certain amplifiers

Wyświetl plik

@ -1179,6 +1179,45 @@ void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor&
// In quarter-CCD mode optical_pixels is 4x larger than the actual physical number
s.optical_pixels = align_int_up(s.optical_pixels, 2 * s.ccd_size_divisor);
}
// TODO output_pixels
// Note: staggering is not applied for calibration. Staggering starts at 2400 dpi
s.num_staggered_lines = 0;
if (dev->model->asic_type == AsicType::GL124 ||
dev->model->asic_type == AsicType::GL841 ||
dev->model->asic_type == AsicType::GL845 ||
dev->model->asic_type == AsicType::GL846 ||
dev->model->asic_type == AsicType::GL847)
{
if (s.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
s.num_staggered_lines = (4 * s.params.yres) / dev->motor.base_ydpi;
}
}
if (dev->model->asic_type == AsicType::GL646) {
if (s.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
// for HP3670, stagger happens only at >=1200 dpi
if ((dev->model->motor_type != MOTOR_HP3670 &&
dev->model->motor_type != MOTOR_HP2400) ||
s.params.yres >= (unsigned) sensor.optical_res)
{
s.num_staggered_lines = (4 * s.params.yres) / dev->motor.base_ydpi;
}
}
}
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) &&
(dev->model->flags & GENESYS_FLAG_STAGGERED_LINE))
{
s.num_staggered_lines = (4 * s.params.yres) / dev->motor.base_ydpi;
}
}
}
/** @brief initialize device

Wyświetl plik

@ -252,7 +252,6 @@ struct ScanSession {
unsigned output_line_count = 0;
// the number of staggered lines (i.e. lines that overlap during scanning due to line being
// gl843-only
// thinner than the CCD element)
unsigned num_staggered_lines = 0;