diff --git a/backend/genesys/command_set.h b/backend/genesys/command_set.h index 0b1591a9c..4e22a562c 100644 --- a/backend/genesys/command_set.h +++ b/backend/genesys/command_set.h @@ -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; diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index ab2f8d62c..a8440f167 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -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 first_line(total_size); std::vector 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(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); diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index b6beefb45..7f6010686 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -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); } diff --git a/backend/genesys/gl124.h b/backend/genesys/gl124.h index 9f6da50c3..df50c12d6 100644 --- a/backend/genesys/gl124.h +++ b/backend/genesys/gl124.h @@ -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; diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index da8c4b448..65ee5ae0d 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -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); } diff --git a/backend/genesys/gl646.h b/backend/genesys/gl646.h index ad9a1104f..dea4bffca 100644 --- a/backend/genesys/gl646.h +++ b/backend/genesys/gl646.h @@ -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; diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index 9a364bf67..61d6ca08f 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -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 */ } /* diff --git a/backend/genesys/gl841.h b/backend/genesys/gl841.h index 9e010bb30..a66bb80a0 100644 --- a/backend/genesys/gl841.h +++ b/backend/genesys/gl841.h @@ -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; diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 68a72ab5d..b3fd73e57 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -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; diff --git a/backend/genesys/gl843.h b/backend/genesys/gl843.h index 7cd46fcab..d227af2d9 100644 --- a/backend/genesys/gl843.h +++ b/backend/genesys/gl843.h @@ -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; diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index c22b3cd9c..aff036955 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -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"); } diff --git a/backend/genesys/gl846.h b/backend/genesys/gl846.h index bfc214c0a..742a7c5f1 100644 --- a/backend/genesys/gl846.h +++ b/backend/genesys/gl846.h @@ -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; diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index b41e4e127..305f6836a 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -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"); } diff --git a/backend/genesys/gl847.h b/backend/genesys/gl847.h index 794aa3ebf..7a5f954b1 100644 --- a/backend/genesys/gl847.h +++ b/backend/genesys/gl847.h @@ -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;