Dear All,

I would like to propose a new video library to ultimately replace vidl.  The current vidl library has been crudely ported multiple times (once by me), and its aging design is starting to show.  Here are a few of the troubles with the current vidl library:

1)  It is messy (from the crude porting)
2)  The API does not support setting encoding options other than file format.
3)  It treats a video as an object.  This requires you to have the entire video in memory to save it to disk.
4)  Few codecs are actually implemented, and some (such as MPEG) are very buggy.
5)  It does not support live video streams for video capture.

It seems that many people have ignored this library in favor of writing new code to meet their needs.  Some examples of this are
contrib/mul/mvl2  -  AVI file I/O on both windows and linux
contrib/brl/vvid  -  video capture in Windows using IEEE 1394 camera drivers
contrib/oul/oufgl  -  video-4-linux framegrabber

The new library I propose will treat video as an input or output stream of images.  You can open an input stream (which may be an encoded video file, a sequence of images, a camera, etc.) and read images one at a time.  Similarly you can open an output stream and write images one at a time.  Some streams will support seeking and others will not.  We probably also need a mechanism to provide a time stamp with each frame.

I have already started to implement this design in contrib/brl/bbas/vidl2.  I have written stream classes for a list of images (using vil and vul), and I am working on stream classes to interface with FFMPEG to read most types of encoded files on Linux (and possibly Windows).  Before I get too far I would like to get some feedback from those in the VXL community who work with video.  I want to make this design meet the needs of as many people as possible.

Thank You and Happy Holidays,
Matt Leotta
Brown University