MODIFICATIONS FILE ------------------ $Id: MODS,v 1.312 2003/04/01 16:00:08 ucackha Exp $ Copyright (C) 1995-2002 University College London All rights reserved. This software is distributed under license, see the file COPYRIGHT for full terms and conditions. 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 wh en 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/microne 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 packts 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 Fix voice switching of video using LBL conference bus with vic Modifications to WIN32 silence detection as PC hardware often breaks previous algorithm. Assorted Win32 bug fixes Win32 HOMEDIR bug fix. 3.0.25 Assorted Win32 fixes. 3.0.26 Fixed bug in net.c that caused packets to cease processing on some Win32 boxes. 3.0.27 Fix transcoder problems on half-duplex machines. Thanks to Sachin Sheth for providing the fix. Fix fonts for solaris 2.6. * Released 15 August 1998 3.0.28 Update copyright notice (the dates were wrong!) Endian fix to the RTCP packet forwarding code (Thanks to Sachin Sheth). Fixed HOMEDIR problem introduced in 3.0.27 for Win32. Fixed catch when sourcing ~/.rat * Released 22 September 1998 3.0.29 Added -smallui option to use relate interface and to enable power messages via the lbl confbus Fixed -drop option * Released 21 December 1998 3.0.30 Fix statistics in RTCP SR/RR packets Fix copyright notice in small UI Fix URL in the about panel * Released 6 January 1999 3.0.31 Remove obsolete tcl/tk library code Fix tcl/tk configuration on win32 Move to using winsock2.h on win32 * Released 29 January 1999 3.0.32 Fix Tk resource files on Win32 * Released 4 February 1999 3.0.33 Fix font in the statistics panel, which I broke in 3.0.31 (oops!) Added A-law audio codec. Back port from 3.2x. Added MMX mixing support. Patch from Michael Wallbaum for transcoder on win32. Made file processing use binary mode opens. Win32 cares. * Released 1 March 1999 3.0.34 Removed -D$(USER) from Makefile (Reported by Ola Borrebak). Added alaw to command line codecs (Reported by Dimitris Terzis). Winsock 1/2 detection and selection. Bug fixes for Winsock 1 built with Winsock 2 headers. 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 rat 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. When 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 c hannel - 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 v3.3.0 - Audio interface revamp. Support for multiple cards. - Osprey SunVideo Plus audio support added (buggy). - PCA audio support added on FreeBSD (builtin speaker). - Documented audio interface. - Replaced audio_fd with audio_device to emphasize this is no longer a file descriptor. - Added null audio interface for devices not attainable. - Safety net when opening an interfac - Fix LSR and DLSR in our reception report packets (maybe) - Fix muting of individual participants - Update mbus command set - Added virtual externalisation (sound source emanating from outside the head even when listened to with headphones) - File loading and saving added. - Playout calc refinements. - Repair schemes given queryable interface (like other modules). mbus and ui updated to reflect this. - Fix for fatal bug in channel decoder arising from duplicates and interaction with playout buffer. - Merge in IPv6 fixes from Maryann Maher - 3D rendering code added, debugged, and integrated into UI. - Audio device interface changes - input format may differ from output format. - format conversion in audio interface if dev does not support required format. - Win32 RTCP tool includes OS version of end host. - Win32 Multiple audio device support bug fixed. Uses matching card and mixer. - Fix stereo powermeters (work). - Convert to use the common code library - Disposed of old packet queues, now use simpler buffer and no nasty macros. (rx queue still there, when there's time it goes..) - Re-wrote codec interface. Codec wrappers appear in files codec_*.[ch] and codec implementation files appear in cx_*.[ch]. - codec_t axed and replaced with codec_id_t. Look at codec.h for manipulation functions. - Codec repair functions appear in codec interfaces rather than reair function. - Removed all RAT dependencies from codec code, repair code, 3d code, appart from a few basic types i.e sample, audio format, and coded_unit. - Disabled all channel coding except vanilla. All to be re-implemented. - Added ability to read number of samples written to and read from audio device. - Made audio device id's (handles) mirror codec id's. We now always have a valid handle for a device, and can read/write to it. - Removed interfaces.[ch]. - Replaced receive.[ch] with source.[ch] and replaced playout buffer code with playout.c. - Rewrote channel coder interface to be cleaner. - Removed unnecessary dependencies in rate and channel conversion code. Conversion routine now uses coded_units for input and output. - Moved codec_state_list onto source structure and channel_coder_state. - Fixed dependencies in repair and 3D rendering code. Their only dependencies are now the codec files. - Made converter interfaces same as audio device and codec interfaces. - Changed 3d rendered to always output stereo. - Fixed potential problem in 3D code where the audio frame size being passed is smaller than the delay the render applies causing samples to be shifted over the stack. - Added tests directory where people can through tests for modules if they care. So far have added test_3d.c which found the last problem and native.c used to fix bug in native coding types. - Fixed nasty bug in 3d rendered where at high sampling rates the delay size is larger than the storage buffers between intervals causing memcpy to overlap src and dst areas. - Fixed bug in vdvi frame peek code and sizes returned by vdvi_{en,de}code. All codecs pass tests in test_codecs. - Wrote timestamp code that allows easy comparison between multi-rate clocks. - Added first order differencing for sequences of timestamps so wraps in 32 bit clocks do not cause discontinuities in modulo m clocks and vice versa. - Added iterators to playout buffer. - Updated transmitter to use playout buffer with multiple iterators instead of former custom list code. - Modified channel code and source code for playout buffer iterators. - Fixed widgetabbing (due to missing tk library scripts). - CNAME now uses the IPv6 host address, if running on IPv6. - Move mbus heartbeat into the common code library. - Repair and duplicate handling put back into new decode path. - Separated sample ops into audio_util.[ch]. - Added MMX mixing code for Win32. - Moved bias control out of session pointer and into transmitter. - Removed support for multiple mbus channels. - Removed unnecessary include files from assorted source files. - Cleaned up device reconfiguration code. - Fixed l16 48k stereo name - was incorrect. - Renamed certain functions to make names congruent to group of calls. - Removed input_mode and output_mode from session_struct. - Restored playout buffer length reporting functions. - Added source flush if mix fails (source sample rate change). - Added repair failure code, should only fail if sample rate changes. - Added codec list option (-codecs) for launcher apps to know what is available. - Added payload mapping from UI. - Added Sun's G726 public reference version. - Redundancy encoder and decoder re-written but not linked in yet, needs debugging. - Rewrote win32 mixer interface code. No longer use string matching with pre-defined english names. Still have to use some string matching but only between names various controls from the driver spit out. Took circuitous route since no two driver vendors implement mixer functions in same way. Seems to be stable now. - Modularized audio ports so that device interfaces now return audio_port_details_t that contains string name and unique input/output identifier to be used for port selection. - Modified UI to have transmit and receive checkbuttons and replaced bitmaps with string names since we cannot guarantee win32 port names and changing between bitmaps and strings in the ui is ugly. - Fixed transmitter bug where temporary audio_buffer iterator was not being freed. v4.0.0 - Update license agreement -- we now use a standard Berkeley style license for all files. See the file LICENSE for details. - Removed output_gain and input_gain from session_struct. Should fix output gain going to zero on some updates. * Released 31 March 1999 v4.0.1 - Clarify license -- the LICENSE and COPYRIGHT files contradicted each other, we now only have one file (COPYRIGHT) which is a standard Berkeley style license. - Fixed problem with pseudo-devices (auddev_null and auddev_pca) that use gettimeofday to calculate how many samples are available. They were failing to include number of samples included in "device" buffer left over from previous reads. This meant device time was always slow. - Go back to ssrc rather than cname in UI for indexing entries. Issues running multiple instances on single machine otherwise. - Playout buffer skew adjustment added so when playout buffer deviates from expected size because source clock is different and signal is temporarily silent an adjustment is made. Only intervals when adjustment made is when packet has arrived in current processing interval so we do not adapt at the end of talkspurts. - Made repair and converters communication like that of input and output ports in ui. i.e. tool.rat.converters.flush, tool.rat.converters.add, tool.rat.converter. Defaults for repair and conversion are first type of module. - Issues with mixing multi-rate fixed. Existing code was not accounting properly for different sample rates when positioning new mixer head time. This probably got introduced when the time stamp method got changed since it definitely worked before (honest). - Added status bar's to file window. Hopefully clearer what is going on. Attempted fix button of state problems. - Caching of previous talkspurt jitter. Previously a fresh guess was made at the start of each spurt. - source_get_playout_delay now includes audio we believe to be in device buffer. So buffer shifts now work with cushion...hopefully. - Added counter for skew adjustments to make adjustments less aggressive. - Win32 mixer corrections - mixer control code now works with all the cards we have. Let this be the end of it! - Added read_and_discard for reading all available packets and discarding them. This is needed because there is a long delay between opening the socket and the first read (due to ui startup, audio device startup, etc...). As a result lots of audio was getting buffered at receiver with continuous sources at start up. - Fixes to linux audio driver - Fixed initial playout delay estimation. - Stopped interaction between skew ajustment and repair. - Assorted bug fixes to the UI - Attempt to get participant highlighting correct - Blending on samples dropped because of skew not quite there. - Added unsigned 8 bit to device formats and added to conversion routines. - Partial SoundBlaster support on FreeBSD (out s16, in u8). - Initial code for the move to using the RTP library - not used yet - WAV file MAKEFOURCC bug fixed for non-Win32 little endian machines. All platforms should be able to read WAV and AU files. - Changed skew adjust back so it invokes repair to cover would-be gap. - Enhanced sample drop during skew detection. Period that can be be dropped determined by pattern matching samples in frame to to have samples dropped in. Then blend in start of what would have been played to match point. Quality improvement more than compensates for extra cpu cycles. - Redundancy encoder working again (95% confidence :-). - Added dismiss button to file dialog. - Add support for DES encryption to the mbus (on by default). - Fix encryption. - Fix UI codec failure when changing sampling config and no codec with same friendly name exists. Also fix for redundant codec displayed when primary updated. - Add timestamp to mbus packet headers - Reorder initialisation sequence, to handle the new requirement that the mbus can only send reliably to those entities we've received a message from previously. This probably means that the wait-on-startup hack for ReLaTe is broken, but we don't care since the entire initialisation sequence needs redoing anyway (the Bremen PSTN-to-Mbone gateway needs more fine grained control than is possible with the current startup sequence). - Fixed size of participant window so user can see 2 layers of encoding when redundancy in use. - Fixed channel coder reconfigure issue when changing sampling mode. - The name of the RAT binary now includes the version number. - Fix muting of individual participants. - Added G726-16 using code from Marc Randolph's patch on comp.speech. - Add sdr plugin (not tested) - Fixed decoding preference problem when redundancy used. - Fixed source muting (we discard the packets in statistics, rather than not mixing source). - Removed -drop command line option. - Moved codecs that had CODEC_PAYLOAD_DYNAMIC into unassigned and dynamic range so they are available in transmission panel. - Removed half-duplex cards appear in devices list on Win32. - Fixed ui update when switching channel coder. * Released 14 May 1999 v4.0.2 - Added message box for win32 users who launch with no command line options, giving usage instructions. - Added WSACleanup() to shutdown win32 sockets nicely. - Fix inet_aton(), which prevents a crash on startup on Windows NT service pack 3 and some versions of Windows 95. * Released 15 May 1999 v4.0.3 - Fix compilation with v1.2 of the Microsoft Research IPv6 stack. - Catch WM_DELETE for preferences window. Reported by Atanu Ghosh. - Check address and port is valid in command line parsing so we don't dump core later. Reported by Lorenzo Vicisano. - Unrecognized options are ignored, but no longer stop processing other options. This means that "rat-4.0.3 -f pcm -t 64 224.1.2.3/1234" now sets the TTL correctly, even though the -f is unrecognized, meaning that we can start rat via sdr. Reported by Terry Gibbons. - Fix occasional assertion failure in mix.c:133 `len < ms->buf_len' (it looks like the condition in the assert is off by one, should be 'len <= ms->buf_len'. If this doesn't fix it, there's a check around line 242 of mix.c which sets things up so we don't overflow the buffer - we just decrease the amount we write by one sample there instead. Reported by Roy Bennett and others. - Fix payload type mapping for PCMA-16K-Stereo. - Mapping for existing rat/vat codec names. - Primary payload type mapping using -f. - Secondary payload type mapping using -f also. - Fix restoration of previous audio port settings from saved values. - Separated sound file handling into sndfile_wav.[ch] and sndfile_au.[ch] - Added support for default sndfile extension if none specified. Win32 -> wav, others -> au. - Added support for writing alaw and ulaw. - Updated man page. - Added sndfile_raw.[ch] for handling raw files. - Added sndfile_valid_format. - Fixed spurious debugging code in the windows audio driver which would cause an infinite loop if activated (rare, but could happen). - Split converter code up into convert_*.[ch] and added convert_types.h - Fixed repair when next unit on playout buffer is less than expected length away. - Compilation fixes for Irix 5.3 contributed by David Balazic. - Some linux audio drivers, in particular the ES1370 used in the SoundBlaster PCI 128, don't support /dev/sndstat. Rewrite the query functions to work with /dev/mixer instead. - Handle known skew in the audio sampling rate for those linux audio drivers which report it. - Added 'high quality' converter, sinc filter. * Released 2 June 1999 v4.0.4 - Add ability to receive on one port yet send to another, requested by Henning Schulzrinne. Usage: "rat addr/rx_port/tx_port" - Compilation fixes for Irix 6.5 contributed by Bob Olson. - Fix core dump caused by calling sndfile_write_audio with buffer length of 0. - Fix core dump when called with invalid command line arguments, reported by Marcus Meissner. - Fix passing of encryption key across mbus, reported by Ed Whelan. - Remove support for the -wait option. This means we can't work with the ReLaTe interface anymore but, once the split into multiple processes is complete, ReLaTe will be able to drive the media engine directly. - Remove most of the transcoder support - it didn't work anyway, and needs to be reimplemented from scratch. - Start the split into multiple processes: media engine, user interface and controller. - Added basic layered channel coder. Usage: rat -l n
/
/, where n = no of layers and there is an address and port for each layer. Only works with the WBS codec at present, and probably not very well at that. - Move the code to load and save settings into the media engine, and out of the user interface. - Fixed WBS codec so that it works with different endian machines. - Added hash table to settings_load. - Fixes for 64 bit IRIX from Peter Orbaek - Some codecs' default payload values clashed with RTP spec: PCM-16-K Stereo was 76, now 124; GSM-16K was 72, now 118; GSM-32K was 73, now 119; GSM-48K was 76, now 123. * Released 7 July 1999 v4.1.0 - Fixed slow memory leak reported by Emmanuel Duros. Vanilla decoder was not checking all pb_add functions returned success and so pointer was getting trashed. - Fix RTCP RR DLSR field when reporting on a source from which we've received no SR packets. - Changed drop preference for incoming packet buffer overflows. Now drop incoming packet rather than earliest packet in buffer - makes source packet processing better ordered. - Remove address sanity checking for the layered coder from the command line parser: it should be done when the socket is opened since that makes the code address format agnostic. - Added network_exit. - Added per source gain control. Now appears in participant panel on audio pane. Suggested by Jerry Isdale. - Fixes for the Detexis Musica IPv6 stack on Windows NT. - Send rtp.source.cname messages to the video tool when lip-sync is enabled, so it can match sources up to those in the video session. - Cleanup documentation of the audev_*.c files - Fix loading of preferences: powermeter, lip-sync - Fix the fileboxes on the Windows release version. - Fix spurious transmission of tool.rat.lecture.mode() mbus messages - Fix spurious transmission of rtp.source.active() mbus messages when we are sending. - Fix (hopefully) assertion failure in the mixer when trying to zero blocks longer than the buffer. - Improved layered channel coder, thereby making it incompatible with 4.0.4. - Added persistent database pdb.[ch]. - Moved render_3D_data from the rtcp database into persistent database as first step towards using common rtp code. Lots of other fields to do, but looks to work in principle. - Add RPM spec file for RedHat Linux. Based on that contributed by Stephen Adler - Convert to using the RTP code in the common library. - Fixed getenv not checking for null string after getenv in auddev_osprey.c. Reported by Dirk Kutscher . - Add playout_calc.[ch]. - Add ts_mul and ts_div to keep playout calc clean. - Change default units per packet to 1, since PIPVIC2 says that the end to end delay is too large otherwise. - Rewrite the reception quality matrix - Consistency changes: audio device and repair query now consistent with the majority of interfaces. - More consistency changes: channel_get_coder now consistent with other interfaces. - Add ability to mtrace between participants by clicking on the squares in the reception quality matrix - Split setting load between .RTPdefaults and .RATdefaults. - Add cutesy popup boxes to the reception quality matrix - Add device buffer occupancy check to auddev_luigi to try to fix sb16 problems. - Add toged and cont_toged back. - Move source_check_buffering into rtp_callback. - Fix mixer handling overlapping blocks. - Changed win32 audio read and write methods, added audio event to reduce CPU usage. Fixed handling of non-blocksize writes. - Modified auddev_null on Win32 to use WaitForSingleObject rather than Sleep on Win32. Reduces CPU considerably. - Added colour to powermeters. - Add fixed size packet buffer to make for easy discards when media engine has blocked for an inordinate period. - Added source_get_bps (bits per second :-). - Removed gain setting stuff from luigi_audio_open. Problems reported by Bill Fenner and code purpose is defunct. - Complete split into media engine, user interface and controller processes. Only works on Unix at present, still debugging the Windows port. * Released 5 October 1999 v4.1.1 - Added transcoder audio device. Contributed by Michael Wallbaum - Now send RTP BYE packets on exit - Fixed converter table initialization. Was not initializing interpolation and extrapolation correctly after last consistency update. - Unrolled loops in extrapolation converter. - Replaced divisions in interpolation converter that were not powers of two with a multiplication scaling factor and a power of 2 denominator. Improves performance 3-4 for upsampling by 3,5,6. - Fixed 2 step sample rate conversion support. - Fixed Windows port. - Initialize sp->cur_ts in main_engine, before tx_start. Should fix occasional assert failure during transmitter startup. - Put cont_toged check into source_process packets. Added check for cont_toged in rtp_callback. - Added time constants and replaced lots of ts_map32 functions with them in source.c. - Rewrite initialization and rendezvous code between the controller and the user interface and media engine. This should remove many race conditions and generally clean things up and make them more reliable. - use mbus_rendezvous_waiting() and mbus_rendezvous_go() - do a real handshake between controller and the subprocesses - Fix parsing of many command line options. NOTE: many of the options are parsed in a backwards incompatible manner now, to make the code cleaner. - Tuples for mbus command switches in mbus_{control,engine,ui}. * Released 2 November 1999 v4.1.2 - Added echo suppression back, it fell out of code base at some point. - Fix ui sending input and output gain values before it's got values from audio engine. Was happening because scale widget invokes -command option when created. Now we don't send gain info until we've heard some from engine. - Add signal handler to main_control. - Add back default port 5004. - Fix luigi_audio_drain to reset, sync, and trigger reading. - Moved packet reception handling from rtp_callback to source_add_packet. - Changed playout buffer length estimation to use transit times and average transit. Previously used observations of playout buffer lengths, but this maybe unreliable due to packet losses. - Revised skew adaptation. Now compares transit time in use with transit average, instead of monitoring playout buffer length which is tainted by packet losses. - Playout variable now refers to playout offset only. - VAT style reduction in playout estimate when marker bit set. - Playout recalc trigger when jitter > playout. - Device reconfig no longer resets ports if device unchanged. - Shuffled front panel. Added bps field. - Changed source processing to use next_played rather than last_played. Cleans some processing issues up and allows for codecs with non-constant frame durations. - Added source_get_skew_rate to return relative skew. - Added skew to stats panel. - Made stats panel consistent with UI. - Split reception panel into Decoder and Playout. - Added note field for local user. - Playout calc revisions: only update transit if: (a) source is new. (b) source quiet for longer than transit_reset period. (c) playout re-calc triggered by toged_cont. - toged_cont is now no. thrown on ground in last 8 packets. - Global change of integer types, and removal of compatibility defines: u_int8 -> u_int8_t u_int16 -> u_int16_t u_int32 -> u_int32_t and the same for the signed varients. - And change them all to be uint32, etc - Packet spikes now accounted for in packet processing. Transit average and playout not updated during spike period. - Playout panel now displays spike info also. - Mbus updates from Markus Germeier, which fix compatibility with the Uni Bremen implementation: - mbus.bye() signals an entity when it leaves. (mbus.quit commands an entity to leave) - Generate and work with 64 bit DES keys. Generate parity bits for key. - mbus_heartbeat(m, 1) should send an mbus.hello() every second and not every two seconds - HMAC-MD5 should read HMAC-MD5-96 - Honor the MBUS environment variable for the MBUS configuration file - The TZI Mbus implementations generate spaces in configuration file, which mislead the UCL Mbus to dump core. - Allow Spaces in .mbus - Address must be unique - Delete failed reliable messages if err_handler is present - Fix uninitialized use of session->last_update in RTP code - Fix assertion failures in RTP library when sending RTCP packets - Recognize, but ignore, profile specific extensions to RTCP SR/RR packets - Update RTCP reporting interval calculation - Implement reverse reconsideration of RTCP reporting interval - Implement encryption in the RTP code - Fix redundancy decoder - Fix path searching when starting subprocesses - Add patch matching segment insertion when correcting for slow sources - Migrated Makefiles and Headers to use autoconf - Fix crash on exit - Fix system name in tool version - Add version number to mbus config file. Should prevent crashes when we update the format of that file. - Set thread priority of media engine to THREAD_PRIORITY_ABOVE_NORMAL on Windows. - Fix CPU usage of UI - Update to common library 1.0.10 * Released 13 December 1999 v4.1.3 - Rename common library to libuclmmbase.a on unix - Update RPM spec file - Update installation instructions - Fix "-t" option, to set the TTL. The v4.1.2 release would always send with TTL=15, making it useless for wide area. - Fix assertion failures in source.c - Cleanup code for updating SDES items in the UI - Remove core files & directories on "make distclean" - Add check audio in adjusted playout point packets can be played out and correct if would be dropped. - Add failure return option for pattern matches used in skew detection. - Add session_validate(), source_validate() and pdb_item_validate() debugging routines. These mostly just check a magic number stored in the structure, to check that the structure hasn't been totally corrupted. There's a lot of scope for extending them in future... - Waveform repair schemes now use last available native coding. - Minor decode path change. Decode, sample rate conversion, 3d rendering, gain scaling, are all performed if no native coding available rather than individually test. Fixes problems introduced with media_data duplication in playout buffer shift code. - Various fixes for potential buffer overflows - Update copyright notices to welcome in the new millennium - Fix mbus address of the media engine (had a spurious space in instance:pid) - Remove lip-sync command line option and toggle button in the user interface. - Automatically enable/disable lip-sync when we detect a video tool via our mbus interface. - Rewrite the lip-sync code to send our playout delay to the video tool. We send "rtp.source.playout(ssrc delay-in-ms)", which might be sufficient. - Added back backwards compatible name mappings for command line parsing. - Robustified command line parsing of codecs. - Fix ordering of command line argument parsing. - Accept -crypt as a synonym for -K. - Add encrkey field to the session struct. - Fix encryption key handling at startup. - Fix saving of audioChannelParameters setting. - Fix use of mbus structure after freeing it. - Fix freeing of memory on shutdown. - Add assorted debugging code. - Fix reception of RTP packets with padding (this is what caused a crash when using the GSM codec with encryption). - Update for changes in the mbus library. - Add format conversions for a-law devices. - Incorporated auddev_atm.c and wrote auddev_atm.h. * Released 31 January 2000 [X3D SDK CDROM] v4.1.4 - Fix dependencies in Makefile for rpm target - Fix handling of odd numbered RTP ports (pick next lower port). - Fix loopback setting load and carry thru when changing device. - Fix -version command line option. * Released 1 February 2000 v4.1.5 - Add support for ALSA audio drivers on Linux, contributed by Robert Olson of Argonne National Laboratory. - Add rtt calculation to rtp_callback.c. - Fix don't start mbus and processes if no command line args given. - Add controller validation of command-line addresses before launching sub-processes. - Fix controller only quits upon hearing byes from one of it's children. - Add playout buffer debugging/validation code. - Add engine parsing of sdes commands accept my_ssrc as an acceptable ssrc identifier. Then control does not need to know to set name, etc, from command line. - Add check in settings that sdes values read in are not already set. - Add filter on rtt values to avoid displaying garbage values from rtp misimplementations. - Fix participant muting (reported by Bob Olson). - Correct size of pb->buf allocation in pktbuf.c. - Fix slow memory leak in pktbuf (didn't free pb->buf). - Removed unused variables from the session struct - Add checks for sp->ui_on to the user interface dispatcher code. This has currently broken the user interface, but is needed to make the initialization sequence reliable. - Major update to the initialization sequence - media engine solicits for the user interface - user interface requests state information from the media engine - split ui.c into ui_send_*.c - Load/save the note setting. - Remove all traces of operating specific defines. Configure no longer subsitutes operating system. - Fix @OSTYPE@ in SDES Tool field (broke with latter). - Add SIGCHLD to main_control to shutdown process tree when child processes die in a timely manner. - Fix shutdown sequence. - Patch G711 A-law, Sun's reference implementation had a few glitches and you only notice when speaking with real h/w implementations. - Update README.mbus, giving documentation of how to remote control RAT using the message bus interface, and how to replace the user interface by one of your own choosing. - Fix two step sample format conversion assertion failure. - Fix device sample conversion layer freeing already freed pointer when swapping between devices with and without layer. - Add RTCP DELETE messages trigger deletion corresponding pdb entry and source (if relevent). - Tweak source ageing, to fix problems with users being hilighted after they finish speaking. Problem occured if less than 50 packets arrived in a talkspurt. - Save settings now passes through settings file, replacing entries RAT has update values for, and then appends entries not in settings file. Requested by Frode Kileng. - Add use of username when no RTPdefault exists for participant name. - Fix handling of audioInputMute in RATdefaults. Reported by Frode Kileng. - Fix rtp.source.active for local user in response to rtp.query(), didn't highlight local users transmit state. - Update SDR plugin. - Transfer string associative array code out of settings.c into new common library files asarray.[ch]. - Fix -allowloopback option. - Add controller checks for child process termination on Win32. - Add message loop and watch for WM_DESTROY to controller. Will now shutdown engine and ui when Win32 task manager sends these. NB, Visual Studio debugger terminates processes and still leaves children running. AFAIK there is no way for children to spot this, i.e. WaitForSingleObject watching process does not appear to work for children watching parents. - Use _vsnprintf for snprintf functionality on Win32. - Fix "make tgz" target to include the sdr plugin * Released 14 February 2000 v4.1.6 - Fix Windows port * Released 15 February 2000 v4.1.7 - Update ALSA detection in configure script - Fix display of names when SDES NAME is not known (fallback to CNAME or SSRC in that order). - Add support for the rtp.addr.query() mbus message to media engine. - Remove support for the tool.rat.codec.details() mbus message. - Add support for the tool.rat.codecs.request() tool.rat.codecs.flush() tool.rat.codecs.add() mbus messages. - Add audio clip support to balloon help. - Tidied mixer interface and cleaned session_struct out. - Fix mixer wrap handling for multi-channel. - Fix default device if not present in saved settings. - Add support for rtp.source.mute ("ALL" 0|1), which is much more efficient than iterating all sources over the mbus. - Fix handling of WM_DELETE_WINDOW for the about box - Fix handling of WM_DELETE_WINDOW for participant popup boxes - Remove all "Dismiss" buttons - just close the windows instead - Add balloon help button to the main window, moving the application name to the title bar - Partially fix processing of Tcl events in the UI during the rendezvous with the media engine - Partially fix audio processing on windows 2000 * Released 24 February 2000 v4.1.8 - Partially fix layered codec (recognises multiple addresses on command line but doesn't send to all of them) - Slay zombies when children die - Add repeat+ repair type. It does standard repeat and then reverse blends samples from the end of the previous frame with the start of this frame. Perhaps reduces some glitching. - Add README.reporting-bugs describing "How to Report Bugs Effectively" - Update to the ALSA support, contributed by Bob Lindell of ISI - Add local tone generator. - Add pointer to the RAT users mailing list an open list for discussion of issues relating to RAT. - RTT calculation fix (ntp32_sub was broken). - Add checks to main processing loop for liveness of controller process. - Add checks for sibling and parent process in ui and engine so proc's don't wait for messages that are never going to come. - Change skew correction code to use audio_blend rather than repeat procedure in situ. Fixes a memory corruption bug. - Add null handler for RX_APP to rtp_callback, circumvents abort call. - Add linear8 to sndfile import and export functions. - Add handling to sinc_converter for conversion chunks that are smaller than hold buffer size. We can now convert a sample at a time if desired rather than blocks of at least the duration of the hold buffer. - Add manual silence detection algorithm. - Add UI and settings for silence detection algorithm alternatives. - Add sample rate and channel converter to sound file importer. - Add support for m*11025 native encoding types. Although RAT does not support these sampling rates, one of the sample rate converters supports conversion from m*11025 to n*8000. - Fix noise during sample insertion from skew adaptation. - Fix fatal mix error when downsampling. Trim length did not compensate for the sample rate, causing trim length to wrap and attempt to remove zillions of samples. - Fix mixer rounding error in timestamps vs samples. Would periodically fail mix_verify by 1 otherwise. - Add installer for the Unix ports. This displays the copyright notice, and gets confirmation from the user that they accept the conditions, before extracting the .tar.gz file. Use "make installer" to build and then distribute the rat-4.1.8-installer binary only. - Add transit estimate reset when device format changes at either end. - Add settings to default to first device when device in settings file does not exist on host. * Released 20 March 2000. 4.1.9 - fix configure script handling of X_CFLAGS during broken header tests reported by Atanu. - remove variable component (e->playout) from spike threshold in source processing, believe this is part of the bad spike messages (160>nnnnn). - Changes to Win32 driver read code to remove race condition (audio callback occuring as audio being taken from list of ready buffers). - Move participant database clean up into session_exit. - Destroy local file player and tone generator when reconfiguring device. - Changes to Win32 driver interface write code. Appears to resolve problems with a few troublesome cards. - Replace puts with bgerror where appropriate in ui script. * Tagged 30 March 2000 (not released). v4.2.0 - Fix mixer writing to new head position so it mixes multiple streams again! - Fix phase skips of tone generator. - Add RTP flush after device reconfiguration. - Clean up and fix controller command line parsing. - Remove timers.[ch] to give a single internal representation of time. - Add creation time to mix_create and remove mixer re-sync function. - Fix MMX mix bounds calculation. - Add sample rate factor into cushion. - Change initial cushion value to be more conservative. - Fix entries in cushion histogram being entered when less than minimum allowed cushion. - Remove second audio_rw_process in engine main loop. Process only blocks for audio nowadays. * Released 5 April 2000. v4.2.1 - Fix handling of 8bit PCM .WAV files (unsigned 8bit, not signed). - Fix shuffle participants not to print newline if last entry. - Fix parsing of -t flag, was mis-coded as -ttl in layering command line parsing changes in 4.2.0. * Released 6 April 2000. v4.2.2 - Catch mbus initialization failure and warn user in ui, control, and engine. - Round ttl to maximum of 127. - Change parse_args_early in main_control.c to pass over all args. (problem reported by Didier Lambllais). - Add -N,-E,-P,-L for sdes item setting from command-line (name, email, phone, location). - Fix -f codec communication from controller to engine. - Break controller address and option parsing so options are not communicated to engine before rendezvous has occurred. Otherwise options can be lost due engine's settings_load occuring after rendezvous. - OSS (Linux) audio driver updates from Stuart Levy - Should make mixer controls work with the Sound Blaster Live! cards - Update behaviour of the line-in controls, to hopefully work better with AC97 compatible cards, if you see a difference in the behaviour of line-in please let us know. - Update behaviour of output gain controls, to set all outputs. This probably needs more work, let us know if it breaks anything (the entire OSS audio output control is broken - we need to deal better with the output mixer...) - SGI audio driver updates from Stuart Levy - Add "APanel" input source. When selected, rat carefully avoids ever specifying the input source to the audio library; thus whatever source is selected by the SGI "apanel" program applies. Use this if you have problems with rat switching to the built-in microphone on O2 machines. - If anyone could contribute support for the new (post Irix 6.3) audio library, we'd be grateful... - Fix library ordering in makefile (reported by Stuart Levy) - Document configure options which may be needed to build on Irix in INSTALL.TXT - Fix RTP SR timestamps and RTP jitter calculation. Reported by Robert Olson. * Released 17 April 2000. v4.2.3 - Change the session struct to be a two element array in main_engine.c - Change all references to sp-> into sp[0]-> in main() of the media engine - A few trivial changes to the initialization sequence, in support of the transcoder. There are a number of things which will hinder this: - mbus_rendezvous_waiting() and mbus_rendezvous_go() are incompatible with another mbus needing to run in parallel. - some parts of the code are non-reentrant (i.e. use static variables) and will have to be fixed it's probably not too bad, though. All are wrapped in #ifdef IS_TRANSCODER, for now. - Update OSS (i.e. Linux) audio device detection code - Better card detection and probing - On systems where the audio driver supports two half-duplex devices, rather than a single full-duplex device (e.g. the NM256) we attempt to pair them into a form usable by rat. Reported by Thierry Turletti. - Workaround failure to get host IP address when setting the RTP CNAME (we use user@127.0.0.1 as the CNAME in this case). Reported by Joe Love. - Add support for "-logstats" option, to log RTP and codec statistics to a file. Requested by Anna Watson. - Update "make installer" target * Released 3 May 2000 v4.2.4 - Further updates to OSS (i.e. Linux) audio support - Further updates to support the transcoder - Add -T option to media engine to enable transcoder operation. This will need a custom user interface and controller. - Remove the IS_TRANSCODER defines. - Update installation instructions - Fix buffer overflow when reading from "No audio device". This was the cause of the "playout.c:86: pb_validate:Assertion 'pb->magic==0x83838383' error reported by Christa Wenger, Marcos Bedinelli and Fang Yuan. - Remove spurious calls to tx_process_audio() and tx_send() from the main loop. - User interface hides the main window is hidden until it is finished initialising. This should prevent errors due to manipulation of the user interface before the system has finished initialisation, as reported by Peter Parnes. - Fix reception of packets with an RTP header extension. Reported by Peter Parnes. * Released 16 May 2000 v4.2.5 - Fix assert failure in auddev_trans.c, contributed by Jakub Segen - Fix audio device pairing with the OSS driver, in those cases where there is only a single mixer channel. Reported by Thierry Turletti. - Rewrite code to rendezvous with the controller in the media engine, to support future transcoder operation. - Cleanup main_control.c - code moved into process.c and cmd_parser.c * Released 16 June 2000 v4.2.6 - Compilation fixes for Win32 contributed by Marcin Michalak. - Merge ALSA fixes from Robert Olson - Merge OSS fixes for AC97 based soundcards from Robert Olson: "I went ahead and did the (more) proper fixes for AC97 cards. I don't have a reliable way to detect which cards are AC97-based, so there's currently a hard-coded list of them in the OSS code: "OSS: AudioPCI 97 (STAC9708)", "OSS: AudioPCI 97 (CRY13/0x43525913)", These two are the one that Jay told me about and my ES1371 card. If you have a card that you think this will help for (probably SBLive falls into this category, and any of the ES1371 based cards), you can force rat into AC97 mode by setting the OSS_IS_AC97 environment variable to 1, in bash: export OSS_IS_AC97=1 or in tcsh: setenv OSS_IS_AC97 1 If this makes things work for you, please mail the output of cat /dev/sndstat to rat-users@cs.ucl.ac.uk and we can add your card." * Released 30 June 2000 v4.2.7 - Split main() in the controller into two parts: one for normal operation as an audio tool, one for operation as a transcoder. - Add extra debugging code to transmit.c - Fix buffer overflow in tx_unit_create() - Add missing initialization of reversal buffer for repetition plus (problem reported by Lingfen Sun). - Only perform audio bias removal for live capture, not when reading from a file. This fixes the problem reported by Paxton Smith, where excess RTP packets are sent when playing from a file. - Note that there are still some extra packets sent, due to the pre- and/or post-hang in the voice activity detection code. This makes for a much nicer sound for speech (since we have continuous audio during short (<200ms at present) silence periods, but does cause some spurious transmission in this case. The following #define's in parameters.c can be changed to adjust this behaviour: #define VAD_SIG_LECT 40 #define VAD_SIG_CONF 60 #define VAD_PRE_LECT 60 #define VAD_PRE_CONF 20 #define VAD_POST_LECT 200 #define VAD_POST_CONF 200 - Fix reading of .wav files - The last unit of audio data was not being sent, which also contributed to Paxton Smith's problem. - Fix bias removal for stereo signals. - Fix bias removal maintenance ( >> != / ). - Fix arithmetic overflow problems in the bias removal code. - Remove debugging code in auddev_null.c which caused the NULL audio device to (incorrectly) generate non-silent a-law audio. - Detect whether FreeBSD driver is newpcm or luigi. There are differences in detecting full duplex caps and handling mixer settings. See comments in auddev_luigi.c for an explanation. - Change ts_t to timestamp_t. ts_t is a system defined type on Solaris8. - Cleanup and document the receiver source processing (starting with the source_process() function and friends). * Released 6 August 2000 v4.2.8 - Mbus address of media engine now contains session identifier (this is always zero when running as an audio tool, but the transcoder has sessions 0 and 1). - Fix bug in mbus transmit code which would cause messages to have the same sequence number as the preceeding ack. - Update controller initialization sequence to handle transcoder. - All fatal_error() messages are now prefixed with the RAT_VERSION text, rather than the argv[0] application name. - Fix RTP header extension code (patch from Jori ) as part of RTP interoperability tests. - FreeBSD 4.1 doesn't support binding to an IPv6 multicast address, must bind to in6addr_any instead (reported by Shirasaki Yasuhiro). - Fix validation of RTCP packets with padding (reported by Vladimir Brauner). - Fix padding octet count in RTCP packets sent with padding (Vladimir Brauner). - Fix RTCP timer reconsideration (Vladimir Brauner). - Minimal transcoder support: the media engine can transcode, although it is very buggy. The controller supports just enough to test the media engine, the UI does not support transcoding yet. * Released 22 August 2000 v4.2.9 - Fix spurious assertions in source.c -- I think (hope?) this will fix the source.c:1588: source_process: Assertion `md->nrep < 5 && md->nrep > 0' failed. crash reported by Bob Olson and Justin Pietsch. - Add other_session field to the session struct, and fix transcoder to make calls to rtp_add_csrc() and rtp_del_csrc(), which will eventually support pass through of RTCP. This changes the size of the session struct, and means that you'll have to "make clean" after updating. - Modularize user interface: bargraph and chart - Fix labelling of transcoder input/output ports * Released 8 September 2000 v4.2.10 - Added auddev_newpcm.[ch] with newpcm style mixer control. Includes support for loopback and preservation of mixer settings so mixer is returned to original state upon exit. [oh] Note: both driver interfaces (luigi, newpcm) are pulled in by configure and this is possible whilst luigi pcm and newpcm maintain the same function call interface. This may break in future. Both are necessary because mixer operation is not consistent between the two interfaces. - Catch SIGTERM and SIGHUP on unix (Robert Olson) - Update Windows project file ratui.dsp (Paxton Smith) - Add extra debugging code to sanity check the playout time: since 4.2.9 fixed the md->nrep assertion failures in source.c, we now see problems due to poor playout time calculation. - Compilation fixes for installer under Red Hat 7's weird gcc varient. * Released 1 November 2000 v4.2.11 - Fix port restoration when changing device (Shirasaki Yasuhiro) - Remove assert that made duff port restoration core dump in newpcm, just check port is correct range, if not print warning. - Add check that requested sampling rate is within device capabilities on newpcm. Driver does not do bounds checking when setting rate and will mis-report actual rate when a duff rate has been set (reported by Lars Eggert). - Break up newpcm writes to n separate writes of blocksize rather than one big write as current newpcm debug code complains if this is done. - Fix erroneous debug messages for gain settings in newpcm. - Change newpcm_audio_open() to use SNDCTL_DSP_SETFRAGMENT from SNDCTL_DSP_SETBLKSIZE. The latter creates just 2 frags in secondary buffer and this is not enough for cushion fill levels. - Fix breakage due to "gcc 2.96" shipped with Red Hat Linux 7 - Remove inline math routines from cx_gsm.[ch] since they broke with some versions of gcc (signed vs unsigned comparison). * Released 8 January 2001 v4.2.12 - Better diagnostic message when mbus config file cannot be locked. - Remove SNDCTL_DSP_SYNC from newpcm reset function as it can block. - Change G726-32 packing to fit AVT profile. Because of packing order difference this and future versions will not be interoperable with previous RAT releases. - Set initial cushion size to zero to force audio_rw_process to write an empty cushion of audio after device is opened. - Change mix_put_audio return value when gap detected. Was returning TRUE which indicates mixer and source formats not compatible, this caused source media and channel buffers to be wrongly flushed. - Remove debug sample that made concealment distinctly audible. Should not have gone into code base. - Re-jig source_process so that frames generated through loss concealment get passed onto mixer. This must have broke during tidying. - Remove repeat+ from loss concealment schemes, didn't add anything. - Add L8 encoding. - Change pktbuf to use playout buffer (better use of code). - Reset transit histories when source created. This should fix: - Sometime see messages of the form: "source.c:767 Spike (160 > 2708390)" and hear nothing. - If a receiving stream contains a lot of jitter and out-of-order packets it crashes sometimes. (jitter around 1000 ms and random out-of-order). Reported by Peter Parnes. - Occasional crashes due to "too many blocks allocated" with many allocations in channel_types.c:29, channel_types.c:34, playout.c:188 and source.c:893. Seems to be due to packets being received off the network, but never played out. Reported by Angel Mateo, and also observed at UCL. Not something I've found a way of reproducing. - Occasional weird behaviour of the playout buffer, where sources are buffered for several _minutes_ before being played out? Reported by Steven Dawson on the CAIRN list. - Reduce source packet buffer size. - Change all G726 packings to gratuitously painful little endian. - Increase initial cushion estimate to 2 * min cushion size. - Enable 11025 sample rates and codecs. - Fix detection of incompatible conversions, M * 11025 <-> N * 8000 is not supported. * Released 14 January 2001. 4.2.13 - Fix spurious assert in G726 decoder - Fix G726-40 unpack (bits per sample mis-represented as 3!) - Fix sinc converter selection bug. Should fix: (a) Crash in convert_sinc.c: convert_sinc.c:134: failed assertion convert_sinc.c:122: failed assertion util.c:87: _block_alloc: Assertion `size > 0' failed. reported by Greg Herlein. (b) Another crash in convert_sinc.c: convert_sinc.c:1107: sinc_upsample_stereo: Assertion `out == dst + dst_len' failed. reported by - Change linear converter to use same structure arrangement as sinc converter and fix linear converter selection bug (derived from convert_sinc.c). - Fix reverse reconsideration of RTCP interval - Mark entries in the RTP database as active senders if we get an RTCP SR packet from them. - Added support for G.728 encoding and decoding. See README.g728 for build instructions and comments. - Add support for non-AC97 mixers on FreeBSD's newpcm. - Add support for new device names under FreeBSD-5 (audio.) - OSS/Linux audio driver now uses /dev/dsp rather than /dev/audio, since some drivers don't support /dev/audio. - Cleanup OSS/Linux audio driver code - Added check for device busy vs device not configured in newpcm probing. - Fixed re-use of "thedev" string in newpcm_audio_open that caused device name to be trashed. Reported by Lars Eggert. Thanks! - Fix RTCP bandwidth fraction estimation (Timur Friedman) - Add support for displaying RTCP SDES PRIV items (we send a test item also). * Released 3 March 2001 v4.2.14 - Add "-noui" option to start the media engine without user interface - Fix CSRC handling (Patch from ivo.sedlacek@anfdata.cz) - Fix uninitialized field in SDES PRIV handling (Robert Olson) - Fix G726-24 and G726-40 out by one in codewords unpacked. - Rename rtp_callback to rtp_callback_proc to avoid name clash following recent common library changes. - Fixed all MSVC warnings about implicit type conversions. - Update MSVC project files to reflect new paths in common library. - Update configure to remove need for patching in FreeBSD ports collection. - Add shell script target "rat" as target in Makefile. Again to make FreeBSD ports less effort, like zero :-D. * Released 6 April 2001 v4.2.15 - Fix common include path for use with standard Tcl/Tk (Pekka Savola) - Fix handling of undefined PATH variable, which caused a crash on startup in some cases (patch from Pekka Savola). * Released 13 April 2001 v4.2.16 - Fix PATH handling - Fix so that we no longer send an RTCP BYE if we leave the session before sending any other packets. - Fix initial estimate of average RTCP packet size. - Implement RTCP BYE reconsideration. - Fix RTCP transmission interval. - Fix handling of probationary sources in the RTP code (a source is no longer treated as probationary if we've received RTCP packet from it). * Released 24 April 2001 v4.2.17 - Fixes to auddev_oss.c from Robert Olson - Fix includes for (should fix Red Hat 7.1 compilation) - Fix IPv6 support (Kris Hasler) * Released 18 May 2001 v4.2.18 - IPv6 fixes in common - Config for Windows2k IPv6 stack * Released 25 May 2001 v4.2.19 - Fix off-by-one error when removing half duplex audio devices in the OSS driver (Eric Gerlach and Robert Olson) - Fix generation of rat shell script (David Martinez) - Fix assert failure with Repair=None (Jakub Segen) - Add initial IXJ audio driver for QuickNet devices (contributed by James MacLean ) - Fixes to device pairing for SB Live (Robert Olson) - Fix complience with draft-ietf-mmusic-mbus-transport-06.txt (patch from Lars Fischer) - Fix handling of EAGAIN in auddev_oss.c (James MacLean) * Released 21 June 2001 v4.2.20 - Fix forgotton malloc in auddev_oss.c mixer allocation (patch from Eric Gerlach) - Fix configure script to detect PhoneJack audio devices - Add PHONE type to audio_types.h - Fix misquoted mbus message in ui_send_rtp.c (Eric Gerlach) * 24 September 2001 v4.2.21 - Fix FreeBSD support to work with 4.5-RELEASE (Orion Hodson) - Fix SoundBlaster Live! support on win32 (Chris Greenhalgh) - Accept (and ignore) unknown SSRC in SDES (Chris Greenhalgh) - Add . to path in rat script. Helpful for folks working on RAT without dot in their path. - Change sample rate variable types from uint16_t to uint32_t and add 96kHz timebase (Orion Hodson) - Update configure script to better support IPv6 (Suzuki Shinsuke) - Fix count of CSRCs in mixer - Fix compilation on alpha (David Martinez) - Fixes for MacOS X and Win32 (Bill May) - Explicitly set send/recv buffer sizes (1Mbyte) - Assorted performance tweaks to RTP code (Colin Perkins) * 15 April 2002 v4.2.22 - Fix compilation on Debian/SPARC (David Martinez/Petter Reinholdsten) - Reduce device buffer to 1/8 second on Win32 (Justin Binns) - Fix compilation on Win32 * 23 July 2002 v4.2.23 - Fix memory leak with duplicates (Winston Dang) - Change include header on FreeBSD as machine/soundcard.h no longer exists in -CURRENT, but sys/soundcard.h exists in -STABLE and -CURRENT (Kris Kennaway). - Update solaris driver to support the AUDIODEV environment variable, needed for SunRay systems (Frederic Vecoven) - Remove unneeded includes from auddev_sparc (Frederic Vecoven) - updated RPM spec file to install SDR plugin and to use the Makefile for installing files. * 01 April 2004 TODO -- They're features not bugs dammit! ---- - Assorted audio driver problems: - Broken auddev_pca with adding of audio interface conversion code. FreeBSD 3.1 pca audio does not seem to work anymore. - SunVideoPlus interface code does not work properly. The driver Sun distributes only works in 8k mono. MMAC produce the card and wrote a driver for Sun: an exceptionally buggy and unstable driver. MMAC now has a better version now, but expect you to pay for the developer kit to access features. $1200 for a card that does not perform as advertised. The marketing blurb states it has G728, G722, and "CD Quality" audio: it may do, but you can't access them. - SGI O2's don't have autosensing audio interface selection like Indy's. - OSS/Linux driver is buggy - Thierry still has problems with the NM256 card and device pairing - Some cards are not detected correctly - Update the 3d audio rendering code - should decimate when using sampling rates other than that for which it was originally designed for. - could use finite precision maths for better performance (eliminate type conversions). - sndfile routines should use conversion functions in audio_fmt.c, not their own. - Channel coders need intelligent bail out fn's for when units overflow (rare, but real problem). - UI lets you select packets larger than the MTU, which can't be sent - Reimplement transcoder. - Convertors need to be moved into the session struct, rather than being statically allocated. - settings load/save code needs to be updated for the transcoder. We should save settings into a different set of files, and save each side of the transcoder individually. - Add support for conversion between m*8000 and n*11025 - Sample based codecs should accept frame lengths of 0-200ms, not just multiples of frame lengths in tables. Should add codec_is_sample_based test and data to codec tables and relax receiver sanity checking so that sample based frames do not have to be n * codec__peek_frame_size. - Should use the empty RRs coming back from receivers who are not seeing traffic, and display this in the loss matrix. - Layering is broken (hasn't been updated for multiple processes, etc) - Weird interaction with rat-3.0.x -- seems that we can generate packets which some instances of rat-3.0 won't play. You get some people in the session who's tools report receiving your data, but they don't play it out. Suspect we're hitting the limitations of the old playout algorithm, rather than a specific bug, and the correct solution is to get everyone to update to rat-4.x - Handling of SSRC collisions is broken - Rework media engine initialization, so we can query it before sending rtp.addr() - when rat starts it turns of "playback-mute" on the mic input which gives feedback for the mic. Muting it via the audio control turns of the feedback. Note that record-mute and playback-mute is not the same thing. Reported by Peter Parnes. [Depends on feedback settings and platform, oh]. - Add ability to change RTP sessions whilst rat is running. Requested by lots of people (Robert Olson, Joerg Ott, etc). - When weak RTP validation is enabled, spurious sources can be added to the database (from the CSRC area of a packet?). Reported by Xiaotao Wu - Crashes on WinNT if another version of Tcl/Tk is installed on the machine? Reported by Didier Lamballais . - Excessive end-to-end delay on Windows? Gerry Wolfson. [The scale of delay is order of magnitude greater than observed on UCL machines, direct sound sound driver anyone...]. - Crash when playing .wav files? [Can't Replicate???] - Build problems on Windows: some of the *.dsp/*.dsw files have unix end of line characters which cause problems for some versions of VC++? Reported by Fulvio Risso