genesys: Reduce duplication in channel count and depth calculation

merge-requests/140/head
Povilas Kanapickas 2019-08-17 11:51:34 +03:00
rodzic 0c6d7cd4a4
commit f2871ca81d
8 zmienionych plików z 54 dodań i 235 usunięć

Wyświetl plik

@ -1382,7 +1382,6 @@ static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sens
int size; int size;
int black_pixels; int black_pixels;
int white_average; int white_average;
int channels;
uint8_t offset[4] = { 0xa0, 0x00, 0xa0, 0x40 }; /* first value isn't used */ uint8_t offset[4] = { 0xa0, 0x00, 0xa0, 0x40 }; /* first value isn't used */
uint16_t white[12], dark[12]; uint16_t white[12], dark[12];
int i, j; int i, j;
@ -1390,10 +1389,7 @@ static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sens
black_pixels = sensor.black_pixels black_pixels = sensor.black_pixels
* dev->settings.xres / sensor.optical_res; * dev->settings.xres / sensor.optical_res;
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS) unsigned channels = dev->settings.get_channels();
channels = 3;
else
channels = 1;
DBG(DBG_info, "channels %d y_size %d xres %d\n", channels, dev->model->y_size, DBG(DBG_info, "channels %d y_size %d xres %d\n", channels, dev->model->y_size,
dev->settings.xres); dev->settings.xres);

Wyświetl plik

@ -1272,8 +1272,6 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
static void static void
gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& sensor) gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& sensor)
{ {
int channels;
int depth;
int start; int start;
int used_res; int used_res;
@ -1289,17 +1287,6 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso
DBG(DBG_info, "%s ", __func__); DBG(DBG_info, "%s ", __func__);
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
/* start */ /* start */
start = SANE_UNFIX (dev->model->x_offset); start = SANE_UNFIX (dev->model->x_offset);
start += dev->settings.tl_x; start += dev->settings.tl_x;
@ -1312,8 +1299,8 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso
session.params.starty = 0; // not used session.params.starty = 0; // not used
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -1877,14 +1864,6 @@ static void gl124_init_regs_for_coarse_calibration(Genesys_Device* dev,
Genesys_Register_Set& regs) Genesys_Register_Set& regs)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
uint8_t channels;
/* set line size */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS) {
channels = 3;
} else {
channels = 1;
}
ScanSession session; ScanSession session;
session.params.xres = dev->settings.xres; session.params.xres = dev->settings.xres;
@ -1894,7 +1873,7 @@ static void gl124_init_regs_for_coarse_calibration(Genesys_Device* dev,
session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel(); session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel();
session.params.lines = 20; session.params.lines = 20;
session.params.depth = 16; session.params.depth = 16;
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -2009,26 +1988,13 @@ static void gl124_wait_for_motor_stop(Genesys_Device* dev)
static void gl124_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) static void gl124_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
int channels;
int flags; int flags;
int depth;
float move; float move;
int move_dpi; int move_dpi;
float start; float start;
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
/* y (motor) distance to move to reach scanned area */ /* y (motor) distance to move to reach scanned area */
move_dpi = dev->motor.base_ydpi/4; move_dpi = dev->motor.base_ydpi/4;
move = SANE_UNFIX (dev->model->y_offset); move = SANE_UNFIX (dev->model->y_offset);
@ -2036,8 +2002,7 @@ static void gl124_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor&
move = (move * move_dpi) / MM_PER_INCH; move = (move * move_dpi) / MM_PER_INCH;
DBG (DBG_info, "%s: move=%f steps\n", __func__, move); DBG (DBG_info, "%s: move=%f steps\n", __func__, move);
if(channels*dev->settings.yres>=600 && move>700) if (dev->settings.get_channels() * dev->settings.yres >= 600 && move > 700) {
{
gl124_feed(dev, move-500, SANE_FALSE); gl124_feed(dev, move-500, SANE_FALSE);
move=500; move=500;
} }
@ -2065,8 +2030,8 @@ static void gl124_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor&
session.params.starty = move; session.params.starty = move;
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;

Wyświetl plik

@ -2217,19 +2217,9 @@ static void setup_for_scan(Genesys_Device* dev,
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
SANE_Int depth; SANE_Int depth;
int channels;
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
if (settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
{
channels = 3;
}
else
{
channels = 1;
}
depth=settings.depth; depth=settings.depth;
if (settings.scan_mode == ScanColorMode::LINEART) if (settings.scan_mode == ScanColorMode::LINEART)
{ {
@ -2283,7 +2273,7 @@ static void setup_for_scan(Genesys_Device* dev,
session.params.pixels = settings.pixels; session.params.pixels = settings.pixels;
session.params.lines = settings.lines; session.params.lines = settings.lines;
session.params.depth = depth; session.params.depth = depth;
session.params.channels = channels; session.params.channels = settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = settings.scan_mode; session.params.scan_mode = settings.scan_mode;
session.params.color_filter = settings.color_filter; session.params.color_filter = settings.color_filter;
@ -2367,7 +2357,6 @@ static SensorExposure gl646_led_calibration(Genesys_Device* dev, const Genesys_S
int total_size; int total_size;
unsigned int i, j; unsigned int i, j;
int val; int val;
unsigned int channels;
int avg[3], avga, avge; int avg[3], avga, avge;
int turn; int turn;
uint16_t expr, expg, expb; uint16_t expr, expg, expb;
@ -2376,15 +2365,15 @@ static SensorExposure gl646_led_calibration(Genesys_Device* dev, const Genesys_S
SANE_Bool acceptable = SANE_FALSE; SANE_Bool acceptable = SANE_FALSE;
unsigned channels = dev->settings.get_channels();
/* get led calibration resolution */ /* get led calibration resolution */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS) if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
{ {
channels = 3;
settings.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; settings.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
} }
else else
{ {
channels = 1;
settings.scan_mode = ScanColorMode::GRAY; settings.scan_mode = ScanColorMode::GRAY;
} }
resolution = get_closest_resolution(dev->model->ccd_type, sensor.optical_res, channels); resolution = get_closest_resolution(dev->model->ccd_type, sensor.optical_res, channels);
@ -3357,13 +3346,12 @@ static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
lines = dev->reg.get24(REG_LINCNT) + 1; lines = dev->reg.get24(REG_LINCNT) + 1;
} }
size = lines * settings.pixels; size = lines * settings.pixels;
if (settings.depth == 16) if (settings.depth == 16) {
bpp = 2; bpp = 2;
else } else {
bpp = 1; bpp = 1;
size *= bpp; }
if (settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS) size *= bpp * settings.get_channels();
size *= 3;
data.clear(); data.clear();
data.resize(size); data.resize(size);
@ -3732,12 +3720,7 @@ gl646_is_compatible_calibration (Genesys_Device * dev, const Genesys_Sensor& sen
/* build minimal current_setup for calibration cache use only, it will be better /* build minimal current_setup for calibration cache use only, it will be better
* computed when during setup for scan * computed when during setup for scan
*/ */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS) dev->session.params.channels = dev->settings.get_channels();
{
dev->session.params.channels = 3;
} else {
dev->session.params.channels = 1;
}
dev->current_setup.xres = dev->settings.xres; dev->current_setup.xres = dev->settings.xres;
DBG(DBG_io, "%s: requested=(%d,%f), tested=(%d,%f)\n", __func__, DBG(DBG_io, "%s: requested=(%d,%f), tested=(%d,%f)\n", __func__,

Wyświetl plik

@ -2035,8 +2035,6 @@ dummy \ scanned lines
static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor) static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor)
{ {
int channels;
int depth;
int start; int start;
int used_res; int used_res;
@ -2056,17 +2054,6 @@ static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Se
DBG(DBG_info, "%s ", __func__); DBG(DBG_info, "%s ", __func__);
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
/* start */ /* start */
start = SANE_UNFIX (dev->model->x_offset); start = SANE_UNFIX (dev->model->x_offset);
@ -2081,8 +2068,8 @@ static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Se
session.params.starty = 0; // not used session.params.starty = 0; // not used
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -2956,14 +2943,6 @@ static void gl841_init_regs_for_coarse_calibration(Genesys_Device* dev,
Genesys_Register_Set& regs) Genesys_Register_Set& regs)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
uint8_t channels;
/* set line size */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else {
channels = 1;
}
ScanSession session; ScanSession session;
session.params.xres = dev->settings.xres; session.params.xres = dev->settings.xres;
@ -2973,7 +2952,7 @@ static void gl841_init_regs_for_coarse_calibration(Genesys_Device* dev,
session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel(); session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel();
session.params.lines = 20; session.params.lines = 20;
session.params.depth = 16; session.params.depth = 16;
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -3061,27 +3040,13 @@ static void gl841_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso
static void gl841_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) static void gl841_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
int channels;
int flags; int flags;
int depth;
float move; float move;
int move_dpi; int move_dpi;
float start; float start;
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
/* steps to move to reach scanning area: /* steps to move to reach scanning area:
- first we move to physical start of scanning - first we move to physical start of scanning
either by a fixed steps amount from the black strip either by a fixed steps amount from the black strip
@ -3157,8 +3122,8 @@ static void gl841_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor&
session.params.starty = move; session.params.starty = move;
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;

Wyświetl plik

@ -1403,8 +1403,6 @@ static void gl843_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
static void static void
gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor) gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor)
{ {
int channels;
int depth;
int start; int start;
int used_res; int used_res;
@ -1423,18 +1421,6 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
/* we have 2 domains for ccd: xres below or above half ccd max dpi */ /* we have 2 domains for ccd: xres below or above half ccd max dpi */
unsigned ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(dev->settings.xres); unsigned ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(dev->settings.xres);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART) {
depth = 1;
}
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY || if (dev->settings.scan_method == ScanMethod::TRANSPARENCY ||
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED) dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
{ {
@ -1460,8 +1446,8 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
session.params.starty = 0; // not used session.params.starty = 0; // not used
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -2298,13 +2284,6 @@ static void gl843_init_regs_for_coarse_calibration(Genesys_Device* dev,
Genesys_Register_Set& regs) Genesys_Register_Set& regs)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
uint8_t channels;
/* set line size */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
int flags = SCAN_FLAG_DISABLE_SHADING | int flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA | SCAN_FLAG_DISABLE_GAMMA |
@ -2324,7 +2303,7 @@ static void gl843_init_regs_for_coarse_calibration(Genesys_Device* dev,
session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel(); session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel();
session.params.lines = 20; session.params.lines = 20;
session.params.depth = 16; session.params.depth = 16;
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -2516,26 +2495,13 @@ static void gl843_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso
static void gl843_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) static void gl843_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
int channels;
int flags; int flags;
int depth;
float move; float move;
int move_dpi; int move_dpi;
float start; float start;
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
move_dpi = dev->motor.base_ydpi; move_dpi = dev->motor.base_ydpi;
flags = 0; flags = 0;
@ -2597,8 +2563,8 @@ static void gl843_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor&
session.params.starty = move; session.params.starty = move;
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;

Wyświetl plik

@ -1139,8 +1139,6 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
static void static void
gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor) gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor)
{ {
int channels;
int depth;
int start; int start;
int used_res; int used_res;
@ -1158,17 +1156,6 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
DBG(DBG_info, "%s ", __func__); DBG(DBG_info, "%s ", __func__);
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
/* start */ /* start */
start = SANE_UNFIX (dev->model->x_offset); start = SANE_UNFIX (dev->model->x_offset);
start += dev->settings.tl_x; start += dev->settings.tl_x;
@ -1181,8 +1168,8 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
session.params.starty = 0; // not used session.params.starty = 0; // not used
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -1563,14 +1550,6 @@ static void gl846_init_regs_for_coarse_calibration(Genesys_Device* dev,
Genesys_Register_Set& regs) Genesys_Register_Set& regs)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
uint8_t channels;
/* set line size */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else {
channels = 1;
}
ScanSession session; ScanSession session;
session.params.xres = dev->settings.xres; session.params.xres = dev->settings.xres;
@ -1580,7 +1559,7 @@ static void gl846_init_regs_for_coarse_calibration(Genesys_Device* dev,
session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel(); session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel();
session.params.lines = 20; session.params.lines = 20;
session.params.depth = 16; session.params.depth = 16;
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -1735,27 +1714,13 @@ static void gl846_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso
static void gl846_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) static void gl846_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
int channels;
int flags; int flags;
int depth;
float move; float move;
int move_dpi; int move_dpi;
float start; float start;
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
/* steps to move to reach scanning area: /* steps to move to reach scanning area:
- first we move to physical start of scanning - first we move to physical start of scanning
either by a fixed steps amount from the black strip either by a fixed steps amount from the black strip
@ -1788,7 +1753,7 @@ static void gl846_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor&
* computing acceleration/deceleration distance for scan * computing acceleration/deceleration distance for scan
* resolution. So leave a remainder for it so scan makes the final * resolution. So leave a remainder for it so scan makes the final
* move tuning */ * move tuning */
if(channels*dev->settings.yres>=600 && move>700) if (dev->settings.get_channels() * dev->settings.yres >= 600 && move > 700)
{ {
gl846_feed(dev, move-500); gl846_feed(dev, move-500);
move=500; move=500;
@ -1821,8 +1786,8 @@ static void gl846_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor&
session.params.starty = move; session.params.starty = move;
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;

Wyświetl plik

@ -1155,8 +1155,6 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
static void static void
gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor) gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor)
{ {
int channels;
int depth;
int start; int start;
int used_res; int used_res;
@ -1174,17 +1172,6 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
DBG(DBG_info, "%s ", __func__); DBG(DBG_info, "%s ", __func__);
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
/* start */ /* start */
start = SANE_UNFIX (dev->model->x_offset); start = SANE_UNFIX (dev->model->x_offset);
start += dev->settings.tl_x; start += dev->settings.tl_x;
@ -1197,8 +1184,8 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
session.params.starty = 0; // not used session.params.starty = 0; // not used
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -1620,14 +1607,6 @@ static void gl847_init_regs_for_coarse_calibration(Genesys_Device* dev,
Genesys_Register_Set& regs) Genesys_Register_Set& regs)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
uint8_t channels;
/* set line size */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else {
channels = 1;
}
ScanSession session; ScanSession session;
session.params.xres = dev->settings.xres; session.params.xres = dev->settings.xres;
@ -1637,7 +1616,7 @@ static void gl847_init_regs_for_coarse_calibration(Genesys_Device* dev,
session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel(); session.params.pixels = sensor.optical_res / sensor.ccd_pixels_per_system_pixel();
session.params.lines = 20; session.params.lines = 20;
session.params.depth = 16; session.params.depth = 16;
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;
@ -1791,27 +1770,13 @@ static void gl847_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso
static void gl847_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) static void gl847_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
int channels;
int flags; int flags;
int depth;
float move; float move;
int move_dpi; int move_dpi;
float start; float start;
debug_dump(DBG_info, dev->settings); debug_dump(DBG_info, dev->settings);
/* channels */
if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
channels = 3;
else
channels = 1;
/* depth */
depth = dev->settings.depth;
if (dev->settings.scan_mode == ScanColorMode::LINEART)
depth = 1;
/* steps to move to reach scanning area: /* steps to move to reach scanning area:
- first we move to physical start of scanning - first we move to physical start of scanning
either by a fixed steps amount from the black strip either by a fixed steps amount from the black strip
@ -1844,8 +1809,7 @@ static void gl847_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor&
* computing acceleration/deceleration distance for scan * computing acceleration/deceleration distance for scan
* resolution. So leave a remainder for it so scan makes the final * resolution. So leave a remainder for it so scan makes the final
* move tuning */ * move tuning */
if(channels*dev->settings.yres>=600 && move>700) if (dev->settings.get_channels() * dev->settings.yres >= 600 && move > 700) {
{
gl847_feed(dev, move-500); gl847_feed(dev, move-500);
move=500; move=500;
} }
@ -1877,8 +1841,8 @@ static void gl847_init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor&
session.params.starty = move; session.params.starty = move;
session.params.pixels = dev->settings.pixels; session.params.pixels = dev->settings.pixels;
session.params.lines = dev->settings.lines; session.params.lines = dev->settings.lines;
session.params.depth = depth; session.params.depth = dev->settings.get_depth();
session.params.channels = channels; session.params.channels = dev->settings.get_channels();
session.params.scan_method = dev->settings.scan_method; session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode; session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter; session.params.color_filter = dev->settings.color_filter;

Wyświetl plik

@ -95,6 +95,21 @@ struct Genesys_Settings
// cache entries expiration time // cache entries expiration time
int expiration_time = 0; int expiration_time = 0;
unsigned get_channels() const
{
if (scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
return 3;
return 1;
}
unsigned get_depth() const
{
if (scan_mode == ScanColorMode::LINEART)
return 1;
return depth;
}
}; };
struct SetupParams { struct SetupParams {