1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
|
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.
|