ChangeLog
----------
6/17/2006
	* Bump revisions up to 0.9
	* Release 0.9
4/10/2006
	* Update copyright date to 2006
	* Fix incorrect parameters to ensure_buffer_size() that was causing us to
	  ensure the size of a buffer that we weren't using.  This was causing
	  a crash in bio2jack when used with the Freebob jack driver.  Issue reported
	  by Peter Galiovsky.
1/22/2006
	* Change ringbuffer size from 16384 to 4096 samples to reduce the latency
	  in bio2jack.
	* Move volume function from JACK_Write() to JACK_Callback() so volume adjustment
	  occurs without the latency of the ringbuffer size.
	* Factor out demux() calls by having non-sample conversion code use callback_buffer2
	  just like the resample library does for its output data.  This way the output data
	  for jack is always in the same buffer and we can keep the volume and demux code
	  outside of the if(resample) else don't resample code branches and reduce duplicate code.
12/15/2005
	* Fix handling of 8bit samples in JACK_Write().  We were falling
	  through the 8bit case due to a lack of a 'break' and
	  treating 8bit samples as 16bit ones.
	* Fix sample_move_char_float() and sample_move_float_char() to treat
	  8bit samples as unsigned instead of signed.
	  
	  Patch by Sean Meiners<sean.meiners@linspireinc.com>

	* Fix deadlock between JACK_callback() and jack_client_close()
	  that can occur when jack_client_close() has grabbed the driver mutex
	  and JACK_callback() is called.  Add tryGetDriver() that uses
	  pthread_mutex_trylock().  Use tryGetDriver() in JACK_callback()
	  instead of getDriver().

	  Patch by Sean Meiners<sean.meiners@linspireinc.com>
11/7/2005
	* v0.8 released
10/30/2005
	* Add JACK_SetPortConnectionMode() api call that enables users to configure how
	  bio2jack will connect up the output ports during calls to JACK_Open().  Pass in one of
	  CONNECT_ALL(the default) - ensures that all available jack output ports are connected to,
	  even if it means connecting the same output port to multiple jack ports,
	  CONNECT_OUTPUT - connects to just the number of ports bio2jack is receiving from the application,
	  or CONNECT_NONE, which creates the bio2jack ports but doesn't connect any of them.
	* Fix deadlock in JACK_GetVolumeForChannel() where we were returning without releasing
	  the driver lock if the user was trying to set a channel that didn't exist.  This bug
	  was exposed by xmms-jack who was setting channel index 0 and 1 even if we were
	  outputting mono
	* Clarify comment for JACK_GetInputBytesPerSecond/FromDriver()
	* Fix now incorrect usage of JACK_GetInputBytesPerSecond() in JACK_GetPositionFromDriver()
	  and JACK_SetPositionFromDriver().  JACK_GetInputBytesPerSecond() used to refer to the number
	  of bytes we were receiving from the client because due to internal conversion we had to also
	  keep track of JACK_GetOutputBytesPerSecond() for the number of bytes we were writing to jack.
	  With the introduction of recording support to bio2jack the variable names became confusing and
	  misused.
10/29/2005
	* Configure should ensure that libsamplerate-dev is installed and report an error if it isn't found
10/28/2005
	* Bump revisions up to 0.8 for release
	* Fix sign issues to match jack ringbuffer calls
	* Make types 'unsigned long' if there is no reason for them to be 'long'
	* Add checks for libsamplerate in configure.in and use samplerate cflags
	  and libs in Makefile.am
	* Fix indentation of some define values
8/10/2005
	* Fix JACK_Read() in cases where no data is available for reading.  Previously we
	  would return the number of bytes we were asked to read instead of 0.
4/1/2005
	* Broke API compatibility with this release
	  * JACK_GetJackLatency() removed, use JACK_GetJackOutputLatency() instead
	  * JACK_SetMaxBufferedBytes() removed
	  * JACK_GetMaxBufferedBytes() removed, use JACK_GetMaxOutputBufferedBytes() instead
	  * JACK_SetNumInputChannels(), JACK_SetNumOutputChannels() removed, this can
	    be readded at some later point though, after some issues are resolved 
	* Patch from Sean Meiners at Linspire
	  * Adds support for resampling
	  * Support for recording from jack using JACK_Read()
	  * Uses port mapping to up/down convert channels so bio2jack doesn't have to
	    copy values.  This should reduce bio2jack processing as jack is performing
	    this conversion.  It also reduces bio2jack code, removing the function that
	    performed the channel number conversion.
	* Speed up JACK_Init() by using memset() to initialize structures
	* Ran indent -npcs -nprs -nsaf -nsaw -nsai -nut -di10 -bli0 on bio2jack.c
	  to get the code formatted consistently.  Reformatted a bunch of code manually
	  because there aren't indent settings.  Please don't add tabs if you submit patches.
	* Make some new functions static as they aren't called outside of bio2jack.c
3/23/2005
	* 0.7 released
	* Minor updates to README and INSTALL
	* Bump revisions up to 0.7 for release
	* Removed unused JACK_SendMessage() code, this can be retrieved from cvs at a later time
	  if we start using messages.
	* Received a great patch from Sean Meiners at Linspire.  They are pushing to jack enable 
          the desktop, the reason I wrote bio2jack.
	   - Adds the JACK_GetJackBufferSize function that allows bio2jack clients to find out
	     how big JACK's buffer size is.  This makes it possible for the client to calculate
	     latency much more accurately.  So far this is mostly useful in programs like Xine
	     where if the timing is off by more than ~10ms it makes all movies look like badly
	     dubbed Hong Kong action flicks.

	   - Switches bio2jack to use the very nice ring-buffer provided by the JACK API to
	     improve performance.  The linked-list method is good if you want to *never* loose
	     audio data, but the down-side is that there is no (technical) upper-limit to how
	     much memory it will use.  Using a ring-buffer that's sufficiently big places an
	     absolute limit on how much memory will be used and also eliminates the need to
	     malloc new memory every time JACK_Write is called, thereby reducing the amount of
	     time spent there.  There is a risk that the ring-buffer will fill up, but if that
	     were to happen JACK_Write simply refuses and returns 0, letting the client know
	     that we ran out of ring-buffer space and (usually) causing them to just slow down.

	     What prompted this is that we saw a few (admittedly, badly-behaved) apps that will
	     keep writing data until it refuses to take anymore.  When using a simple linked-list
	     they never stop and the whole process starts chewing up so much CPU time that the
	     system becomes unusable.

	   - Builds bio2jack as a versioned, shared library so clients don't have to be rebuilt
	     every time a fix/improvement is made to the library.
3/13/2005
	* 0.6 Released 
	* Implement JACK_SetClientName() that will let users of bio2jack set the name
	  that bio2jack uses when creating jack clients
	  - Suggestion and concept patch by Dirk Jagdmann
3/13/2005
	* Ran aspell on bio2jack.c and bio2jack.h to fix spelling mistakes
	* Fix compile errors when JACK_CLOSE_HACK is disabled
3/2/2005
	* extern "C" patch to fix compiling with c++ code
	  - Patch by Dirk Jagdmann
2/18/2005
	* Fix long standing bug where if no ports exist bio2jack will crash.
	  - Patch by Ed Wildgoose
2/8/2005
	* Install bio2jack-configure to the local binary directory via bin_SCRIPTS
          automake directive
          - Bug reported by Pierre Delagrave
2/5/2005
	* Call gettimeofday() at the start of the jack callback routine rather than
          at two places in two branches of the callback.  This apparently reduces 
          jitter.
          - Patch by Ed Wildgoose
1/16/2005
	* 0.5 released
	* Install bio2jack.h to $includedir during 'make install'
11/13/2004
	* 0.4 released.
	* Fixed up versions and copyright lines for 0.4 release.
10/24/2004
	* Decided that we shouldn't break api compatiblity.  Changed back to using 
	  JACK_GetBytesStored().
	* Discussion with Ed Wildgoose convinced me that user apps should really
	  need to know the exact amount of bytes stored in bio2jack.  Because of this
	  JACK_GetBytesStored() was dropped and renamed JACK_GetBytesStoredRealTimeApproximation()
	  to replace it since this shouldn't have any detrimental effects on bio2jack clients.
10/23/2004
	* JACK_Write() should early out if the user tells us to write
	  0 bytes. (Found by Ed Wildgoose)
	* Renamed JACK_GetBytesStored/JACK_GetBytesStoredFromDriver() to
	  JACK_GetBytesStoredRealTimeApproximation/
		JACK_GetBytesStoredRealTimeApproximationFromDriver() since the values
	  that these functions now return aren't real values
	* Put back JACK_GetBytesStored/JACK_GetBytesStoredFromDriver() to their
	  original implementation prior to the 10/21/2004 changes so we don't
	  break any api.
10/21/2004
	* JACK_GetJackLatency() should use jack_port_get_total_latency() instead of
	  jack_port_get_latency() because we want to know the amount of latency from
	  the output port until we've actually output the data to a physical device.
	* JACK_GetBytesStoredFromDriver() should use JACK_GetPositionFromDriver() for
	  the drv->played_client_bytes value so we get a more accurate real-time update
	  of the bytes stored.
10/08/2004
	* Compiled bio2jack under C++ and decided to change 'this' to 'drv'.  This makes more
	  sense considering that jack_driver_t is the structure and it doesn't namespace
	  conflict with the c++ 'this' keyword.
	* Added a few casts to silence warnings
	* Changed a few 'char*' to 'unsigned char*'
	* Added support for 0 input channels.
	* Fixed a few comparisons between 'unsigned int' and 'int'
	* JACK_OpenEx() 'char **jack_port_name' can be 'const char **' because we never
	  modify the port names
9/29/2004
	* Added #ifndef __cplusplus wrapper around the #define 
	  for bool.  C++ has its own boolean type.
	* JACK_Write() should take an unsigned char* instead of 
	  a char*.
	* Add JACK_GetJackBufferedBytes(int deviceID); to let 
	  the user of bio2jack see how much data the jack server
	  is buffering.
	Thanks again to Ed for these suggestions ;-)
9/12/2004 v0.3 released
	* Bumped revision in configure.in and bio2jack-config up to 0.3
9/9/2004
	* JACK_Write() was missing a releaseDriver(this); in the out of space path so
	  we were returning without unlocking the driver.  This would no doubt cause a
	  deadlock.  Thanks to Ed Wildgoose for reporting this.
	* Fix 3 signed/unsigned conversions.  I'm not seeing these here using
	  gcc 3.3.4 so I'll take Ed's word on this.
	* Apply volume to the audio data after it has been converted into floating
	  point values.  This should improve the output quality by a minor amount
	  as we will preserve more of the original data prior to the conversion to
	  float.  Float is of higher precision so we keep more information after
	  applying the volume effect to it.  Also suggested by Ed ;-)
	* Add the ability to have the volume be either 'linear' or 'dbAttenuation'.
	  JACK_SetVolumeEffectType() controls this setting, bio2jack defaults to 'linear'
	  If you set dbAttenuation then the volume level is the number of dBs of
	  attenuation to apply, 0 being 0dB or full volume.
	* Fix a couple of warnings for unused values that were only used for tracing.
	  Wrapped them in the TRACE_ENABLE conditional so they are only compiled in
	  when we are tracing.
9/7/2004
	* Added checks in configure.in so if we don't find 
	  jack/jack.h or if we don't find jack_activate in -ljack 
	  then we should report these errors to the user and exit 
	  out of the configure script.  Thanks to Jim Snyder for 
	  reporting this issue.
8/9/2004
	* Bumped revision in configure.in up to 0.2
	* Added bio2jack-config to allow configure scripts to retrieve information
	  about bio2jack
	* Modified Makefile.am to build bio2jack's library the same way that xmms-jack
	  builds its.
4/1/2004
	* Fixed warnings that popped up when I realized -Wall wasn't a cflag
	* Made bio2jack calls (almost) threadsafe. The only remaining issue is with
	  the global first_free_device. Added getDriver(int deviceID); and
	  releaseDriver(int device ID); to implement the locking.
	* Added jack reconnection attempts to getDriver() as this function is called from
	  all of the interface functions.  We attempt to reconnect every 250ms.
	  This change is for and dedicated to  Paul Davis(the author of jack and ardour)
		for his linux audio work.
	* Fixed some indenting.
2/16/2004
	* Fixed bug with JACK_GetPosition() due to JACK_Callback() not updatting the current
	  time when we were paused.  Not updating the previous callback time has the effect
	  of advancing the value returned by JACK_GetPosition() even if we are paused,
	  naturally not what we want to do.  JACK_Callback() now updates the previous callback
	  time even if we are paused.
	
2/01/2004
	* Added JACK_OpenDevice() error return values.  JACK_OpenDevice() also checks to see that
	  we have enough ports to meet the number of channels that were requested, missed this
	  condition during the initial implementation of the port specification code.
	* Support any number of input and output channels.  This generalizes a lot of code
	  that was using only two channels for stereo output.
	* Support apps that would like to have bio2jack output to ports other than the default
	  physical ports.  JACK_OpenEx() gives them hooks so they can open ports to any
	  other jack.

1/16/2004
	* JACK_callback() changes so everything is in terms of frames, simplifies the code a bit
	* JACK_Open() now takes a pointer to a rate to try and if there is a mismatch
	  between the requested and server rates sets this value to the server rate
	* Added JACK_SetNumChannels() to support stereo/mono, rough implementation thus far
	
12/27/3003
	* Add a handful of error defines to bio2jack.h for JACK_Open()
	* JACK_Callback() shouldn't print ERR when we have underruns because
	  this is actually a pretty normal thing to do at the very end of playing.
	
12/15/2003
	* Added pid to the client name to prevent name collisions with
	  multiple bio2jack's running.
		- patch from Kasper Souren

11/28/2003
	* Fixed JACK_SetPosition(), we only modify position_byte_offset 
	  now, and not other internal values like played_bytes and 
  	  bytes_in_jack.  This fixes a bug where JACK_GetBytesStore()
	  was returning negative values, something that really should be
	  impossible.
	* Initialize this->previousTime in JACK_Init() from the current 
	  time
	* JACK_GetBytesStored() should display error if returned time
	  is going to be negative
	* TRACE() should be conditional, ERR() should be unconditional
	  so we always have error printing enabled
	* JACK_Callback() now performs the flushing of any buffered
	  data, this avoids zeroing pointers in JACK_Reset() that the
	  callback routine could be using.
	* Added a CMD_SET_POSITION command message as the first fix
	  for JACK_SetPosition(). This turned out to be a poor choice
	  as the user could call JACK_SetPosition() then immediately
	  start sending new data to be played.  The set position command
	  would be processed from the callback at a later time but
	  this is simply more complex than it has to be.  Simplified
	  JACK_SetPosition() so this is all unnecessary.

11/24/2003
        * Fixed a few outstanding bugs with xmms-jack, things now work smoothly. 

10/25/2003
        * Fixed to be comparible with latest jack api, fixed a bunch of bugs.

5/5/2003
	* Cleaned up autogen.sh and the building of libraries.
	
3/7/2003 
	* Cleaned up the updating of state variables/counters
	* Removed mutexes, no longer necessary with state variable cleanup, so
          the driver is no completely non-blocking.
	  Some values may be read incorrectly but they should only be off by
	  small amounts

3/6/2003 - Merged in patch from Philipp Thomas <pthomas@suse.de>
	* Add missing <sys/time.h> include
	* Define _GNU_SOURCE to get pthread_mutexattr_settype defined
	* Fix GCC warnings
	
1/7/2003 - Fix a bug in JACK_Callback() where we were updating the value of 
bytesInJack before using it.  Fix a bug in the computation of the PLAYED 
position where if we had no bytesInJack we could compute a bogus value.  
Cleanup the names of some variables to be more explicit about what they 
indicate.  Add a state variable for the number of bytes written into the 
bio2jack library via JACK_Write().

12/30/2002 - Initial version of bio2jack, cvs import onto 
sourceforge.
