Winnov Videum Linux Drivers The Story So Far: 2002-09-10: Changes I hope will make the audio driver support full duplex. Full duplex works on one handle, not multiple opens. 2002-03-30: Fix compiler warning with new kernel versions. 2002-02-26: Fix problem with mmap() and fork()ing. 2001-04-29: Fixed compile problem with "struct microcode" and 2.2.x kernels after 2.2.18. 2001-02-22: Driver package for Linux kernel 2.4.x available. 2000-11-26: Port video capture and audio drivers to kernel 2.4.0-test9. The 2.4 drivers are a separate package from the original 2.2 drivers. Functionally, the 2.4 drivers are identical to the 2.2 drivers. 2000-06-26: Fixed a stack overflow bug that affected 15-bit and 16-bit RGB capture formats. VIC often suffered from the bug. Thanks to David Konerding for tracking this one down. 1999-12-27: Fixed a bug in set capture format where setting 15-bit or 16-bit RGB format didn't always work correctly. 1999-10-23: Added WNVA compressed capture format. (untested) 1999-10-10: Updates for compatibility with kernel 2.3.x. (untested) 1999-09-22: Allow changing the standard while streaming is on. 1999-09-20: Updates for changes to V4L2 API. 1999-09-08: Mute audio output during recording to remove echo effect. Additional minor improvements and fixes to the audio driver. 1999-09-07: Added support in the audio driver for monophonic record and playback for RealProducer and RealPlayer. 1999-09-03: Slightly changed order of audio register programming, and it works better with RealProducer and RealPlayer now. 1999-09-02: Added a couple ioctl commands that I didn't know about before that RealProducer needed. RealProducer no longer gives an error message when capturing audio, but the audio portion of the resulting file didn't play back correctly so there is still a problem somewhere... 1999-08-30: Fixed a couple compiler warnings in wnvaud.c. 1999-08-26: Initial release of the audio driver! It does record, playback and the mixer functions. No doubt it will need a few more tweaks, but it's stable enough now for a test release. 1999-08-24: Fixed aspect ratio problem on cards with the Philips 7111A decoder. Some changes to work better with the audio driver. 1999-08-11: Even better fix. 1999-08-10: Fixed a bug that caused a system lock-up when capturing from the ISA card using the mmap streaming method with certain image formats. It's not ready yet, but I have begun working on the audio capture module. 1999-08-04: Split the driver into two modules. 1999-08-02: The dropped frames count was computed wrong. Began work to split the driver into wnv.c low-level module, and wnvvid.c higer-level video capture driver. Also consolidating the driver header files into one wnv.h file. This reorganization is in preparation for creating a wnvaud.c OSS sound driver, so that the audio capabilities of the AV cards will finally be available! 1999-07-30: Didn't initialize videc.frame_period if the card had a Philips 7111A video decoder, which led to a kernel panic if memory- mapped capture was attempted. 1999-07-09: Fixed: you couldn't dequeue a buffer if streaming was off. 1999-06-05: Rebuild DMA scatter lists for the capture buffers after the capture image format is changed. This fixes a bug where capturing would stop after changing the format especially with v4l apps. Removed spaces in input names because it confused vic. 1999-05-20: Fixed some warnings that show up with the egcs compiler that comes with Red Hat 6.0. 1999-04-27: Didn't return the right error codes from VIDIOC_QUERYCTRL, etc. Added full support for video4linux memory-mapped capture. 1999-03-11: Added support for the Philips 7111A video decoder. Modified the ioctl handler function according to new V4L2 driver programming guidelines. 1999-02-28: Fixed a bug where the driver could capture to the same buffer twice, but only on the PCI card, and only if the application was capturing YUYV format data. 1999-02-27: Fixed a serious bug: The driver would hang the system when using a PCI Videum with a kernel that had SMP support enabled. Added some robustness to the read() function. VIDIOC_QUERYCTRL handles the driver-private control enumeration just added to the spec. 1999-02-18: Added 'nodma' command line parameter. If set to 1 it will disable DMA capability. This can be useful for debugging. 1999-02-07: Fixed "wavi_lock defined but not used" warning message. Fixed a warning that occurred on systems with no PCI support. Fixed a bug where resources were not properly released if an IO port address was forced on the command line, but no card could be found at that address. 1999-01-27: Changes for new VIDIOC_QBUF ioctl. 1999-01-19: Removed VIDIOC_NEXTBUF which is now obsolete. 1998-12-10: Added support for the hardware compression modes of the WAVI chip. The driver doesn't deliver compressed data to the application, it only uses compression to fit a bigger image in the limited on- board SRAM. The data is always decompressed before being passed to the application. I was able to capture 384x288 on an ISA Videum. 1998-11-28: Updates for changed symbol names in videodev.h. 1998-11-14: Fixed another bug that caused RGB24 & RGB32 streaming capture not to work. V4L2_PIX_FMT_RGB24 changed to V4L2_PIX_FMT_BGR24. Same for RGB32. 1998-11-12: Fixed a bug that caused RGB24 & RGB32 streaming capture not to work, and caused read() capturing to be less efficient. The VIDIOC_S_INPUT ioctl always returned EINVAL, fixed. 1998-11-09: Attempted fixes for changes to timeout handling in the 2.1.127 kernel, and a crashing bug related to unmapping and reallocating memory mapped buffers. 1998-11-08: Updating for many minor changes to the V4L2 spec. 1998-10-29: The ITT VPX support works now. 1998-10-26: Fixed the streaming capture bug. It was as a driver bug that failured with all kernel versions since 2.1.109. RGB streaming captures did not work. 1998-10-22: More fixes for VPX cards. There still seems to be some problem remaining. Streaming capture doesn't work in kernel 2.1.125, except for YUYV capture from a PCI card, which is the only mode that doesn't require the CPU at all for capture. Seems to be a kernel bug. 1998-10-13: There was a bug in the VPX routines that would prevent the VPX support from working. 1998-10-12: RGB-24 and RGB-32 output formats didn't work. 1998-10-09: Fixed a crashing bug where streaming did not work on ISA cards. Fixed a bug where a PCI card would be enumerated twice if you also had an ISA card in the system. Fixed a couple other minor bugs. 1998-09-28: Revamped video standard. Made video controls individually enumerable according to new specs. 1998-09-25: Added spin locks to wnv.c. Xvideum tests more ioctls. 1998-09-18: VIDIOC_NONCAP replaced by O_NONCAP open() flag to indicate a non-capturing open. 1998-09-10: New video standard stuff in Videum driver, xvideum. 1998-09-07: Streaming looks good. The frame rate control works. 1998-09-03: Got the first streaming images, but streaming is not quite done yet. 1998-09-01: Memory-mapping is now working, and I am adding the streaming capture functions. 1998-08-27: Added select() support. Had to modify the poll method call to add the file * parameter. 1998-08-18: Fixed a bug in the RGB24 conversion routine. (I hope it's fixed, MetroX doesn't work in 24bit mode, so I can't test.) 1998-08-17: (No coding for a week because I was on vacation.) Added insmod command line overrides for the IO base addresses of the ISA bus cards. I'm getting occasional PnP checksum errors. Simon Vogl is adapting the driver to use his I2C library. 1998-08-06: Added support for the Plug-and-Play ISA Videums. The driver configures the card automatically. 1998-08-05: Created a website for the driver. Thanks to Daniel Dunbar for donating the server space. 1998-08-04: Program the video filtering according to the decimation ratio. 1998-08-03: Added slave and DMA performance benchmarks; the results are used to tune the timing in the driver, and also makes sure the PCI slot supports bus-mastering (not all do). 1998-08-02: Added RGB24 and RGB32 support. Fixed the multiple-config on an ISA board problem. 1998-07-31: User reports insmod problems fixed by compiling the module with the same options as the other modules. Found out insmod problems caused by compiling the module without version checking. The insmod errors are fixed, but the user now reports the driver configures the board twice. The good news is the videum1 device works. 1998-07-30: Spent the whole week working on the video4linux spec proposal, and finally submitted it today. One person reported the driver got many undefined symbol errors on insmod. 1998-07-29: Sent the driver to three people to test. 1998-07-26: Still working on the API. Submitted draft #2 to the mailing list. Tried running the ISA Videum and the PCI Videum simultaneously in my system; it worked perfectly. 1998-07-24: More work on the API. Submitted a draft to the mailing list. 1998-07-23: Worked on my video4linux API proposal. Did no programming. 1998-07-22: The bus mastering works! Took my system in to Winnov, and we went over the code step by step. Turns out the memory access acknowledge pin on the WAVI was not configured right. I also found a similar WAVI programming bug that caused it to see all video fields as even fields. There is still some 'tearing' in bus-mastered images. Alan Cox asked for my input on improving the video4linux spec. 1998-07-21: Wrote 'xvideum', my first X Windows program. It opens a window, reads RGB565-format video images from the driver, and displays the images in the window. Used xvideum to test RGB565 capture. This is the first time I have seen full-resolution color images from Videum on Linux! 1998-07-20: Arranged to have Winnov engineers have a look at the bus mastering problem on Wednesday the 22nd. Wrote image translations for YUYV->GREY, YUYV->YUV420, YUYV->RGB555, YUYV->RGB565. All in C. The driver now supports the following pixel formats: VIDEO_PALETTE_YUYV, VIDEO_PALETTE_GREY, VIDEO_PALETTE_YUV420, VIDEO_PALETTE_RGB555, VIDEO_PALETTE_RGB565. 1998-07-19: Got some help on the capture buffer questions from comp.os.linux. programmer.system, and I am now able to allocate and use the DMA buffer the way I wanted to. The bus mastering still does not work right. I will seek more help from Winnov. Arranged the read() logic the way I really want it now; supports read-ahead and non-blocking I/O. Started working on image translations; none are implemented yet. 1998-07-16: The hardware interrupts are working, but the bus mastering does not work right yet. I am also struggling with finding the best way to allocate the capture buffer so that it can be used for DMA. 1998-07-14: Found out the hardware interrupt only fires when the bus master engine is activated. Still polling interrupts for now. Started working on the bus master code. Wrote most of it, but it's not ready yet. Had a crash when unloading the module. Moved the interrupt disable to close instead of unload, and using add_timer instead of tq_timer because then I can del_timer when disabling. 1998-07-13: Fixed register access problem on the PCI card! Working on using the hardware interrupt, but it does not fire. I put in some logic that I hoped would alleviate the hangs I mentioned yesterday, and they seem to have gone away. I don't know exactly what the problem was. 1998-07-12: Still unable to read registers on the PCI card. I am now working with the legacy ISA card. I have captured the first images! Now working on the interrupt routines and interrupt polling. Having problems with hangs in X Windows. Seems fine in text mode. 1998-07-09: More work on the capturing routines. I discovered a major problem: I can only access the low bytes of registers! Investigating... 1998-07-08: Didn't have much time today. Some microcode compiler parameters. 1998-07-07: Started working on the image capturing routines. 1998-07-06: Finished work on the microcode compiler. Working on the IOCTL handler. 1998-07-05: Wrote most of the video decoder and video input handling data structures and routines, including support for the Philips 7110. The module recognizes the 7110. More WAVI functions including WAVI initialization, SRAM block read/write and video tone controls. Working on the microcode compiler, more than 50% done. 1998-07-01: Wrote more I2C stuff. The driver can now read the EEPROM. 1998-06-30: The module registers as a v4l driver, and I made a /dev/video0 node for it and used cat to read a buffer full of data from a dummy read routine that fills the buffer with ABCD.... Wrote the low-level I2C routines. 1998-06-29: The module located and configured the PCI VO card, and successfully read one of the registers on the Winnov WAVI chip for the first time. [I later discovered that only the low 8 bits were read correctly.] 1998-06-27: Broke ground on the driver, starting with the "Hello, world." minimal example module from the device driver book. 1998-06-22: Posted my first message to the video4linux mailing list asking for some help to get me started. Alan Cox is very helpful. 1998-06-15: Bought _Linux_Device_Drivers_ at Computer Literacy bookstore. 1998-05-30: Bought Red Hat Linux 5.0 at Fry's Electronics. 1998-05-16: Alan Cox links the first draft of the Video for Linux spec to the video4linux web page. 1998-05-07: Subscribed to the video4linux mailing list. 1998-04-27: "Shawn N." posted to winnov.public.unix and told me about Video for Linux, and the video4linux mailing list and web page. I was intrigued and I looked into it.