diff --git a/backend/genesys.cc b/backend/genesys.cc index 7781fda9f..029be9df7 100644 --- a/backend/genesys.cc +++ b/backend/genesys.cc @@ -3424,17 +3424,17 @@ static void genesys_fill_line_interp_buffer(Genesys_Device* dev, uint8_t* work_b // dev->line_interp holds the number of lines scanned for one line of data sent if (((dev->line_count / dev->session.params.channels) % dev->line_interp) == 0) { /* copy pixel when line matches */ - work_buffer_dst[count] = dev->oe_buffer.get_read_pos()[dev->cur]; + work_buffer_dst[count] = dev->oe_buffer.get_read_pos()[dev->deseg.curr_byte]; count++; } - /* always update pointer so we skip uncopied data */ - dev->cur++; + // always update pointer so we skip uncopied data + dev->deseg.curr_byte++; /* go to next line if needed */ - if (dev->cur == dev->deseg.pixel_groups) { + if (dev->deseg.curr_byte == dev->deseg.pixel_groups) { dev->oe_buffer.set_pos(dev->oe_buffer.pos() + dev->deseg.raw_channel_bytes); - dev->cur = 0; + dev->deseg.curr_byte = 0; dev->line_count++; } @@ -3475,7 +3475,7 @@ static void genesys_fill_segmented_buffer(Genesys_Device* dev, uint8_t* work_buf while (count < size) { if (depth==1) { - while (dev->cur < dev->deseg.pixel_groups && count < size) { + while (dev->deseg.curr_byte < dev->deseg.pixel_groups && count < size) { for (unsigned n = 0; n < dev->deseg.segment_count; n++) { work_buffer_dst[count+n] = 0; } @@ -3484,7 +3484,7 @@ static void genesys_fill_segmented_buffer(Genesys_Device* dev, uint8_t* work_buf k = count + (i * dev->deseg.segment_count) / 8; for (unsigned n = 0; n < dev->deseg.segment_count; n++) { work_buffer_dst[k] = work_buffer_dst[k] << 1; - if ((dev->oe_buffer.get_read_pos()[dev->cur + dev->deseg.skip_bytes + dev->deseg.conseq_pixel_dist_bytes * dev->segment_order[n]])&(128>>i)) { + if ((dev->oe_buffer.get_read_pos()[dev->deseg.curr_byte + dev->deseg.skip_bytes + dev->deseg.conseq_pixel_dist_bytes * dev->segment_order[n]])&(128>>i)) { work_buffer_dst[k] |= 1; } } @@ -3492,35 +3492,35 @@ static void genesys_fill_segmented_buffer(Genesys_Device* dev, uint8_t* work_buf /* update counter and pointer */ count += dev->deseg.segment_count; - dev->cur++; + dev->deseg.curr_byte++; } } if (depth==8) { - while (dev->cur < dev->deseg.pixel_groups && count < size) { + while (dev->deseg.curr_byte < dev->deseg.pixel_groups && count < size) { for (unsigned n = 0; n < dev->deseg.segment_count; n++) { - work_buffer_dst[count+n] = dev->oe_buffer.get_read_pos()[dev->cur + dev->deseg.skip_bytes + dev->deseg.conseq_pixel_dist_bytes *dev->segment_order[n]]; + work_buffer_dst[count+n] = dev->oe_buffer.get_read_pos()[dev->deseg.curr_byte + dev->deseg.skip_bytes + dev->deseg.conseq_pixel_dist_bytes *dev->segment_order[n]]; } /* update counter and pointer */ count += dev->deseg.segment_count; - dev->cur++; + dev->deseg.curr_byte++; } } if (depth==16) { - while (dev->cur < dev->deseg.pixel_groups && count < size) { + while (dev->deseg.curr_byte < dev->deseg.pixel_groups && count < size) { for (unsigned n = 0; n < dev->deseg.segment_count; n++) { - work_buffer_dst[count+n*2] = dev->oe_buffer.get_read_pos()[dev->cur + dev->deseg.skip_bytes + dev->deseg.conseq_pixel_dist_bytes * dev->segment_order[n]]; - work_buffer_dst[count+n*2+1] = dev->oe_buffer.get_read_pos()[dev->cur + dev->deseg.skip_bytes + dev->deseg.conseq_pixel_dist_bytes * dev->segment_order[n] + 1]; + work_buffer_dst[count+n*2] = dev->oe_buffer.get_read_pos()[dev->deseg.curr_byte + dev->deseg.skip_bytes + dev->deseg.conseq_pixel_dist_bytes * dev->segment_order[n]]; + work_buffer_dst[count+n*2+1] = dev->oe_buffer.get_read_pos()[dev->deseg.curr_byte + dev->deseg.skip_bytes + dev->deseg.conseq_pixel_dist_bytes * dev->segment_order[n] + 1]; } /* update counter and pointer */ count += dev->deseg.segment_count * 2; - dev->cur+=2; + dev->deseg.curr_byte += 2; } } /* go to next line if needed */ - if (dev->cur == dev->deseg.pixel_groups) { + if (dev->deseg.curr_byte == dev->deseg.pixel_groups) { dev->oe_buffer.set_pos(dev->oe_buffer.pos() + dev->deseg.raw_channel_bytes); - dev->cur = 0; + dev->deseg.curr_byte = 0; } /* read a new buffer if needed */ diff --git a/backend/genesys_device.h b/backend/genesys_device.h index c4dbb51d2..ba9edcd38 100644 --- a/backend/genesys_device.h +++ b/backend/genesys_device.h @@ -214,6 +214,9 @@ struct DesegmentationState // Total bytes in a line received from a scanner unsigned raw_line_bytes = 0; + + // The current byte during desegmentation process + unsigned curr_byte = 0; }; /** @@ -338,8 +341,6 @@ struct Genesys_Device int line_interp = 0; // number of scan lines used during scan int line_count = 0; - // current pixel position within sub window - size_t cur = 0; // array describing the order of the sub-segments of the sensor std::vector segment_order; diff --git a/backend/genesys_gl124.cc b/backend/genesys_gl124.cc index e8dd58ab4..8d0f7671f 100644 --- a/backend/genesys_gl124.cc +++ b/backend/genesys_gl124.cc @@ -994,7 +994,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens multiply_by_depth_ceil(session.output_pixels / session.ccd_size_divisor, session.params.depth); - dev->cur = 0; + dev->deseg.curr_byte = 0; dev->deseg.skip_bytes = 0; dev->deseg.pixel_groups = dev->deseg.raw_channel_bytes / segment_count; dev->deseg.conseq_pixel_dist_bytes = dev->deseg.raw_channel_bytes / segment_count; diff --git a/backend/genesys_gl846.cc b/backend/genesys_gl846.cc index 0d20d0903..fbde72bc7 100644 --- a/backend/genesys_gl846.cc +++ b/backend/genesys_gl846.cc @@ -871,7 +871,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens dev->deseg.pixel_groups = multiply_by_depth_ceil(dev->deseg.pixel_groups, session.params.depth); dev->deseg.conseq_pixel_dist_bytes = multiply_by_depth_ceil(dev->deseg.conseq_pixel_dist_bytes, session.params.depth); - dev->cur=0; + dev->deseg.curr_byte = 0; dev->deseg.segment_count = segment_count; dev->line_interp = 0; diff --git a/backend/genesys_gl847.cc b/backend/genesys_gl847.cc index 4b89424df..529217c7a 100644 --- a/backend/genesys_gl847.cc +++ b/backend/genesys_gl847.cc @@ -890,7 +890,7 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens dev->deseg.pixel_groups = multiply_by_depth_ceil(dev->deseg.pixel_groups, session.params.depth); dev->deseg.conseq_pixel_dist_bytes = multiply_by_depth_ceil(dev->deseg.conseq_pixel_dist_bytes, session.params.depth); - dev->cur=0; + dev->deseg.curr_byte = 0; dev->deseg.segment_count = segment_count; dev->line_interp = 0;