diff --git a/backend/genesys.cc b/backend/genesys.cc index ba334c359..bf8cf90fd 100644 --- a/backend/genesys.cc +++ b/backend/genesys.cc @@ -1560,7 +1560,7 @@ static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sens average_data and calibration_data are little endian 16 bit words. */ static void genesys_average_data(uint16_t* average_data, - uint8_t * calibration_data, + const std::uint16_t* calibration_data, uint32_t lines, uint32_t pixel_components_per_line) { @@ -1571,11 +1571,8 @@ static void genesys_average_data(uint16_t* average_data, { sum = 0; for (y = 0; y < lines; y++) - { - sum += calibration_data[(x + y * pixel_components_per_line) * 2]; - sum += - calibration_data[(x + y * pixel_components_per_line) * 2 + - 1] * 256; + { + sum += calibration_data[(x + y * pixel_components_per_line)]; } sum /= lines; *average_data++ = sum; @@ -1625,7 +1622,7 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ size = channels * 2 * pixels_per_line * (dev->calib_lines + 1); } - std::vector calibration_data(size); + std::vector calibration_data(size / 2); motor=SANE_TRUE; if (dev->model->flags & GENESYS_FLAG_SHADING_NO_MOVE) @@ -1656,7 +1653,8 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ dev->cmd_set->begin_scan(dev, sensor, &dev->calib_reg, is_dark ? SANE_FALSE : SANE_TRUE); - sanei_genesys_read_data_from_scanner(dev, calibration_data.data(), size); + sanei_genesys_read_data_from_scanner(dev, reinterpret_cast(calibration_data.data()), + size); dev->cmd_set->end_scan(dev, &dev->calib_reg, SANE_TRUE); @@ -1667,9 +1665,9 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ calibration_data.data(), dev->calib_lines, pixels_per_line * channels); if (DBG_LEVEL >= DBG_data) { - sanei_genesys_write_pnm_file((log_filename_prefix + "_shading.pnm").c_str(), - calibration_data.data(), 16, - channels, pixels_per_line, dev->calib_lines); + sanei_genesys_write_pnm_file16((log_filename_prefix + "_shading.pnm").c_str(), + calibration_data.data(), + channels, pixels_per_line, dev->calib_lines); sanei_genesys_write_pnm_file16((log_filename_prefix + "_average.pnm").c_str(), out_average_data.data(), channels, out_pixels_per_line, 1); diff --git a/backend/genesys_low.cc b/backend/genesys_low.cc index 26aa0c998..ea0c2d1a5 100644 --- a/backend/genesys_low.cc +++ b/backend/genesys_low.cc @@ -159,7 +159,7 @@ void sanei_genesys_write_pnm_file(const char* filename, uint8_t* data, int depth fclose (out); } -void sanei_genesys_write_pnm_file16(const char* filename, uint16_t* data, unsigned channels, +void sanei_genesys_write_pnm_file16(const char* filename, const uint16_t* data, unsigned channels, unsigned pixels_per_line, unsigned lines) { DBG_HELPER_ARGS(dbg, "channels=%d, ppl=%d, lines=%d", channels, diff --git a/backend/genesys_low.h b/backend/genesys_low.h index 539a2855f..bba03ee0c 100644 --- a/backend/genesys_low.h +++ b/backend/genesys_low.h @@ -531,7 +531,7 @@ extern void sanei_genesys_write_file(const char* filename, uint8_t* data, size_t extern void sanei_genesys_write_pnm_file(const char* filename, uint8_t* data, int depth, int channels, int pixels_per_line, int lines); -extern void sanei_genesys_write_pnm_file16(const char* filename, uint16_t* data, unsigned channels, +extern void sanei_genesys_write_pnm_file16(const char* filename, const uint16_t *data, unsigned channels, unsigned pixels_per_line, unsigned lines); extern void sanei_genesys_test_buffer_empty(Genesys_Device* dev, SANE_Bool* empty);