[sane-devel] Nikon CoolScan LS-9000 ED support

Rob Sims sane-z at robsims.com
Fri Jun 13 03:29:02 UTC 2008

On Tue, Apr 22, 2008 at 05:21:09PM -0600, Rob Sims wrote:
> As suggested by the web page, I'm posting here to let people know I'm
> working on a back end for the Nikon LS-9000 (patching coolscan2.c).  I
> also have a few questions.
> http://www.sane-project.org/unsupported/nikon-ls9000-ed.html

I've finally got something good enough for people to bang on.

From http://www.robsims.com/coolscan9k.html:
The existing coolscan2 backend did not support the Coolscan 9000. There was
also a newer driver in cvs called coolscan3, which had some cleanup and changed
infrared reading support from two front end passes to 4 channel, single pass.

This driver started with the coolscan3 driver as suggested by Alessandro
Zummo and grew quite a bit. First, this scanner is missing a few
features that the driver expected:

    * No 8 bit color
    * No lookup tables for gamma correction
    * No autoexposure (with or without white balance)
    * No (auto)loader

This scanner (as do other models in the family) has interchangeable film
holders. Some holders have device-defined scanning areas, and some have soft
defined areas. The frame areas can be user-defined for any holder, but defaults
to that for only the medium format holders.

I added a refresh button to allow quierying the device after changing holders,
as the front end doesn't poll. The backend now supports changing holders at

There is support for the dropout (infrared) channel. You can select RGB + Gray
for legacy front ends or RGBI for newer ones, or select infrared only,
primarily designed to help get the exposure right.

The Coolscan 9000 supports a "thumbnail" scan which basically scans the entire
holder at a low resolution. I brought that interface out via the preview; in
thumbnail mode, selections are scaled to the frames. Frame boundaries are drawn
on the preview as guides.

Since I was changing so much anyway, due to personal preference I changed the
exposure controls from a linear to a logarithmic interface. Now, the scale is
in "stops" which should be more intuitive for photographers.

The scanner supports quite a bit of capability reporting, which I added in
place of model-determined capabilities where possible. Because of this, I
turned on recognizing vendor "Nikon" and products beginning with "LS" as a
supported device.

I added a mode select option, and chose the standard names "Transparency
Adapter" and "Automatic Document Feeder" as a best fit. In the Transparency
Adapter mode, the frame counter is not advanced. In ADF mode, the current frame
is advanced after each scan. In ADF mode while thumbnails are active, if the
selection is entirely within a frame, the selection is translated to each
frame. If the selection covers area outside of a frame, whole frames are
scanned. Also, if a thumnail preview scan has been done, empty frames will be
skipped in ADF mode. This is primarily for use with the 35mm strip holder,
which has two strips of 6. If strips of 4 are placed in the holder, frames 5
and 6 are missing.

From the coolscan9k.c release notes:

    * Support both RGBI and two-pass infrared handling
    * Improved use of capability bits to mask options
    * Support for non-static device parameters (changeable film holders)
    * Remove a lot of miniscule mallocs
    * Support "thumbnail" mode where entire holder content is previewed
    * Exposure controls now in stops rather than linear
    * Support for user defineable frame locations (primarily intended for
      medium format support)
    * Support for frame grids rather than linear-only layout; some holders have
      parallel strips
    * A lot noisier in debug output
    * Support for non 8-bit capable scanners
    * Gather exposure info from inside multiple frames
    * ADF mode supports full-frame or partial frame scans; selection on
      thumbnail is translated.
    * Support for exposure analysis.
    * Support for infrared exposure analysis.

Testing was done primarily with xsane. Do not do multi-frame scanning with the
3+1 option; xsane does not allocate the gamma table and has additional issues
as well; however, manually scanning the frames one at a time works.

quiteinsane and kooka were briefly tested, but there have been changes in the
backend since then.

I can post the tarball here if requested, otherwise please fetch from

Criticise away - I can take it.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://lists.alioth.debian.org/pipermail/sane-devel/attachments/20080612/b00a8e34/attachment.pgp 

More information about the sane-devel mailing list