Winnov Videum Linux Drivers
The Story So Far:

Added WNVA compressed capture format. (untested)

Updates for compatibility with kernel 2.3.x. (untested)

Allow changing the standard while streaming is on.

Updates for changes to V4L2 API.

Mute audio output during recording to remove echo effect.
Additional minor improvements and fixes to the audio driver.

Added support in the audio driver for monophonic record and playback 
for RealProducer and RealPlayer.

Slightly changed order of audio register programming, and it works
better with RealProducer and RealPlayer now.

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...

Fixed a couple compiler warnings in wnvaud.c.

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.

Fixed aspect ratio problem on cards with the Philips 7111A decoder.
Some changes to work better with the audio driver.

Even better fix.

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 

Split the driver into two modules.

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!

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.

Fixed: you couldn't dequeue a buffer if streaming was off.

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.

Fixed some warnings that show up with the egcs compiler that comes
with Red Hat 6.0.

Didn't return the right error codes from VIDIOC_QUERYCTRL, etc.
Added full support for video4linux memory-mapped capture.

Added support for the Philips 7111A video decoder.
Modified the ioctl handler function according to new V4L2 driver
programming guidelines.

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.

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.

Added 'nodma' command line parameter. If set to 1 it will
disable DMA capability. This can be useful for debugging.

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.

Changes for new VIDIOC_QBUF ioctl.

Removed VIDIOC_NEXTBUF which is now obsolete.

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.

Updates for changed symbol names in videodev.h.

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.

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.

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.

Updating for many minor changes to the V4L2 spec.

The ITT VPX support works now.

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.

More fixes for VPX cards. There still seems to be some problem
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.

There was a bug in the VPX routines that would prevent the VPX
support from working.

RGB-24 and RGB-32 output formats didn't work.

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.

Revamped video standard. Made video controls individually
enumerable according to new specs.

Added spin locks to wnv.c. Xvideum tests more ioctls.

VIDIOC_NONCAP replaced by O_NONCAP open() flag to indicate a 
non-capturing open.

New video standard stuff in Videum driver, xvideum.

Streaming looks good. The frame rate control works.

Got the first streaming images, but streaming is not quite done

Memory-mapping is now working, and I am adding the streaming
capture functions.

Added select() support. Had to modify the poll method call
to add the file * parameter.

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.)

(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.

Added support for the Plug-and-Play ISA Videums. The driver
configures the card automatically.

Created a website for the driver. Thanks to Daniel Dunbar for donating
the server space.

Program the video filtering according to the decimation ratio.

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).

Added RGB24 and RGB32 support. Fixed the multiple-config on an ISA
board problem.

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.

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

Sent the driver to three people to test.

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.

More work on the API. Submitted a draft to the mailing list.

Worked on my video4linux API proposal. Did no programming.

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.

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!

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

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.

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.

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.

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.

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.

More work on the capturing routines.
I discovered a major problem: I can only access the low bytes
of registers! Investigating...

Didn't have much time today. Some microcode compiler parameters.

Started working on the image capturing routines.

Finished work on the microcode compiler. Working on the IOCTL

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.

Wrote more I2C stuff. The driver can now read the EEPROM.

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.

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.]

Broke ground on the driver, starting with the "Hello, world."
minimal example module from the device driver book.

Posted my first message to the video4linux mailing list asking for
some help to get me started. Alan Cox is very helpful.

Bought _Linux_Device_Drivers_ at Computer Literacy bookstore.

Bought Red Hat Linux 5.0 at Fry's Electronics. 

Alan Cox links the first draft of the Video for Linux spec to the
video4linux web page.

Subscribed to the video4linux mailing list.

"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.

Copyright 1999 http:/