diff --git a/backend/genesys/enums.h b/backend/genesys/enums.h index 3a8b8aaf8..eac239a22 100644 --- a/backend/genesys/enums.h +++ b/backend/genesys/enums.h @@ -481,11 +481,8 @@ enum class ModelFlag : unsigned // the scanner always uses maximum hwdpi to setup the sensor FULL_HWDPI_MODE = 1 << 19, - // scanner calibration is handled on the host side - CALIBRATION_HOST_SIDE = 1 << 21, - // the scanner outputs 16-bit data that is byte-inverted - INVERTED_16BIT_DATA = 1 << 22, + INVERTED_16BIT_DATA = 1 << 20, }; inline ModelFlag operator|(ModelFlag left, ModelFlag right) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 081a037be..d69480805 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -506,10 +506,6 @@ void sanei_genesys_init_shading_data(Genesys_Device* dev, const Genesys_Sensor& { DBG_HELPER_ARGS(dbg, "pixels_per_line: %d", pixels_per_line); - if (has_flag(dev->model->flags, ModelFlag::CALIBRATION_HOST_SIDE)) { - return; - } - int channels; int i; @@ -2532,7 +2528,7 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_ { DBG_HELPER(dbg); - if (has_flag(dev->model->flags, ModelFlag::CALIBRATION_HOST_SIDE)) { + if (sensor.use_host_side_calib) { return; } @@ -4709,7 +4705,7 @@ static void probe_genesys_devices() of Genesys_Calibration_Cache as is. */ static const char* CALIBRATION_IDENT = "sane_genesys"; -static const int CALIBRATION_VERSION = 25; +static const int CALIBRATION_VERSION = 26; bool read_calibration(std::istream& str, Genesys_Device::Calibration& calibration, const std::string& path) diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 0b546af6f..e18fa9577 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -1056,7 +1056,7 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens r = sanei_genesys_get_address (reg, REG_0x01); if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) || has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION) || - has_flag(dev->model->flags, ModelFlag::CALIBRATION_HOST_SIDE)) + session.use_host_side_calib) { r->value &= ~REG_0x01_DVDSET; } else { diff --git a/backend/genesys/low.cpp b/backend/genesys/low.cpp index f45432029..13e8cb95e 100644 --- a/backend/genesys/low.cpp +++ b/backend/genesys/low.cpp @@ -1186,6 +1186,8 @@ void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Se s.enable_ledadd = (s.params.channels == 1 && dev->model->is_cis && dev->settings.true_gray); } + s.use_host_side_calib = sensor.use_host_side_calib; + if (dev->model->asic_type == AsicType::GL841 || dev->model->asic_type == AsicType::GL843) { @@ -1349,7 +1351,7 @@ void build_image_pipeline(Genesys_Device* dev, const ScanSession& session) "_3_after_stagger.pnm"); } - if (has_flag(dev->model->flags, ModelFlag::CALIBRATION_HOST_SIDE) && + if (session.use_host_side_calib && !has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION) && !has_flag(session.params.flags, ScanFlag::DISABLE_SHADING)) { diff --git a/backend/genesys/sensor.cpp b/backend/genesys/sensor.cpp index b6fec0117..777112b3e 100644 --- a/backend/genesys/sensor.cpp +++ b/backend/genesys/sensor.cpp @@ -157,6 +157,7 @@ std::ostream& operator<<(std::ostream& out, const Genesys_Sensor& sensor) << " segment_order: " << format_indent_braced_list(4, format_vector_unsigned(4, sensor.segment_order)) << '\n' << " stagger_config: " << format_indent_braced_list(4, sensor.stagger_config) << '\n' + << " use_host_side_calib: " << sensor.use_host_side_calib << '\n' << " custom_base_regs: " << format_indent_braced_list(4, sensor.custom_base_regs) << '\n' << " custom_regs: " << format_indent_braced_list(4, sensor.custom_regs) << '\n' << " custom_fe_regs: " << format_indent_braced_list(4, sensor.custom_fe_regs) << '\n' diff --git a/backend/genesys/sensor.h b/backend/genesys/sensor.h index 0906c3a3c..30993bdff 100644 --- a/backend/genesys/sensor.h +++ b/backend/genesys/sensor.h @@ -399,6 +399,9 @@ struct Genesys_Sensor { // high-enough resolution, every other pixel column is shifted StaggerConfig stagger_config; + // True if calibration should be performed on host-side + bool use_host_side_calib = false; + GenesysRegisterSettingSet custom_base_regs; // gl646-specific GenesysRegisterSettingSet custom_regs; GenesysRegisterSettingSet custom_fe_regs; @@ -460,6 +463,7 @@ struct Genesys_Sensor { segment_size == other.segment_size && segment_order == other.segment_order && stagger_config == other.stagger_config && + use_host_side_calib == other.use_host_side_calib && custom_base_regs == other.custom_base_regs && custom_regs == other.custom_regs && custom_fe_regs == other.custom_fe_regs && @@ -493,6 +497,8 @@ void serialize(Stream& str, Genesys_Sensor& x) serialize_newline(str); serialize(str, x.stagger_config); serialize_newline(str); + serialize(str, x.use_host_side_calib); + serialize_newline(str); serialize(str, x.custom_base_regs); serialize_newline(str); serialize(str, x.custom_regs); diff --git a/backend/genesys/settings.cpp b/backend/genesys/settings.cpp index 13ac1a48b..35c417e03 100644 --- a/backend/genesys/settings.cpp +++ b/backend/genesys/settings.cpp @@ -129,6 +129,7 @@ bool ScanSession::operator==(const ScanSession& other) const buffer_size_shrink == other.buffer_size_shrink && buffer_size_out == other.buffer_size_out && enable_ledadd == other.enable_ledadd && + use_host_side_calib == other.use_host_side_calib && pipeline_needs_reorder == other.pipeline_needs_reorder && pipeline_needs_ccd == other.pipeline_needs_ccd && pipeline_needs_shrink == other.pipeline_needs_shrink; @@ -165,6 +166,8 @@ std::ostream& operator<<(std::ostream& out, const ScanSession& session) << " buffer_size_read: " << session.buffer_size_lines << '\n' << " buffer_size_shrink: " << session.buffer_size_shrink << '\n' << " buffer_size_out: " << session.buffer_size_out << '\n' + << " enable_ledadd: " << session.enable_ledadd << '\n' + << " use_host_side_calib: " << session.use_host_side_calib << '\n' << " filters: " << (session.pipeline_needs_reorder ? " reorder": "") << (session.pipeline_needs_ccd ? " ccd": "") diff --git a/backend/genesys/settings.h b/backend/genesys/settings.h index 4e3266772..0dc20707e 100644 --- a/backend/genesys/settings.h +++ b/backend/genesys/settings.h @@ -309,6 +309,9 @@ struct ScanSession { // whether to enable ledadd functionality bool enable_ledadd = false; + // whether calibration should be performed host-side + bool use_host_side_calib = false; + // what pipeline modifications are needed bool pipeline_needs_reorder = false; bool pipeline_needs_ccd = false; @@ -364,6 +367,7 @@ void serialize(Stream& str, ScanSession& x) serialize(str, x.buffer_size_shrink); serialize(str, x.buffer_size_out); serialize(str, x.enable_ledadd); + serialize(str, x.use_host_side_calib); serialize(str, x.pipeline_needs_reorder); serialize(str, x.pipeline_needs_ccd); serialize(str, x.pipeline_needs_shrink); diff --git a/backend/genesys/tables_model.cpp b/backend/genesys/tables_model.cpp index 897389450..4a3b8c128 100644 --- a/backend/genesys/tables_model.cpp +++ b/backend/genesys/tables_model.cpp @@ -2621,7 +2621,6 @@ void genesys_init_usb_device_tables() ModelFlag::DARK_CALIBRATION | ModelFlag::OFFSET_CALIBRATION | ModelFlag::SHADING_REPARK | - ModelFlag::CALIBRATION_HOST_SIDE | ModelFlag::INVERTED_16BIT_DATA; model.shading_lines = 7; @@ -2684,8 +2683,7 @@ void genesys_init_usb_device_tables() ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::OFFSET_CALIBRATION | - ModelFlag::SHADING_REPARK | - ModelFlag::CALIBRATION_HOST_SIDE; + ModelFlag::SHADING_REPARK; model.shading_lines = 7; model.shading_ta_lines = 50; @@ -2747,8 +2745,7 @@ void genesys_init_usb_device_tables() ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::OFFSET_CALIBRATION | - ModelFlag::SHADING_REPARK | - ModelFlag::CALIBRATION_HOST_SIDE; + ModelFlag::SHADING_REPARK; model.shading_lines = 7; model.shading_ta_lines = 50; diff --git a/backend/genesys/tables_sensor.cpp b/backend/genesys/tables_sensor.cpp index d561b8c50..4691d8ff0 100644 --- a/backend/genesys/tables_sensor.cpp +++ b/backend/genesys/tables_sensor.cpp @@ -3209,6 +3209,7 @@ void genesys_init_sensor_tables() sensor.gain_white_ref = 230; sensor.exposure = { 0x0000, 0x0000, 0x0000 }; sensor.stagger_config = StaggerConfig{7200, 4}; + sensor.use_host_side_calib = true; sensor.custom_regs = { { 0x08, 0x00 }, { 0x09, 0x00 }, @@ -3300,6 +3301,7 @@ void genesys_init_sensor_tables() sensor.exposure = { 0x0000, 0x0000, 0x0000 }; sensor.exposure_lperiod = 0x2f44; sensor.stagger_config = StaggerConfig{7200, 4}; + sensor.use_host_side_calib = true; sensor.custom_regs = { { 0x08, 0x00 }, { 0x09, 0x00 }, @@ -3374,6 +3376,7 @@ void genesys_init_sensor_tables() sensor.gain_white_ref = 230; sensor.exposure = { 0x0000, 0x0000, 0x0000 }; sensor.stagger_config = StaggerConfig{7200, 4}; + sensor.use_host_side_calib = true; sensor.custom_regs = { { 0x08, 0x00 }, { 0x09, 0x00 },