genesys: Move host-side calibration setting to the sensor

merge-requests/340/head
Povilas Kanapickas 2020-02-15 14:12:39 +02:00
rodzic d72e07c671
commit b2ebbba41a
10 zmienionych plików z 26 dodań i 17 usunięć

Wyświetl plik

@ -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)

Wyświetl plik

@ -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)

Wyświetl plik

@ -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 {

Wyświetl plik

@ -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))
{

Wyświetl plik

@ -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'

Wyświetl plik

@ -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);

Wyświetl plik

@ -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": "")

Wyświetl plik

@ -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);

Wyświetl plik

@ -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;

Wyświetl plik

@ -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 },