Zoran
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:20k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. DC10/DC10plus/LML33/Buz  Driver for Linux
  2. =========================================
  3. by Rainer Johanni <Rainer@Johanni.de> (for Iomega Buz Driver)
  4. Adapted for DC10/DC10plus by Wolfgang Scherr <scherr@net4you.net>
  5. Further changes for DC10/DC10plus and LML33 cards by
  6. Serguei Miridonov <mirsev@cicese.mx>
  7. Current homepage: http://www.cicese.mx/~mirsev/Linux/DC10plus/
  8. Current maintainer: Serguei Miridonov <mirsev@cicese.mx>
  9.   This is a driver for DC10plus capture cards from Pinnacle Systems
  10.   Inc., LML33 cards from Linux Media Labs and Buz from Iomega.
  11.   It also works with many old Miro DC10 cards with SAA7110A TV decoder
  12.   and ADV7176 TV encoder (please, make sure that your card has these
  13.   chips, otherwise the driver will not work).
  14.   The driver is Video4Linux compliant and contains extensions to
  15.   provide hardware support for full motion MJPEG compression and
  16.   decompression. Since this driver is a derivative from the driver for
  17.   Buz Iomega cards written by Dr. Rainer Johanni,
  18.   http://www.johanni.de/munich-vision/buz/ they both have compatible
  19.   API. I hope that this API will become a part of V4L standard.
  20. Copyright: This driver is free software; you can redistribute it and/or
  21. modify it under the terms of the GNU General Public License. Please,
  22. check http://www.gnu.org/ for details.
  23. No warranty: This software is provided on AN "AS-IS" basis WITHOUT
  24. WARRANTY OF ANY KIND. YOU USE IT AT YOUR OWN RISK.
  25. CONTENTS
  26. ~~~~~~~~
  27. Supported Formats
  28. Hardware compression
  29. Compiling and Loading the Driver
  30. Driver Options
  31. Tested applications
  32. Programming interface
  33. Features for testing
  34. Mailing lists
  35. Bug Reports
  36. Supported Formats
  37. =================
  38. Card:              DC10/DC10plus             LML33/Buz
  39. TV standard:       NTSC/PAL/SECAM(*)         NTSC/PAL
  40. Format:            Square pixel              CCIR.601
  41.                    640x480 NTSC              720x480 NTSC
  42.                    768x576 PAL/SECAM(*)      720x576 PAL
  43. Frame rates: 30 frames/60 fields per second NTSC
  44.              25 frames/50 fields per second PAL/SECAM(*)
  45. (*) - SECAM is supported for input only in DC10/DC10plus cards. The
  46. output of the recorded SECAM video stream will be in PAL standard.
  47. Also, please, note that monitoring of the SECAM input signal at the
  48. DC10/DC10plus analog output may not be available. Please, use
  49. appropriate application like XawTV to watch full color SECAM video at
  50. the card input.
  51. Hardware compression
  52. ====================
  53. Since the card provides hardware compression, even low end machines can
  54. be successfully used for movie capture and playback. I'm testing the
  55. driver with with 2.2.16 kernel running on 233 MHz Pentium MMX with 64M
  56. RAM on 430TX motherboard and with 10GB IDE drive from Western Digital
  57. Corp.
  58. On one test run with DC10plus card I've got 0 frames dropped during
  59. about 20 minutes of full motion NTSC (I live in Mexico) video capture
  60. with fully synchronized audio. The command was
  61.   lavrec -fa -in -d1 -l -1 -q30 -w /dos/g/capture/Linux/test%03d.avi
  62. for recording, and
  63.   lavplay -n128 /dos/g/capture/Linux/test*.avi
  64. for playback. (See lavtools distribution for more information).
  65. Typical run of similar test can provide as few as 6-8 dropped frames per
  66. half of an hour. You mileage may vary, though.
  67. Compiling and Loading the Driver
  68. ================================
  69. You should run a 2.2.x kernel in order to use this driver. The driver
  70. was also tested with 2.4-test6 kernel, so hopefully it will work
  71. with 2.4 kernels too.
  72. I would recommend to use only official kernels from www.kernel.org and
  73. its mirrors. Kernels supplied with some Linux distributions may be
  74. patched in some way to meet specific needs of particular Linux
  75. distributor and could be incompatible with this driver. As a driver
  76. maintainer, I am not able to follow every unofficial kernel release,
  77. and no unofficial kernels will be supported.
  78. Besides the files in this directory, the driver needs the 'videodev'
  79. and the 'i2c' module from the Linux kernel (i2c-old for 2.4 kernels).
  80. In order to get these modules available, enable module support for
  81. VIDEODEV and BTTV (which implies i2c) in your 2.2.x kernel
  82. configuration. You will find these devices in the menu "Character
  83. Devices" in your Kernel Configuration.
  84. In newer kernels (2.4) instead of BTTV you should enable support for
  85. Iomega Buz cards and for Zoran 36060/36067 chipset. This will include
  86. i2c or i2c-old modules and Buz/LML33 driver. However, instead of
  87. modules for Buz/LML33 driver from the kernel, use modules from _this_
  88. driver.
  89. To compile the driver, just type make.
  90. Before you load the driver you must have a video device at major device
  91. node 81. If you don't have it yet, do the following (as root!):
  92. cd /dev
  93. mknod video0 c 81 0
  94. ln -s video0 video
  95. If you have more than one card, add more nodes in /dev directory:
  96. mknod video1 c 81 1
  97. mknod video2 c 81 2
  98. ...
  99. The driver should operate properly with several cards. It was tested
  100. with one DC10plus and one LML33 cards installed together and the driver
  101. correctly identifies both cards and works with both of them.
  102. Currently the driver does not support LML33 and Buz cards installed
  103. together in the same system. This will be fixed in future versions.
  104. Edit the 'update' script if you want to give the driver special options
  105. (see below for options descriptions) and then type (as root)
  106. ./update <card_list>
  107. to insert all necessary modules into the kernel. <card_list> is a list of
  108. cards installed in your system separated by white space. Supported cards 
  109. are dc10, dc10plus, lml33, and buz. For example, if you have both dc10plus
  110. and lml33 cards, please type
  111. ./update dc10 lml33
  112. If you want to make full use of the Video for Linux _uncompressed_
  113. grabbing facilities, you must either
  114. - obtain and install the "big_physarea patch" for your kernel and
  115.   set aside the necessary memory during boot time. There seem to be
  116.   several versions of this patch against various kernel versions
  117.   floating around in the net, you may obtain one e.g. from:
  118.   http://www.polyware.nl/~middelin/hob-v4l.html#bigphysarea
  119.   You also have to compile your driver AFTER installing that patch in
  120.   order to get it working
  121.   or
  122. - start your kernel with the mem=xxx option, where xxx is your
  123.   real memory minus the memory needed for the buffers.
  124.   For doing this add an entry in lilo.conf (if you use lilo):
  125.     append "mem=xxxM"
  126.   or add a line in your linux.par file (if you use loadlin):
  127.     mem=xxxM
  128. The second method is by far easier, however it is dangerous if more
  129. than one driver at a time has the idea to use the memory leftover by
  130. setting the mem=xxx parameter below the actual memory size.
  131. Read also below how to use this memory!
  132.   If you use only MJPEG compressed capture provided by the driver, you
  133.   should not need large memory areas for DMA. In this case, you will be
  134.   able to capture and playback movies with lavtools, however you will
  135.   not be able to use capture features of XawTV and other similar
  136.   programs (you can still watch video on the screen).
  137. Driver Options
  138. ==============
  139. You are able to customize the behavior of the driver by giving
  140. it some options at start time.
  141. default_input, default_norm
  142. ---------------------------
  143. As soon as the driver is loaded, the Buz samples video signals
  144. from one of its input ports and displays it on its output.
  145. The driver uses the Composite Input and the video norm PAL for this.
  146. If you want to change this default behavior, set default_input=1
  147. (for S-VHS input) or default_norm=1 for NTSC or default_norm=2
  148. for SECAM (DC10/DC10plus only).
  149. lock_norm
  150. ---------
  151. This option was introduced to disable norm (TV standard) change by some
  152. not well behaving programs. For example, if you have some application
  153. which was written by somebody who lives in a country with PAL standard,
  154. this program may not have NTSC option and may always try to set the
  155. driver to PAL. In this case, you may load the driver with
  156. default_norm=1 and lock_norm=1 and the card will be forced to work in
  157. NTSC standard only.
  158.   Options:
  159.   
  160.   lock_norm=0   default, TV standard change is enabled;
  161.   lock_norm=1   TV standard change is disabled but the driver
  162.                 will not notify the application about any error;
  163.   lock_norm=2   TV standard change is disabled and the driver
  164.                 will notify the program that TV standards other
  165.                 than set by default_norm=X option are not 
  166.                 supported.
  167. pass_through
  168. ------------
  169. When the driver is not in use (device is not opened by any program) and
  170. pass_through=0 (default) the driver will set the TV encoder to produce
  171. color bar signal at the output. If the driver was loaded with
  172. pass_through=1, the color bar will be disabled and input signal will be
  173. sent to the output even if the driver not in use. If you have LML33 card
  174. and wish the color bar signal at the output, you will also need to set
  175. lml33dpath=1 (please, see next section).
  176. lml33dpath
  177. ----------
  178. LML33 card normally (lml33dpath=0) connects its output to the input
  179. using analog switch. Additionally, it also allows real-time monitoring
  180. of digitized video using TV monitor connected to the output. This
  181. "digital path" option can be enabled setting lml33dpath=1. In this
  182. mode, the input is connected only to the TV decoder, digital video data
  183. is sent via internal video bus to the TV encoder and resulting analog
  184. signal is sent to the output. This mode could be very useful for testing and
  185. picture adjustment while watching video at the TV monitor connected to
  186. the output. However, because of lack of 75 ohm terminating resistors at
  187. TV decoder input, the signal will suffer serious distortions.
  188. # These distortions could be eliminated by soldering two 75 ohm resistors
  189. # in LML33 card: in parallel to capacitors C73 and C82 (see schematics of
  190. # H33 board available at www.linuxmedialabs.com and www.zoran.com). Be
  191. # aware, however, that doing so will void card warranty and the card,
  192. # after this change, must always be used with loading option lml33dpath=1.
  193. # WARNING: I DID NOT TRY THIS CARD CHANGE YET, THIS IS JUST AN ASSUMPTION
  194. # AND I WILL NOT BE RESPONSIBLE FOR ANY DAMAGE ASSOCIATED WITH THIS
  195. # CHANGE. IF YOU WISH TO TRY IT, DO IT AT YOUR OWN RISK.
  196. Please, note that DC10/DC10plus cards always use "digital path" for
  197. signal monitoring. Its input and output are both properly terminated
  198. and the digitized signal quality does not depend on the connection of
  199. the output load.
  200. v4l_nbufs, v4l_bufsize
  201. ----------------------
  202. In order to make to make full use of the Video for Linux uncompressed
  203. picture grabbing facilities of the driver (which are needed by many
  204. Video for Linux applications), the driver needs a set of physically
  205. contiguous buffers for grabbing. These parameters determine how many
  206. buffers of which size the driver will allocate at open (the open will
  207. fail if it is unable to do so!).
  208. These values do not affect the MJPEG grabbing facilities of the driver,
  209. they are needed for uncompressed image grabbing only!!!
  210. v4l_nbufs is the number of buffers to allocate, a value of 2 (the default)
  211. should be sufficient in almost all cases. Only special applications
  212. (streaming captures) will need more buffers and then mostly the
  213. MJPEG capturing features of the Buz will be more appropriate.
  214. So leave this parameter at it's default unless you know what you do.
  215. The things for v4l_bufsize are more complicated: v4l_bufsize is set by
  216. default to 128 [KB] which is the maximum amount of physically
  217. contiguous memory Linux is able to allocate without kernel changes.
  218. This is sufficient for grabbing 24 bit color images up to sizes of
  219. approx. 240x180 pixels (240*180*3 = 129600, 128 KB = 131072).
  220. In order to be able to capture bigger images you have either to
  221. - obtain and install the "big_physarea patch" and set aside
  222.   the necessary memory during boot time or
  223. - start your kernel with the mem=xxx option, where xxx is your
  224.   real memory minus the memory needed for the buffers.
  225. In that case, useful settings for v4l_bufsize are
  226. - 1296 [Kb] for grabbing 24 bit images of max size 768*576
  227. - 1728 [Kb] for 32bit images of same size (4*768*576 = 1728 Kb!)
  228. You may reduce these numbers accordingly if you know you are only
  229. grabbing 720 pixels wide images or NTSC images (max height 480).
  230. In some cases it may happen that Linux isn't even able to obtain
  231. the default 128 KB buffers. If you don't need uncompressed image
  232. grabbing at all, set v4l_bufsize to an arbitrary small value (e.g. 4)
  233. in order to be able to open the video device.
  234. triton, natoma
  235. --------------
  236. The driver tries to detect if you have a triton or natoma chipset
  237. in order to take special measures for these chipsets.
  238. If this detection fails but you are sure you have such a chipset,
  239. set the corresponding variable to 1.
  240. This is a very special option and may go away in the future.
  241. Tested applications
  242. ===================
  243.   XawTV         to watch video on your computer monitor.
  244.   kwintv        the same (you might need to use option lock_norm=1).
  245.   
  246.   lavtools      To record and playback AVI or Quicktime files. Note: you
  247.                 will need patched version, lavtools-1.2p2 to support new
  248.                 features of this driver. Please visit driver homepage for
  249.                 more info.
  250.   Broadcast2000 reportedly (I didn't try that) can accept movies recorded
  251.                 by lavrec in Quicktime format for editing and then edited
  252.                 movie can be played back by lavplay program.
  253.   MainActor 3.5x also can accept movies recorded by lavrec for editing.
  254. The driver can to be used by two programs at the same time
  255. (please, see warning note below regarding this feature). Using XawTV
  256. you can watch what you are recording or playing back with lavtools.
  257. I've tested the following sequence and it worked for me:
  258. * start xawtv and switch inputs, TV standards, and adjust video
  259.   (contrast, saturation, etc.). You may also run your favorite
  260.   audio mixer application to adjust audio inputs.
  261. * run lavrec with options: 
  262.     -i<set your input and norm here> (to choose proper input
  263.                                       and TV standard)
  264.     -l -1  (to use audio mixer settings)
  265.     Other lavrec option can be added at your choice.
  266. * watch the movie in xawtv window while recording it as AVI or
  267.   Quicktime file.
  268. * when recording is finished, run lavplay or xlav and watch your
  269.   clip in xawtv window.
  270. * Note: you should not quit xawtv during recording or playing back.
  271.   If you quit xawtv during recording or playback, another lavtools
  272.   program will stop and may even crash.
  273. I'm not sure that the same will work for you. You can try but,
  274. please, be careful.
  275. WARNING! This is an experimental feature and I'm not sure if it will be
  276. supported in the future. The original driver was not designed to be
  277. used like this and it has no protection against any interference
  278. between two running programs. THEREFORE, IT IS POTENTIALLY DANGEROUS
  279. AND SINCE THE DRIVER OPERATES IN KERNEL SPACE, USING THIS FEATURE MAY
  280. CRASH YOUR ENTIRE SYSTEM.
  281. Programming interface
  282. =====================
  283. This driver should be fully compliant to Video for Linux, so all
  284. tools working with Video for Linux should work with (hopefully)
  285. no problems.
  286. A description of the Video for Linux programming interface can be found at:
  287. http://roadrunner.swansea.linux.org.uk/v4lapi.shtml
  288. Besides the Video for Linux interface, the driver has a "proprietary"
  289. interface for accessing the Buz's MJPEG capture and playback facilities.
  290. For a full description of all members and ioctls see "zoran.h" (used to
  291. be buz.h or dc10.h in previous versions, so, please, update your
  292. programs accordingly).
  293. The ioctls for that interface are as follows:
  294. BUZIOC_G_PARAMS
  295. BUZIOC_S_PARAMS
  296. Get and set the parameters of the buz. The user should always do a
  297. BUZIOC_G_PARAMS (with a struct buz_params) to obtain the default
  298. settings, change what he likes and then make a BUZIOC_S_PARAMS call.
  299. BUZIOC_REQBUFS
  300. Before being able to capture/playback, the user has to request
  301. the buffers he is wanting to use. Fill the structure
  302. zoran_requestbuffers with the size (recommended: 256*1024) and
  303. the number (recommended 32 up to 256). There are no such restrictions
  304. as for the Video for Linux buffers, you should LEAVE SUFFICIENT
  305. MEMORY for your system however, else strange things will happen ....
  306. On return, the zoran_requestbuffers structure contains number and
  307. size of the actually allocated buffers.
  308. You should use these numbers for doing a mmap of the buffers
  309. into the user space.
  310. The BUZIOC_REQBUFS ioctl also makes it happen, that the next mmap
  311. maps the MJPEG buffer instead of the V4L buffers.
  312. BUZIOC_QBUF_CAPT
  313. BUZIOC_QBUF_PLAY
  314. Queue a buffer for capture or playback. The first call also starts
  315. streaming capture. When streaming capture is going on, you may
  316. only queue further buffers or issue syncs until streaming
  317. capture is switched off again with a argument of -1 to
  318. a BUZIOC_QBUF_CAPT/BUZIOC_QBUF_PLAY ioctl.
  319. BUZIOC_SYNC
  320. Issue this ioctl when all buffers are queued. This ioctl will
  321. block until the first buffer becomes free for saving its
  322. data to disk (after BUZIOC_QBUF_CAPT) or for reuse (after BUZIOC_QBUF_PLAY).
  323. BUZIOC_G_STATUS
  324. Get the status of the input lines (video source connected/norm).
  325. This ioctl may be subject to change.
  326. For programming example, please, look at lavrec.c and lavplay.c code in
  327. lavtools-1.2p2 package (URL: http://www.cicese.mx/~mirsev/DC10plus/)
  328. and the 'examples' directory in the original Buz driver distribution.
  329. Additional notes for software developers:
  330.    The driver returns maxwidth and maxheight parameters according to
  331.    the current TV standard (norm). Therefore, the software which
  332.    communicates with the driver and "asks" for these parameters should
  333.    first set the correct norm. Well, it seems logically correct: TV
  334.    standard is "more constant" for current country than geometry
  335.    settings of a variety of TV capture cards which may work in ITU or
  336.    square pixel format. Remember that users now can lock the norm to
  337.    avoid any ambiguity.
  338. Features for testing
  339. ====================
  340. When loaded, the driver creates a /proc/zoranX entry for each card:
  341. using 'cat /proc/zoran0' for your first card you can see the contents
  342. of ZR36057/67 chip registers. It is also possible to modify the
  343. contents of some registers directly. WARNING: modified contents is not
  344. stored in the driver memory, if you restart any program which uses this
  345. driver or even change position or cause redraw of a window of xawtv or
  346. other program, the original registers contents will be restored by the
  347. driver. However, it can be used to change ZR36067 registers on the fly
  348. for fine tuning and then to include these changes into driver code.
  349. This feature is very limited and still requires some documentation.
  350. However, if you are impatient, look at zoran_procfs.c code and
  351. (IMPORTANT!) read ZR36057/67 manual. To set TopField bit, for example,
  352. you need to type as root:
  353. echo TopField=1 > /proc/zoranX # change X to 0 for your first card,
  354.                                # 1 for second and so on...
  355. If you use this feature and have found some interesting result, please, let
  356. me know.
  357. Mailing lists
  358. =============
  359. There are two mailing lists available to discuss application issues and
  360. suggest driver improvements:
  361. 1. A mailing list buz-linux was set up to discuss Iomega Buz driver.
  362. Since this driver is derivative of that driver, you can also post your
  363. questions and suggestions there. Subscribe with a message (with
  364. "subscribe" in the subject) to  buz-linux-subscribe@webmages.com.
  365. Unsubscribe with a message (with "unsubscribe" in the subject) to
  366. buz-linux-unsubscribe@webmages.com. The mailing list archive can be
  367. found at http://buz.webmages.com/list/. 
  368. 2. Video4Linux mailing list is set for more general discussions related
  369. to uncompressed video capture, V4L and V4L2 API, many Video4Linux
  370. applications, etc. to subscribe to this mailing list, please, visit
  371. https://listman.redhat.com/mailman/listinfo/video4linux-list
  372. Bug Reports
  373. ===========
  374. If you have found a bug, please, do the following:
  375. 1. Edit first line of zoran.c file and set DEBUGLEVEL to 3;
  376. 2. Recompile the driver and install it running update script
  377.    in the driver directory;
  378. 3. Run the application(s) which you used when you had found a
  379.    suspisious behavior;
  380. 4. When application stops, look at you /var/log/messages file
  381.    (or whatever file you use to log kernel messages) and copy
  382.    all lines related to the driver activity to a separate file
  383.    in the same order of their appearence in your log file.
  384. 5. Mail a message to <mirsev@cicese.mx> with a subject
  385.    "Linux DC10(plus)/LML33/Buz driver bug report" with a detailed
  386.    description of your problem, kernel version, application name and
  387.    attach that file with kernel messages as plain text (please, don't
  388.    attach it using base64, uuencode, or any other encoding).
  389.    
  390.    If you have a Buz card, please, also mail the same message to
  391.    Wolfgang Scherr <scherr@net4you.net>