ibmcam.txt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. README for Linux device driver for the IBM "C-It" USB video camera
  2. INTRODUCTION:
  3. This driver does not use all features known to exist in
  4. the IBM camera. However most of needed features work well.
  5. This driver was developed using logs of observed USB traffic
  6. which was produced by standard Windows driver (c-it98.sys).
  7. I did not have data sheets from Xirlink.
  8. Video formats:
  9. 128x96 [model 1]
  10. 176x144
  11. 320x240 [model 2]
  12. 352x240 [model 2]
  13. 352x288
  14. Frame rate: 3 - 30 frames per second (FPS)
  15. External interface: USB
  16. Internal interface: Video For Linux (V4L)
  17. Supported controls:
  18. - by V4L: Contrast, Brightness, Color, Hue
  19. - by driver options: frame rate, lighting conditions, video format,
  20. default picture settings, sharpness.
  21. SUPPORTED CAMERAS:
  22. Xirlink "C-It" camera, also known as "IBM PC Camera".
  23. The device uses proprietary ASIC (and compression method);
  24. it is manufactured by Xirlink. See http://www.xirlink.com/
  25. (renamed to http://www.veo.com), http://www.ibmpccamera.com,
  26. or http://www.c-itnow.com/ for details and pictures.
  27. This very chipset ("X Chip", as marked at the factory)
  28. is used in several other cameras, and they are supported
  29. as well:
  30. - IBM NetCamera
  31. - Veo Stingray
  32. The Linux driver was developed with camera with following
  33. model number (or FCC ID): KSX-XVP510. This camera has three
  34. interfaces, each with one endpoint (control, iso, iso). This
  35. type of cameras is referred to as "model 1". These cameras are
  36. no longer manufactured.
  37. Xirlink now manufactures new cameras which are somewhat different.
  38. In particular, following models [FCC ID] belong to that category:
  39. XVP300 [KSX-X9903]
  40. XVP600 [KSX-X9902]
  41. XVP610 [KSX-X9902]
  42. (see http://www.xirlink.com/ibmpccamera/ for updates, they refer
  43. to these new cameras by Windows driver dated 12-27-99, v3005 BETA)
  44. These cameras have two interfaces, one endpoint in each (iso, bulk).
  45. Such type of cameras is referred to as "model 2". They are supported
  46. (with exception of 352x288 native mode).
  47. Some IBM NetCameras (Model 4) are made to generate only compressed
  48. video streams. This is great for performance, but unfortunately
  49. nobody knows how to decompress the stream :-( Therefore, these
  50. cameras are *unsupported* and if you try to use one of those, all
  51. you get is random colored horizontal streaks, not the image!
  52. If you have one of those cameras, you probably should return it
  53. to the store and get something that is supported.
  54. Tell me more about all that "model" business
  55. --------------------------------------------
  56. I just invented model numbers to uniquely identify flavors of the
  57. hardware/firmware that were sold. It was very confusing to use
  58. brand names or some other internal numbering schemes. So I found
  59. by experimentation that all Xirlink chipsets fall into four big
  60. classes, and I called them "models". Each model is programmed in
  61. its own way, and each model sends back the video in its own way.
  62. Quirks of Model 2 cameras:
  63. -------------------------
  64. Model 2 does not have hardware contrast control. Corresponding V4L
  65. control is implemented in software, which is not very nice to your
  66. CPU, but at least it works.
  67. This driver provides 352x288 mode by switching the camera into
  68. quasi-352x288 RGB mode (800 Kbits per frame) essentially limiting
  69. this mode to 10 frames per second or less, in ideal conditions on
  70. the bus (USB is shared, after all). The frame rate
  71. has to be programmed very conservatively. Additional concern is that
  72. frame rate depends on brightness setting; therefore the picture can
  73. be good at one brightness and broken at another! I did not want to fix
  74. the frame rate at slowest setting, but I had to move it pretty much down
  75. the scale (so that framerate option barely matters). I also noticed that
  76. camera after first powering up produces frames slightly faster than during
  77. consecutive uses. All this means that if you use 352x288 (which is
  78. default), be warned - you may encounter broken picture on first connect;
  79. try to adjust brightness - brighter image is slower, so USB will be able
  80. to send all data. However if you regularly use Model 2 cameras you may
  81. prefer 176x144 which makes perfectly good I420, with no scaling and
  82. lesser demands on USB (300 Kbits per second, or 26 frames per second).
  83. Another strange effect of 352x288 mode is the fine vertical grid visible
  84. on some colored surfaces. I am sure it is caused by me not understanding
  85. what the camera is trying to say. Blame trade secrets for that.
  86. The camera that I had also has a hardware quirk: if disconnected,
  87. it needs few minutes to "relax" before it can be plugged in again
  88. (poorly designed USB processor reset circuit?)
  89. [Veo Stingray with Product ID 0x800C is also Model 2, but I haven't
  90. observed this particular flaw in it.]
  91. Model 2 camera can be programmed for very high sensitivity (even starlight
  92. may be enough), this makes it convenient for tinkering with. The driver
  93. code has enough comments to help a programmer to tweak the camera
  94. as s/he feels necessary.
  95. WHAT YOU NEED:
  96. - A supported IBM PC (C-it) camera (model 1 or 2)
  97. - A Linux box with USB support (2.3/2.4; 2.2 w/backport may work)
  98. - A Video4Linux compatible frame grabber program such as xawtv.
  99. HOW TO COMPILE THE DRIVER:
  100. You need to compile the driver only if you are a developer
  101. or if you want to make changes to the code. Most distributions
  102. precompile all modules, so you can go directly to the next
  103. section "HOW TO USE THE DRIVER".
  104. The ibmcam driver uses usbvideo helper library (module),
  105. so if you are studying the ibmcam code you will be led there.
  106. The driver itself consists of only one file in usb/ directory:
  107. ibmcam.c. This file is included into the Linux kernel build
  108. process if you configure the kernel for CONFIG_USB_IBMCAM.
  109. Run "make xconfig" and in USB section you will find the IBM
  110. camera driver. Select it, save the configuration and recompile.
  111. HOW TO USE THE DRIVER:
  112. I recommend to compile driver as a module. This gives you an
  113. easier access to its configuration. The camera has many more
  114. settings than V4L can operate, so some settings are done using
  115. module options.
  116. To begin with, on most modern Linux distributions the driver
  117. will be automatically loaded whenever you plug the supported
  118. camera in. Therefore, you don't need to do anything. However
  119. if you want to experiment with some module parameters then
  120. you can load and unload the driver manually, with camera
  121. plugged in or unplugged.
  122. Typically module is installed with command 'modprobe', like this:
  123. # modprobe ibmcam framerate=1
  124. Alternatively you can use 'insmod' in similar fashion:
  125. # insmod /lib/modules/2.x.y/usb/ibmcam.o framerate=1
  126. Module can be inserted with camera connected or disconnected.
  127. The driver can have options, though some defaults are provided.
  128. Driver options: (* indicates that option is model-dependent)
  129. Name Type Range [default] Example
  130. -------------- -------------- -------------- ------------------
  131. debug Integer 0-9 [0] debug=1
  132. flags Integer 0-0xFF [0] flags=0x0d
  133. framerate Integer 0-6 [2] framerate=1
  134. hue_correction Integer 0-255 [128] hue_correction=115
  135. init_brightness Integer 0-255 [128] init_brightness=100
  136. init_contrast Integer 0-255 [192] init_contrast=200
  137. init_color Integer 0-255 [128] init_color=130
  138. init_hue Integer 0-255 [128] init_hue=115
  139. lighting Integer 0-2* [1] lighting=2
  140. sharpness Integer 0-6* [4] sharpness=3
  141. size Integer 0-2* [2] size=1
  142. Options for Model 2 only:
  143. Name Type Range [default] Example
  144. -------------- -------------- -------------- ------------------
  145. init_model2_rg Integer 0..255 [0x70] init_model2_rg=128
  146. init_model2_rg2 Integer 0..255 [0x2f] init_model2_rg2=50
  147. init_model2_sat Integer 0..255 [0x34] init_model2_sat=65
  148. init_model2_yb Integer 0..255 [0xa0] init_model2_yb=200
  149. debug You don't need this option unless you are a developer.
  150. If you are a developer then you will see in the code
  151. what values do what. 0=off.
  152. flags This is a bit mask, and you can combine any number of
  153. bits to produce what you want. Usually you don't want
  154. any of extra features this option provides:
  155. FLAGS_RETRY_VIDIOCSYNC 1 This bit allows to retry failed
  156. VIDIOCSYNC ioctls without failing.
  157. Will work with xawtv, will not
  158. with xrealproducer. Default is
  159. not set.
  160. FLAGS_MONOCHROME 2 Activates monochrome (b/w) mode.
  161. FLAGS_DISPLAY_HINTS 4 Shows colored pixels which have
  162. magic meaning to developers.
  163. FLAGS_OVERLAY_STATS 8 Shows tiny numbers on screen,
  164. useful only for debugging.
  165. FLAGS_FORCE_TESTPATTERN 16 Shows blue screen with numbers.
  166. FLAGS_SEPARATE_FRAMES 32 Shows each frame separately, as
  167. it was received from the camera.
  168. Default (not set) is to mix the
  169. preceding frame in to compensate
  170. for occasional loss of Isoc data
  171. on high frame rates.
  172. FLAGS_CLEAN_FRAMES 64 Forces "cleanup" of each frame
  173. prior to use; relevant only if
  174. FLAGS_SEPARATE_FRAMES is set.
  175. Default is not to clean frames,
  176. this is a little faster but may
  177. produce flicker if frame rate is
  178. too high and Isoc data gets lost.
  179. FLAGS_NO_DECODING 128 This flag turns the video stream
  180. decoder off, and dumps the raw
  181. Isoc data from the camera into
  182. the reading process. Useful to
  183. developers, but not to users.
  184. framerate This setting controls frame rate of the camera. This is
  185. an approximate setting (in terms of "worst" ... "best")
  186. because camera changes frame rate depending on amount
  187. of light available. Setting 0 is slowest, 6 is fastest.
  188. Beware - fast settings are very demanding and may not
  189. work well with all video sizes. Be conservative.
  190. hue_correction This highly optional setting allows to adjust the
  191. hue of the image in a way slightly different from
  192. what usual "hue" control does. Both controls affect
  193. YUV colorspace: regular "hue" control adjusts only
  194. U component, and this "hue_correction" option similarly
  195. adjusts only V component. However usually it is enough
  196. to tweak only U or V to compensate for colored light or
  197. color temperature; this option simply allows more
  198. complicated correction when and if it is necessary.
  199. init_brightness These settings specify _initial_ values which will be
  200. init_contrast used to set up the camera. If your V4L application has
  201. init_color its own controls to adjust the picture then these
  202. init_hue controls will be used too. These options allow you to
  203. preconfigure the camera when it gets connected, before
  204. any V4L application connects to it. Good for webcams.
  205. init_model2_rg These initial settings alter color balance of the
  206. init_model2_rg2 camera on hardware level. All four settings may be used
  207. init_model2_sat to tune the camera to specific lighting conditions. These
  208. init_model2_yb settings only apply to Model 2 cameras.
  209. lighting This option selects one of three hardware-defined
  210. photosensitivity settings of the camera. 0=bright light,
  211. 1=Medium (default), 2=Low light. This setting affects
  212. frame rate: the dimmer the lighting the lower the frame
  213. rate (because longer exposition time is needed). The
  214. Model 2 cameras allow values more than 2 for this option,
  215. thus enabling extremely high sensitivity at cost of frame
  216. rate, color saturation and imaging sensor noise.
  217. sharpness This option controls smoothing (noise reduction)
  218. made by camera. Setting 0 is most smooth, setting 6
  219. is most sharp. Be aware that CMOS sensor used in the
  220. camera is pretty noisy, so if you choose 6 you will
  221. be greeted with "snowy" image. Default is 4. Model 2
  222. cameras do not support this feature.
  223. size This setting chooses one of several image sizes that are
  224. supported by this driver. Cameras may support more, but
  225. it's difficult to reverse-engineer all formats.
  226. Following video sizes are supported:
  227. size=0 128x96 (Model 1 only)
  228. size=1 160x120
  229. size=2 176x144
  230. size=3 320x240 (Model 2 only)
  231. size=4 352x240 (Model 2 only)
  232. size=5 352x288
  233. size=6 640x480 (Model 3 only)
  234. The 352x288 is the native size of the Model 1 sensor
  235. array, so it's the best resolution the camera can
  236. yield. The best resolution of Model 2 is 176x144, and
  237. larger images are produced by stretching the bitmap.
  238. Model 3 has sensor with 640x480 grid, and it works too,
  239. but the frame rate will be exceptionally low (1-2 FPS);
  240. it may be still OK for some applications, like security.
  241. Choose the image size you need. The smaller image can
  242. support faster frame rate. Default is 352x288.
  243. For more information and the Troubleshooting FAQ visit this URL:
  244. http://www.linux-usb.org/ibmcam/
  245. WHAT NEEDS TO BE DONE:
  246. - The button on the camera is not used. I don't know how to get to it.
  247. I know now how to read button on Model 2, but what to do with it?
  248. - Camera reports its status back to the driver; however I don't know
  249. what returned data means. If camera fails at some initialization
  250. stage then something should be done, and I don't do that because
  251. I don't even know that some command failed. This is mostly Model 1
  252. concern because Model 2 uses different commands which do not return
  253. status (and seem to complete successfully every time).
  254. - Some flavors of Model 4 NetCameras produce only compressed video
  255. streams, and I don't know how to decode them.
  256. CREDITS:
  257. The code is based in no small part on the CPiA driver by Johannes Erdfelt,
  258. Randy Dunlap, and others. Big thanks to them for their pioneering work on that
  259. and the USB stack.
  260. I also thank John Lightsey for his donation of the Veo Stingray camera.