Merge branch 'genesys-session-ccd-size-divisor' into 'master'

genesys: Use common code path for ccd_size_divisor computation

See merge request sane-project/backends!135
merge-requests/138/head
Povilas Kanapickas 2019-08-31 14:09:52 +00:00
commit 6e950209b6
8 zmienionych plików z 42 dodań i 45 usunięć

Wyświetl plik

@ -1074,8 +1074,7 @@ static void gl124_compute_session(Genesys_Device* dev, ScanSession& s,
const Genesys_Sensor& sensor)
{
DBG_HELPER(dbg);
(void) sensor;
s.params.assert_valid();
compute_session(dev, s, sensor);
s.enable_ledadd = (s.params.channels == 1 && dev->model->is_cis && dev->settings.true_gray);
s.computed = true;

Wyświetl plik

@ -1735,9 +1735,8 @@ static void gl841_compute_session(Genesys_Device* dev, ScanSession& s,
const Genesys_Sensor& sensor)
{
DBG_HELPER(dbg);
(void) sensor;
(void) dev;
s.params.assert_valid();
compute_session(dev, s, sensor);
s.computed = true;
}
@ -1797,16 +1796,13 @@ independent of our calculated values:
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 = sensor.optical_res / ccd_size_divisor;
optical_res = sensor.optical_res / session.ccd_size_divisor;
/* 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;
} else {
stagger = 0;
@ -1931,7 +1927,7 @@ dummy \ scanned lines
gl841_init_optical_regs_scan(dev, sensor, reg, exposure_time, session, used_res, start,
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 ***/
@ -2005,7 +2001,7 @@ dummy \ scanned lines
dev->current_setup.lines = lincnt;
dev->current_setup.exposure_time = exposure_time;
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.max_shift = max_shift + stagger;
@ -2092,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.flags = 0;
gl841_compute_session(dev, session, sensor);
DBG(DBG_info, "%s ", __func__);
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 = sensor.optical_res / ccd_size_divisor;
optical_res = sensor.optical_res / session.ccd_size_divisor;
/* 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;
} else {
stagger = 0;
@ -2213,7 +2208,7 @@ dummy \ scanned lines
dev->current_setup.lines = lincnt;
dev->current_setup.exposure_time = exposure_time;
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.max_shift = max_shift + stagger;
}

Wyświetl plik

@ -1196,10 +1196,9 @@ static unsigned align_int_up(unsigned num, unsigned alignment)
static void gl843_compute_session(Genesys_Device* dev, ScanSession& s,
const Genesys_Sensor& sensor)
{
s.params.assert_valid();
compute_session(dev, s, sensor);
// 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.optical_resolution = sensor.optical_res / s.ccd_size_divisor;

Wyświetl plik

@ -941,8 +941,7 @@ static void gl846_compute_session(Genesys_Device* dev, ScanSession& s,
const Genesys_Sensor& sensor)
{
DBG_HELPER(dbg);
(void) sensor;
s.params.assert_valid();
compute_session(dev, s, sensor);
s.enable_ledadd = (s.params.channels == 1 && dev->model->is_cis && dev->settings.true_gray);
@ -976,13 +975,10 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
debug_dump(DBG_info, session.params);
// we may 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 = sensor.optical_res / ccd_size_divisor;
optical_res = sensor.optical_res / session.ccd_size_divisor;
/* 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;
} else {
stagger = 0;
@ -1108,7 +1104,7 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
dev->current_setup.lines = lincnt;
dev->current_setup.exposure_time = exposure_time;
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.max_shift = max_shift + stagger;
@ -1192,12 +1188,11 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
session.params.color_filter = dev->settings.color_filter;
session.params.flags = 0;
gl846_compute_session(dev, session, sensor);
DBG(DBG_info, "%s ", __func__);
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 = sensor.optical_res;
@ -1241,7 +1236,7 @@ gl846_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
dev->current_setup.lines = lincnt;
dev->current_setup.exposure_time = exposure_time;
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.max_shift = max_shift + stagger;
}

Wyświetl plik

@ -962,9 +962,8 @@ static void gl847_compute_session(Genesys_Device* dev, ScanSession& s,
const Genesys_Sensor& sensor)
{
DBG_HELPER(dbg);
(void) sensor;
(void) dev;
s.params.assert_valid();
compute_session(dev, s, sensor);
s.computed = true;
}
@ -995,13 +994,10 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
debug_dump(DBG_info, session.params);
// we may 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 = sensor.optical_res / ccd_size_divisor;
optical_res = sensor.optical_res / session.ccd_size_divisor;
/* 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;
} else {
stagger = 0;
@ -1125,7 +1121,7 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
dev->current_setup.lines = lincnt;
dev->current_setup.exposure_time = exposure_time;
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.max_shift = max_shift + stagger;
@ -1211,8 +1207,7 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
DBG(DBG_info, "%s ", __func__);
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);
gl847_compute_session(dev, session, sensor);
/* optical_res */
optical_res = sensor.optical_res;
@ -1260,7 +1255,7 @@ gl847_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
dev->current_setup.lines = lincnt;
dev->current_setup.exposure_time = exposure_time;
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.max_shift = max_shift + stagger;
}

Wyświetl plik

@ -1130,6 +1130,18 @@ void sanei_genesys_send_gamma_table(Genesys_Device* dev, const Genesys_Sensor& s
}
}
void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor& sensor)
{
DBG_HELPER(dbg);
(void) dev;
// compute optical and output resolutions
s.ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(s.params.xres);
s.params.assert_valid();
}
/** @brief initialize device
* Initialize backend and ASIC : registers, motor tables, and gamma tables
* then ensure scanner's head is at home. Designed for gl846+ ASICs.

Wyświetl plik

@ -636,6 +636,8 @@ extern void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev,
int size,
uint8_t* gamma);
void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor& sensor);
/*---------------------------------------------------------------------------*/
/* ASIC specific functions declarations */
/*---------------------------------------------------------------------------*/

Wyświetl plik

@ -187,7 +187,7 @@ struct ScanSession {
// 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.
// gl843-only
// except gl646
unsigned ccd_size_divisor = 1;
// the optical resolution of the scanner.