vic Change Log

# vic: Change History

### v2.8ucl4

- Added Video4Linux capture support. Note: This only works with kernel 2.2.x and above.
- Updated H263 support for Litte Endian machines (thanks to Marcus Meissner).
- Updated grabber-x11 so it works on more machines and when running vic on a remote X server (thanks to Marcus Meissner, Davide Cavagnino).
- Added [HAVE_IPV6] support for IPv6 from UCLA version, adding support for;
  SOLARIS7_IPV6
    Solaris 7 IPv6 Prototype.
  LINUX_IPV6
    Linux IPv6 support in kernel 2.2.x
  WIN32
    Microsoft research's IPv6 support for NT4.0.
  DAS_IPV6
    Thompson-CSF Detexis' IPv6 Stack on Windows NT4.0
- Command line options:
  - -n ip6 : Sets vic to use IPv6[HAVE_IPV6].
  - -L : Sets flowinfo in IPv6 packets[HAVE_IPV6].
  - -y : This sets local transmit rate to 32kb/s unless it receives a lbl message from rat to say you are sending audio.
  - -l : Logs framerate, loss, bandwidth to a file.

### v2.8ucl3

- Added support for SunVideo PCI card - from Friedrich-Alexander Universitaet Erlangen-Nuernberg (FAU)

- Provides hardware H.261 codec

- Added H.263 codec for UNIX - from Friedrich-Alexander Universitaet Erlangen-Nuernberg (FAU)
- Included many useful fixes from Bill Fenner.

### v2.8ucl2

- Added JPEG and bvc software codec's from MASH project , University of California, Berkeley

### v2.8ucl1

- Port to Tcl/Tk 8.0
- Added DES support
- Added 'configure on transmit option' for windows which brings up the configuration panel for the installed frame grabber.
- Added H.263+ codec from TU-Berlin

### v2.8 Mon Jul 22 13:13:10 PDT 1996

- Fixed long standing bug where vic generated non-conformant RTP/H.261 headers (the MBA and GOB fields were swapped). We maintained this bug in v2.7 to avoid incompatibility with v2.6, but added code to handle either case.
- Added John Brezak's patch for a hookable TkPlatformInit to overcome the fact that under Windows you cannot override internal DLL calls.
- Ifdef out XSync calls under WIN32.

### v2.7 Mon Jul 22 11:47:48 PDT 1996

- Fixed several bugs in the MME grabber: (1) bandwidth limits were ignored by the grabber, (2) mapping of JPEG Quality slider to internal quality setting was wrong, and (3) the YUV grabber was grabbing frames that were 1/4 (1/2 in each direction) the requested size. Fixes from Tom Morris.
- Fixed bug with calculation of extended highest sequence number in reception reports. Reported by Bill Fenner.

### v2.7b4 Wed Jun 26 17:59:49 PDT 1996

- Fixed control menu so that user cannot select a compression format if there are no available devices. Otherwise, a tcl error results. Bug reported by David Rush.
- Removed load_stat class and hooks since we want to re-architect this. We plan to put more general hooks into vic-3.0.
- Added support for the SCC "Smart Capture Card", a PCMCIA video capture card sold by Japan IBM. Contributed by Koji OKAMURA. Koji maintains an SCC Driver for Linux and Linux vic binary w/ SCC support.
- Brought the DEC MME grabber up to date. Tom Morris contributed the (substantial) changes and bug fixes.
- Modified Connectix QuickCam grabber for more generic driver versus library detection by John Bashinski. This version works with QuickCam driver on Solaris 2.x. Also added QuickCam GUI controls, and removed old auto-contrast system.
- Fixed bug that caused core dump for unknown visuals Reported by Craig Votava.
- Added grabber module for PCMCIA IBM Smart Capture Card. Works under both Linux and FreeBSD. Contributed by Koji OKAMURA.
- Added ability to specify default video port on a per-device basis. For example, you can set the Vic.defaultPort(vino) X resource to Analog-Video-Input to cause vic to default to the analog composite input with SGI's vino device.
- Fixed bug in session max bandwidth computation. The heuristic that differentiated between audio and video needed to check V(app) rather than the sessioType resource. Originally reported by Anders Klements.
- Fixed bug computing DLSR field of RTCP receiver reports. Reported by Anders Klements.
- Re-named methods that were named sendmsg since some systems re-define this identifier.
- Added hook to meteor grabber to set frame rate so we only transfer what we need, thanks to Jim Lowe.
- Brought up to date with IRIX-6.2, thanks to Andrew Cherenson.
- Ported to final release versions of tcl7.5/tk4.1. You now need these versions or later to build.
- Fixed compilations problems under AIX, reported by Srinivasan Seshan .
- Added Hi-Color (16-bit) renderer.
- Lots of changes for Win95 with tcl7.5/tk4.1.

### v2.7b3 May 16 07:07 PDT 1996

Windows binary release.

### v2.7b2 Sun Apr 21 09:58:36 PDT 1996

- Bring ultrix port up to date.
- Removed VIC.SD.TCL from distribution since sdr has obsoleted sd.

### v2.7b1 Tue Apr 9 23:11:48 PDT 1996

- Added a manual page for h261_play.
- Ported to tcl7.5b3 and tk4.1b3. You need this version or later to build. tcl7.5a* and tk4.1a* will not work.
- Replaced blt_table with new Tk grid geometry manager. This eliminates all dependence on blt.
- Fixed bug that caused abort whenever a window was dismissed that held a stream that was different from the original stream upon creation. Reported by Steve Casner
- Fixed uninitialized-variable bug in session.cc. Thanks to Fred Templin.
- Catch error when trying to mtrace a source when mtrace binary is not present. This bug reported by many.
- Added better logic to Meteor grabber for deciding when to use even-only field capture mode. Patch from Jim Lowe.
- Timestamps in rtcp messages were still wrong: the media ts of the last packet sent was simply combined with the current ntp time rather than being corrected for the difference between the last send and the current time. Fixed. Reported by Steve Casner
- Weren't following the guidelines on sdes content of rtcp msgs: Are supposed to put in cname plus one other piece of info. Instead, were sending all info in every msg. Changed to follow guidelines and sequence through the available info, one item per msg. Reported by Steve Casner
- Removed tk.tcl from list of source files since it should always be built from local tk library (otherwise you can end up with a version mismatch between -ltk and the support files built into vat/vic. Reported by Hans Mayer

### v2.7a38 Thu Mar 21 03:52:22 PST 1996

- Fixed problems in VideoPix grabber when grabbing CIF format (h.261) from a PAL camera. Result would be garbage and would also trash random memory. Problem reported by Jan-Peter Richter
- Fixed problem in Parallax grabber where tk update call could cause re-entrance to grabber. Change update to "update idletasks". Fix from Tie Liao.
- Removed old, obsolete key bindings that caused tcl background errors when certain keys were typed into a video display window. Bug reported by David Hoffman.
- Fixed some problems with the Matrox Meteor grabber; in particular, svideo input and secam format. Also added support for the RGB version of the Meteor. Contributed by Jim Lowe.
- Fixed small bug in RTCP code where random offset was added in twice (once in media_ts method and once by external code). Reported by Bob Olson.
- Added support for Connectix QuickCam video capture device for PC's. Contributed by Koji OKAMURA. Known to work with the linux qcam driver and Paul Traina's driver under FreeBSD (which is in FreeBSD-2.2 or later). The configure script will compile the QuickCam driver if /usr/local/lib/libqcam.a exists.
- Fixed bug in SLIC grabber that prevented grabber panel from being instantiated. Thanks to Toerless Eckert.
- Full-size h.261 grabbing was broken if using NTSC camera with vigrapix board. Problem was that Phillips scalar chip can't scale up so we'd have to grab a full frame & deinterlace to go from 240 line high NTSC to 288 line high CIF. Since this would double amount of I/O, instead we do same as other NTSC CIF grabbers & embed NTSC sized image on gray CIF sized background. Problem reported by Joe Pallas.
- cpmsg was causing a call to realloc on every packet rather than only when the work buffer needed to be expanded. Reported by Bob Olson.
- VIC.SD.TCL was missing from the binary distributions. Reported by David Comay.
- Much hacking on configure scripts to deal with tk4.1/tk4.0 file name changes, need for dynamic loader with tcl7.5, blt-1.9 release, etc.
- Got ok from Sun to add grabber-rtvc.cc to source distribution.

### v2.7a37 Wed Feb 15 14:39:06 PST 1996

- Incorporated fourth round of patches from John Brezak for Win95/NT port. Added README.WIN32 file containing brief description and tcl/tk patches from John.

### v2.7a36 Wed Feb 7 14:39:06 PST 1996

- Changed to use new mode in meteor driver (METEOR_GEO_YUV_422) and allow even only fields to be captured under certain conditions. Added FRAME_CNTS debugging option. Thanks to Jim Lowe.
- Incorporated third round of patches from John Brezak for Win95/NT port.

### v2.7a35 Wed Feb 7 02:45:10 PST 1996

- Add missing file (load_stat.h) to distribution.

### v2.7a34 Tue Feb 6 14:41:34 PST 1996

- Incorporated second round of patches from John Brezak for Win95/NT port.

### v2.7a33 Tue Feb 6 02:59:53 PST 1996

- Bug fix from Atony Richards to fix run-away source allocation problem when receiving packets through the Fore ATM module.
- Addition of load_stat class and hooks to store decode and rendering timing information. This is to serve as an eventual basis for load adaptation. (Kevin Fall)
- Integrated several bug fixes for 32-bit parallax capture from Tie Liao's.
- Implemented a transition strategy for the fact that v2.7 is currently incompatible with the RTP/H.261 payload format specification (the GOB and MB fields are swapped). To maintain backward compat, v2.7 will continue to generate the illegal format. The decoder in v2.7a33 and later can handle either format. (The decoder assumes the bug, then if its sees an out of range gob, reverts to the spec format.) We will fix the bug in v2.8. At this time, v2.7 decoders will still work (but hiccough on each new stream).
- Integrated John Brezak's port to Win95/NT! We haven't tested this code so it might be a few more versions before it stabilizes (or even compiles out of the box).
- Fixed nagging bug in window drawing code that caused bottom of border to be garbled on redraws triggered by expose events.
- Reverted to Motif-style menubutton bindings (undoes 2.7a17 change). The previous binding introduced a race (bug reported by many...) and was inconsistent with other Motif/tk apps.
- Added Jim Lowe's. video spigot grabber. Jim says: The spigot is an ISA video capture card with the phillips 7191 chip on it. It can do about 10 fps in 320x240 mode.

### v2.7a32 Mon Dec 11 21:40:08 PST 1995

- CIF grabber for VigraPix board was broken - it would grab two fields instead of one which resulted in a bizarre image. Reported by Hans Mayer.
- Allow user to set initial window geometry with a Vic.geometry X resource.

### v2.7a31 Mon Dec 4 11:35:29 PST 1995

- Fixed bug that caused exit on unknown font. Reported by Xander Jansen.
- Fixed typo in encoder-h261.cc that prevented compilation on 32-bit little-endians. Reported by Jim Lowe.

### v2.7a30 Sun Dec 3 22:43:14 PST 1995

- Removed a bunch of unused variables thanks to Andrew Cherenson. (We need to start using gcc -Wall again...)
- Added misordered packet stat (that was present in vat-3). Change suggested by Lee Elson.
- Patched memory leak in grabber-plx.cc thanks to Bob Olson.
- Fixed bug where adaptive quantizer would sometimes get set to zero at high qualities (Q less than 5). Problem reported by Lucia Gradinariu.
- H.261 decoder was discarding high bit of quantizer in fragmented packets. This would produce awful quality & horrible artifacts at Q greater than 10.

### v2.7a29 Mon Nov 13 21:50:51 PST 1995

- Fixed tcl run-time errors introduced by "still" capture device. Reported by David Meyer and Alden Jackson.
- Fixed bugs in halftoner for mono displays. Changes from Elan Amir.
- Fixed bug in JPEG decoder that caused core dump thanks to Elan Amir.
- More fixes from Andrew Cherenson for compiling with SGI's C++ compiler. Also fixed bug that caused tcl run-time error when trying to "optimize colormap" when grayscale rendering active.

### v2.7a28 Sun Nov 12 00:50:15 PST 1995

- Fixed bug that prevented H.261 format button from being enabled under XIL capture. Problem reported by David Meyer.
- Added support transmitting a static JPEG image from a file. Contributed by Bob Olson. You need to set Vic.stillGrabber to true in order to get a still device in the Device menu-button. When you select this device, a panel will be inserted in the control menu to let you specify the file anme for an RTP/JPEG type-0 frame. This crude interface is currently just for testing.
- Fixed compilation problems with SGI's C++ compiler. Reported by Andrew Cherenson.
- Kevin Fall added support for ``fast Intra-H.261'' encoding using JPEG hardware. The idea is to use a JPEG board as a DCT engine by Huffman decoding each JPEG MCU. We then carry out conditional replenishment in the DCT domain and hand the frame buffer of DCTs to a modified H.261 encoder. The trick is to convert 4:2:2 color decimated JPEG into 4:1:1. This technology is described in our ACM Multimedia paper. (By default, this is currently disabled. Enable it by setting Vic.useJPEGforH261 to true.)
- Fixed problem with object compatibility between distributed version of grabber-rtvc.o and newer versions of gcc. Workaround suggested by Toerless Eckert.
- Fixed bug with PAL/CIF input, reported by several testers. 16 pixels on either side of the image was incorrectly cropped.
- Added support for the Matrox Meteor Video adaptor, a PCI-based capture board, thanks to Jim Lowe. A driver is available (in source form) for FreeBSD. See ftp://ftp.cs.uwm.edu/pub/FreeBSD/meteor*.
- Fixed bogus error message when specifying "-n atm" with a vic binary that doesn't have compiled-in ATM support. Bug reported by Markus Backstrom.
- Fixed bug that caused last_sr field in RTCP sender reports to be miscomputed. Reported by Paul Stewart.
- Fixed bug where SDES "note" attribute was not displayed next to thumbnail as intended. Reported by Craig Votava.
- Fixed rate control stats (again) in transmission panel, which were being updated incorrectly.

### v2.7a27 Tue Oct 17 02:49:29 PDT 1995

- Forgot to re-configure solaris source directory, so the a26 solaris binary was bogus. Re-released a26 as a27 for solaris. (There is no change in the any source code between a26 and a27, and thus no reason to update any of the other binaries.)

### v2.7a26 Mon Oct 16 23:23:09 PDT 1995

- Fixed bug that caused bogus srcid generation on alpha (DEC's atoi saturates it's result to 0x7fffffff so we use strtoul instead).
- Tried to make setting of q factor in cosmo grabber more robust.
- Fixed bug in external device menu button. Instead of building selection list when window is created, build it when menu-button is invoked so user gets an up to date list.
- Fixed bug in jpeg decoder that caused core dumps when changing the quality parameter.
- Added more validity checks to conference bus messages.
- Fixed bugs in compositor (which the title maker uses) introduced by changes to CR scheme.
- Fixed rate control stats in transmission panel, which weren't being updated.
- Added missing files to source distribution.
- Fixed bug that caused core dump in nv-compat mode.
- [internal]Factored out media-specific code from session.cc. Ivs, nv, and vat session handlers are all in separate modules now. Created separate video and audio session sub-classes since audio/video RTP payload types are not disjoint.
- Changed multicast address of Conference Buses. This avoids compatibility problems with the old binary protocol, but has the disadvantage that voice-switched windows need vat-4.0 or later.

### v2.7a25 Sat Oct 14 03:38:11 PDT 1995

- Change algorithm that transforms a text string into an encryption key. We now use an md5 hash and the algorithm/key syntax suggested by Mark Handley. For example, DES1/secret-key implies the standard DES algorithm with cipher-block chaining with key "secret-key" while DES3/secret-key implies triple DES. Added "DULL" encryption module for test purposes and as an example for integrating modules.
- Fixed md5 header file (global.h) to set 32-bit typedef appropriately for alpha; otherwise, it doesn't work correctly (and encryption keys are synthesized incorrectly).
- [internal] Merged the Transmitter and SessionManager objects since packet transmission depends on the session type.
- Fixed bug where parallax capture window was iconified while the grabber was still able to send a frame. Reported by Joe Pallas.
- Merged patches from John Brezak to compile again under HPUX.
- Added Ron Frederick's DCT extension to the nv format, which gives improved compression at higher run-time cost. According to Ron, this extension will be in the forthcoming RTPv2 version of nv.
- Added check for *rtpName and *rtpEmail resources at start-up. If they don't exist, a dialog box queries the user and stores the new values in ~/.RTPdefaults. This seems like a more robust (albeit annoying) approach compared to the heuristics of used to find a fully qualified domain name.
- Changed thumbnail to relief to ridge and highlight border when mouse enters window to indicate that a button-click will do something. Suggested by Elan Amir.
- Made many minor changes in order to share code between vic and vat-4.
- Added a frame grabber for the SlicVideo SBus adaptor. Contributed by Toerless Eckert.
- Added a new mechanism to present grabber specific controls in the main menu. If a grabber wants such controls, the corresponding tcl procedure build.grabberName should exist (and build the UI). grabberName is the device "nickname", e.g., build.slicvideo exists to build the SlicVideo controls. When the user switches devices, the corresponding control panel is automatically removed and inserted by tcl support code. This extension suggested by Toerless Eckert, Joe Pallas, and others.
- [internal] Changed SessionManager::chkdup() to match sources who never sent data so that sites that exit abnormally don't build up source table.
- Fixed some bugs in the conditional replenishment algorithm and changed implementation to make it more intuitive. Encoders no longer alter the contents of the cr vector. Also, extended the old model from two types of blocks to three (motion, aged, and background), with three levels of quality.
- Enhanced H.261 encoder to do adaptive quantization. High motion areas are sent at low-quality (for higher update rate), ``aged'' blocks are sent at medium-quality, and background blocks are sent slowly at very high quality.

### v2.7a24 Wed Oct 4 22:07:42 PDT 1995

- Changed behavior of user interface when RTP message attribute is present. Instead of highlighting info button, replace the second line of the thumbnail description with the message. Revert to CNAME info when message text goes away. Suggested by Craig Votava.
- Fixed cosmo grabber to search through hardware inventory list and disable selector when no device is found. Otherwise, CL calls caused problems. Reported by Craig Votava and Hoofar Razavi. Hoofar suggested the fix (which was to use SGI's getinvent() system call and explicitly look for a cosmo board).
- Changed -lXext to appear before -lXvid on the link line because parallax client library defines an XShmPutImage that doens't seem to work.
- [internal] Fixed CaptureWindow class to work in the absence of shared memory support. Changed sense of xshm switch from NOSHM to USE_SHM because double negative was confusing.
- More fixes to configure search for X support thanks to Joe Pallas (Pallas@Apple.COM).
- Fixed race in window resize code. Reported by Bob Olson (olson@mcs.anl.gov).
- Use Network::reset() hack under AIX.

### v2.7a23 Tue Oct 3 02:29:36 PDT 1995

- Fixed bug that caused first value of a plotted statistic to be way too large so that the autoscaling left all the other data unreadable.
- [internal] Don't include osfcn.h anywhere.
- Added PAL selectors to window size menu. Suggested by Toerless Eckert (Toerless.Eckert@Informatik.Uni-Erlangen.de).
- [internal] Factored out code shared among grabbers for capturing input video to an onscreen window. In the new model, tcl creates the capture window and installs it in the grabber. Revamped parallax and xv grabbers to use this approach. Added supported to xv grabber for CIF and 411 capture.
- Improved configure search scheme for locating X libraries and includes. Thanks to input from Toerless Eckert (Toerless.Eckert@Informatik.Uni-Erlangen.de).
- [internal] Added RGB_Converter class to be shared among grabbers that capture from the frame buffer in RGB format and convert to YUV.
- [internal] Removed grabber-tx.cc from distribution since it's been superseded by grabber-xv.cc.
- Finished implementing rtvc grabber support for listing multiple sunvideo devices in the device list as RTVC-0, RTVC-1, etc.
- Merged Bob Olson's patches for shared memory support under AIX. Fix additional problems with compilation under AIX 4.1.3 (as opposed to AIX 3). Tweaked the xv grabber for AIX 4.1.3 and to compile without shared memory.

### v2.7a22 Sat Sep 30 12:16:21 PDT 1995

- Fixed bug where failure to connect to jvdriver on decode-side resulted in a core dump.
- Added Vic.sdesList so you can specify which RTP SDES items you want to see in the info window. Default is "cname tool email mesg". Also, display srcid in the info window.
- [internal] Added tcl hook so that decoder can assert that stream parameters have changed in a way that might affect the rendering modules. For example, the RTP/JPEG type might change causing the output format to change from YUV-422 to YUV-411. In this case, we might have disable hardware decoding (because the hardware doesn't support 411) or reallocate the software renderers because they depend on the decimation factor.
- [internal] Changed interface between vic and jpeg/h.261 decoders with respect to bookkeeping blocks that changed. Now pass in a table that is filled in by the decoder, instead of using "render" call backs.
- Fixed bugs with -A. "-A rtp" didn't work; added back "-A vic" for backward compatibility. Reported by Toerless Eckert (Toerless.Eckert@Informatik.Uni-Erlangen).
- Added Use-Hardware button (in display panel) to control whether we use hardware decoding when possible. Created Vic.useHardwareDecode resource to set initial disposition of Use-Hardware button.
- Removed Vic.sunvideoDevice X resource and instead look for all available devices at startup so they are selectable from user-interface. (Default can be selected with Vic.defaultDevice, e.g., by setting it to RTVC-1.)
- Renamed "Decoder" panel "Display" and improved layout.

### v2.7a21 Thu Sep 28 00:28:53 PDT 1995

- Added support for IBM's Ultimedia Video I/O Adaptor under AIX, thanks to Bob Olson (olson@mcs.anl.gov).
- [internal] Fixed adios() so vic gracefully exists when interrupted.
- Better handling of -with-* args to configure and a few more fixes for AIX from Bob Olson (olson@mcs.anl.gov).
- Fixed bugs introduced by last round of bug fixes to encryption key manipulations. Reported by Craig Votava (Craig.M.Votava@att.com).
- [internal] Changed grabber/encoder API so that we can insert arbitrary processing modules between the capture device and the encoder. We now pass around frames as typed objects to the consume() method of generic Module class. Frames are self-describing so we no longer need the control API (e.g., setparams() and size()) between the grabber and encoder. This architecture arose from discussions with Kevin Fall (kfall@ee.lbl.gov).
- [internal] Changed decoder/renderer API as above.

### v2.7a20 Tue Sep 26 22:44:09 PDT 1995

- Fixed bugs with -K and -t (for ttl 16) reported by Craig Votava (Craig.M.Votava@att.com).
- Changes to configure. Can now specify paths to tcl,tk,blt source trees using -with-tcl=pathname etc. Always use -g with gcc.
- Ported to AIX. Patches contributed by Bob Olson (olson@mcs.anl.gov). Bob also supplied patches to bring linux support back in line.
- Fixed bug in net-ip.cc. IPNetwork::open() was returning garbage. Fix from Bob Olson (olson@mcs.anl.gov).

### v2.7a19 Tue Sep 26 14:44:19 PDT 1995

- Fixed bug that caused core dump in send_report() when device released.
- Fixed bug in parallax grabber introduced with changes from v2.7a14 to v2.7a17. Thanks to Jason Lee (Jason_Lee@lbl.gov).
- Added nv's halftoner to support monochrome displays. Elan Amir (elan@cs.berkeley.edu) ported the nv code to vic.
- Clarified warning message printed when *rtpEmail resource not defined.
- Disabled bvc button until we get the bvc codec in better shape.
- Changed cosmo and IndigoVideo grabbers to probe the device at startup and disable their selector in the user-interface if not available. Bug fix from Hoofar Razavi (hoofar@sgi.com).
- Fixed bug with switching capture devices when a device was already opened. Fix from Bob Olson (olson@mcs.anl.gov).

### v2.7a17 Sep 25 09:39 PST 1995

- Added support for the Parallax jpeg adaptor (both JPEG and standard capture are supported). Contributed independently by Joe Pallas (Pallas@Apple.COM) and Sai Rathnam (rathnam@cse.ogi.edu).
- Added a "Message" form to the control window so that user's can leave a descriptive message on the state of the transmission (for example, "out of office" or "meeting resumes at 2pm"). When the message is present in a stream, the corresponding "info" button is highlighted, which invokes the info window containing the text. (These messages use RTPv2 TXT SDES items.)
- Added Vic.sunvideoDevice X resource to indicate an alternative device to use. Set it to a small integer n to tell vic to use device /dev/rtvc{n} and /dev/rtvcctl{n}. This change suggested by Hanan Herzog.
- Added support for sending decoded video to an external (analog) output port under SGI VL (for example, SGI's galileo board has a composite output jack).
- Changed the default format to H.261.
- Added encryption hooks. You need to obtain a DES library elsewhere in order to build a vic with encryption support.
- Improved statistics displays with a legend and the ability to plot (via a stripchart) multiple statistics simulataneously. A stripchart is created in a separate window by clicking on the name of the desired statistic. Added an "info" window without the clutter of all the stats.
- Added a "Decoder panel" to the control menu with several controls for manipulating vic's decode-side functionality. You can now interactively select the dithering algorithm on an 8-bit display to dynamically change the number of colors used by vic. For example, if you want to run a color-intensive application but leave vic up, you can select the "Gray" dithering option, run your application and when done, revert vic back to color dithering. You can also adjust the gamma factor. If you set the gamma factor to 1.0 and select and "ordered dither", vic will use the standard 5x5x5 color cube. Since other applications use this same cube (e.g., wb, gs, and nv), you are less likely to run out of colors because of colormap conflicts. These controls are disabled when your running on an 24-bit or mono display. With these changes, you no longer specify the dithering algorithm using Vic.colorModel. Instead, you specify a visual with Vic.visual (i.e., truecolor, pseudocolor, etc) or with -V or -Xvisual (e.g., -Xvisual=truecolor). For 8-bit pseudcolor visuals, the default dithering algorithm is specified with Vic.dither (or -c, or -Xdither), but can be overridden in the user-interface (as explained above). The visual cannot be changed after startup.
- Added a "Save-CPU" toggle-button under the viewing-window "Modes" pulldown menu, which reduces the update rate of the window. This allows you to open a local looped back window for monitoring the outbound transmission without incurring the cost of rendering every frame in real-time.
- Changed "for" statement conventions to adhere to the proposed ANSI standard change which re-defines the lexical scope semantics of the initializer statement as described in http://www.cygnus.com/~mrs/wp-draft/stmt.html#stmt.for In order to be compatible with both the old and new semantics, we have changed all instances of for (int i = ... ) ... use(i); to int i; for (i = ... ) ... use(i);
- Ported to tk-4.0. You'll need BLT-1.8 to build vic from source. An unofficial BLT-1.8 is available from http://www.cs.uoregon.edu/jhobbs/.
- Merged changes from Michael Speer (speer@eng.sun.com) to compile with Sun's C++ compiler.
- Deleted -r option (for RTIP) and added more generic -n option to specify the communications protocol underneath RTP. "ip" (for IP or IP Multicast), "rtip" (for Tenet RTIP), and "atm" (for the Fore SPANS ATM API) are supported.
- Added Vic.defaultDevice X resource to specify initial selection of device when multiple devices are present.
- [internal] Migrated voice-activated switcher code from C++ to tcl.
- Added code to randomize the RTP initial sequence number and media timestamps to foil plaintext attacks in case encryption is used (as specified in the RTP spec). Choose a heuristic random seed using an MD5 hash as suggested in the spec.
- Eliminated support of unidirectional RTIP connections (i.e., connections are now always esatblished in both directions).
- Changed VL module to query available devices and list each device separately in the control panel. Also, added code to query the available input ports and dynamically configure the port menu accordingly.
- Changed RTP presentation timestamps to the 90Khz format agreed upon at the July 1995 Stockholm IETF.
- [internal] Fixed bug where a garbage video stream (e.g., from an encryped session) could cause rendering code to fault. Problem is that rendering code assumes (possibly scaled) output image width is an integral multiple of four (which is true for the range of supported scales and the geometries of standard video streams). Since this is a pathological condition, the fix is to simply disable rendering of such streams thereby avoiding the software fault. In theory, non-standard video sources (like X screen captures) could fall into this category and hence appear as a "gray window". This problem reported by Ian Wakeman (I.Wakeman@cs.ucl.ac.uk).
- Added support for point-to-point ATM transport via Fore's API, thanks to Anastasio Andrea Scalisi (scalisi@mailer.cefriel.it). In the process of integrating this code, reworked network object support so that new network abstractions can be more easily added. Added -n flag to specify network type. For example, "-n ip", "-n atm", and "-n rtip" are currently supported (ip is the default).
- Added hack to be able to utilize two DEC JPEG boards simultaneously. The environment variable JVIN_PORT specifies the jvdriver port number to connect to for the capture board. The decode side uses the default port. This change contributed by Lance Berc (berc@pa.dec.com).
- Deal gracefully with shared memory allocation failures. Added code to print out an error message and revert to non-shared buffers.
- Fixed bug in voice-switched windows where a speaker without a video stream would cause the window to be switched to the first thumbnail.
- Added validity check for new packet stream. Only accept a new source when we've seen two in-sequence packets; suggested by Ian Wakeman (I.Wakeman@cs.ucl.ac.uk). This check prevents vic from allocating an unbounded number of demultiplexing data structures when confronted by a stream of garbage (e.g., such garbage results when listening to an encrypted session without the key).
- Changed reception reports loss semantics to conform to 3/21/95 RTP draft (draft-ietf-avt-rtp-07.txt) (in particular, the extended highest seqno received field, the loss fraction, and the cumulative loss fields of the reception report were updated).
- Added check for duplicate packets in common receive path so that they are now reported in the stats window for all compression formats.
- Added support for SGI Cosmo JPEG board. Because this board was designed for non-linear video editing, it has large latencies that preclude good interactive operation.
- [internal] Moved code to allocate framer buffers etc., which is shared among all the grabber subclasses, into the grabber base class. Changed the way grabbers specify their attributes; they simply return a nested tcl list. Reorganized all tcl-style objects (i.e., widgets that implement tcl commands) so that they derive from a shared TclObject base class. Support hardware assisted decoding via new Assistor class (instead of having separate Decoder objects). Assistors are analogous to Renderers; the latter support software decoding. Revert to model where there is only one Decoder object per incoming stream.
- [internal] Reworked the way encoders and grabbers are allocated to make it easier to add support for the encode-side of a new format. Suggested by Joe Pallas (Pallas@Apple.COM)
- Fixed bug that caused crash using DEC j300 hardware JPEG decoder. Problem was that default Vic.jvColors was not defined. Reported by Stefan Savage (savage@cs.washington.edu).
- Changed video capture modules to embed NTSC sized images into CIF sized frames with a gray border instead of using ugly scaling. PAL is still handled the same way (i.e., 16 pixels from each line are discarded).
- Changed default position on frame rate slider from two to eight.
- Added support for native size 4:1:1 YUV grabbers (i.e., not just CIF dimensions).
- Added support for the VigraPix frame grabber. Thanks to Steve Haehnichen (steve@vigra.com) and Vigra for the donation of a board.
- [internal] Changed CR to operate on 16x16 instead of 8x8 blocks.
- Changed perceptually weighted H.261 quantization. Previous scheme that folded the weighting in with the DCT quantization was deficient because in addition to increasing the dead zone, it threw away bits unecessarily (and the loss of these bits was not captured by the h.261 entropy coder). Instead, we now increase the dead zone using perceptual weighting after we do quantization.
- Fixed bug in conditional replenishment algorithm. CR decision was based solely on the first 8 pixels of every block, so motion of small items (like pointers) left artifacts behind. Fix was to advanced CR scanline pointer (as intended in the algorithm).
- Updated H.261 framing to conform to July 1995 Internet Draft "RTP payload format for H.261 video streams" (draft-ietf-avt-h261-01.txt). Maintained backward compatibility with ivs encoder by using the RTP version number to imply the old encapsulation format. Once ivs switches to RTPv2, we can abandon the GOB reassembly code.
- Patched memory leak in nv encoder. Thanks to Bernd Lamparter (lampart@ICSI.Berkeley.EDU) and Wieland Holfelder (whd@ICSI.Berkeley.EDU).
- Fixed bug where checkXshm was not detaching the test shared-segment in the X server. The X server could see two XShmAttach's with the same shmid (one readonly the other read/write), and the prior one becomes invalid. Bug fix from Srinivasan Seshan (ss@cs.berkeley.edu).
- Added check for session packets arriving on data port. This should eliminate the gray windows with fmt-0x1 and fmt-0x0 as the media type.
- Fixed bug where source sequence number was reset to 0 when changing the compression format. This would cause receivers to reset their packet counts, which in turn, caused inconsistent reception reports. Problem reported by Paul Stewart (stewart@hibp6.ecse.rpi.edu).
- Shared memory with the X server now works under BSD/OS 2.0. Unfortunately, the BSD/OS 2.0 X server is not compiled with the XShm extension. You might ask Srinivasan Seshan (ss@cs.berkeley.edu) for a pre-compiled XFree86 server, if you don't feel like building one from scratch.
- Fixed session message timestamps to conform to NTP epoch instead of unix 1970 epoch. Bug reported by Bernd Deffner (deffner@fokus.gmd.de).
- [internal] Fixed bug where rtpv2 source tcl-methods were derived from the RTP SSRC. This caused numerous problems when sources would come and go (or when SSRC's collided, which is relatively common with the heuristic to generate them in rtpv1 compat mode).
- Changed semantics of -u. File argument to -u is sourced after the built-in tcl script. Previously, -u completely overrided built-in script.
- Added code to source $HOME/.vic.tcl if it exists. This file is sourced after the built-in tcl script, but before the file argument to -i. Suggestion from Bill Fenner (fenner@parc.xerox.com).
- [internal] adaptive load rendering
- Fixed several bugs in RTCP packets.
- [internal] Made it easier to add new decoders. A new format can be supported without having to change any existing code. Design change suggested by Joe Pallas (Pallas@Apple.COM).
- [internal] Established convention that all YUV image buffers are contiguous so that chroma offsets can be computed where needed (and only a single pointer need be maintained).
- [internal] Reimplemented switcher architecture in tcl and created generic Conference Bus object.
- Changed semantics of -u option so that file argument is sourced in addition to (rather than in place of) the built in tcl code.
- Incorporated Garrett Wollman's (wollman@lcs.mit.edu) patches for FreeBSD.
- Fixed some problems with the VL grabber. Added PAL CIF support and code to choose from set of allowable frame rates (frame rate problem reported by many - thanks). Deleted vlSelectEvents call. Fixes from Andrew Cherenson (arc@sgi.com).
- Converted configuration scheme to use GNU autoconf. If you encounter problems running ./configure, please see if you can fix things by modifying configure.in and running autoconf (avaialable in ftp://prep.ai.mit.edu/pub/gnu/autoconf*). Then, send us your fixes so vic's configure script will work out of the box for you in the future.
- Changed binding on pull-down menu buttons so that you can click on button a second time to make the menu go away. This change suggested by Pat Parseghian (pep@research.att.com).
- Fixed xil grabber to conform to Solaris-2.4 API. Problem reported by David Meyer (meyer@network-services.uoregon.edu) and Michael Mealling (Michael.Mealling@oit.gatech.edu).
- Changed Vic.defaultRate to Vic.framerate to make less ambiguous, and fixed explanation in man page, which was bogus. Reported by Pat Parseghian (pep@research.att.com).
- Fixed bug with default format (it was never used). Reported by Pat Parseghian (pep@research.att.com).
- Fixed bug where color button would get out of sync with actual color disposition when changing encoding formats. Reported by Pat Parseghian (pep@research.att.com).
- Bring IndigoVideo module up to date. Changes from Andrew Cherenson (arc@sgi.com).
- Ported to Linux, thanks to patches from Vesa Ruokonen (Vesa.Ruokonen@lut.fi). v2.6beta Mon Dec 5 00:26:42 PST 1994
- Changed VIC.SD.TCL script to use ivs (instead of vic in ivs compat mode) by default, since ivs' rate control scheme depends on feedback reports that vic does not generate.
- Made H.261 decoder more robust to packet loss and reordering. Problem reported by terje.vernly@usit.uio.no.
- Upgrade release status from ALPHA to BETA.
- Incorporated John Brezak's (brezak@apollo.hp.com) changes to support generic Xvideo devices. He says:

- You need a fixed libXv.a (get the source from ftp.x.org and apply patch in grabber-xv.cc)
- Haven't implemented cif_grabber(). Maybe next week.
- There are 2 config options - XV_PSEUDO8 and XV_USES_XSHM . XV_PSEUDO8 is for allowing an 8bit visual to be used to upply a capture window for a 24bit image. HP does this. XV_USES_XSHM is for an Xv extension that can use the SHM versions of image operations. Parallax currently doesn't support this on HP.

- Incorporated Greg Earle's (earle@isolar.Tujunga.CA.US) and Paul Kranenburg's (pk@cs.few.eur.nl) (independent) patches for NetBSD/sparc.
- Fixed bug that caused core dump when deleting local thumbnail. Report by George Michaelson (G.Michaelson@cc.uq.oz.au).
- Fixed "can't unset name_line" bug. Reported by Steve Casner (casner@isi.edu) and others.
- Fixed bug that caused video capture to hang when switching input ports with SunVideo. Reported by speer@eng.sun.com (Michael Speer).
- Fixed VIC.SD.TCL to generated -I options correctly for voice-switched operation. Bug report and fix from a61@nikhef.nl (Herman van Dompseler).
- Arranged for viewing windows to be remapped without user placement at the same location and size when dismissed (suggestion from George Michaelson).
- Fix bug that unecessarily caused decoder data structures to be created and destroyed when initializing a new stream (fix from Bernd Lamparter (lampart@ICSI.Berkeley.EDU)).
- Fix bug that caused error message when invoking release button at wrong time. Reported by a61@nikhef.nl (Herman van Dompseler).
- Fix bug that caused error message when invoking lock button at wrong time. Reported by Dan Molinelli (moline@gumby.sp.TRW.COM) and several others.

### v2.5alpha Wed Nov 30 01:41:55 PST 1994

- sd.tcl script was wrong - vj used a "switch" construct in a "case" command which doesn't work. also forgot to say "global vic" before using $vic.
- wasn't supplying correct timestamp in session messages in nv compat mode so nv-3.3 would occasionally 'lock up' ignoring either session or data packets. (bug reported by George Michaelson)
- made first cut at support for 32-bit visuals (e.g., parallax card). (problem reported by Steve Casner)
- fix long-standing bug in h261 decoding: were not swapping front & back buffers if only leftmost mba of gob was rendered. (problem reported by Graeme Wood)
- was never using shared memory to talk to x server because of stupid initialization error. (bug & fix suggested by Greg Earle)
- don't drop core in strlen() if we're given a video format we don't know about.

### v2.4alpha (no v2.3) Tue Nov 29 04:53:15 PST 1994

(First public release)

- Added -P command line argument to force use of private colormap.
- Added the -X command line argument. "-X resource=value" will override an arbitrary vic resource on the command-line. Removed -e and -p options.
- [internal] Reworked packet demultiplexing code so that it is independent of vic, eventually allowing it to be shared by other applications (i.e., vat, wb, etc). The motivation is to share as much code as possible with vb.
- Fixed usage message.
- Added support for -o, which dumps locally sourced video to an RTP clip file.
- Added Vic.filterGain resource for controlling time constant on bit-rate, frame-rate, and loss estimators. Default is 0.25.
- Changed menu popup to have generic layout indepedent of capture device. Portions of the interface are enabled or disabled by querying the device to see what features are supported.
- Fixed H.261 encoder to do GOB-oriented rather than frame-oriented fragmentation.
- [internal] Added traffic smoothing so packets are evenly spaced across a frame time. This adds latency but is necessary given the current constraints of Internet routers.
- [internal] Do second cut on rtp/jpeg reassembly code. This version does a reasonable job with misordered packets etc.
- [internal] Reorganized grabber/encoder architecture so that conditional replenishment algorithm is carried out by the grabber. This saves bus bandwidth because blocks that are to be suppressed need not be copied from the grabber specific format to the format expected by vic. If the capture device uses programmed I/O, there is little advantage but no disadvantage. You might think this would complicate the grabbers, but most of the work is carried out by a generic macro.
- [internal] Converted bstrings routines to posix equivalents.
- Changed the polarity of -H, which nows means use hardware decoding if available. The default is not to use hardware assist (see the man page for an explanation).
- Added support for error-diffusion dithering, thanks to Elan Amir. Error diffusion dithering is now the default rendering technique on 8-bit color displays. You can revert to the ordered dithering technique (similar to that used in nv) by specifiying the "od" color model with the Vic.colorModel resource or the -c command option. Error-diffusion runs somewhat slower than the ordered-dither but the quality is higher. Also added support for computing statistically optimized colormaps using Heckbert's median cut algorithm. You can invoke the colormap optimization from the "Colors" panel in the control menu. This causes vic to compute a color histogram across all unmuted video streams. The histogram is then passed to a separate program (vic_colord) to carry out the median cut. We fork off a separate process because the computation is CPU intensive and will block the user-interface if not run as a separate thread.
- Changed 24-bit display code to use full 24-bit precision instead of a 16-bit lookup table (thanks to Van Jacobson).
- [internal] Reworked the way windows are sync'd to the frame buffer.
- Use private colormap when default colormap is too full.
- Compile with gcc-2.6.0 under DEC OSF. DEC's C++ compiler is no longer supported.
- [internal] Changed ppmtolut and color-lut.cc to use convention that grays are explicit in the stored color map.
- Added support for simple INTRA-only H.261 encoding.
- [internal] Major changes to DCT code and software decoders for substantial speedups. Employ Arai, Agui, and Nakajmia's 8pt 1D DCT, from Fig. 4-8 Pennebaker & Mitchell (i.e., the pink JPEG book). By computing scaled DCTs on each of the column and row passes and folding the descaling step with quantization step, only five multiplies per 8-pt DCT are required, resulting in a 90-multiply 8x8 DCT. Thanks to Martin Vetterli for explaining how to do this.
- Fixed bug that caused core dump if there is no USER enviroment variable defined (and Vic.sessionName is not defined). Some shells don't define USER (i.e., ksh under solaris).
- [internal] Reworked speedups in software jpeg decoder. Instead of caching mappings between huffman strings and decoded blocks (which required an infeasibly huge hash table for good quality video), we reduce load by skipping over any block that is sufficiently similar to the same block that's currently displayed. The similarity comparison can be carried out cheaply in the quantized, DCT domain.
- Change thumbnail frame rate to report decoding frame rate when not disabled and receiving frame rate when disabled. The decoding rate can be lower than the receiving rate if the local cpu can't keep up with the source, or if there are no active windows (besides the thumbnail) which means we don't have to decode every frame.
- Modified thumbnail/info window so that sites are always sorted in lexicographic order (by rtp NAME attribute).
- Modified thumbnail/info window to tile according to the number of columns specified in the "Tile..." pulldown in the Menu window. The default value is 1, and can be overridden with the the Vic.tile resource. You can also type a number into the thumbnail window as a shortcut.
- If 75dpi fonts aren't available, change all fonts to wildcard the pitch.
- Sourcing video from clip files is no longer supported. This functionality is now provided by rtp_play.
- Added source rate statistics to transmission panel in menu window. This way you can monitor how fast you're sending even if the loopback decoding can't keep up.
- Added Vic.defaultFormat resource to set the default video transmission format. If not specified the default is determined by your capture hardware (for example, jpeg is default if you have jpeg hardware ).
- Ported to Solaris 2.3. Added XIL support for raw capture and JPEG, H.261 and CellB hardware capture (the sunvideo card currently doesn't implement H.261).
- [internal] Generalized jpeg decoder to deal with arbitrary decoder parameters (and subclass special cases to optimize). In particular, we can now deal with 4:1:1 jpeg, which the SunVideo produces.
- Add code to distinguish between j300 and jvideo and for the latter to disable non-JPEG formats and 1:1 decimation.
- Added code to receive path to always deal with RTP version 1 packets properly.
- [internal] Created SoftwareDecoder, PlaneDecoder, and SoftwareRenderer sub-classes so that a bunch of common code could be shared among the decoders.
- [internal] Broke out block suppression code into separate sub-class so it can be shared among the nv, nvm, and cellb encoders.
- Small change to architecture to cope with dynamic geometry and video format changes.
- Ported to DEC OSF/1 v2.0.
- Added CellB support (based on the code in nv and the RTP/CellB Internet Draft). Sped up the encoder by a factor of two by using straight-line code instead of conditionals in the Y/Y VQ computation. Changed the U/V VQ to use straight subsampling instead of LPF/subsampling since the chroma planes usually have little high frequency energy (and visual comparisons show negligible gain). Sped up decoder by replacing conditionals with straight-line code. But the biggest improvement was to run the conditional replenishment algorithm in the pixel domain instead of the cell domain. There is little hope of doing good temporal compression on quantized values, because the quantization noise is approximately a random process with variance proportional to the quantizer step size, and this additive noise will completely defeat the conditional replenishment algorithm. Running the differencing in the pixel domain will give much more effective temporal compression, which reduces network bandwidth and saves CPU cycles.
- Fixed bug that caused nv & ivs senders to never be deleted from the main window.
- Changed model so that video capture device is opened first time transmission is invoked, as opposed to at start-up. Still need to implement device sharing as vat does with non-shareable audio hardware.
- Fragment JPEG streams instead of letting IP do the fragmentation. RTP/JPEG protocol still in limbo.
- Changed semantics for clicking on thumbnail. If the site is already being displayed (in locked mode), the corresponding window is deleted. Otherwise, it is created as before. This gives toggle-like behavior as in nv.
- Always use vanilla rtp headers instead of vic-specific packet format.
- Improvements to ordered dithering code. Incorporated Ron Frederick's model from nv v3.3alpha, i.e., to fold the dither matrix into the color-to-pixel lookup table. Van sped up this code by incorporating his hacks from the 24-bit color code.
- Improvements to user interface. Looks more like vat now.
- Added -c to specify the color rendition technique.
- Added support for 24 bit displays (thanks to Van Jacobson).
- Added support for pip/tx grabber on decstations.
- [internal] Reworked grabber/encoder architecture. Added Device class. Arranged for most action to be initiated via tcl "device" command.
- [internal] Reworked jv grabber so that SharedVideoImage class allocates the shared memory. This means won't match the mme grabber model (i.e., the mme server will do the memory allocation), but that's okay since the right way to handle this is derive an MmeVideoImage from a SharedVideoImage.
- [internal] Changed all tcl grabber hooks to use the "grabber" command. Subclasses can catch invocations via the virtual method Grabber::command(argc, argv).
- Changed -f to -u to be compatible with vat (since vat already used -f for audio format). Changed previous -u flag to -U. Changed "-e encoding" to "-f format" to be consistent with vat. v2.2alpha Tue Nov 23 15:20:59 PST 1993
- Added support for decoding H.261 video. (The encoder isn't implemented yet.)
- Added the -A flag. '-A nv' for nv compatibiliry; '-A ivs' for ivs compatilibility. Took away '-n'.
- Fixed bug introduced in 2.1a that caused core dump on window resize. v2.1alpha Tue Nov 9 14:52:59 PST 1993
- Fixed bug that caused sparc-10 core dumps during xunet conference.
- Default JPEG decoder to color output instead of gray scale.
- Allow control window to be vertically resized.
- Fixed conference title bug. Default addr/port version wasn't displayed.
- Fixed bug that caused 12 bytes of garbage at front of nv packets.
- Fixes to compile with gcc under DEC/OSF.
- Update to tcl7.1/tk3.4.
- First cut at man page; needs much more work.
- Eliminate chud at bottom of J-Video windows that are 232 pixels high instead of 240.

### v2.0alpha Tue Oct 19 17:48:26 PDT 1993

- Initial alpha binary release to xunet sites.

[Return to main vic page]