kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Increase consistency of lamp warmup handling
rodzic
f8193494ad
commit
4586ae4e56
|
@ -67,8 +67,7 @@ public:
|
|||
virtual void init(Genesys_Device* dev) const = 0;
|
||||
|
||||
virtual void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const = 0;
|
||||
Genesys_Register_Set* regs) const = 0;
|
||||
|
||||
virtual void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs) const = 0;
|
||||
|
|
|
@ -3428,18 +3428,20 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
|
|||
{
|
||||
DBG_HELPER(dbg);
|
||||
unsigned seconds = 0;
|
||||
int pixel;
|
||||
int channels, total_size;
|
||||
double first_average = 0;
|
||||
double second_average = 0;
|
||||
int difference = 255;
|
||||
int lines = 3;
|
||||
|
||||
const auto& sensor = sanei_genesys_find_sensor_any(dev);
|
||||
|
||||
dev->cmd_set->init_regs_for_warmup(dev, sensor, &dev->reg, &channels, &total_size);
|
||||
dev->cmd_set->init_regs_for_warmup(dev, sensor, &dev->reg);
|
||||
dev->interface->write_registers(dev->reg);
|
||||
|
||||
auto total_pixels = dev->session.output_pixels;
|
||||
auto total_size = dev->session.output_line_bytes;
|
||||
auto channels = dev->session.params.channels;
|
||||
auto lines = dev->session.output_line_count;
|
||||
|
||||
std::vector<uint8_t> first_line(total_size);
|
||||
std::vector<uint8_t> second_line(total_size);
|
||||
|
||||
|
@ -3476,8 +3478,7 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
|
|||
dev->cmd_set->end_scan(dev, &dev->reg, true);
|
||||
|
||||
/* compute difference between the two scans */
|
||||
for (pixel = 0; pixel < total_size; pixel++)
|
||||
{
|
||||
for (unsigned pixel = 0; pixel < total_size; pixel++) {
|
||||
// 16 bit data
|
||||
if (dev->session.params.depth == 16) {
|
||||
first_average += (first_line[pixel] + first_line[pixel + 1] * 256);
|
||||
|
@ -3488,11 +3489,13 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
|
|||
{
|
||||
first_average += first_line[pixel];
|
||||
second_average += second_line[pixel];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
first_average /= total_pixels;
|
||||
second_average /= total_pixels;
|
||||
|
||||
if (dev->session.params.depth == 16) {
|
||||
first_average /= pixel;
|
||||
second_average /= pixel;
|
||||
difference = static_cast<int>(std::fabs(first_average - second_average));
|
||||
DBG(DBG_info, "%s: average = %.2f, diff = %.3f\n", __func__,
|
||||
100 * ((second_average) / (256 * 256)),
|
||||
|
@ -3501,11 +3504,8 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
|
|||
if (second_average > (100 * 256)
|
||||
&& (difference / second_average) < 0.002)
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
first_average /= pixel;
|
||||
second_average /= pixel;
|
||||
} else {
|
||||
|
||||
if (DBG_LEVEL >= DBG_data)
|
||||
{
|
||||
sanei_genesys_write_pnm_file("gl_warmup1.pnm", first_line.data(), 8, channels,
|
||||
|
@ -3519,7 +3519,7 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
|
|||
if (fabs (first_average - second_average) < 15
|
||||
&& second_average > 55)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* sleep another second before next loop */
|
||||
dev->interface->sleep_ms(1000);
|
||||
|
|
|
@ -1418,13 +1418,9 @@ void CommandSetGl124::coarse_gain_calibration(Genesys_Device* dev, const Genesys
|
|||
// wait for lamp warmup by scanning the same line until difference
|
||||
// between 2 scans is below a threshold
|
||||
void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* reg, int* channels,
|
||||
int* total_size) const
|
||||
Genesys_Register_Set* reg) const
|
||||
{
|
||||
DBG_HELPER(dbg);
|
||||
int num_pixels;
|
||||
|
||||
*channels=3;
|
||||
|
||||
*reg = dev->reg;
|
||||
|
||||
|
@ -1436,7 +1432,7 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
|
|||
session.params.pixels = dev->model->x_size_calib_mm * sensor.optical_res / MM_PER_INCH / 2;
|
||||
session.params.lines = 1;
|
||||
session.params.depth = 8;
|
||||
session.params.channels = *channels;
|
||||
session.params.channels = 3;
|
||||
session.params.scan_method = dev->settings.scan_method;
|
||||
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
|
||||
session.params.color_filter = dev->settings.color_filter;
|
||||
|
@ -1449,10 +1445,6 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
|
|||
|
||||
init_regs_for_scan_session(dev, sensor, reg, session);
|
||||
|
||||
num_pixels = session.output_pixels;
|
||||
|
||||
*total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */
|
||||
|
||||
sanei_genesys_set_motor_power(*reg, false);
|
||||
}
|
||||
|
||||
|
|
|
@ -93,8 +93,7 @@ public:
|
|||
void init(Genesys_Device* dev) const override;
|
||||
|
||||
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const override;
|
||||
Genesys_Register_Set* regs) const override;
|
||||
|
||||
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs) const override;
|
||||
|
|
|
@ -2458,14 +2458,12 @@ void CommandSetGl646::coarse_gain_calibration(Genesys_Device* dev, const Genesys
|
|||
*
|
||||
*/
|
||||
void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* local_reg, int* channels,
|
||||
int* total_size) const
|
||||
Genesys_Register_Set* local_reg) const
|
||||
{
|
||||
DBG_HELPER(dbg);
|
||||
(void) sensor;
|
||||
|
||||
Genesys_Settings settings;
|
||||
int lines;
|
||||
|
||||
dev->frontend = dev->frontend_initial;
|
||||
|
||||
|
@ -2504,11 +2502,6 @@ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
|
|||
/* turn off motor during this scan */
|
||||
sanei_genesys_set_motor_power(*local_reg, false);
|
||||
|
||||
/* returned value to higher level warmup function */
|
||||
*channels = 1;
|
||||
lines = local_reg->get24(REG_LINCNT) + 1;
|
||||
*total_size = lines * settings.pixels;
|
||||
|
||||
// now registers are ok, write them to scanner
|
||||
gl646_set_fe(dev, local_sensor, AFE_SET, settings.xres);
|
||||
}
|
||||
|
|
|
@ -446,8 +446,7 @@ public:
|
|||
void init(Genesys_Device* dev) const override;
|
||||
|
||||
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const override;
|
||||
Genesys_Register_Set* regs) const override;
|
||||
|
||||
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs) const override;
|
||||
|
|
|
@ -2834,8 +2834,7 @@ void CommandSetGl841::coarse_gain_calibration(Genesys_Device* dev, const Genesys
|
|||
// wait for lamp warmup by scanning the same line until difference
|
||||
// between 2 scans is below a threshold
|
||||
void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* local_reg, int* channels,
|
||||
int* total_size) const
|
||||
Genesys_Register_Set* local_reg) const
|
||||
{
|
||||
DBG_HELPER(dbg);
|
||||
int num_pixels = 4 * 300;
|
||||
|
@ -2857,13 +2856,9 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
|
|||
session.params.pixels = num_pixels;
|
||||
session.params.lines = 1;
|
||||
session.params.depth = 16;
|
||||
session.params.channels = *channels;
|
||||
session.params.channels = 3;
|
||||
session.params.scan_method = dev->settings.scan_method;
|
||||
if (*channels == 3) {
|
||||
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
|
||||
} else {
|
||||
session.params.scan_mode = ScanColorMode::GRAY;
|
||||
}
|
||||
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
|
||||
session.params.color_filter = dev->settings.color_filter;
|
||||
session.params.flags = ScanFlag::DISABLE_SHADING |
|
||||
ScanFlag::DISABLE_GAMMA |
|
||||
|
@ -2873,10 +2868,6 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
|
|||
compute_session(dev, session, sensor);
|
||||
|
||||
init_regs_for_scan_session(dev, sensor, local_reg, session);
|
||||
|
||||
num_pixels = session.output_pixels;
|
||||
|
||||
*total_size = num_pixels * 3 * 2 * 1; /* colors * bytes_per_color * scan lines */
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -60,8 +60,7 @@ public:
|
|||
void init(Genesys_Device* dev) const override;
|
||||
|
||||
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const override;
|
||||
Genesys_Register_Set* regs) const override;
|
||||
|
||||
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs) const override;
|
||||
|
|
|
@ -1757,20 +1757,18 @@ void CommandSetGl843::coarse_gain_calibration(Genesys_Device* dev, const Genesys
|
|||
// wait for lamp warmup by scanning the same line until difference
|
||||
// between 2 scans is below a threshold
|
||||
void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* reg, int* channels,
|
||||
int* total_size) const
|
||||
Genesys_Register_Set* reg) const
|
||||
{
|
||||
DBG_HELPER(dbg);
|
||||
(void) sensor;
|
||||
|
||||
*channels=3;
|
||||
unsigned channels = 3;
|
||||
unsigned resolution = dev->model->get_resolution_settings(dev->settings.scan_method)
|
||||
.get_nearest_resolution_x(600);
|
||||
|
||||
const auto& calib_sensor = sanei_genesys_find_sensor(dev, resolution, *channels,
|
||||
const auto& calib_sensor = sanei_genesys_find_sensor(dev, resolution, channels,
|
||||
dev->settings.scan_method);
|
||||
unsigned num_pixels = dev->model->x_size_calib_mm * resolution / MM_PER_INCH / 2;
|
||||
*total_size = num_pixels * 3 * 1;
|
||||
|
||||
*reg = dev->reg;
|
||||
|
||||
|
@ -1782,7 +1780,7 @@ void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
|
|||
session.params.pixels = num_pixels;
|
||||
session.params.lines = 1;
|
||||
session.params.depth = 8;
|
||||
session.params.channels = *channels;
|
||||
session.params.channels = channels;
|
||||
session.params.scan_method = dev->settings.scan_method;
|
||||
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
|
||||
session.params.color_filter = dev->settings.color_filter;
|
||||
|
|
|
@ -60,8 +60,7 @@ public:
|
|||
void init(Genesys_Device* dev) const override;
|
||||
|
||||
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const override;
|
||||
Genesys_Register_Set* regs) const override;
|
||||
|
||||
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs) const override;
|
||||
|
|
|
@ -1392,14 +1392,11 @@ bool CommandSetGl846::needs_home_before_init_regs_for_scan(Genesys_Device* dev)
|
|||
}
|
||||
|
||||
void CommandSetGl846::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const
|
||||
Genesys_Register_Set* regs) const
|
||||
{
|
||||
(void) dev;
|
||||
(void) sensor;
|
||||
(void) regs;
|
||||
(void) channels;
|
||||
(void) total_size;
|
||||
throw SaneException("not implemented");
|
||||
}
|
||||
|
||||
|
|
|
@ -60,8 +60,7 @@ public:
|
|||
void init(Genesys_Device* dev) const override;
|
||||
|
||||
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const override;
|
||||
Genesys_Register_Set* regs) const override;
|
||||
|
||||
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs) const override;
|
||||
|
|
|
@ -1288,14 +1288,11 @@ bool CommandSetGl847::needs_home_before_init_regs_for_scan(Genesys_Device* dev)
|
|||
}
|
||||
|
||||
void CommandSetGl847::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const
|
||||
Genesys_Register_Set* regs) const
|
||||
{
|
||||
(void) dev;
|
||||
(void) sensor;
|
||||
(void) regs;
|
||||
(void) channels;
|
||||
(void) total_size;
|
||||
throw SaneException("not implemented");
|
||||
}
|
||||
|
||||
|
|
|
@ -80,8 +80,7 @@ public:
|
|||
void init(Genesys_Device* dev) const override;
|
||||
|
||||
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* regs, int* channels,
|
||||
int* total_size) const override;
|
||||
Genesys_Register_Set* regs) const override;
|
||||
|
||||
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs) const override;
|
||||
|
|
Ładowanie…
Reference in New Issue