kopia lustrzana https://gitlab.com/sane-project/website
271 wiersze
9.1 KiB
HTML
271 wiersze
9.1 KiB
HTML
<!-- received="Sat Feb 27 13:10:49 1999 PST" -->
|
||
<!-- sent="Sat, 27 Feb 1999 22:10:13 +0100" -->
|
||
<!-- name="Ewald R. de Wit" -->
|
||
<!-- email="ewald@pobox.com" -->
|
||
<!-- subject="Ok here it is" -->
|
||
<!-- id="" -->
|
||
<!-- inreplyto="" -->
|
||
<title>sane-devel: Ok here it is</title>
|
||
<h1>Ok here it is</h1>
|
||
<b>Ewald R. de Wit</b> (<a href="mailto:ewald@pobox.com"><i>ewald@pobox.com</i></a>)<br>
|
||
<i>Sat, 27 Feb 1999 22:10:13 +0100</i>
|
||
<p>
|
||
<ul>
|
||
<li> <b>Messages sorted by:</b> <a href="date.html#209">[ date ]</a><a href="index.html#209">[ thread ]</a><a href="subject.html#209">[ subject ]</a><a href="author.html#209">[ author ]</a>
|
||
<!-- next="start" -->
|
||
<li> <b>Next message:</b> <a href="0210.html">Douglas Gilbert: "Announcement: Linux sg driver for testing"</a>
|
||
<li> <b>Previous message:</b> <a href="0208.html">Ewald R. de Wit: "Photosmart patch for better slide scanning"</a>
|
||
<!-- nextthread="start" -->
|
||
<!-- reply="end" -->
|
||
</ul>
|
||
<!-- body="start" -->
|
||
--zYM0uCDKw75PZbzx<br>
|
||
Content-Type: text/plain; charset=us-ascii<br>
|
||
<p>
|
||
I forgot the attachment but here it is.<br>
|
||
<p>
|
||
<pre>
|
||
--
|
||
-- Ewald
|
||
<p>
|
||
<p>
|
||
<p>
|
||
--zYM0uCDKw75PZbzx
|
||
Content-Type: text/plain; charset=us-ascii
|
||
Content-Disposition: attachment; filename=patch-photosmart-slide-scanning
|
||
<p>
|
||
Only in sane/backend: .libs
|
||
Only in sane/backend: Makefile
|
||
diff -X EXCLUDE-DIFF -u sane-1.00/backend/hp-handle.c sane/backend/hp-handle.c
|
||
--- sane-1.00/backend/hp-handle.c Sat Nov 14 22:16:10 1998
|
||
+++ sane/backend/hp-handle.c Sat Feb 27 00:58:12 1999
|
||
@@ -172,6 +172,7 @@
|
||
hp_handle_uploadParameters (HpHandle this, HpScsi scsi)
|
||
{
|
||
SANE_Parameters * p = &this->scan_params;
|
||
+ int data_width;
|
||
|
||
assert(scsi);
|
||
|
||
@@ -183,7 +184,9 @@
|
||
&p->bytes_per_line,0,0) );
|
||
RETURN_IF_FAIL( sanei_hp_scl_inquire(scsi, SCL_NUMBER_OF_LINES,
|
||
&p->lines,0,0));
|
||
-
|
||
+ RETURN_IF_FAIL( sanei_hp_scl_inquire(scsi, SCL_DATA_WIDTH,
|
||
+ &data_width,0,0));
|
||
+
|
||
switch (sanei_hp_optset_scanmode(this->dev->options, this->data)) {
|
||
case HP_SCANMODE_LINEART: /* Lineart */
|
||
case HP_SCANMODE_HALFTONE: /* Halftone */
|
||
@@ -196,7 +199,9 @@
|
||
break;
|
||
case HP_SCANMODE_COLOR: /* RGB */
|
||
p->format = SANE_FRAME_RGB;
|
||
- p->depth = 8;
|
||
+ /* p->depth = 8; */
|
||
+ p->depth = data_width/3;
|
||
+ DBG(1, "DATAWIDTH ========= %d\n", data_width);
|
||
break;
|
||
default:
|
||
assert(!"Aack");
|
||
diff -X EXCLUDE-DIFF -u sane-1.00/backend/hp-option.c sane/backend/hp-option.c
|
||
--- sane-1.00/backend/hp-option.c Sat Nov 14 23:09:56 1998
|
||
+++ sane/backend/hp-option.c Sat Feb 27 00:59:39 1999
|
||
@@ -891,6 +891,29 @@
|
||
return SANE_STATUS_GOOD;
|
||
}
|
||
|
||
+/* pseudo probe for exposure times in Photosmart */
|
||
+static SANE_Status
|
||
+_probe_ps_exposure_time (_HpOption this, HpScsi scsi, HpOptSet optset, HpData data)
|
||
+{
|
||
+ int minval = 0, maxval = 9, val = 3;
|
||
+ HpChoice choices;
|
||
+
|
||
+ choices = _make_choice_list(this->descriptor->choices, minval, maxval);
|
||
+ if (choices && !choices->name) /* FIXME: hack */
|
||
+ return SANE_STATUS_NO_MEM;
|
||
+
|
||
+ if (!(this->data_acsr = sanei_hp_accessor_choice_new(data, choices)))
|
||
+ return SANE_STATUS_NO_MEM;
|
||
+ sanei_hp_accessor_setint(this->data_acsr, data, val);
|
||
+
|
||
+ _set_stringlist(this, data,
|
||
+ sanei_hp_accessor_choice_strlist((HpAccessorChoice)this->data_acsr,
|
||
+ 0, 0));
|
||
+ _set_size(this, data,
|
||
+ sanei_hp_accessor_choice_maxsize((HpAccessorChoice)this->data_acsr));
|
||
+ return SANE_STATUS_GOOD;
|
||
+}
|
||
+
|
||
static SANE_Status
|
||
_probe_mirror_horiz (_HpOption this, HpScsi scsi, HpOptSet optset, HpData data)
|
||
{
|
||
@@ -1575,6 +1598,58 @@
|
||
return (status);
|
||
}
|
||
|
||
+/* The exposure time of the HP Photosmart can be changed by overwriting some headers
|
||
+ of the calibration data. The scanner uses a slower stepping speed for higher
|
||
+ exposure times */
|
||
+static SANE_Status
|
||
+_program_ps_exposure_time (HpOption this, HpScsi scsi, HpOptSet optset, HpData data)
|
||
+{
|
||
+ SANE_Status status = SANE_STATUS_GOOD;
|
||
+ size_t calib_size;
|
||
+ char *calib_buf;
|
||
+ int i;
|
||
+ int option = hp_option_getint(this, data);
|
||
+ char *exposure[] = {"\x00\x64\x00\x64\x00\x64", /* 100% */
|
||
+ "\x00\x7d\x00\x7d\x00\x7d", /* 125% */
|
||
+ "\x00\x96\x00\x96\x00\x96", /* 150% */
|
||
+ "\x00\xaf\x00\xaf\x00\xaf", /* 175% */
|
||
+ "\x00\xc0\x00\xc0\x00\xc0", /* 200% */
|
||
+ "\x00\xe1\x00\xe1\x00\xe1", /* 225% */
|
||
+ "\x00\xfa\x00\xfa\x00\xfa", /* 250% */
|
||
+ "\x01\x13\x01\x13\x01\x13", /* 275% */
|
||
+ "\x01\x24\x01\x24\x01\x24", /* 300% */
|
||
+ "\x00\x64\x00\xc0\x01\x24"}; /* Negatives */
|
||
+ /* Negatives get some extra blue to penetrate the orange mask and less
|
||
+ red to not saturate the red channel; R:G:B = 100:200:300 */
|
||
+
|
||
+ if ((option < 0) || (option > 9)) return 0;
|
||
+ RETURN_IF_FAIL ( sanei_hp_scl_upload_binary (scsi, SCL_CALIB_MAP,
|
||
+ &calib_size, &calib_buf) );
|
||
+
|
||
+ DBG(3, "_program_ps_exposure_time: Got %lu bytes of calibration data\n",
|
||
+ (unsigned long) calib_size);
|
||
+
|
||
+ for (i = 0; i < 9; i++)
|
||
+ calib_buf[24 + i] = exposure[option][i];
|
||
+
|
||
+ status = sanei_hp_scl_download ( scsi, SCL_CALIB_MAP, calib_buf,
|
||
+ (size_t) calib_size);
|
||
+
|
||
+ /* see what the scanner did to our alterations */
|
||
+ /*
|
||
+ RETURN_IF_FAIL ( sanei_hp_scl_upload_binary (scsi, SCL_CALIB_MAP,
|
||
+ &calib_size, &calib_buf) );
|
||
+
|
||
+ for (i = 0; i < 9; i++)
|
||
+ DBG(1, ">%x ", (unsigned char) calib_buf[24 + i]);
|
||
+ */
|
||
+
|
||
+ sanei_hp_free (calib_buf);
|
||
+
|
||
+ return (status);
|
||
+}
|
||
+
|
||
+
|
||
static SANE_Status
|
||
_program_scanmode (HpOption this, HpScsi scsi, HpOptSet optset, HpData data)
|
||
{
|
||
@@ -1697,7 +1772,6 @@
|
||
|
||
/* If we dont have the media button, we should have calibrate */
|
||
if ( !media ) return 1;
|
||
-
|
||
return hp_option_getint(media, data) == HP_MEDIA_PRINT;
|
||
}
|
||
|
||
@@ -2028,7 +2102,7 @@
|
||
static const struct hp_choice_s _media_choices[] = {
|
||
{ HP_MEDIA_PRINT, "Print" },
|
||
{ HP_MEDIA_SLIDE, "Slide" },
|
||
- { HP_MEDIA_NEGATIVE, "Negative" },
|
||
+ { HP_MEDIA_NEGATIVE, "Film Strip" },
|
||
{ 0, 0 }
|
||
};
|
||
static const struct hp_option_descriptor_s MEDIA[1] = {{
|
||
@@ -2042,6 +2116,32 @@
|
||
1, 1, 1, 0, SCL_MEDIA, _media_choices
|
||
}};
|
||
|
||
+static const struct hp_choice_s _data_widths[] = {
|
||
+ {24, "24"}, {30, "30"}, {36, "36"}, {42, "42"}, {48, "48"}, {0, 0}
|
||
+};
|
||
+
|
||
+static const struct hp_option_descriptor_s DATA_WIDTH[1] = {{
|
||
+ SCANNER_OPTION(DATA_WIDTH, STRING, NONE),
|
||
+ REQUIRES (HP_COMPAT_PS),
|
||
+ _probe_choice, _program_generic, 0,
|
||
+ 0, 0, 0, 0, SCL_DATA_WIDTH, _data_widths
|
||
+}};
|
||
+
|
||
+static const struct hp_choice_s _ps_exposure_times[] = {
|
||
+ {0, "100%"}, {1, "125%"}, {2, "150%"},
|
||
+ {3, "175%"}, {4, "200%"}, {5, "225%"},
|
||
+ {6, "250%"}, {7, "275%"}, {8, "300%"},
|
||
+ {9, "Negative"}, {0, 0}
|
||
+};
|
||
+
|
||
+/* Photosmart exposure time */
|
||
+static const struct hp_option_descriptor_s PS_EXPOSURE_TIME[1] = {{
|
||
+ SCANNER_OPTION(PS_EXPOSURE_TIME, STRING, NONE),
|
||
+ REQUIRES( HP_COMPAT_PS ),
|
||
+ _probe_ps_exposure_time, _program_ps_exposure_time, 0,
|
||
+ 0, 0, 0, 0, 0, _ps_exposure_times
|
||
+}};
|
||
+
|
||
/* There is no inquire ID-for the calibrate command. */
|
||
/* So here we need the requiries. */
|
||
static const struct hp_option_descriptor_s CALIBRATE[1] = {{
|
||
@@ -2195,7 +2295,7 @@
|
||
#endif
|
||
HALFTONE_PATTERN_8x8, HORIZONTAL_DITHER_8x8,
|
||
|
||
- SCAN_SPEED, SMOOTHING, MEDIA, CALIBRATE, UNLOAD,
|
||
+ SCAN_SPEED, SMOOTHING, MEDIA, PS_EXPOSURE_TIME, DATA_WIDTH, CALIBRATE, UNLOAD,
|
||
|
||
GEOMETRY_GROUP,
|
||
SCAN_TL_X, SCAN_TL_Y, SCAN_BR_X, SCAN_BR_Y,
|
||
@@ -2593,3 +2693,4 @@
|
||
return 0;
|
||
return hp_option_saneoption(opt, data);
|
||
}
|
||
+
|
||
diff -X EXCLUDE-DIFF -u sane-1.00/backend/hp-option.h sane/backend/hp-option.h
|
||
--- sane-1.00/backend/hp-option.h Sat Nov 14 22:05:09 1998
|
||
+++ sane/backend/hp-option.h Sat Feb 27 00:24:22 1999
|
||
@@ -88,6 +88,21 @@
|
||
# define SANE_DESC_MEDIA "Set type of media."
|
||
#endif
|
||
|
||
+#ifndef SANE_NAME_PS_EXPOSURE_TIME
|
||
+# define SANE_NAME_PS_EXPOSURE_TIME "ps-exposure-time"
|
||
+# define SANE_TITLE_PS_EXPOSURE_TIME "Exposure time"
|
||
+# define SANE_DESC_PS_EXPOSURE_TIME "A longer exposure time lets the scanner \
|
||
+collect more light. Suggested use is 175% for prints, \
|
||
+150% for normal slides; 300% for dark slides and \"Negatives\" for \
|
||
+negative film"
|
||
+#endif
|
||
+
|
||
+#ifndef SANE_NAME_DATA_WIDTH
|
||
+# define SANE_NAME_DATA_WIDTH "data-width"
|
||
+# define SANE_TITLE_DATA_WIDTH "Data width"
|
||
+# define SANE_DESC_DATA_WIDTH "Precision of the analog to digital conversion, in bits"
|
||
+#endif
|
||
+
|
||
#ifndef SANE_NAME_MATRIX_TYPE
|
||
# define SANE_NAME_MATRIX_TYPE "matrix-type"
|
||
# define SANE_TITLE_MATRIX_TYPE "Color Matrix"
|
||
Only in sane/backend: hp-s.c
|
||
<p>
|
||
--zYM0uCDKw75PZbzx--
|
||
<p>
|
||
<pre>
|
||
--
|
||
Source code, list archive, and docs: <a href="http://www.mostang.com/sane/">http://www.mostang.com/sane/</a>
|
||
To unsubscribe: echo unsubscribe sane-devel | mail <a href="mailto:majordomo@mostang.com">majordomo@mostang.com</a>
|
||
</pre>
|
||
<!-- body="end" -->
|
||
<p>
|
||
<ul>
|
||
<!-- next="start" -->
|
||
<li> <b>Next message:</b> <a href="0210.html">Douglas Gilbert: "Announcement: Linux sg driver for testing"</a>
|
||
<li> <b>Previous message:</b> <a href="0208.html">Ewald R. de Wit: "Photosmart patch for better slide scanning"</a>
|
||
<!-- nextthread="start" -->
|
||
<!-- reply="end" -->
|
||
</ul>
|