IBM Ultraport Camera Linux Driver
Newest: a patch is available against the 2.4.20 kernel series. This patch has been submitted and hopefully will stay in the stock kernel... To patch, download this file as text and save it in your kernel tree in the /drivers directory. Run patch -p0 < ultracam.20030608.krnl2420.patch - it should hopefully succeed with no errors. Now cd .. && make mrproper. Go through the configuration process with make menuconfig and be sure to select the Ultracam driver in the USB section. make modules should build the requisite modules.
Note: The usbvideo package is no longer recommended, as the stock kernel interface has changed. It is recommended that you follow the patching procedure outlined above until the patch is accepted into the main kernel. For general usage, modprobe ultracam should suffice, loading usbvideo in the process.
Sets the debugging level. Zero turns off all but the most urgent messages.
Sets the white balance level. 0 is maximum blue, 48 is maximum red. Default
is -1, which is automatic white balance.
The automatic white balancing algorithm attempts to guess how far off it is
from 'normal' white balance. This parameter sets the maximum jump it will make
in order to correct its white balance. Higher values provide quicker white
balancing, but can be more noticable and can also create feedback loops (don't
believe me? try it yourself!). Default is 1 (makes very small jumps.)
Sets CCD sharpness. Range is 0 to 4, with higher numbers meaning more sharp.
Default is 3.
Bitfield specifying various flags related to the driver.
Flags currently implemented are:
1 (2): Black and White mode
3 (8): Show Stats (an example of this can be seen on my
4 (16): Test pattern
- Explanation of the stats can be found here.
Current known Bugs and Limitations
- BRIGHTNESS NOT IMPLEMENTED YET! This is a huge consideration for me, since it
means that the camera washes out under any amount of sunlight. Similarly, it
performs very poorly under low light.
I have tried to figure out how the Windows driver implements brightness, to
no avail. I believe it may be some command unknown to me that is sent within
the picture stream, but since I am using
usb-snoopy I am unable to completely analyze the isochronous stream coming
from the camera.
If you are interested in helping me fix this problem, I need either someone with
a decent hardware USB sniffer (I am willing to lend my camera for a short while,
if necessary) or input from the developers. I have heard rumors that this camera
is made by Primax; I have not made any effort to contact Primax regarding this.
- Contrast control is not implemented either. This is less of a consideration,
since most people get sufficient results without one. Plus, there is support
for software contrast control in the usbvideo driver (the driver which the
ultracam driver is based on.) I have not had time to implement this; patches
- Hue/saturation controls are not implemented. Again, I did not spend time fixing
this since most of the time the defaults are sufficient. However, I did collect
enough data to implement these controls. If you are interested, I can supply
you with the necessary information. (It's a function with two independent
variables and six dependent variables, involving sines and cosines...)
- Only 320x240 picture size is supported. However, I did determine the commands
to instruct the camera to send 640x480 and 160x120 data - all that remains to
be done is interpret the picture data for both those sizes.
- Picture data compression is not implemented. This would most likely take
developer support to get working, unless you're a compression specialist...
- Thanks to Dmitri <dmitri at users dot sourceforge dot net> for the
original driver source.
- Axel Grossklaus <6grosskl at informatik dot uni-hamburg dot de> put in a
lot of work decoding the raw picture stream.
- I (Karl Gutwin, <karl at gutwin dot org> put the two halves together and
cleaned things up a bit, plus added white balance and sharpness controls.
- Anybody else? Let me know, and I'll get your input added to this page.