kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'genesys-4400f-8400f-8600f-bugs' into 'master'
genesys: Fix various bugs on 4400F, 8400F, 8600F See merge request sane-project/backends!404merge-requests/213/head^2
commit
5d08b64bc6
|
@ -1341,17 +1341,6 @@ bool should_calibrate_only_active_area(const Genesys_Device& dev,
|
|||
return false;
|
||||
}
|
||||
|
||||
float get_model_x_offset_ta(const Genesys_Device& dev, const Genesys_Settings& settings)
|
||||
{
|
||||
if (dev.model->model_id == ModelId::CANON_8600F && settings.xres == 4800) {
|
||||
return 85.0f;
|
||||
}
|
||||
if (dev.model->model_id == ModelId::CANON_4400F && settings.xres == 4800) {
|
||||
return dev.model->x_offset_ta - 10.0;
|
||||
}
|
||||
return dev.model->x_offset_ta;
|
||||
}
|
||||
|
||||
void scanner_offset_calibration(Genesys_Device& dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs)
|
||||
{
|
||||
|
@ -1414,7 +1403,7 @@ void scanner_offset_calibration(Genesys_Device& dev, const Genesys_Sensor& senso
|
|||
black_pixels = calib_sensor->black_pixels / factor;
|
||||
|
||||
if (should_calibrate_only_active_area(dev, dev.settings)) {
|
||||
float offset = get_model_x_offset_ta(dev, dev.settings);
|
||||
float offset = dev.model->x_offset_ta;
|
||||
offset /= calib_sensor->get_ccd_size_divisor_for_dpi(resolution);
|
||||
start_pixel = static_cast<int>((offset * resolution) / MM_PER_INCH);
|
||||
|
||||
|
|
|
@ -801,7 +801,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
|
||||
dev->line_count = 0;
|
||||
|
||||
build_image_pipeline(dev, sensor, session);
|
||||
build_image_pipeline(dev, session);
|
||||
|
||||
// MAXWD is expressed in 2 words unit
|
||||
|
||||
|
|
|
@ -515,7 +515,7 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene
|
|||
dev->read_buffer.clear();
|
||||
dev->read_buffer.alloc(session.buffer_size_read);
|
||||
|
||||
build_image_pipeline(dev, sensor, session);
|
||||
build_image_pipeline(dev, session);
|
||||
|
||||
dev->read_active = true;
|
||||
|
||||
|
|
|
@ -1369,7 +1369,7 @@ dummy \ scanned lines
|
|||
dev->read_buffer.clear();
|
||||
dev->read_buffer.alloc(session.buffer_size_read);
|
||||
|
||||
build_image_pipeline(dev, sensor, session);
|
||||
build_image_pipeline(dev, session);
|
||||
|
||||
dev->read_active = true;
|
||||
|
||||
|
|
|
@ -1136,7 +1136,7 @@ void CommandSetGl843::init_regs_for_scan_session(Genesys_Device* dev, const Gene
|
|||
dev->read_buffer.clear();
|
||||
dev->read_buffer.alloc(session.buffer_size_read);
|
||||
|
||||
build_image_pipeline(dev, sensor, session);
|
||||
build_image_pipeline(dev, session);
|
||||
|
||||
dev->read_active = true;
|
||||
|
||||
|
@ -1182,21 +1182,12 @@ ScanSession CommandSetGl843::calculate_scan_session(const Genesys_Device* dev,
|
|||
if (settings.scan_method==ScanMethod::TRANSPARENCY ||
|
||||
settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
|
||||
{
|
||||
start = get_model_x_offset_ta(*dev, settings);
|
||||
start = dev->model->x_offset_ta;
|
||||
} else {
|
||||
start = dev->model->x_offset;
|
||||
}
|
||||
start = start + settings.tl_x;
|
||||
|
||||
if ((dev->model->model_id == ModelId::CANON_4400F &&
|
||||
settings.scan_method == ScanMethod::TRANSPARENCY) ||
|
||||
dev->model->model_id == ModelId::CANON_8400F ||
|
||||
dev->model->model_id == ModelId::CANON_8600F)
|
||||
{
|
||||
// FIXME: this is probably just an artifact of a bug elsewhere
|
||||
start /= sensor.get_ccd_size_divisor_for_dpi(settings.xres);
|
||||
}
|
||||
|
||||
start = static_cast<float>((start * settings.xres) / MM_PER_INCH);
|
||||
|
||||
ScanSession session;
|
||||
|
@ -1474,7 +1465,7 @@ void CommandSetGl843::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
|
|||
unsigned calib_pixels_offset = 0;
|
||||
|
||||
if (should_calibrate_only_active_area(*dev, dev->settings)) {
|
||||
float offset = get_model_x_offset_ta(*dev, dev->settings);
|
||||
float offset = dev->model->x_offset_ta;
|
||||
// FIXME: we should use resolution here
|
||||
offset = static_cast<float>((offset * dev->settings.xres) / MM_PER_INCH);
|
||||
|
||||
|
@ -1498,6 +1489,12 @@ void CommandSetGl843::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
|
|||
// note: move_to_ta() function has already been called and the sensor is at the
|
||||
// transparency adapter
|
||||
move = static_cast<int>(dev->model->y_offset_calib_white_ta - dev->model->y_offset_sensor_to_ta);
|
||||
if (dev->model->model_id == ModelId::CANON_8600F && resolution == 2400) {
|
||||
move /= 2;
|
||||
}
|
||||
if (dev->model->model_id == ModelId::CANON_8600F && resolution == 4800) {
|
||||
move /= 4;
|
||||
}
|
||||
flags |= ScanFlag::USE_XPA;
|
||||
} else {
|
||||
move = static_cast<int>(dev->model->y_offset_calib_white);
|
||||
|
@ -1973,7 +1970,7 @@ void CommandSetGl843::send_shading_data(Genesys_Device* dev, const Genesys_Senso
|
|||
uint8_t *buffer;
|
||||
int count;
|
||||
|
||||
unsigned offset = 0;
|
||||
int offset = 0;
|
||||
unsigned length = size;
|
||||
|
||||
if (dev->reg.get8(REG_0x01) & REG_0x01_SHDAREA) {
|
||||
|
@ -1983,9 +1980,13 @@ void CommandSetGl843::send_shading_data(Genesys_Device* dev, const Genesys_Senso
|
|||
length = dev->session.output_pixels * sensor.shading_resolution /
|
||||
dev->session.params.xres;
|
||||
|
||||
offset += sensor.shading_pixel_offset;
|
||||
|
||||
// 16 bit words, 2 words per color, 3 color channels
|
||||
length *= 2 * 2 * 3;
|
||||
offset *= 2 * 2 * 3;
|
||||
} else {
|
||||
offset += sensor.shading_pixel_offset * 2 * 2 * 3;
|
||||
}
|
||||
|
||||
dev->interface->record_key_value("shading_offset", std::to_string(offset));
|
||||
|
@ -1999,6 +2000,11 @@ void CommandSetGl843::send_shading_data(Genesys_Device* dev, const Genesys_Senso
|
|||
/* copy regular shading data to the expected layout */
|
||||
buffer = final_data.data();
|
||||
count = 0;
|
||||
if (offset < 0) {
|
||||
count += (-offset);
|
||||
length -= (-offset);
|
||||
offset = 0;
|
||||
}
|
||||
|
||||
/* loop over calibration data */
|
||||
for (i = 0; i < length; i++)
|
||||
|
|
|
@ -709,7 +709,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
reg->set16(REG_STRPIXEL, session.pixel_startx);
|
||||
reg->set16(REG_ENDPIXEL, session.pixel_endx);
|
||||
|
||||
build_image_pipeline(dev, sensor, session);
|
||||
build_image_pipeline(dev, session);
|
||||
|
||||
/* MAXWD is expressed in 4 words unit */
|
||||
// BUG: we shouldn't multiply by channels here
|
||||
|
|
|
@ -610,7 +610,7 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
reg->set16(REG_STRPIXEL, session.pixel_startx);
|
||||
reg->set16(REG_ENDPIXEL, session.pixel_endx);
|
||||
|
||||
build_image_pipeline(dev, sensor, session);
|
||||
build_image_pipeline(dev, session);
|
||||
|
||||
/* MAXWD is expressed in 4 words unit */
|
||||
// BUG: we shouldn't multiply by channels here
|
||||
|
|
|
@ -831,12 +831,12 @@ void compute_session_pixel_offsets(const Genesys_Device* dev, ScanSession& s,
|
|||
s.pixel_startx += s.output_startx * sensor.optical_res / s.params.xres;
|
||||
s.pixel_endx = s.pixel_startx + s.optical_pixels * s.ccd_size_divisor;
|
||||
|
||||
} else if (dev->model->asic_type == AsicType::GL841) {
|
||||
} else if (dev->model->asic_type == AsicType::GL841 ||
|
||||
dev->model->asic_type == AsicType::GL843) {
|
||||
s.pixel_startx = (s.output_startx * s.optical_resolution) / s.params.xres;
|
||||
s.pixel_endx = s.pixel_startx + s.optical_pixels;
|
||||
|
||||
} else if (dev->model->asic_type == AsicType::GL843 ||
|
||||
dev->model->asic_type == AsicType::GL845 ||
|
||||
} else if (dev->model->asic_type == AsicType::GL845 ||
|
||||
dev->model->asic_type == AsicType::GL846 ||
|
||||
dev->model->asic_type == AsicType::GL847 ||
|
||||
dev->model->asic_type == AsicType::GL124)
|
||||
|
@ -955,7 +955,11 @@ void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Se
|
|||
// after all adjustments on the optical pixels have been made, compute the number of pixels
|
||||
// to retrieve from the chip
|
||||
s.output_pixels = (s.optical_pixels * s.output_resolution) / s.optical_resolution;
|
||||
s.output_startx = s.params.startx + sensor.output_pixel_offset;
|
||||
|
||||
if (static_cast<int>(s.params.startx) + sensor.output_pixel_offset < 0)
|
||||
throw SaneException("Invalid sensor.output_pixel_offset");
|
||||
s.output_startx = static_cast<unsigned>(
|
||||
static_cast<int>(s.params.startx) + sensor.output_pixel_offset);
|
||||
|
||||
s.num_staggered_lines = 0;
|
||||
if (!has_flag(s.params.flags, ScanFlag::IGNORE_STAGGER_OFFSET))
|
||||
|
@ -1111,8 +1115,7 @@ static std::size_t get_usb_buffer_read_size(AsicType asic, const ScanSession& se
|
|||
}
|
||||
}
|
||||
|
||||
void build_image_pipeline(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
const ScanSession& session)
|
||||
void build_image_pipeline(Genesys_Device* dev, const ScanSession& session)
|
||||
{
|
||||
static unsigned s_pipeline_index = 0;
|
||||
|
||||
|
@ -1221,14 +1224,9 @@ void build_image_pipeline(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
|||
!has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION) &&
|
||||
!has_flag(session.params.flags, ScanFlag::DISABLE_SHADING))
|
||||
{
|
||||
unsigned pixel_shift = session.params.startx;
|
||||
if (dev->model->model_id == ModelId::CANON_4400F) {
|
||||
pixel_shift =
|
||||
session.params.startx * sensor.optical_res / dev->calib_session.params.xres;
|
||||
}
|
||||
dev->pipeline.push_node<ImagePipelineNodeCalibrate>(dev->dark_average_data,
|
||||
dev->white_average_data,
|
||||
pixel_shift *
|
||||
session.params.startx *
|
||||
dev->calib_session.params.channels);
|
||||
|
||||
if (DBG_LEVEL >= DBG_io2) {
|
||||
|
|
|
@ -329,8 +329,6 @@ void scanner_search_strip(Genesys_Device& dev, bool forward, bool black);
|
|||
bool should_calibrate_only_active_area(const Genesys_Device& dev,
|
||||
const Genesys_Settings& settings);
|
||||
|
||||
float get_model_x_offset_ta(const Genesys_Device& dev, const Genesys_Settings& settings);
|
||||
|
||||
void scanner_offset_calibration(Genesys_Device& dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set& regs);
|
||||
|
||||
|
@ -436,8 +434,7 @@ extern void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev,
|
|||
|
||||
void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Sensor& sensor);
|
||||
|
||||
void build_image_pipeline(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
const ScanSession& session);
|
||||
void build_image_pipeline(Genesys_Device* dev, const ScanSession& session);
|
||||
|
||||
std::uint8_t compute_frontend_gain(float value, float target_value,
|
||||
FrontendType frontend_type);
|
||||
|
|
|
@ -129,6 +129,7 @@ std::ostream& operator<<(std::ostream& out, const Genesys_Sensor& sensor)
|
|||
<< " register_dpiset: " << sensor.register_dpiset << '\n'
|
||||
<< " ccd_size_divisor: " << sensor.ccd_size_divisor << '\n'
|
||||
<< " shading_factor: " << sensor.shading_factor << '\n'
|
||||
<< " shading_pixel_offset: " << sensor.shading_pixel_offset << '\n'
|
||||
<< " pixel_count_ratio: " << sensor.pixel_count_ratio << '\n'
|
||||
<< " output_pixel_offset: " << sensor.output_pixel_offset << '\n'
|
||||
<< " black_pixels: " << sensor.black_pixels << '\n'
|
||||
|
|
|
@ -286,12 +286,15 @@ struct Genesys_Sensor {
|
|||
// How many real pixels correspond to one shading pixel that is sent to the scanner
|
||||
unsigned shading_factor = 1;
|
||||
|
||||
// How many pixels the shading data is offset from the acquired data
|
||||
int shading_pixel_offset = 0;
|
||||
|
||||
// This defines the ratio between logical pixel coordinates and the pixel coordinates sent to
|
||||
// the scanner.
|
||||
Ratio pixel_count_ratio = Ratio{1, 1};
|
||||
|
||||
// The offset in pixels in terms of scan resolution that needs to be applied to scan position.
|
||||
unsigned output_pixel_offset = 0;
|
||||
int output_pixel_offset = 0;
|
||||
|
||||
int black_pixels = 0;
|
||||
// value of the dummy register
|
||||
|
@ -365,6 +368,7 @@ struct Genesys_Sensor {
|
|||
shading_resolution == other.shading_resolution &&
|
||||
ccd_size_divisor == other.ccd_size_divisor &&
|
||||
shading_factor == other.shading_factor &&
|
||||
shading_pixel_offset == other.shading_pixel_offset &&
|
||||
pixel_count_ratio == other.pixel_count_ratio &&
|
||||
output_pixel_offset == other.output_pixel_offset &&
|
||||
black_pixels == other.black_pixels &&
|
||||
|
@ -394,6 +398,7 @@ void serialize(Stream& str, Genesys_Sensor& x)
|
|||
serialize(str, x.shading_resolution);
|
||||
serialize(str, x.ccd_size_divisor);
|
||||
serialize(str, x.shading_factor);
|
||||
serialize(str, x.shading_pixel_offset);
|
||||
serialize(str, x.output_pixel_offset);
|
||||
serialize(str, x.pixel_count_ratio);
|
||||
serialize(str, x.black_pixels);
|
||||
|
|
|
@ -430,7 +430,7 @@ void genesys_init_usb_device_tables()
|
|||
model.bpp_color_values = { 8, 16 };
|
||||
|
||||
model.x_offset = 6.0;
|
||||
model.y_offset = 12.00;
|
||||
model.y_offset = 10.00;
|
||||
model.x_size = 215.9;
|
||||
model.y_size = 297.0;
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -160,7 +160,7 @@ void genesys_init_sensor_tables()
|
|||
struct CustomSensorSettings
|
||||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -202,7 +202,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -250,7 +250,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned exposure_lperiod;
|
||||
unsigned ccd_size_divisor;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
GenesysRegisterSettingSet custom_regs;
|
||||
};
|
||||
|
||||
|
@ -378,7 +378,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned register_dpiset;
|
||||
unsigned exposure_lperiod;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
GenesysRegisterSettingSet custom_regs;
|
||||
};
|
||||
|
||||
|
@ -479,7 +479,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned exposure_lperiod;
|
||||
unsigned ccd_size_divisor;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
GenesysRegisterSettingSet custom_regs;
|
||||
};
|
||||
|
||||
|
@ -574,7 +574,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned register_dpihw;
|
||||
unsigned register_dpiset;
|
||||
unsigned shading_resolution;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -630,7 +630,7 @@ void genesys_init_sensor_tables()
|
|||
std::vector<unsigned> channels;
|
||||
unsigned exposure_lperiod;
|
||||
SensorExposure exposure;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -685,7 +685,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned register_dpiset;
|
||||
unsigned exposure_lperiod;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
GenesysRegisterSettingSet custom_regs;
|
||||
};
|
||||
|
||||
|
@ -805,7 +805,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -861,7 +861,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -918,7 +918,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -974,7 +974,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -1030,7 +1030,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -1087,7 +1087,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -1125,7 +1125,7 @@ void genesys_init_sensor_tables()
|
|||
SensorExposure exposure;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned shading_factor;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
unsigned segment_size;
|
||||
std::vector<unsigned> segment_order;
|
||||
GenesysRegisterSettingSet custom_regs;
|
||||
|
@ -1286,7 +1286,7 @@ void genesys_init_sensor_tables()
|
|||
SensorExposure exposure;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned shading_factor;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
unsigned segment_size;
|
||||
std::vector<unsigned> segment_order;
|
||||
GenesysRegisterSettingSet custom_regs;
|
||||
|
@ -1431,7 +1431,7 @@ void genesys_init_sensor_tables()
|
|||
SensorExposure exposure;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned shading_factor;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
unsigned segment_size;
|
||||
std::vector<unsigned> segment_order;
|
||||
GenesysRegisterSettingSet custom_regs;
|
||||
|
@ -1589,7 +1589,7 @@ void genesys_init_sensor_tables()
|
|||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -1632,7 +1632,7 @@ void genesys_init_sensor_tables()
|
|||
int exposure_lperiod;
|
||||
ScanMethod method;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
GenesysRegisterSettingSet extra_custom_regs;
|
||||
};
|
||||
|
||||
|
@ -1759,7 +1759,7 @@ void genesys_init_sensor_tables()
|
|||
int exposure_lperiod;
|
||||
ScanMethod method;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
GenesysRegisterSettingSet extra_custom_regs;
|
||||
};
|
||||
|
||||
|
@ -1880,14 +1880,14 @@ void genesys_init_sensor_tables()
|
|||
unsigned register_dpiset;
|
||||
int exposure_lperiod;
|
||||
bool use_host_side_calib;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
std::vector<ScanMethod> methods;
|
||||
GenesysRegisterSettingSet extra_custom_regs;
|
||||
GenesysRegisterSettingSet extra_custom_fe_regs;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
{ { 300 }, 1200, 11640, false, 1, { ScanMethod::FLATBED }, {
|
||||
{ { 300 }, 1200, 11640, false, 197, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x13 }, { 0x17, 0x0a }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x6b },
|
||||
{ 0x52, 0x0a }, { 0x53, 0x0d }, { 0x54, 0x00 }, { 0x55, 0x03 },
|
||||
|
@ -1899,7 +1899,7 @@ void genesys_init_sensor_tables()
|
|||
{ 0x9e, 0x2d },
|
||||
}, {}
|
||||
},
|
||||
{ { 600 }, 2400, 11640, false, 2, { ScanMethod::FLATBED }, {
|
||||
{ { 600 }, 2400, 11640, false, 392, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x13 }, { 0x17, 0x0a }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x6b },
|
||||
{ 0x52, 0x0a }, { 0x53, 0x0d }, { 0x54, 0x00 }, { 0x55, 0x03 },
|
||||
|
@ -1911,7 +1911,7 @@ void genesys_init_sensor_tables()
|
|||
{ 0x9e, 0x2d },
|
||||
}, {}
|
||||
},
|
||||
{ { 1200 }, 4800, 11640, false, 5, { ScanMethod::FLATBED }, {
|
||||
{ { 1200 }, 4800, 11640, false, 794, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x13 }, { 0x17, 0x0a }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x6b },
|
||||
{ 0x52, 0x0a }, { 0x53, 0x0d }, { 0x54, 0x00 }, { 0x55, 0x03 },
|
||||
|
@ -1949,7 +1949,7 @@ void genesys_init_sensor_tables()
|
|||
{ 0x03, 0x1f },
|
||||
}
|
||||
},
|
||||
{ { 4800 }, 4800, 33300, true, 20, { ScanMethod::TRANSPARENCY }, {
|
||||
{ { 4800 }, 4800, 33300, true, -2063, { ScanMethod::TRANSPARENCY }, {
|
||||
{ 0x16, 0x13 }, { 0x17, 0x15 }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x61 }, { 0x1d, 0x75 },
|
||||
{ 0x52, 0x02 }, { 0x53, 0x05 }, { 0x54, 0x08 }, { 0x55, 0x0b },
|
||||
|
@ -2005,14 +2005,15 @@ void genesys_init_sensor_tables()
|
|||
unsigned register_dpiset;
|
||||
Ratio pixel_count_ratio;
|
||||
int exposure_lperiod;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
int shading_pixel_offset;
|
||||
std::vector<ScanMethod> methods;
|
||||
GenesysRegisterSettingSet extra_custom_regs;
|
||||
GenesysRegisterSettingSet custom_fe_regs;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
{ { 400 }, 2400, Ratio{1, 4}, 7200, 2, { ScanMethod::FLATBED }, {
|
||||
{ { 400 }, 2400, Ratio{1, 4}, 7200, 2, 0, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x13 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d }, { 0x53, 0x10 }, { 0x54, 0x01 }, { 0x55, 0x04 },
|
||||
|
@ -2024,7 +2025,7 @@ void genesys_init_sensor_tables()
|
|||
{ 0x80, 0x2a },
|
||||
}, {}
|
||||
},
|
||||
{ { 800 }, 4800, Ratio{1, 4}, 7200, 5, { ScanMethod::FLATBED }, {
|
||||
{ { 800 }, 4800, Ratio{1, 4}, 7200, 5, 13, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x13 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d }, { 0x53, 0x10 }, { 0x54, 0x01 }, { 0x55, 0x04 },
|
||||
|
@ -2036,7 +2037,7 @@ void genesys_init_sensor_tables()
|
|||
{ 0x80, 0x20 },
|
||||
}, {}
|
||||
},
|
||||
{ { 1600 }, 4800, Ratio{1, 2}, 14400, 10, { ScanMethod::FLATBED }, {
|
||||
{ { 1600 }, 4800, Ratio{1, 2}, 14400, 10, 8, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x11 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa1 },
|
||||
{ 0x52, 0x0b }, { 0x53, 0x0e }, { 0x54, 0x11 }, { 0x55, 0x02 },
|
||||
|
@ -2050,7 +2051,7 @@ void genesys_init_sensor_tables()
|
|||
{ 0x03, 0x1f },
|
||||
}
|
||||
},
|
||||
{ { 3200 }, 4800, Ratio{1, 1}, 28800, 20, { ScanMethod::FLATBED }, {
|
||||
{ { 3200 }, 4800, Ratio{1, 1}, 28800, 20, -2, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x20 }, { 0x1d, 0x84 }, { 0x1e, 0xa1 },
|
||||
{ 0x52, 0x02 }, { 0x53, 0x05 }, { 0x54, 0x08 }, { 0x55, 0x0b },
|
||||
|
@ -2064,8 +2065,8 @@ void genesys_init_sensor_tables()
|
|||
{ 0x03, 0x1f },
|
||||
},
|
||||
},
|
||||
{ { 400 }, 2400, Ratio{1, 4}, 14400, 2, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ { 400 }, 2400, Ratio{1, 4}, 14400, 2, 0, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x13 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d }, { 0x53, 0x10 }, { 0x54, 0x01 }, { 0x55, 0x04 },
|
||||
|
@ -2077,8 +2078,8 @@ void genesys_init_sensor_tables()
|
|||
{ 0x80, 0x20 },
|
||||
}, {}
|
||||
},
|
||||
{ { 800 }, 4800, Ratio{1, 4}, 14400, 5, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ { 800 }, 4800, Ratio{1, 4}, 14400, 5, 13, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x13 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d }, { 0x53, 0x10 }, { 0x54, 0x01 }, { 0x55, 0x04 },
|
||||
|
@ -2090,8 +2091,8 @@ void genesys_init_sensor_tables()
|
|||
{ 0x80, 0x20 },
|
||||
}, {}
|
||||
},
|
||||
{ { 1600 }, 4800, Ratio{1, 2}, 28800, 10, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ { 1600 }, 4800, Ratio{1, 2}, 28800, 10, 8, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x11 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0b }, { 0x53, 0x0e }, { 0x54, 0x11 }, { 0x55, 0x02 },
|
||||
|
@ -2105,8 +2106,8 @@ void genesys_init_sensor_tables()
|
|||
{ 0x03, 0x1f },
|
||||
},
|
||||
},
|
||||
{ { 3200 }, 4800, Ratio{1, 1}, 28800, 20, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ { 3200 }, 4800, Ratio{1, 1}, 28800, 20, 10, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x20 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x02 }, { 0x53, 0x05 }, { 0x54, 0x08 }, { 0x55, 0x0b },
|
||||
|
@ -2127,11 +2128,12 @@ void genesys_init_sensor_tables()
|
|||
for (auto method : setting.methods)
|
||||
{for (auto resolution : setting.resolutions.values()) {
|
||||
sensor.resolutions = { resolution };
|
||||
sensor.shading_resolution = std::max(800u, resolution);
|
||||
sensor.shading_resolution = resolution;
|
||||
sensor.register_dpiset = setting.register_dpiset;
|
||||
sensor.pixel_count_ratio = setting.pixel_count_ratio;
|
||||
sensor.exposure_lperiod = setting.exposure_lperiod;
|
||||
sensor.output_pixel_offset = setting.output_pixel_offset;
|
||||
sensor.shading_pixel_offset = setting.shading_pixel_offset;
|
||||
sensor.method = method;
|
||||
sensor.custom_regs = setting.extra_custom_regs;
|
||||
sensor.custom_fe_regs = setting.custom_fe_regs;
|
||||
|
@ -2162,7 +2164,7 @@ void genesys_init_sensor_tables()
|
|||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
int exposure_lperiod;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
std::vector<ScanMethod> methods;
|
||||
GenesysRegisterSettingSet extra_custom_regs;
|
||||
GenesysRegisterSettingSet custom_fe_regs;
|
||||
|
@ -2214,7 +2216,7 @@ void genesys_init_sensor_tables()
|
|||
},
|
||||
{},
|
||||
},
|
||||
{ { 300 }, 1200, 45000, 1, { ScanMethod::TRANSPARENCY,
|
||||
{ { 300 }, 1200, 45000, 6, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x0c, 0x00 },
|
||||
{ 0x16, 0x13 }, { 0x17, 0x0a }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
|
@ -2230,7 +2232,7 @@ void genesys_init_sensor_tables()
|
|||
},
|
||||
{},
|
||||
},
|
||||
{ { 600 }, 2400, 45000, 2, { ScanMethod::TRANSPARENCY,
|
||||
{ { 600 }, 2400, 45000, 11, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x0c, 0x00 },
|
||||
{ 0x16, 0x13 }, { 0x17, 0x0a }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
|
@ -2246,7 +2248,7 @@ void genesys_init_sensor_tables()
|
|||
},
|
||||
{},
|
||||
},
|
||||
{ { 1200 }, 4800, 45000, 5, { ScanMethod::TRANSPARENCY,
|
||||
{ { 1200 }, 4800, 45000, 23, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x0c, 0x00 },
|
||||
{ 0x16, 0x13 }, { 0x17, 0x0a }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
|
@ -2278,8 +2280,8 @@ void genesys_init_sensor_tables()
|
|||
},
|
||||
{},
|
||||
},
|
||||
{ { 4800 }, 4800, 45000, 20, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ { 4800 }, 4800, 45000, -1982, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x0c, 0x00 },
|
||||
{ 0x16, 0x13 }, { 0x17, 0x15 }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x61 }, { 0x1d, 0x75 },
|
||||
|
@ -2352,7 +2354,7 @@ void genesys_init_sensor_tables()
|
|||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpihw;
|
||||
unsigned shading_factor;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -3144,7 +3146,7 @@ void genesys_init_sensor_tables()
|
|||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpihw;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -3217,7 +3219,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned ccd_size_divisor;
|
||||
unsigned shading_resolution;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
unsigned exposure_lperiod;
|
||||
unsigned register_dpiset;
|
||||
GenesysRegisterSettingSet custom_fe_regs;
|
||||
|
@ -3305,7 +3307,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned ccd_size_divisor;
|
||||
unsigned shading_resolution;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
unsigned register_dpiset;
|
||||
};
|
||||
|
||||
|
@ -3360,7 +3362,7 @@ void genesys_init_sensor_tables()
|
|||
{
|
||||
ValueFilterAny<unsigned> resolutions;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -3430,7 +3432,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned ccd_size_divisor;
|
||||
unsigned shading_resolution;
|
||||
Ratio pixel_count_ratio;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
unsigned exposure_lperiod;
|
||||
unsigned register_dpiset;
|
||||
};
|
||||
|
@ -3493,7 +3495,7 @@ void genesys_init_sensor_tables()
|
|||
ValueFilterAny<unsigned> resolutions;
|
||||
ScanMethod method;
|
||||
unsigned register_dpiset;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
@ -3667,7 +3669,7 @@ void genesys_init_sensor_tables()
|
|||
unsigned register_dpiset;
|
||||
unsigned shading_resolution;
|
||||
unsigned shading_factor;
|
||||
unsigned output_pixel_offset;
|
||||
int output_pixel_offset;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
|
|
Ładowanie…
Reference in New Issue