MODIFICATIONS FILE ------------------ The modifications here include the development versions, not all of which are released. This list is not intended to be comprehensive. The current release is available at http://www-mice.cs.ucl.ac.uk/multimedia/software/rat/ v0 Initial audio tool Old VAT and RTPv2(5) compatibility PCM DVI GSM LPC codecs v1 Vicky's restructuring Dropped old VAT compat mode Used in ReLaTe trials New UI including small mode Video Sync code added v2.0 Transmitter cleaned up Lots of bugs fixed Replaced DVI and LPC codecs with VAT4 versions Released in Boston WWW4 v2.1 Ported to Tcl7.3/Tk4.0 Added UI response slider v2.2 Added play and rec options v2.3 Port to Tk4.1/Tcl7.5 v2.4a0 Port to Windows95 v2.4a1 Fixed active speaker indication v2.4a2 Fixed GSM v2.4a3 Release to MERCI partners for testing v2.4a4 Fixed broken assertions... v2.4a5 SGI fix v2.4a6 Security holes fixed Assertion handling improved Start at encryption and multi-rate audio v2.4a7 FreeBSD modifications Fixed playout calculation (probably) v2.4a8 Added RTCP SDES TOOL field to stats panel Fixed version number Made packet repetition an option and set default to OFF Fixed encoding selection bugs Misc bug fixes.... v2.4a9 Fixed participant display when audio device is busy When device is busy audio controls get disabled Added code to set microphone gain under Win95 Modified loop timing for win95 version so that it does not hog CPU Made session title appear as window title with -C flag v2.4a10 Added OS type to RTCP tool string v2.5a0 Fixed long DVI packet format. Now there is only one state (VAT comp). Reduced UI window border width. New look! Added scrollbar to participants window New participant stats code. Allows multiple windows... Attempt to fix some of the stats Popup window to request RTP name if resource not set v2.5a1 Changed redundancy packet format to conform to UCL-INRIA spec Added error code to report use of old packet format New code to do encoding name stats Fixed RTCP RR packets to conform with latest spec Made RAT look in .RTPdefaults for user name Added IP address display in stats v2.5a2 Highlight other RAT users in list of participants Ignore audio until RTCP packet received v2.5a3 Added encryption (Darren said it's compatible with vat) v2.6a0 Added command line option to set redundancy type Started to change payload type to match draft-perkins-rtp-redundancy-01.txt (Grouped headers, but haven't changed bit order yet...) v2.6a1 Finished changing the payload type. Default redundancy pt=121 Send initial RTCP message as soon as we start up... v2.6a2 Allow window to resize horizontally (requested by vilhuber@cs.colorado.edu) Updated copyright notice. Updated about panel. Added -pt pt/codec/clock/channels command line option. Example: "-pt 121/redundancy" to set redundancy payload type to 121 Remove -rpt option (use -pt instead). Remove -f2 option. Change -f option to accept things like "-f pcm/dvi" to set redundancy type. v2.6a3 Fixed packing order so it resizes horizontally correctly. v2.6a4 New WIN32 version Changed priority of thread Fixed cushion code to work with I/O switching Linked tcl and tk with WIN32 binary so no DLLs are needed v2.6a5 Partial rewrite of win32 audio driver to use static buffers Solved most win32 audio problems v2.6a6 Made the prompt for .RTPdefaults information less user hostile Fixed LPC decoding on SGIs (-fsigned-char does it!?!) v2.6a7 Removed old bitmap from control panel Rewrite of small user interface (command line option -smallui) v2.6a8 Further rewrite of the small user interface Fixed SO_REUSEADDR HP-UX fixes Added "-crypt " command line option to enable encryption v2.6a9 Fix m/cast power meters when encryption is turned on. v2.6a10 HP-UX fixes v2.6a11 Remove debugging malloc when NDEBUG is defined. v2.6a12 Code cleanup in preparation for mixer Corrected URL on the about panel v2.6a13 Code cleanup in preparation for mixer Added -li option for multihomed hosts Removed annoying transient tag from pop-up windows. v2.6a14 Added an icon Win32 fixes Removed -li stuff, since it broke the win32 port. More HP-UX changes v3.0.0 Restructure code for audio translator/mixer Extended ascii hostnames (>15 chars) - useful for unicast Additional RTP header validation v3.0.1 Major restucturing of main_rat.c, and split into several separate files. Fixes for Linux. Include full/half duplex stuff in all versions. v3.0.2 Bug fixes to auddev_linux.c Fixes to RTCP header checks on little-endian machines. Now obeys xresources settings. v3.0.3 Experimental release for Linux Some fixes to encryption code: it still doesn't work though... v3.0.4 Major mods to init_session.c Added mixer code to linux port. v3.0.5 Fake TS start if we TOG packets Fix RTCP timestamp epoch to 1900 not 1970 to conform to RFC1889 Fix display of group address in options panel. Fix CNAME. Extensive changes for the audio transcoder/mixer. New HP-UX audio device driver from UiO added. v3.0.6 More changes for the audio transcoder/mixer. Fixes to Linux audio driver when in half-duplex mode. Added the -version option. v3.0.7 Major changes for the audio transcoder/mixer: First version to work at all! Now sources $HOME/.rat as tcl on startup Linux fixes v3.0.8 CNAME now uses dotted-quad representation of the IP address, not FQDN. 16bit linear audio throughout main code: not all device drivers fixed yet. Make DVI the default primary encoding. Added L16 (16bit linear, uncompressed) codec. Both sides of transcoder/mixer use same SSRC/CNAME. Calculate RTCP reporting interval, rather than using constant 6 seconds. Major rewrite of transmitter and receiver code (supports multiple red) Added CSRC processing to receiver Fix indication of active speakers Update device buffer cushion code Removed small (ReLaTe) UI Minor redisign of option UI Added lecture mode Linux port now works again v3.0.9 Added minimal LBL conference bus support Enabled voice-switching of video using LBL conference bus/vic Fixed SGI 16 bit Fixed WIN32 16 bit Slight highlighting of participants after they stop speaking Now uses tk4.2/tcl7.6 v3.0.10 Prehang and posthang added to new code IP_MULTICAST_LOOP is now on for the session port We can now parse our BYE message although it is wrong Packet repetition added to new code Audio DC bias removal added for all platforms v3.0.11 We can no longer parse our BYE message, since it is wrong! More UI changes... (packet format uses pull down menus) Disable powermeters option added Selective muting of participants possible with middle mouse button. Automatic bias removal (turns off if not needed) Fix handling of RTP packets with CSRC data Rewrite of RTCP handling code... Fix RTCP BYE packet Transcoder/mixer now passes RTCP packets Exponential fade on packets (no good) LPC redundancy alignment code (also no good) v3.0.12 Linear fade on repeated packets Fade on repeated LPC decoded packets Prevention of mixing dummies with no decompressed data Packet length shown in UI Can select N-level redundancy from command line (-f pcm/dvi/lpc for example) Fix parsing of command line options Lecture mode is on by default Turn off lecture mode as soon as we send data Added -loopback_rtp option for loopback of the RTP packets (RTCP loopback is always on) Added audio device trading via the LBL conference bus Added flakeway operation v3.0.13 Integrated transcoder/mixer into the main Rat code. v3.0.14 Move to tcl-7.6p2/tk-4.2p2 Fix linux/HP-UX ports Fix for flakeaway v3.0.15 Assorted bug fixes Hang onto multiple encoded data in receiver Logic into UI for redundant coding types Fix LPC redundancy (Ho Ho) Fix sending L16 with redundancy Fix auto-select of "Mike mutes net" when running on a half-duplex machine TCL_ALL_EVENTS in event processing loop (sockets from tcl scripts->fileevents) v3.0.16 Bug fixes to the transmitter Fix CSRC processing v3.0.17 Fixes for Win32 v3.0.18 Fix RTCP BYE packet on little-endian machines Muting of output now frees data Fix reception of 160ms packets Fix uninitialised variable in rtcp_db v3.0.19 Remove spurious debugging messages when we can't open the audio device Cleanup HP-UX audio driver v3.0.20 Can now select line-in/microphone input on SGI machines Added -K option to enable encryption (synonym for -crypt) Cleanup Linux audio driver Cleanup Sparc audio driver Cleanup for draft-ietf-avt-profile-new-00 Added -double_speed (16kHz) option Transcoder no longer hits stdin/stdout with audio ioctls Rewrite and optimize decryption of RTCP packets RTCP timer reconsideration done for every RTCP packet received (following presentation at Memphis IETF...) RTCP SR and SDES fixes Can now send/display PHONE, LOC and EMAIL SDES items. Fixed mike mutes net operation for half duplex cards. FreeBSD port now works. Win32 version uses registry to store defaults. v3.0.21 Added signal handler, to catch SIGINT and exit cleanly (with RTCP BYE) Linux device driver now accepts 16kHz operation. Assorted bug fixes to Linux device driver. Initialise device_time variable: prevents crash if we can't access the audio device. The use of strdup() interacts badly with xmalloc(). Fixed. Fixed transcoder RTCP BYE handling * Branch here: v3.1 development starts, later v3.0 fixes will have to * be forward ported v3.0.22 Remove debugging messages in statistics.c Remove WBS codec Remove -double_speed option v3.0.23 Linux port uses both audio channels, rather than just the left channel Linux port no longer repeatedly resets the volume to 50% Bug fix for HP-UX audio driver (Terje Vernly ) Fix CPU usage on Win32 v3.0.24 Fix encryption Fix loopback of packets Fix crash in LBL conference bus code, sending focus when the CNAME was NULL Fix RTCP header validation Fix RTP header validation when padding bit is set Modifications to WIN32 silence detection as PC hardware often breaks previous algorithm. Assorted Win32 bug fixes v3.1.0 Added the wide-band speech codec (use with the -double_speed hack) Cleanup statistics.c Fixed Win32 cname Made left mouse button on participants toggle stats on and off Keep input/output mode selection and gain settings when device trading Reorganize the codec_* files Add indication of loss rates to UI Add automatic gain control Fix CPU usage on Win32 GSM now implements 06.11 repair (so there) Fixed self induced LPC bug :-) Improved cushion code to give lower delay Completely fixed highlighting (honest) v3.1.1 Default RTP port is 5004 (draft-ietf-avt-profile-new-00) Turn off automatic gain control in the transcoder Linux port uses both audio channels, rather than just the left channel Linux port no longer repeatedly resets the volume to 50% UI user participant code now maintains sorted list No longer source $HOME/.rat on startup Separate the UI from the media engine (use conference bus for communication) v3.1.2 Many changes to the conference bus protocol and support code Allow multiple UI scripts (use -ui to select) Unify Linux/FreeBSD drivers into auddev_oss.c Fix HP-UX audio driver (Terje Vernly ) Fix encryption code on little-endian machines Fix RTCP header validation code Fix security hole in confbus (zap [] in strings send to tcl) Add Anna Bouch's UI code (use "-ui anna" to enable) Add ReLaTe UI code (use "-ui ReLaTe" to enable) v3.2.0 - Codec interface rewrite. Based on structure holding all codec parameters and pointers to init/encode/decode functions. - Multi rate support. Multiple clock support (one per participant plus a few internal ones to keep RTCP etc working). - Rewrite of transmit code. Circular buffer is gone and now a list of minibufs is used instead. Within each minibuf the unit_size (which is calculated from number of channels, freq etc) remains constant. - Rewrite of receive code to support multiple unit_sizes. Now each receiver has a separate receive buffer. Within each buffer units of different length can be mixed without any problems. The only restriction is that for any particular time segment all coded_units must be compatible (i.e same length /frequency/channels etc). - All the code understands number of channels, variable unit sizes and multiple frequencies. This information is deduced from codec information. This includes mix and statistics... - Added hooks for up and down sampling of remote participant decoded audio. - Cleaned up include file mess. Now each source file includes only required headers. In the process of doing so I cleaned up a few interfaces so parts of the code that do not need to know about structures don't see the definitions and work with pointers. - Various old and new bug fixes :-) - Probably some more changes that I can not remember now as I didn't bother to write them down as I was doing them ;-) - Reimplemented repair code from previous release and left hooks for pitch repetition and pattern matching. Now repair is multi-channel and multi-freq. - Centralized allocation of rx_queue_element's. - Added CD input support - Assorted bug fixes to the original UI - Add reception quality chart to the original UI - Fix encryption code on little-endian machines (again) - Cleanup RTCP code and headers - Many changes to the conference bus (Mbus) code - Assorted bug fixes to the transcoder - SGI version now sets initial volume to something sensible - Incorporated Luigi's mods to FreeBSD driver - Added Pattern Matching repair - Fix loopback of RTP packets - Modified rules_based_silence to work at rates other than 8K. - Add balloon help - Fix RTP header validation for packets with P bit set [Bill Fenner] - Fix transcoder timing (RTCP packets are sent much too often: loopback problem...) - Fix freeing of units held in the receive buffer, when an RTCP BYE packet is received. - Seems that FreeBSD (unlike the rest of the known universe...) has a SO_REUSEPORT, which we need to set if we're doing TTL zero multicast. Sigh. - Fixed timer code - works with all freqs that divide into 96000. - Added channel coding functionality - it should now be possible to slot in any scheme. - Reimplemented redundancy to comply with new channel coding regime. - Added interleaving. - Fix decoding of encrypted packet (no longer blocks...) - Fix encryption code on little-endian machines (again, again!) - Fix fragment size on Linux - Added header extension support. - Remove LBL conference bus support (exercise for the reader: write an Mbus to LBL conference bus bridge, to allow device trading...) - Add binding for Control-Button-1 to mute individual participants - Add lip-sync support - Major UI rewrite - New silence detection algorithm. - Fix parsing of RTCP SR/RR packets on little-endian machines - Fix of decoding path - repair works again now. - Separated out cushion code (cushion.[ch]) and cleaned a little. - Separated out the UI update code from the Tcl/Tk maintainence code. - Modularise Mbus code - Stereo (?) - Time code simplified. - Multi-channel silence suppression. - Misordered packets counted. - Remove NET_MUTES_MIKE and MIKE_MUTES_NET options. We now require a full duplex audio device to operate. This should not be a problem, since such hardware is readily available for all platforms we care about (and some we don't...). - Minor memory allocation optimization for native units and mbus block_alloc replacing xmalloc for fixed size allocations. - Modularisation of silence detection and voice activity code. - Transmit buffer simplification. - Changes labels on preferences panel to match sdr, since it makes sense that way, and the old labels were broken dammit! (and I don't care if they were the ones Windows uses....) - Remove flakeaway options (Cadbury's must hate us...) - Create RTCP database entries for new sources when we find them in SR/RR packets, rather than ignoring them. - Fix operation with -no_ui. This is not very useful though... - Hack the RTCP decryption code to accept encrypted packets from vat, even though vat sets the padding bit incorrectly, and gets the length of encrypted SDES packets off by one. - Fix source address checking in the mbus code - Added sampling options to transmission menu. - Added destruction code to coders and channel coders. - Make sure the random number generator is initialised before use. - Rejigged code to allow hot swapping of sampling format mid-session. - Fix RTCP reporting interval, when running at other than 8kHz - Change of RTCP reporting interval when freq changes. - Replaced old AGC code. - UI tweaks, bitmaps, titling, about panel. - Playout point limits now optional. - Allow for remote ui, enable with "-ui " - Watch for transmitter device clock being slower than ours and corrective action. - Cushion decrease only when not playing audio - stops interruptions. - Allow `wait for mbus init message' on startup with "-wait" - Redundancy new format - mods to rfc to match implementation. - Removed auto_path initialisation from init.tcl and aatk.tcl. - Interleaver (mk II) no longer halts the system (or works). - Powermeters frequency independent. - Own activity only sent when changing state. - Activity changes no longer refresh participant info. - Playout buffer size monitoring and device drift bias correction. - Fixed problem with codec recognition at startup when rate not 8k. - UI displays correct encoding with interleaver and redundancy. - Wrote a configure script - Graceful failure/stasis when device not available. - Bitmaps match audio i/o ports at start up. * Released to CAIRN/MECCANO for testing, 8 June 1998 v3.2.1 - Assorted tweaks to the UI - Cleanup mbus_encode_str interface - a small change to function rx_source_playout in mbus_engine.c - fixed bug in ui_update_video_playout - lip-sync support - play audio packets in no lip-synced mode when no RTCP SR is received even if lip-sync is enabled. Wehn SR is received, switch to lip-sync mode - bug in mbus resend code fixed. - Cleanup parsing of command line options - Add patches for HP-UX 10 from Dirk Meersman - Remove HP-UX 9 compatibility: it makes the code cleaner, and HP-UX 9 is completely obsolete anyway. Now if only we could do the same with SunOS 4... - Only allow lip-sync to be enabled if we are not running on the Mbus base channel - Table for format conversions. Windows ACM PCM Converter support. * Released for testing, 10 July 1998 v3.2.2 - Fixes for command line option parsing - Improvements to playout calculation (less togged) - Increased audio in receive buffer to be 1 cushion's worth. This makes handling "fast" senders easier and also reduces togged units - tcl2c now strips comments, 10-40% size improvement on tcl strings (UNIX only). - Removed fixed tables for g711 conversion. Now calculated at start time. - Increased minimum pitch length in pattern match repair (less pings). - Add support for TclX, and profiling of the tcl code - Attempt to optimize some of the more intensive Tcl routines - Reduce rate of power-meter updates, since profiling shows that is an expensive operation. - Added playout buffer size to participant info - Converted jitter into ms for ui - Increased initial estimate of jitter, and codec independent - Reduced average playout delay, now just add/subtract cushion surplus instead of whole cushion length to playout, i.e. we add exactly the right amount. - Rearranged files for more portable Windows configuration. * Released for testing, 17 July 1998 v3.2.3 - Added button in the UI to enable sound externalisation (the actual 3d audio code is not present yet). - Fix display of loss rates in the participant list ("loss diamonds") - Updated sdr plugin (in sdr v2.5a4) - Change initial silence detection threshold, such that we transmit until the detector has trained rather than suppressing. - Win32 release configuration added. - Added reset of saved settings when version change detected. - Minor change to low jitter playout handling. - Fix parsing of -K/-crypt options - Endian fix to RTCP packet forwarding code - Remove TclX support (as part of the planned move to using the Tcl plus-patch to cleanup the initialisation code). - Fixed playout point calculation problems. Playout buffer should now have same order as source timestamps, no overlaps allowed. - Powermeters tweak. - Move to winsock2.h, in preparation for IPv6 port. NOTE: This now requires that winsock2.dll is installed on Windows. - Win32 ACM G.723.1 code. * Release for testing, 24 August 1998 v3.2.4 - Cleanup networking code - Cleanup RTCP code - Only send an RTCP BYE packet if the number of members is less than 50. This means we just-about comply with the latest RTP draft, although we should really implement BYE reconsideration. - Fixed bug introduced into repair code. - Increased powermeter rate and added table to improve vu performance. - RTCP timeout frequency independent. - Got ride of speaker table code. Highlighting is now from when playout buffer created destroyed. - Fix GSM codec * Release for testing, 10 September 1998 v3.2.5 - Fix transmission mute/unmute * Release for testing, 10 September 1998 v3.2.6 - Move all system specific configuration options and includes into config_unix.h and config_win32.h to ease porting. Should also simplify things when we move to a common code library among the UCL tools. - Audio loopback in hardware for Solaris/SunOS and Windows. - Moved select on audio_fd out of networking code. - Centralized code that destroys and empties playout buffers. - Added "net mutes mike" and called it "Silence Suppression". Works off of creation and destruction of playout buffers. - Assorted UI tweaks - Move to using our own version of tcl/tk on unix machines, to avoid the problems with initialisation scripts being sourced from other installed versions. We no longer compile the tcl or tk initialisation scripts into rat. - Merge GSM codec into codec_gsm.[ch] - Modularize networking code - Mbus code now batches messages before transmission, to reduce the number of packets sent - Update Mbus command set to better match latest specification - Add 3d audio code - Add IPv6 support under Windows NT 4.0 using the stack from Microsoft Research (http://www.research.microsoft.com/msripv6/) * Release for testing, 9 October 1998 TODO -- They're features not bugs dammit! ---- - Bias should vary smoothly and not have jumps, it used to (shortage of time). - Channel coders need intelligent bail out fn's for when cc_units overflow (rare, but real problem). - UI lets you select packets larger than the MTU, which can't be sent - Display B/W of selected transmission options on transmission panel. - Dummy lecture does not work properly - Release audio option - Add/restore audio device trading - RTCP participant information is timed out too soon? - RTCP state is not freed when participants time out? (but it is removed from the UI) - Manual page is really out of date! - On IRIX different sample sizes and frequencies break device interfaces - SGI O2's don't have autosensing audio interface selection like Indy's. Need to allow manual input and output switching. - Transcoder is broken. Completely. - Disabling participant list doesn't work if the window has been resized - Put file manipulation ability back in (maybe) - Multiple participants with the same cname confuse things, since the UI uses the cname to distinguish... Hmmm..... - Session data rate for RTCP reporting interval is hardcoded for PCMU-8k-MONO - Playout delays may be out of date in both tools (rat & vic) when lip-sync is enabled and when no talkspurt has been sent/received for a while (e.g when the speaker stops talking for a while) - When silence suppression is off, then no mbus lip-sync messages are exchanged between rat & vic since this is done on a per-talkspurt basis by rat. We may use a timer to send such messages every so often. a timer to send mbus messages every so often - Put widget tabbing in. Why did this break? - Need to implement RTCP BYE reconsideration - UI doesn't work on SunOS? Reported by Bill Fenner who still uses this... - Still have playout bugs, either low-jitter or high loss. Having much trouble in the CAIRN sessions.