kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Move host-side calibration setting to the sensor
rodzic
d72e07c671
commit
b2ebbba41a
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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": "")
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 },
|
||||
|
|
Ładowanie…
Reference in New Issue