genesys: Don't duplicate data passed to *_init_optical_regs_scan()

merge-requests/160/head
Povilas Kanapickas 2019-09-12 20:06:36 +03:00
rodzic f44c0bb680
commit 463f5f4364
4 zmienionych plików z 63 dodań i 92 usunięć

Wyświetl plik

@ -824,14 +824,10 @@ static void gl124_setup_sensor(Genesys_Device * dev,
*/
static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* reg, unsigned int exposure_time,
const ScanSession& session, int used_res,
unsigned int start, unsigned int pixels,
int channels, int depth, unsigned ccd_size_divisor,
ColorFilter color_filter)
const ScanSession& session, unsigned int start)
{
DBG_HELPER_ARGS(dbg, "exposure_time=%d, used_res=%d, start=%d, pixels=%d, channels=%d, depth=%d, "
"ccd_size_divisor=%d\n",
exposure_time, used_res, start, pixels, channels, depth, ccd_size_divisor);
DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d\n",
exposure_time, start);
unsigned int words_per_line, segcnt;
unsigned int startx, endx, segnb;
unsigned int dpiset, dpihw, factor;
@ -845,18 +841,18 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
// to manage high resolution device while keeping good low resolution scanning speed, we
// make hardware dpi vary
dpihw = sensor.get_register_hwdpi(used_res * ccd_pixels_per_system_pixel);
factor = sensor.get_hwdpi_divisor_for_dpi(used_res * ccd_pixels_per_system_pixel);
dpihw = sensor.get_register_hwdpi(session.params.xres * ccd_pixels_per_system_pixel);
factor = sensor.get_hwdpi_divisor_for_dpi(session.params.xres * ccd_pixels_per_system_pixel);
DBG (DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor);
// sensor parameters
gl124_setup_sensor(dev, sensor, reg, dpihw, ccd_size_divisor);
dpiset = used_res * ccd_pixels_per_system_pixel;
gl124_setup_sensor(dev, sensor, reg, dpihw, session.ccd_size_divisor);
dpiset = session.params.xres * ccd_pixels_per_system_pixel;
/* start and end coordinate in optical dpi coordinates */
/* startx = start / ccd_pixels_per_system_pixel + sensor.dummy_pixel; XXX STEF XXX */
startx = start / ccd_pixels_per_system_pixel;
endx = startx + pixels / ccd_pixels_per_system_pixel;
endx = startx + session.optical_pixels / ccd_pixels_per_system_pixel;
/* pixel coordinate factor correction when used dpihw is not maximal one */
startx/=factor;
@ -880,7 +876,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
r->value &= ~REG01_SCAN;
r = sanei_genesys_get_address (reg, REG03);
if((dev->model->ccd_type!=CIS_CANONLIDE120)&&(used_res>=600))
if((dev->model->ccd_type!=CIS_CANONLIDE120)&&(session.params.xres>=600))
{
r->value &= ~REG03_AVEENB;
DBG (DBG_io, "%s: disabling AVEENB\n", __func__);
@ -900,7 +896,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* monochrome / color scan */
r = sanei_genesys_get_address (reg, REG04);
switch (depth)
switch (session.params.depth)
{
case 1:
r->value &= ~REG04_BITSET;
@ -916,9 +912,9 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
}
r->value &= ~REG04_FILTER;
if (channels == 1)
if (session.params.channels == 1)
{
switch (color_filter)
switch (session.params.color_filter)
{
case ColorFilter::RED:
r->value |= 0x10;
@ -944,7 +940,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
r->value |= REG05_GMMENB;
}
unsigned dpiset_reg = dpiset * ccd_size_divisor;
unsigned dpiset_reg = dpiset * session.ccd_size_divisor;
if (sensor.dpiset_override != 0) {
dpiset_reg = sensor.dpiset_override;
}
@ -998,8 +994,8 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* words(16bit) before gamma, conversion to 8 bit or lineart */
words_per_line = (used_pixels * dpiset) / dpihw;
bytes = depth / 8;
if (depth == 1)
bytes = session.params.depth / 8;
if (session.params.depth == 1)
{
words_per_line = (words_per_line >> 3) + ((words_per_line & 7) ? 1 : 0);
}
@ -1018,14 +1014,14 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
dev->line_interp = 0;
DBG (DBG_io2, "%s: used_pixels =%d\n", __func__, used_pixels);
DBG (DBG_io2, "%s: pixels =%d\n", __func__, pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, depth);
DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth);
DBG (DBG_io2, "%s: dev->bpl =%lu\n", __func__, (unsigned long)dev->bpl);
DBG (DBG_io2, "%s: dev->len =%lu\n", __func__, (unsigned long)dev->len);
DBG (DBG_io2, "%s: dev->dist =%lu\n", __func__, (unsigned long)dev->dist);
DBG (DBG_io2, "%s: dev->line_interp=%lu\n", __func__, (unsigned long)dev->line_interp);
words_per_line *= channels;
words_per_line *= session.params.channels;
dev->wpl = words_per_line;
/* allocate buffer for odd/even pixels handling */
@ -1120,11 +1116,7 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
*/
// now _LOGICAL_ optical values used are known, setup registers
gl124_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, session.params.xres,
start,
session.optical_pixels, session.params.channels,
session.params.depth, session.ccd_size_divisor,
session.params.color_filter);
gl124_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, start);
/* add tl_y to base movement */
move = session.params.starty;

Wyświetl plik

@ -1453,27 +1453,21 @@ static void gl841_init_optical_regs_off(Genesys_Register_Set* reg)
static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* reg, unsigned int exposure_time,
const ScanSession& session, unsigned int used_res,
unsigned int start,
unsigned int pixels, int channels,
int depth, unsigned ccd_size_divisor,
ColorFilter color_filter)
const ScanSession& session, unsigned int start)
{
DBG_HELPER_ARGS(dbg, "exposure_time=%d, used_res=%d, start=%d, pixels=%d, channels=%d, "
"depth=%d, ccd_size_divisor=%d",
exposure_time, used_res, start, pixels, channels, depth, ccd_size_divisor);
DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start);
unsigned int words_per_line;
unsigned int end;
unsigned int dpiset;
GenesysRegister* r;
uint16_t expavg, expr, expb, expg;
end = start + pixels;
end = start + session.optical_pixels;
gl841_set_fe(dev, sensor, AFE_SET);
/* adjust used_res for chosen dpihw */
used_res = used_res * gl841_get_dpihw(dev) / sensor.optical_res;
unsigned used_res = session.params.xres * gl841_get_dpihw(dev) / sensor.optical_res;
/*
with ccd_size_divisor==2 the optical resolution of the ccd is halved. We don't apply this
@ -1482,13 +1476,13 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
For the scanner only the ratio of dpiset and dpihw is of relevance to scale
down properly.
*/
dpiset = used_res * ccd_size_divisor;
dpiset = used_res * session.ccd_size_divisor;
/* gpio part.*/
if (dev->model->gpo_type == GPO_CANONLIDE35)
{
r = sanei_genesys_get_address (reg, REG6C);
if (ccd_size_divisor > 1) {
if (session.ccd_size_divisor > 1) {
r->value &= ~0x80;
} else {
r->value |= 0x80;
@ -1497,7 +1491,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
if (dev->model->gpo_type == GPO_CANONLIDE80)
{
r = sanei_genesys_get_address (reg, REG6C);
if (ccd_size_divisor > 1) {
if (session.ccd_size_divisor > 1) {
r->value &= ~0x40;
r->value |= 0x20;
} else {
@ -1534,7 +1528,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* monochrome / color scan */
r = sanei_genesys_get_address (reg, 0x04);
switch (depth) {
switch (session.params.depth) {
case 1:
r->value &= ~REG04_BITSET;
r->value |= REG04_LINEART;
@ -1554,9 +1548,9 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
if (session.params.flags & SCAN_FLAG_ENABLE_LEDADD) {
r->value |= 0x10; /* no filter */
}
else if (channels == 1)
else if (session.params.channels == 1)
{
switch (color_filter)
switch (session.params.color_filter)
{
case ColorFilter::RED:
r->value |= 0x14;
@ -1614,7 +1608,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
}
/* sensor parameters */
sanei_gl841_setup_sensor(dev, sensor, &dev->reg, 1, ccd_size_divisor);
sanei_gl841_setup_sensor(dev, sensor, &dev->reg, 1, session.ccd_size_divisor);
r = sanei_genesys_get_address (reg, 0x29);
r->value = 255; /*<<<"magic" number, only suitable for cis*/
@ -1625,14 +1619,14 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
DBG(DBG_io2, "%s: STRPIXEL=%d, ENDPIXEL=%d\n", __func__, start, end);
/* words(16bit) before gamma, conversion to 8 bit or lineart*/
words_per_line = (pixels * dpiset) / gl841_get_dpihw(dev);
words_per_line = (session.optical_pixels * dpiset) / gl841_get_dpihw(dev);
words_per_line *= channels;
words_per_line *= session.params.channels;
if (depth == 1)
if (session.params.depth == 1)
words_per_line = (words_per_line >> 3) + ((words_per_line & 7)?1:0);
else
words_per_line *= depth / 8;
words_per_line *= session.params.depth / 8;
dev->wpl = words_per_line;
dev->bpl = words_per_line;
@ -1883,10 +1877,7 @@ dummy \ scanned lines
session.params.flags |= SCAN_FLAG_DISABLE_GAMMA;
}
gl841_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, session.params.xres, start,
session.optical_pixels, session.params.channels,
session.params.depth, session.ccd_size_divisor,
session.params.color_filter);
gl841_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, start);
move = session.params.starty;
DBG(DBG_info, "%s: move=%d steps\n", __func__, move);

Wyświetl plik

@ -722,12 +722,9 @@ static void gl846_init_motor_regs_scan(Genesys_Device* dev,
*/
static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* reg, unsigned int exposure_time,
const ScanSession& session, int used_res,
unsigned int start, unsigned int pixels,
int channels, int depth, ColorFilter color_filter)
const ScanSession& session, unsigned int start)
{
DBG_HELPER_ARGS(dbg, "exposure_time=%d, used_res=%d, start=%d, pixels=%d, channels=%d, depth=%d",
exposure_time, used_res, start, pixels, channels, depth);
DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start);
unsigned int words_per_line;
unsigned int dpiset, dpihw, segnb, factor;
unsigned int bytes;
@ -739,18 +736,18 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
// to manage high resolution device while keeping good low resolution scanning speed,
// we make hardware dpi vary
dpihw = sensor.get_register_hwdpi(used_res * ccd_pixels_per_system_pixel);
dpihw = sensor.get_register_hwdpi(session.params.xres * ccd_pixels_per_system_pixel);
factor = sensor.optical_res/dpihw;
DBG(DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor);
// sensor parameters
const auto& sensor_profile = get_sensor_profile(sensor, dpihw);
gl846_setup_sensor(dev, sensor, reg, dpihw);
dpiset = used_res * ccd_pixels_per_system_pixel ;
dpiset = session.params.xres * ccd_pixels_per_system_pixel ;
// start and end coordinate in optical dpi coordinates
unsigned startx = start / ccd_pixels_per_system_pixel + sensor.CCD_start_xoffset;
unsigned endx = startx + pixels / ccd_pixels_per_system_pixel;
unsigned endx = startx + session.optical_pixels / ccd_pixels_per_system_pixel;
/* sensors are built from 600 dpi segments for LiDE 100/200
* and 1200 dpi for the 700F */
@ -810,7 +807,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* monochrome / color scan */
r = sanei_genesys_get_address (reg, REG04);
switch (depth)
switch (session.params.depth)
{
case 1:
r->value &= ~REG04_BITSET;
@ -826,9 +823,9 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
}
r->value &= ~(REG04_FILTER | REG04_AFEMOD);
if (channels == 1)
if (session.params.channels == 1)
{
switch (color_filter)
switch (session.params.color_filter)
{
case ColorFilter::RED:
r->value |= 0x24;
@ -876,8 +873,8 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* words(16bit) before gamma, conversion to 8 bit or lineart*/
words_per_line = (used_pixels * dpiset) / dpihw;
bytes=depth/8;
if (depth == 1)
bytes=session.params.depth/8;
if (session.params.depth == 1)
{
words_per_line = (words_per_line+7)/8 ;
dev->len = (dev->len >> 3) + ((dev->len & 7) ? 1 : 0);
@ -904,14 +901,14 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
DBG (DBG_io2, "%s: endx =%d\n", __func__, endx);
DBG (DBG_io2, "%s: used_pixels=%d\n", __func__, used_pixels);
DBG (DBG_io2, "%s: pixels =%d\n", __func__, pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, depth);
DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth);
DBG (DBG_io2, "%s: dev->bpl =%lu\n", __func__, (unsigned long)dev->bpl);
DBG (DBG_io2, "%s: dev->len =%lu\n", __func__, (unsigned long)dev->len);
DBG (DBG_io2, "%s: dev->dist =%lu\n", __func__, (unsigned long)dev->dist);
DBG (DBG_io2, "%s: dev->segnb =%lu\n", __func__, (unsigned long)dev->segnb);
words_per_line *= channels;
words_per_line *= session.params.channels;
dev->wpl = words_per_line;
dev->oe_buffer.clear();
@ -1001,9 +998,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
/* we enable true gray for cis scanners only, and just when doing
* scan since color calibration is OK for this mode
*/
gl846_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, session.params.xres, start,
session.optical_pixels, session.params.channels, session.params.depth,
session.params.color_filter);
gl846_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, start);
/*** motor parameters ***/

Wyświetl plik

@ -741,14 +741,9 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev,
*/
static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* reg, unsigned int exposure_time,
const ScanSession& session, int used_res,
unsigned int start, unsigned int pixels,
int channels, int depth,
ColorFilter color_filter)
const ScanSession& session, unsigned int start)
{
DBG_HELPER_ARGS(dbg, "exposure_time=%d, used_res=%d, start=%d, pixels=%d, channels=%d, "
"depth=%d",
exposure_time, used_res, start, pixels, channels, depth);
DBG_HELPER_ARGS(dbg, "exposure_time=%d, start=%d", exposure_time, start);
unsigned int words_per_line;
unsigned dpiset, dpihw, segnb, factor;
unsigned int bytes;
@ -760,18 +755,18 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
// to manage high resolution device while keeping good low resolution scanning speed, we make
// hardware dpi vary
dpihw = sensor.get_register_hwdpi(used_res * ccd_pixels_per_system_pixel);
dpihw = sensor.get_register_hwdpi(session.params.xres * ccd_pixels_per_system_pixel);
factor=sensor.optical_res/dpihw;
DBG(DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor);
// sensor parameters
const auto& sensor_profile = get_sensor_profile(sensor, dpihw);
gl847_setup_sensor(dev, sensor, reg, dpihw);
dpiset = used_res * ccd_pixels_per_system_pixel;
dpiset = session.params.xres * ccd_pixels_per_system_pixel;
// start and end coordinate in optical dpi coordinates
unsigned startx = start / ccd_pixels_per_system_pixel + sensor.CCD_start_xoffset;
unsigned endx = startx + pixels / ccd_pixels_per_system_pixel;
unsigned endx = startx + session.optical_pixels / ccd_pixels_per_system_pixel;
/* sensors are built from 600 dpi segments for LiDE 100/200
* and 1200 dpi for the 700F */
@ -831,7 +826,7 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* monochrome / color scan */
r = sanei_genesys_get_address (reg, REG04);
switch (depth)
switch (session.params.depth)
{
case 1:
r->value &= ~REG04_BITSET;
@ -847,9 +842,9 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
}
r->value &= ~(REG04_FILTER | REG04_AFEMOD);
if (channels == 1)
if (session.params.channels == 1)
{
switch (color_filter)
switch (session.params.color_filter)
{
case ColorFilter::RED:
@ -897,8 +892,8 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* words(16bit) before gamma, conversion to 8 bit or lineart*/
words_per_line = (used_pixels * dpiset) / dpihw;
bytes=depth/8;
if (depth == 1)
bytes=session.params.depth/8;
if (session.params.depth == 1)
{
words_per_line = (words_per_line+7)/8 ;
dev->len = (dev->len >> 3) + ((dev->len & 7) ? 1 : 0);
@ -925,14 +920,14 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
DBG (DBG_io2, "%s: endx =%d\n", __func__, endx);
DBG (DBG_io2, "%s: used_pixels=%d\n", __func__, used_pixels);
DBG (DBG_io2, "%s: pixels =%d\n", __func__, pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, depth);
DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth);
DBG (DBG_io2, "%s: dev->bpl =%lu\n", __func__, (unsigned long)dev->bpl);
DBG (DBG_io2, "%s: dev->len =%lu\n", __func__, (unsigned long)dev->len);
DBG (DBG_io2, "%s: dev->dist =%lu\n", __func__, (unsigned long)dev->dist);
DBG (DBG_io2, "%s: dev->segnb =%lu\n", __func__, (unsigned long)dev->segnb);
words_per_line *= channels;
words_per_line *= session.params.channels;
dev->wpl = words_per_line;
dev->oe_buffer.clear();
@ -1020,9 +1015,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
/* we enable true gray for cis scanners only, and just when doing
* scan since color calibration is OK for this mode
*/
gl847_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, session.params.xres, start,
session.optical_pixels, session.params.channels,
session.params.depth, session.params.color_filter);
gl847_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, start);
move = session.params.starty;
DBG(DBG_info, "%s: move=%d steps\n", __func__, move);