kopia lustrzana https://gitlab.com/sane-project/backends
Coarse calibration for first scan only" is off by default now. Added gamma
table factor option (SANE_CAP_EMULATED). Setup gamma to 2.0 by default. Fixed (hopefully) sigpipe when cancelling. No geometry quantization anymore (not necessary). Plustek 1248U: do linemode for every resolution, fix color correction. Added comments for every Model member in gt68xx_devices. Added Plustek UT16B and Genius Vivid3x to .desc. Added implementation for inverted offset for CCD scanners. Added Mustek ScanExpress 2400 USB. Well, at least it's detected. Added NEW marker to .desc.RELEASE_1_0_11_BRANCH
rodzic
e8fac410e1
commit
7f699acfe3
12
ChangeLog
12
ChangeLog
|
@ -6,6 +6,18 @@
|
|||
and epson. Added sanei_usb issues. Updated MacOS X and OS/2 porting
|
||||
issues.
|
||||
* README.darwin: Updated.
|
||||
* backend/gt68xx.c backend/gt68xx.conf backend/gt68xx_devices.c
|
||||
backend/gt68xx_high.c backend/gt68xx_high.h backend/gt68xx_low.c
|
||||
backend/gt68xx_low.h doc/sane-gt68xx.man doc/descriptions/gt68xx.desc
|
||||
doc/gt68xx/gt68xx.CHANGES:
|
||||
Coarse calibration for first scan only" is off by default now. Added gamma
|
||||
table factor option (SANE_CAP_EMULATED). Setup gamma to 2.0 by default.
|
||||
Fixed (hopefully) sigpipe when cancelling. No geometry quantization anymore
|
||||
(not necessary). Plustek 1248U: do linemode for every resolution, fix color
|
||||
correction. Added comments for every Model member in gt68xx_devices.
|
||||
Added Plustek UT16B and Genius Vivid3x to .desc. Added implementation for
|
||||
inverted offset for CCD scanners. Added Mustek ScanExpress 2400 USB. Well,
|
||||
at least it's detected. Added NEW marker to .desc.
|
||||
|
||||
2002-12-07 Abel Deuring <a.deuring@satzbau-gmbh.de>
|
||||
* sanei/sanei_scsi.c: improved error handling
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
#include "../include/sane/config.h"
|
||||
|
||||
#define BUILD 31
|
||||
#define BUILD 32
|
||||
#define MAX_DEBUG
|
||||
#define WARMUP_TIME 30
|
||||
|
||||
|
@ -79,6 +79,7 @@
|
|||
#include <unistd.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "../include/sane/sane.h"
|
||||
#include "../include/sane/sanei.h"
|
||||
|
@ -124,15 +125,15 @@ static SANE_String_Const source_list[] = {
|
|||
};
|
||||
|
||||
static SANE_Range x_range = {
|
||||
SANE_FIX (0), /* minimum */
|
||||
SANE_FIX (216), /* maximum */
|
||||
SANE_FIX (0.1) /* quantization */
|
||||
SANE_FIX (0.0), /* minimum */
|
||||
SANE_FIX (216.0), /* maximum */
|
||||
SANE_FIX (0.0) /* quantization */
|
||||
};
|
||||
|
||||
static SANE_Range y_range = {
|
||||
SANE_FIX (0), /* minimum */
|
||||
SANE_FIX (299), /* maximum */
|
||||
SANE_FIX (0.1) /* quantization */
|
||||
SANE_FIX (0.0), /* minimum */
|
||||
SANE_FIX (299.0), /* maximum */
|
||||
SANE_FIX (0.0) /* quantization */
|
||||
};
|
||||
|
||||
static const SANE_Range exposure_range = {
|
||||
|
@ -147,6 +148,12 @@ static const SANE_Range offset_range = {
|
|||
1 /* quantization */
|
||||
};
|
||||
|
||||
static SANE_Range gamma_range = {
|
||||
SANE_FIX (0.01), /* minimum */
|
||||
SANE_FIX (5.0), /* maximum */
|
||||
SANE_FIX (0.01) /* quantization */
|
||||
};
|
||||
|
||||
static const SANE_Range u8_range = {
|
||||
0, /* minimum */
|
||||
255, /* maximum */
|
||||
|
@ -488,7 +495,7 @@ init_options (GT68xx_Scanner * s)
|
|||
s->opt[OPT_COARSE_CAL_ONCE].type = SANE_TYPE_BOOL;
|
||||
s->opt[OPT_COARSE_CAL_ONCE].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_COARSE_CAL_ONCE].constraint_type = SANE_CONSTRAINT_NONE;
|
||||
s->val[OPT_COARSE_CAL_ONCE].w = SANE_TRUE;
|
||||
s->val[OPT_COARSE_CAL_ONCE].w = SANE_FALSE;
|
||||
|
||||
/* calibration */
|
||||
s->opt[OPT_QUALITY_CAL].name = SANE_NAME_QUALITY_CAL;
|
||||
|
@ -612,6 +619,18 @@ init_options (GT68xx_Scanner * s)
|
|||
s->opt[OPT_ENHANCEMENT_GROUP].size = 0;
|
||||
s->opt[OPT_ENHANCEMENT_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
|
||||
|
||||
/* internal gamma value */
|
||||
s->opt[OPT_GAMMA_VALUE].name = "gamma-value";
|
||||
s->opt[OPT_GAMMA_VALUE].title = SANE_I18N ("Gamma value");
|
||||
s->opt[OPT_GAMMA_VALUE].desc = SANE_I18N ("Sets the gamma value of all channels.");
|
||||
s->opt[OPT_GAMMA_VALUE].type = SANE_TYPE_FIXED;
|
||||
s->opt[OPT_GAMMA_VALUE].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_GAMMA_VALUE].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_GAMMA_VALUE].constraint.range = &gamma_range;
|
||||
s->opt[OPT_GAMMA_VALUE].cap |= SANE_CAP_EMULATED;
|
||||
s->val[OPT_GAMMA_VALUE].w = s->dev->gamma_value;
|
||||
|
||||
|
||||
/* threshold */
|
||||
s->opt[OPT_THRESHOLD].name = SANE_NAME_THRESHOLD;
|
||||
s->opt[OPT_THRESHOLD].title = SANE_TITLE_THRESHOLD;
|
||||
|
@ -1224,6 +1243,7 @@ sane_open (SANE_String_Const devicename, SANE_Handle * handle)
|
|||
*handle = s;
|
||||
s->scanning = SANE_FALSE;
|
||||
s->first_scan = SANE_TRUE;
|
||||
s->gamma_table = 0;
|
||||
RIE (init_options (s));
|
||||
|
||||
DBG (5, "sane_open: exit\n");
|
||||
|
@ -1333,6 +1353,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
case OPT_PREVIEW:
|
||||
case OPT_LAMP_ON:
|
||||
case OPT_AUTO_WARMUP:
|
||||
case OPT_GAMMA_VALUE:
|
||||
case OPT_THRESHOLD:
|
||||
case OPT_SCAN_EXPOS_TIME_R:
|
||||
case OPT_SCAN_EXPOS_TIME_G:
|
||||
|
@ -1396,6 +1417,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
case OPT_AUTO_WARMUP:
|
||||
case OPT_COARSE_CAL_ONCE:
|
||||
case OPT_QUALITY_CAL:
|
||||
case OPT_GAMMA_VALUE:
|
||||
case OPT_THRESHOLD:
|
||||
case OPT_SCAN_EXPOS_TIME_R:
|
||||
case OPT_SCAN_EXPOS_TIME_G:
|
||||
|
@ -1531,7 +1553,7 @@ sane_start (SANE_Handle handle)
|
|||
GT68xx_Scan_Request scan_request;
|
||||
GT68xx_Scan_Parameters scan_params;
|
||||
SANE_Status status;
|
||||
SANE_Int i;
|
||||
SANE_Int i, gamma_size;
|
||||
unsigned int *buffer_pointers[3];
|
||||
|
||||
DBG (5, "sane_start: start\n");
|
||||
|
@ -1571,6 +1593,26 @@ sane_start (SANE_Handle handle)
|
|||
s->dev->afe->b_pga = s->val[OPT_GAIN_B].w;
|
||||
}
|
||||
|
||||
s->dev->gamma_value = s->val[OPT_GAMMA_VALUE].w;
|
||||
gamma_size = s->params.depth == 16 ? 65536 : 256;
|
||||
s->gamma_table = malloc (sizeof (SANE_Int) * gamma_size);
|
||||
if (!s->gamma_table)
|
||||
{
|
||||
DBG (1, "sane_start: couldn't malloc %d bytes for gamma table\n",
|
||||
gamma_size);
|
||||
return SANE_STATUS_NO_MEM;
|
||||
}
|
||||
for (i = 0; i < gamma_size; i++)
|
||||
{
|
||||
s->gamma_table [i] =
|
||||
(gamma_size - 1) * pow (((double) i) / (gamma_size - 1),
|
||||
1.0 / SANE_UNFIX(s->dev->gamma_value)) + 0.5;
|
||||
if (s->gamma_table [i] > (gamma_size - 1))
|
||||
s->gamma_table [i] = (gamma_size - 1);
|
||||
if (s->gamma_table [i] < 0)
|
||||
s->gamma_table [i] = 0;
|
||||
}
|
||||
|
||||
s->calib = s->val[OPT_QUALITY_CAL].w;
|
||||
RIE (gt68xx_device_stop_scan (s->dev));
|
||||
|
||||
|
@ -1607,6 +1649,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
|
|||
static unsigned int *buffer_pointers[3];
|
||||
SANE_Int inflate_x;
|
||||
SANE_Bool lineart;
|
||||
SANE_Int i, color, colors;
|
||||
|
||||
if (!s)
|
||||
{
|
||||
|
@ -1655,6 +1698,11 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
|
|||
lineart = (strcmp (s->val[OPT_MODE].s, "Lineart") == 0)
|
||||
? SANE_TRUE : SANE_FALSE;
|
||||
|
||||
if (s->reader->params.color)
|
||||
colors = 3;
|
||||
else
|
||||
colors = 1;
|
||||
|
||||
while ((*len) < max_len)
|
||||
{
|
||||
if (s->byte_count >= s->reader->params.pixel_xs)
|
||||
|
@ -1670,15 +1718,22 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
|
|||
RIE (gt68xx_scanner_read_line (s, buffer_pointers));
|
||||
s->line++;
|
||||
s->byte_count = 0;
|
||||
if (s->dev->model->flags & GT68XX_FLAG_MIRROR_X)
|
||||
{ /* mirror lines */
|
||||
int i, color, colors;
|
||||
unsigned int swap;
|
||||
|
||||
if (s->reader->params.color)
|
||||
colors = 3;
|
||||
else
|
||||
colors = 1;
|
||||
/* Apply gamma */
|
||||
for (color = 0; color < colors; color++)
|
||||
for (i = 0; i < s->reader->pixels_per_line; i++)
|
||||
{
|
||||
if (s->reader->params.depth > 8)
|
||||
buffer_pointers[color][i] = s->gamma_table[buffer_pointers[color][i]];
|
||||
else
|
||||
buffer_pointers[color][i] =
|
||||
(s->gamma_table[buffer_pointers[color][i] >> 8] << 8) +
|
||||
(s->gamma_table[buffer_pointers[color][i] >> 8]);
|
||||
}
|
||||
/* mirror lines */
|
||||
if (s->dev->model->flags & GT68XX_FLAG_MIRROR_X)
|
||||
{
|
||||
unsigned int swap;
|
||||
|
||||
for (color = 0; color < colors; color++)
|
||||
{
|
||||
|
@ -1815,6 +1870,9 @@ sane_cancel (SANE_Handle handle)
|
|||
gt68xx_scanner_stop_scan (s);
|
||||
gt68xx_scanner_wait_for_positioning (s);
|
||||
gt68xx_device_carriage_home (s->dev);
|
||||
if (s->gamma_table)
|
||||
free (s->gamma_table);
|
||||
s->gamma_table = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -16,6 +16,9 @@ usb 0x05d8 0x4002
|
|||
#vendor "Trust"
|
||||
#model "Compact Scan USB 19200"
|
||||
|
||||
# Mustek ScanExpress 2400 USB
|
||||
#override "mustek-scanexpress-2400-usb"
|
||||
|
||||
# Artec Ultima 2000, Boeder SmartScan Slim Edition,
|
||||
# Medion/Lifetec/Tevion/Cytron MD/LT 9385 and MD 9458,
|
||||
# Trust Flat Scan USB 19200
|
||||
|
|
Plik diff jest za duży
Load Diff
|
@ -920,6 +920,7 @@ struct GT68xx_Afe_Values
|
|||
SANE_Int max_width;
|
||||
SANE_Int scan_dpi;
|
||||
SANE_Fixed start_black;
|
||||
SANE_Int offset_direction;
|
||||
};
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
@ -1037,9 +1038,9 @@ gt68xx_afe_ccd_adjust_channel_offset (GT68xx_Afe_Values * values,
|
|||
gt68xx_afe_ccd_calc (values, buffer);
|
||||
avg = (values->white + values->black) / 2;
|
||||
if (avg <= 122)
|
||||
*offset -= off_dist;
|
||||
*offset -= (off_dist * values->offset_direction);
|
||||
else if (avg >= 130)
|
||||
*offset += off_dist;
|
||||
*offset += (off_dist * values->offset_direction);
|
||||
DBG (5, "Offset: white=%d, black=%d, avg=%d, offset=%d\n",
|
||||
values->white, values->black, avg, *offset);
|
||||
}
|
||||
|
@ -1055,7 +1056,7 @@ gt68xx_afe_ccd_adjust_channel_white (GT68xx_Afe_Values * values,
|
|||
if ((values->white - values->black) < 230)
|
||||
{
|
||||
if (values->white > 253)
|
||||
(*offset)++;
|
||||
(*offset) += values->offset_direction;
|
||||
else
|
||||
(*pga)++;
|
||||
}
|
||||
|
@ -1085,7 +1086,7 @@ gt68xx_afe_ccd_adjust_channel_black (GT68xx_Afe_Values * values,
|
|||
if (values->white > 250)
|
||||
(*pga)--;
|
||||
else
|
||||
(*offset)--;
|
||||
(*offset) -= values->offset_direction;
|
||||
}
|
||||
else if (values->black < 15) /* just right */
|
||||
{
|
||||
|
@ -1095,7 +1096,7 @@ gt68xx_afe_ccd_adjust_channel_black (GT68xx_Afe_Values * values,
|
|||
done = 1;
|
||||
}
|
||||
else
|
||||
(*offset)++; /* too high */
|
||||
(*offset) += values->offset_direction; /* too high */
|
||||
|
||||
DBG (5, "Black: white=%d, black=%d, offset=%d, pga=%d\n",
|
||||
values->white, values->black, *offset, *pga);
|
||||
|
@ -1133,6 +1134,10 @@ gt68xx_afe_ccd_auto (GT68xx_Scanner * scanner,
|
|||
afe->r_pga = afe->g_pga = afe->b_pga = 0x00;
|
||||
afe->r_offset = afe->g_offset = afe->b_offset = 0x20;
|
||||
|
||||
values.offset_direction = 1;
|
||||
if (scanner->dev->model->flags & GT68XX_FLAG_OFFSET_INV)
|
||||
values.offset_direction = -1;
|
||||
|
||||
request.x0 = SANE_FIX (0.0);
|
||||
request.xs = scanner->dev->model->x_size;
|
||||
request.xdpi = 300;
|
||||
|
@ -1443,7 +1448,7 @@ gt68xx_afe_cis_calc_white (GT68xx_Afe_Values * values,
|
|||
static SANE_Bool
|
||||
gt68xx_afe_cis_adjust_offset (GT68xx_Afe_Values * values,
|
||||
unsigned int *black_buffer,
|
||||
SANE_Int offset_direction, SANE_Byte * offset)
|
||||
SANE_Byte * offset)
|
||||
{
|
||||
SANE_Int offs = 0, tmp_offset = *offset;
|
||||
SANE_Int low = 8, high = 22;
|
||||
|
@ -1451,16 +1456,16 @@ gt68xx_afe_cis_adjust_offset (GT68xx_Afe_Values * values,
|
|||
gt68xx_afe_cis_calc_black (values, black_buffer);
|
||||
if (values->black < low)
|
||||
{
|
||||
offs = (offset_direction * (low - values->black) / 4);
|
||||
offs = (values->offset_direction * (low - values->black) / 4);
|
||||
if (offs == 0)
|
||||
offs = offset_direction;
|
||||
offs = values->offset_direction;
|
||||
DBG (5, "black = %d (too low) --> offs = %d\n", values->black, offs);
|
||||
}
|
||||
else if (values->black > high)
|
||||
{
|
||||
offs = -(offset_direction * (values->black - high) / 7);
|
||||
offs = -(values->offset_direction * (values->black - high) / 7);
|
||||
if (offs == 0)
|
||||
offs = -offset_direction;
|
||||
offs = -values->offset_direction;
|
||||
DBG (5, "black = %d (too high) --> offs = %d\n", values->black, offs);
|
||||
}
|
||||
else
|
||||
|
@ -1635,7 +1640,6 @@ gt68xx_afe_cis_auto (GT68xx_Scanner * scanner)
|
|||
GT68xx_Afe_Values values;
|
||||
GT68xx_AFE_Parameters *afe = scanner->dev->afe;
|
||||
GT68xx_Exposure_Parameters *exposure = scanner->dev->exposure;
|
||||
SANE_Int offset_direction;
|
||||
SANE_Int done;
|
||||
SANE_Bool first = SANE_TRUE;
|
||||
unsigned int *r_buffer = 0, *g_buffer = 0, *b_buffer = 0;
|
||||
|
@ -1655,13 +1659,12 @@ gt68xx_afe_cis_auto (GT68xx_Scanner * scanner)
|
|||
return SANE_STATUS_NO_MEM;
|
||||
|
||||
total_count = 0;
|
||||
/* afe->r_pga = afe->g_pga = afe->b_pga = 0x06; */
|
||||
do
|
||||
{
|
||||
offset_count = 0;
|
||||
offset_direction = 1;
|
||||
values.offset_direction = 1;
|
||||
if (scanner->dev->model->flags & GT68XX_FLAG_OFFSET_INV)
|
||||
offset_direction = -1;
|
||||
values.offset_direction = -1;
|
||||
exposure->r_time = exposure->g_time = exposure->b_time = 0x157;
|
||||
do
|
||||
{
|
||||
|
@ -1671,17 +1674,13 @@ gt68xx_afe_cis_auto (GT68xx_Scanner * scanner)
|
|||
/* read black line */
|
||||
RIE (gt68xx_afe_cis_read_lines (&values, scanner, SANE_FALSE, first,
|
||||
r_buffer, g_buffer, b_buffer));
|
||||
/*offset_direction /= 2; */
|
||||
|
||||
done =
|
||||
gt68xx_afe_cis_adjust_offset (&values, r_buffer, offset_direction,
|
||||
&afe->r_offset);
|
||||
gt68xx_afe_cis_adjust_offset (&values, r_buffer, &afe->r_offset);
|
||||
done &=
|
||||
gt68xx_afe_cis_adjust_offset (&values, g_buffer, offset_direction,
|
||||
&afe->g_offset);
|
||||
gt68xx_afe_cis_adjust_offset (&values, g_buffer, &afe->g_offset);
|
||||
done &=
|
||||
gt68xx_afe_cis_adjust_offset (&values, b_buffer, offset_direction,
|
||||
&afe->b_offset);
|
||||
gt68xx_afe_cis_adjust_offset (&values, b_buffer, &afe->b_offset);
|
||||
|
||||
offset_count++;
|
||||
total_count++;
|
||||
|
|
|
@ -210,6 +210,7 @@ enum GT68xx_Option
|
|||
OPT_GAIN_B,
|
||||
|
||||
OPT_ENHANCEMENT_GROUP,
|
||||
OPT_GAMMA_VALUE,
|
||||
OPT_THRESHOLD,
|
||||
|
||||
OPT_GEOMETRY_GROUP,
|
||||
|
@ -258,6 +259,7 @@ struct GT68xx_Scanner
|
|||
struct timeval lamp_on_time; /**< Time when the lamp was turned on */
|
||||
struct timeval start_time; /**< Time when the scan was started */
|
||||
SANE_Int bpp_list[5]; /**< */
|
||||
SANE_Int *gamma_table; /**< Gray gamma table */
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -412,6 +412,8 @@ gt68xx_device_activate (GT68xx_Device * dev)
|
|||
|
||||
memcpy (dev->afe, &dev->model->afe_params, sizeof (*dev->afe));
|
||||
memcpy (dev->exposure, &dev->model->exposure, sizeof (*dev->exposure));
|
||||
dev->gamma_value = dev->model->default_gamma_value;
|
||||
|
||||
dev->active = SANE_TRUE;
|
||||
|
||||
return SANE_STATUS_GOOD;
|
||||
|
@ -1032,22 +1034,22 @@ gt68xx_device_read_finish (GT68xx_Device * dev)
|
|||
(long) dev->read_bytes_left);
|
||||
|
||||
#ifdef USE_FORK
|
||||
if (dev->shm_channel)
|
||||
{
|
||||
shm_channel_free (dev->shm_channel);
|
||||
dev->shm_channel = NULL;
|
||||
}
|
||||
|
||||
if (dev->reader_pid != 0)
|
||||
{
|
||||
int status;
|
||||
usleep (100000);
|
||||
/* usleep (100000);*/
|
||||
DBG (7, "gt68xx_device_read_finish: trying to kill reader process\n");
|
||||
kill (dev->reader_pid, SIGKILL);
|
||||
waitpid (dev->reader_pid, &status, 0);
|
||||
DBG (7, "gt68xx_device_read_finish: reader process killed\n");
|
||||
dev->reader_pid = 0;
|
||||
}
|
||||
if (dev->shm_channel)
|
||||
{
|
||||
shm_channel_free (dev->shm_channel);
|
||||
dev->shm_channel = NULL;
|
||||
}
|
||||
|
||||
#endif /* USE_FORK */
|
||||
|
||||
free (dev->read_buffer);
|
||||
|
|
|
@ -436,39 +436,48 @@ struct GT68xx_Model
|
|||
|
||||
GT68xx_Command_Set *command_set;
|
||||
|
||||
SANE_Int optical_xdpi;
|
||||
SANE_Int optical_ydpi;
|
||||
SANE_Int base_xdpi;
|
||||
SANE_Int base_ydpi;
|
||||
SANE_Int ydpi_force_line_mode;
|
||||
SANE_Bool constant_ydpi; /* Use base_ydpi for all resolutions */
|
||||
SANE_Int xdpi_values[MAX_RESOLUTIONS];
|
||||
SANE_Int ydpi_values[MAX_RESOLUTIONS];
|
||||
SANE_Int bpp_gray_values[MAX_DPI];
|
||||
SANE_Int bpp_color_values[MAX_DPI];
|
||||
SANE_Fixed x_offset; /* Start of scan area in mm */
|
||||
SANE_Fixed y_offset; /* Start of scan area in mm */
|
||||
SANE_Fixed x_size; /* Size of scan area in mm */
|
||||
SANE_Fixed y_size; /* Size of scan area in mm */
|
||||
SANE_Fixed y_offset_calib; /* Start of white strip in mm */
|
||||
SANE_Fixed x_offset_mark; /* Start of black mark in mm */
|
||||
SANE_Int optical_xdpi; /* maximum resolution in x-direction */
|
||||
SANE_Int optical_ydpi; /* maximum resolution in y-direction */
|
||||
SANE_Int base_xdpi; /* x-resolution used to calculate geometry */
|
||||
SANE_Int base_ydpi; /* y-resolution used to calculate geometry */
|
||||
SANE_Int ydpi_force_line_mode;/* if ydpi is equal or higher, use linemode */
|
||||
SANE_Bool constant_ydpi; /* Use base_ydpi for all resolutions */
|
||||
|
||||
SANE_Int xdpi_values[MAX_RESOLUTIONS]; /* possible x resolutions */
|
||||
SANE_Int ydpi_values[MAX_RESOLUTIONS]; /* possible y resolutions */
|
||||
SANE_Int bpp_gray_values[MAX_DPI]; /* possible depths in gray mode */
|
||||
SANE_Int bpp_color_values[MAX_DPI]; /* possible depths in color mode */
|
||||
|
||||
SANE_Fixed x_offset; /* Start of scan area in mm */
|
||||
SANE_Fixed y_offset; /* Start of scan area in mm */
|
||||
SANE_Fixed x_size; /* Size of scan area in mm */
|
||||
SANE_Fixed y_size; /* Size of scan area in mm */
|
||||
|
||||
SANE_Fixed y_offset_calib; /* Start of white strip in mm */
|
||||
SANE_Fixed x_offset_mark; /* Start of black mark in mm */
|
||||
|
||||
SANE_Fixed x_offset_ta; /* Start of scan area in TA mode in mm */
|
||||
SANE_Fixed y_offset_ta; /* Start of scan area in TA mode in mm */
|
||||
SANE_Fixed x_size_ta; /* Size of scan area in TA mode in mm */
|
||||
SANE_Fixed y_size_ta; /* Size of scan area in TA mode in mm */
|
||||
|
||||
SANE_Fixed y_offset_calib_ta; /* Start of white strip in TA mode in mm */
|
||||
|
||||
SANE_Int ld_shift_r;
|
||||
SANE_Int ld_shift_g;
|
||||
SANE_Int ld_shift_b;
|
||||
SANE_Int ld_shift_double;
|
||||
/* Line-distance correction (in pixel at optical_ydpi) for CCD scanners */
|
||||
SANE_Int ld_shift_r; /* red */
|
||||
SANE_Int ld_shift_g; /* green */
|
||||
SANE_Int ld_shift_b; /* blue */
|
||||
SANE_Int ld_shift_double; /* distance between two CCD lines of one color
|
||||
(only applicable for CCD with 6 lines) */
|
||||
|
||||
GT68xx_Color_Order line_mode_color_order;
|
||||
GT68xx_AFE_Parameters afe_params;
|
||||
GT68xx_Exposure_Parameters exposure;
|
||||
GT68xx_Color_Order line_mode_color_order; /* Order of the CCD/CIS colors */
|
||||
|
||||
GT68xx_AFE_Parameters afe_params; /* Default offset/gain */
|
||||
GT68xx_Exposure_Parameters exposure; /* Default exposure parameters */
|
||||
SANE_Fixed default_gamma_value; /* Default gamma value */
|
||||
|
||||
SANE_Bool is_cis; /* Is this a CIS or CCD scanner? */
|
||||
|
||||
SANE_Word flags; /* Which hacks are needed for this scanner? */
|
||||
/*@} */
|
||||
};
|
||||
|
@ -492,6 +501,7 @@ struct GT68xx_Device
|
|||
|
||||
GT68xx_AFE_Parameters *afe;
|
||||
GT68xx_Exposure_Parameters *exposure;
|
||||
SANE_Fixed gamma_value;
|
||||
|
||||
SANE_Bool read_active;
|
||||
SANE_Bool final_scan;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
:backend "gt68xx"
|
||||
:status :beta
|
||||
:version "1.0-31"
|
||||
:version "1.0-32"
|
||||
:new :yes
|
||||
:manpage "sane-gt68xx"
|
||||
:url "http://www.meier-geinitz.de/sane/gt68xx-backend/"
|
||||
:comment "Only the USB scanners mentioned below are supported. For other Mustek BearPaws, look at the Plustek backend."
|
||||
|
@ -66,6 +67,10 @@
|
|||
:status :alpha
|
||||
:comment "Basically works but margins are not correct. More reports welcome."
|
||||
|
||||
:model "ScanExpress 2400 USB"
|
||||
:interface "USB"
|
||||
:status :untested
|
||||
:comment "Should be detected but may need some more work in the code. Testers welcome."
|
||||
|
||||
:mfg "Plustek"
|
||||
:url "http://www.plustek.de/"
|
||||
|
@ -76,6 +81,11 @@
|
|||
:status :alpha
|
||||
:comment "Works up to 600 dpi in gray mode, try disabling calibration"
|
||||
|
||||
:model "OpticPro UT16B"
|
||||
:interface "USB"
|
||||
:status :untested
|
||||
:comment "Isn't detected yet mut may work some time in future. Testers welcome."
|
||||
|
||||
:mfg "Artec"
|
||||
:url "http://www.artecusa.com/"
|
||||
|
||||
|
@ -144,3 +154,11 @@
|
|||
:status :alpha
|
||||
:interface "USB"
|
||||
:comment "should work like the X70, but was reported to fail, more reports welcome"
|
||||
|
||||
:mfg "Genius"
|
||||
:url "http://www.genius-kye.com/"
|
||||
|
||||
:model "Colorpage Vivid3x"
|
||||
:status :untested
|
||||
:interface "USB"
|
||||
:comment "Not detected yet but should work when code is added"
|
||||
|
|
|
@ -1,3 +1,23 @@
|
|||
gt68xx.CHANGES -*-text-*-
|
||||
|
||||
V 1.0-32 (2002-12-08)
|
||||
|
||||
- "Coarse calibration for first scan only" is off by default now. As at least
|
||||
CIS calibration is faster now, it doesn't seem to be necessary and produces
|
||||
wrong images sometimes.
|
||||
- Added gamma table.
|
||||
- Setup gamma to 2.0 by default.
|
||||
- Fixed (hopefully) sigpipe when cancelling.
|
||||
- No geometry quantization anymore (not necessary). That should fix scanimage
|
||||
warnings.
|
||||
- Plustek 1248U: do linemode for every resolution, fix color correction.
|
||||
- Set SANE_CAP_EMULATED for gamma value.
|
||||
- Added comments for every Model member in gt68xx_devices.
|
||||
- Added Plustek UT16B and Genius Vivid3x to .desc.
|
||||
- Added implementation for inverted offset for CCD scanners.
|
||||
- Added Mustek ScanExpress 2400 USB. Well, at least it's detected.
|
||||
- Added NEW marker to .desc.
|
||||
|
||||
V 1.0-31 (2002-11-21)
|
||||
|
||||
- Changed 150 to 200 dpi for Mustek BearPaw 2400 TA.
|
||||
|
|
|
@ -37,6 +37,8 @@ Mustek ScanExpress A3 USB
|
|||
.br
|
||||
Mustek ScanExpress 1200 UB Plus
|
||||
.br
|
||||
Mustek ScanExpress 2400 USB
|
||||
.br
|
||||
Packard Bell Diamond 1200
|
||||
.br
|
||||
Plustek OpticPro 1248U
|
||||
|
|
Ładowanie…
Reference in New Issue