kopia lustrzana https://gitlab.com/sane-project/backends
Bug #300241: fix invers image on 3c/4c/6100C at 10 bit depth
rodzic
512dcd9fd0
commit
3e5bec5925
|
@ -42,6 +42,14 @@
|
|||
HP Scanner Control Language (SCL).
|
||||
*/
|
||||
|
||||
/*
|
||||
$Log$
|
||||
Revision 1.12 2003/10/09 19:32:50 kig-guest
|
||||
Bug #300241: fix invers image on 3c/4c/6100C at 10 bit depth
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/* pwd.h not available ? */
|
||||
#if (defined(__IBMC__) || defined(__IBMCPP__))
|
||||
#ifndef _AIX
|
||||
|
@ -2567,10 +2575,48 @@ _program_scanmode (HpOption this, HpScsi scsi, HpOptSet optset, HpData data)
|
|||
{
|
||||
enum hp_scanmode_e new_mode = hp_option_getint(this, data);
|
||||
int invert = 0;
|
||||
int fw_invert = 0; /* Flag: does firmware do inversion ? */
|
||||
int is_model_4c = 0;
|
||||
enum hp_device_compat_e compat;
|
||||
hp_bool_t disable_xpa = ( sanei_hp_optset_scan_type (optset, data)
|
||||
!= SCL_XPA_SCAN );
|
||||
|
||||
/* Disbaling XPA resets some settings in the scanner. */
|
||||
/* Seems that models 3c/4c/6100C invert image data at 10 bit by themself. */
|
||||
/* So we must not invert it by the invert command. */
|
||||
if ( (sanei_hp_device_probe (&compat,scsi) == SANE_STATUS_GOOD)
|
||||
&& (compat & HP_COMPAT_4C) )
|
||||
{
|
||||
is_model_4c = 1;
|
||||
DBG(3, "program_scanmode: model 3c/4c/6100C recognized\n");
|
||||
}
|
||||
|
||||
if (is_model_4c)
|
||||
{
|
||||
const HpDeviceInfo *info;
|
||||
int data_width;
|
||||
HpOption option;
|
||||
int is_preview = 0;
|
||||
|
||||
/* Preview uses maximum 8 bit. So we don't need to check data width */
|
||||
option = hp_optset_getByName (optset, SANE_NAME_PREVIEW);
|
||||
if ( option )
|
||||
is_preview = hp_option_getint (option, data);
|
||||
|
||||
info = sanei_hp_device_info_get ( sanei_hp_scsi_devicename (scsi) );
|
||||
|
||||
if ( (!is_preview)
|
||||
&& hp_optset_isEnabled (optset, data, SANE_NAME_BIT_DEPTH, info))
|
||||
{
|
||||
data_width = sanei_hp_optset_data_width (optset, data);
|
||||
if ((data_width == 10) || (data_width == 30))
|
||||
{
|
||||
fw_invert = 1;
|
||||
DBG(3, "program_scanmode: firmware is doing inversion\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Disabling XPA resets some settings in the scanner. */
|
||||
/* Scanmode is the first we program. So set XPA prior to scanmode */
|
||||
DBG(3, "program_scanmode: disable XPA = %d\n", (int)disable_xpa);
|
||||
sanei_hp_scl_set(scsi, SCL_XPA_DISABLE, disable_xpa);
|
||||
|
@ -2579,13 +2625,16 @@ _program_scanmode (HpOption this, HpScsi scsi, HpOptSet optset, HpData data)
|
|||
|
||||
switch (new_mode) {
|
||||
case HP_SCANMODE_GRAYSCALE:
|
||||
/* Make sure that it is not b/w. Correct data width will be set later */
|
||||
RETURN_IF_FAIL( sanei_hp_scl_set(scsi, SCL_DATA_WIDTH, 8) );
|
||||
invert = 1;
|
||||
if (fw_invert) invert = 0;
|
||||
/* For active XPA we use a tone map. Dont invert */
|
||||
if ( (!disable_xpa) && sanei_hp_is_active_xpa (scsi) ) invert = 0;
|
||||
break;
|
||||
case HP_SCANMODE_COLOR:
|
||||
invert = 1;
|
||||
if (fw_invert) invert = 0;
|
||||
/* For active XPA we use a tone map. Dont invert */
|
||||
if ( (!disable_xpa) && sanei_hp_is_active_xpa (scsi) ) invert = 0;
|
||||
break;
|
||||
|
|
Ładowanie…
Reference in New Issue