kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'genesys-misc-cleanup' into 'master'
genesys: Miscellaneous cleanup See merge request sane-project/backends!191merge-requests/192/merge
commit
a30daa96d1
|
@ -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<uint8_t> calibration_data(size);
|
||||
std::vector<uint16_t> 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<std::uint8_t*>(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);
|
||||
|
|
|
@ -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,
|
||||
|
@ -765,35 +765,36 @@ void sanei_genesys_test_buffer_empty(Genesys_Device* dev, SANE_Bool* empty)
|
|||
DBG(DBG_io, "%s: buffer is filled\n", __func__);
|
||||
}
|
||||
|
||||
void wait_until_has_valid_words(Genesys_Device* dev)
|
||||
{
|
||||
unsigned words = 0;
|
||||
unsigned sleep_time_ms = 10;
|
||||
|
||||
for (unsigned wait_ms = 0; wait_ms < 50000; wait_ms += sleep_time_ms) {
|
||||
sanei_genesys_read_valid_words(dev, &words);
|
||||
if (words != 0)
|
||||
break;
|
||||
sanei_genesys_sleep_ms(sleep_time_ms);
|
||||
}
|
||||
|
||||
if (words == 0) {
|
||||
throw SaneException(SANE_STATUS_IO_ERROR, "timeout, buffer does not get filled");
|
||||
}
|
||||
}
|
||||
|
||||
// Read data (e.g scanned image) from scan buffer
|
||||
void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, uint8_t* data, size_t size)
|
||||
{
|
||||
DBG_HELPER_ARGS(dbg, "size = %lu bytes", (u_long) size);
|
||||
int time_count = 0;
|
||||
unsigned int words = 0;
|
||||
|
||||
if (size & 1)
|
||||
DBG(DBG_info, "WARNING %s: odd number of bytes\n", __func__);
|
||||
|
||||
// wait until buffer not empty for up to 5 seconds
|
||||
do {
|
||||
sanei_genesys_read_valid_words (dev, &words);
|
||||
if (words == 0)
|
||||
{
|
||||
sanei_genesys_sleep_ms(10);
|
||||
time_count++;
|
||||
}
|
||||
}
|
||||
while ((time_count < 2500*2) && (words == 0));
|
||||
|
||||
if (words == 0) /* timeout, buffer does not get filled */
|
||||
{
|
||||
throw SaneException(SANE_STATUS_IO_ERROR, "timeout, buffer does not get filled");
|
||||
}
|
||||
wait_until_has_valid_words(dev);
|
||||
|
||||
dev->cmd_set->bulk_read_data(dev, 0x45, data, size);
|
||||
}
|
||||
|
||||
void sanei_genesys_read_feed_steps(Genesys_Device* dev, unsigned int* steps)
|
||||
{
|
||||
DBG_HELPER(dbg);
|
||||
|
|
|
@ -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);
|
||||
|
|
Ładowanie…
Reference in New Issue