kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Move ccd_size_divisor computation to compute_session()
rodzic
92412a90b2
commit
107404dcd0
|
@ -1796,16 +1796,13 @@ independent of our calculated values:
|
||||||
dev->bytes_to_read
|
dev->bytes_to_read
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* 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(session.params.xres);
|
|
||||||
|
|
||||||
/* optical_res */
|
/* optical_res */
|
||||||
|
|
||||||
optical_res = sensor.optical_res / ccd_size_divisor;
|
optical_res = sensor.optical_res / session.ccd_size_divisor;
|
||||||
|
|
||||||
/* stagger */
|
/* stagger */
|
||||||
|
|
||||||
if (ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
|
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
|
||||||
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
|
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
|
||||||
} else {
|
} else {
|
||||||
stagger = 0;
|
stagger = 0;
|
||||||
|
@ -1930,7 +1927,7 @@ dummy \ scanned lines
|
||||||
|
|
||||||
gl841_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, used_res, start,
|
gl841_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, used_res, start,
|
||||||
used_pixels, session.params.channels, session.params.depth,
|
used_pixels, session.params.channels, session.params.depth,
|
||||||
ccd_size_divisor, session.params.color_filter);
|
session.ccd_size_divisor, session.params.color_filter);
|
||||||
|
|
||||||
/*** motor parameters ***/
|
/*** motor parameters ***/
|
||||||
|
|
||||||
|
@ -2004,7 +2001,7 @@ dummy \ scanned lines
|
||||||
dev->current_setup.lines = lincnt;
|
dev->current_setup.lines = lincnt;
|
||||||
dev->current_setup.exposure_time = exposure_time;
|
dev->current_setup.exposure_time = exposure_time;
|
||||||
dev->current_setup.xres = used_res;
|
dev->current_setup.xres = used_res;
|
||||||
dev->current_setup.ccd_size_divisor = ccd_size_divisor;
|
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
|
||||||
dev->current_setup.stagger = stagger;
|
dev->current_setup.stagger = stagger;
|
||||||
dev->current_setup.max_shift = max_shift + stagger;
|
dev->current_setup.max_shift = max_shift + stagger;
|
||||||
|
|
||||||
|
@ -2091,19 +2088,18 @@ static void gl841_calculate_current_setup(Genesys_Device * dev, const Genesys_Se
|
||||||
session.params.color_filter = dev->settings.color_filter;
|
session.params.color_filter = dev->settings.color_filter;
|
||||||
session.params.flags = 0;
|
session.params.flags = 0;
|
||||||
|
|
||||||
|
gl841_compute_session(dev, session, sensor);
|
||||||
|
|
||||||
DBG(DBG_info, "%s ", __func__);
|
DBG(DBG_info, "%s ", __func__);
|
||||||
debug_dump(DBG_info, session.params);
|
debug_dump(DBG_info, session.params);
|
||||||
|
|
||||||
/* 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(session.params.xres);
|
|
||||||
|
|
||||||
/* optical_res */
|
/* optical_res */
|
||||||
|
|
||||||
optical_res = sensor.optical_res / ccd_size_divisor;
|
optical_res = sensor.optical_res / session.ccd_size_divisor;
|
||||||
|
|
||||||
/* stagger */
|
/* stagger */
|
||||||
|
|
||||||
if (ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
|
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
|
||||||
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
|
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
|
||||||
} else {
|
} else {
|
||||||
stagger = 0;
|
stagger = 0;
|
||||||
|
@ -2212,7 +2208,7 @@ dummy \ scanned lines
|
||||||
dev->current_setup.lines = lincnt;
|
dev->current_setup.lines = lincnt;
|
||||||
dev->current_setup.exposure_time = exposure_time;
|
dev->current_setup.exposure_time = exposure_time;
|
||||||
dev->current_setup.xres = used_res;
|
dev->current_setup.xres = used_res;
|
||||||
dev->current_setup.ccd_size_divisor = ccd_size_divisor;
|
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
|
||||||
dev->current_setup.stagger = stagger;
|
dev->current_setup.stagger = stagger;
|
||||||
dev->current_setup.max_shift = max_shift + stagger;
|
dev->current_setup.max_shift = max_shift + stagger;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1199,7 +1199,6 @@ static void gl843_compute_session(Genesys_Device* dev, ScanSession& s,
|
||||||
compute_session(dev, s, sensor);
|
compute_session(dev, s, sensor);
|
||||||
|
|
||||||
// compute optical and output resolutions
|
// compute optical and output resolutions
|
||||||
s.ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(s.params.xres);
|
|
||||||
s.hwdpi_divisor = sensor.get_hwdpi_divisor_for_dpi(s.params.xres);
|
s.hwdpi_divisor = sensor.get_hwdpi_divisor_for_dpi(s.params.xres);
|
||||||
|
|
||||||
s.optical_resolution = sensor.optical_res / s.ccd_size_divisor;
|
s.optical_resolution = sensor.optical_res / s.ccd_size_divisor;
|
||||||
|
|
|
@ -975,13 +975,10 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
|
||||||
|
|
||||||
debug_dump(DBG_info, session.params);
|
debug_dump(DBG_info, session.params);
|
||||||
|
|
||||||
// we may have 2 domains for ccd: xres below or above half ccd max dpi
|
optical_res = sensor.optical_res / session.ccd_size_divisor;
|
||||||
unsigned ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(session.params.xres);
|
|
||||||
|
|
||||||
optical_res = sensor.optical_res / ccd_size_divisor;
|
|
||||||
|
|
||||||
/* stagger */
|
/* stagger */
|
||||||
if (ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
|
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
|
||||||
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
|
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
|
||||||
} else {
|
} else {
|
||||||
stagger = 0;
|
stagger = 0;
|
||||||
|
@ -1107,7 +1104,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
|
||||||
dev->current_setup.lines = lincnt;
|
dev->current_setup.lines = lincnt;
|
||||||
dev->current_setup.exposure_time = exposure_time;
|
dev->current_setup.exposure_time = exposure_time;
|
||||||
dev->current_setup.xres = used_res;
|
dev->current_setup.xres = used_res;
|
||||||
dev->current_setup.ccd_size_divisor = ccd_size_divisor;
|
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
|
||||||
dev->current_setup.stagger = stagger;
|
dev->current_setup.stagger = stagger;
|
||||||
dev->current_setup.max_shift = max_shift + stagger;
|
dev->current_setup.max_shift = max_shift + stagger;
|
||||||
|
|
||||||
|
@ -1191,12 +1188,11 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
|
||||||
session.params.color_filter = dev->settings.color_filter;
|
session.params.color_filter = dev->settings.color_filter;
|
||||||
session.params.flags = 0;
|
session.params.flags = 0;
|
||||||
|
|
||||||
|
gl846_compute_session(dev, session, sensor);
|
||||||
|
|
||||||
DBG(DBG_info, "%s ", __func__);
|
DBG(DBG_info, "%s ", __func__);
|
||||||
debug_dump(DBG_info, session.params);
|
debug_dump(DBG_info, session.params);
|
||||||
|
|
||||||
// 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(session.params.xres);
|
|
||||||
|
|
||||||
/* optical_res */
|
/* optical_res */
|
||||||
optical_res = sensor.optical_res;
|
optical_res = sensor.optical_res;
|
||||||
|
|
||||||
|
@ -1240,7 +1236,7 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
|
||||||
dev->current_setup.lines = lincnt;
|
dev->current_setup.lines = lincnt;
|
||||||
dev->current_setup.exposure_time = exposure_time;
|
dev->current_setup.exposure_time = exposure_time;
|
||||||
dev->current_setup.xres = used_res;
|
dev->current_setup.xres = used_res;
|
||||||
dev->current_setup.ccd_size_divisor = ccd_size_divisor;
|
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
|
||||||
dev->current_setup.stagger = stagger;
|
dev->current_setup.stagger = stagger;
|
||||||
dev->current_setup.max_shift = max_shift + stagger;
|
dev->current_setup.max_shift = max_shift + stagger;
|
||||||
}
|
}
|
||||||
|
|
|
@ -994,13 +994,10 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
|
||||||
|
|
||||||
debug_dump(DBG_info, session.params);
|
debug_dump(DBG_info, session.params);
|
||||||
|
|
||||||
// we may have 2 domains for ccd: xres below or above half ccd max dpi */
|
optical_res = sensor.optical_res / session.ccd_size_divisor;
|
||||||
unsigned ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(session.params.xres);
|
|
||||||
|
|
||||||
optical_res = sensor.optical_res / ccd_size_divisor;
|
|
||||||
|
|
||||||
/* stagger */
|
/* stagger */
|
||||||
if (ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
|
if (session.ccd_size_divisor == 1 && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) {
|
||||||
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
|
stagger = (4 * session.params.yres) / dev->motor.base_ydpi;
|
||||||
} else {
|
} else {
|
||||||
stagger = 0;
|
stagger = 0;
|
||||||
|
@ -1124,7 +1121,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
|
||||||
dev->current_setup.lines = lincnt;
|
dev->current_setup.lines = lincnt;
|
||||||
dev->current_setup.exposure_time = exposure_time;
|
dev->current_setup.exposure_time = exposure_time;
|
||||||
dev->current_setup.xres = used_res;
|
dev->current_setup.xres = used_res;
|
||||||
dev->current_setup.ccd_size_divisor = ccd_size_divisor;
|
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
|
||||||
dev->current_setup.stagger = stagger;
|
dev->current_setup.stagger = stagger;
|
||||||
dev->current_setup.max_shift = max_shift + stagger;
|
dev->current_setup.max_shift = max_shift + stagger;
|
||||||
|
|
||||||
|
@ -1210,8 +1207,7 @@ 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, session.params);
|
debug_dump(DBG_info, session.params);
|
||||||
|
|
||||||
// we have 2 domains for ccd: xres below or above half ccd max dpi
|
gl847_compute_session(dev, session, sensor);
|
||||||
unsigned ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(session.params.xres);
|
|
||||||
|
|
||||||
/* optical_res */
|
/* optical_res */
|
||||||
optical_res = sensor.optical_res;
|
optical_res = sensor.optical_res;
|
||||||
|
@ -1259,7 +1255,7 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
|
||||||
dev->current_setup.lines = lincnt;
|
dev->current_setup.lines = lincnt;
|
||||||
dev->current_setup.exposure_time = exposure_time;
|
dev->current_setup.exposure_time = exposure_time;
|
||||||
dev->current_setup.xres = used_res;
|
dev->current_setup.xres = used_res;
|
||||||
dev->current_setup.ccd_size_divisor = ccd_size_divisor;
|
dev->current_setup.ccd_size_divisor = session.ccd_size_divisor;
|
||||||
dev->current_setup.stagger = stagger;
|
dev->current_setup.stagger = stagger;
|
||||||
dev->current_setup.max_shift = max_shift + stagger;
|
dev->current_setup.max_shift = max_shift + stagger;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1135,7 +1135,10 @@ void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor&
|
||||||
DBG_HELPER(dbg);
|
DBG_HELPER(dbg);
|
||||||
|
|
||||||
(void) dev;
|
(void) dev;
|
||||||
(void) sensor;
|
|
||||||
|
// compute optical and output resolutions
|
||||||
|
s.ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(s.params.xres);
|
||||||
|
|
||||||
s.params.assert_valid();
|
s.params.assert_valid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -187,7 +187,7 @@ struct ScanSession {
|
||||||
|
|
||||||
// specifies the reduction (if any) of CCD effective dpi which is performed by latching the
|
// specifies the reduction (if any) of CCD effective dpi which is performed by latching the
|
||||||
// data coming from CCD in such a way that 1/2 or 3/4 of pixel data is ignored.
|
// data coming from CCD in such a way that 1/2 or 3/4 of pixel data is ignored.
|
||||||
// gl843-only
|
// except gl646
|
||||||
unsigned ccd_size_divisor = 1;
|
unsigned ccd_size_divisor = 1;
|
||||||
|
|
||||||
// the optical resolution of the scanner.
|
// the optical resolution of the scanner.
|
||||||
|
|
Ładowanie…
Reference in New Issue