1### Version 4.3.0 (2015-05-25) 2 3 * player: Add support for "exact mode" - re-opens the audio device when a 4 buffer is encountered that does not match the open audio device's sound 5 parameters. 6 * build: Simplify cmake find modules. 7 * Add const qualifier to some fields and functions. 8 * metadata example: print the number of channels. 9 * Add documentation. 10 * Add more channel layouts. 11 * build: Compile in Debug mode by default. 12 13### Version 4.2.1 (2014-10-07) 14 15 * updating metadata: set time_base on stream not the codec 16 * libav lockmgr: set mutex pointer to NULL on destroy 17 * fix build on GNU/hurd 18 19### Version 4.2.0 (2014-09-25) 20 21 * build: remove bundled dependencies 22 * build: simpler cmake find modules, both code and license 23 * player: add shim to fix build failure on OSX 24 25### Version 4.1.1 (2014-06-20) 26 27 * playlist: fix race condition which can cause decoder to hang 28 * dummy player: fix timing issues 29 30### Version 4.1.0 (2014-06-13) 31 32 * playlist: added `groove_playlist_set_fill_mode`. Allows you to choose between 33 buffering until all sinks are full and buffering until any sinks are full. 34 35### Version 4.0.4 (2014-06-03) 36 37 * Fixed a race condition where seeking to a different playlist item and then 38 back would have a window of time where it could report the wrong position. 39 * Properly play and pause network streams. 40 41### Version 4.0.3 (2014-05-31) 42 43 * build: update bundled libav to latest stable 10 release 44 * build: link player with -lrt for clock_gettime. closes #67 45 * playlist: fix case where filter graph was not being rebuilt. closes #65 46 * playlist: fix race condition segfault when attaching a sink 47 * encoder: properly reset encoding when flush or playlist end is encountered. 48 closes #66 49 50### Version 4.0.2 (2014-05-20) 51 52 * player: thread cleanup only if thread was initialized - fixes potential 53 crash on player detach 54 * build: look for includes in the current source tree. Fixes an issue when a 55 previous version of the library is installed. 56 * build: on unix link with -lm 57 58### Version 4.0.1 (2014-05-13) 59 60 * groove_playlist_get_position: always set seconds even when item is NULL 61 * playlist: correct generation of the sink map 62 - fixes potential error when adding multiple sinks 63 - optimizes some cases where sinks can share filter graph chain 64 - dummy player now uses disable_resample optimization 65 * dummy player: avoid floating point error accumulation 66 67### Version 4.0.0 (2014-05-12) 68 69 * GrooveBuffer struct contains the presentation time stamp 70 * move include statements to outside of extern C 71 * ability to set true peak on playlist items. closes #50 72 * support per-sink gain adjustment. closes #41 73 * GroovePlaylist: `volume` renamed to `gain` 74 - `groove_playlist_set_gain` renamed to `groove_playlist_set_item_gain` 75 - `groove_playlist_set_volume` renamed to `groove_playlist_set_gain` 76 * player: specify device by index rather than name. closes #44 77 * player: ability to attach a dummy player device. closes #60 78 * fingerprinter: encode/decode return 0 on success, < 0 on error 79 * fingerprinter: info struct contains raw fingerprint instead of 80 compressed string. closes #61 81 82### Version 3.1.1 (2014-04-21) 83 84 * fingerprinter example: add --raw option 85 * fingerprinter sink: add error checking to chromaprint function calls 86 * fingerprinter sink: fix documentation. raw fingerprints are signed 32-bit 87 integers, not unsigned 32-bit integers. 88 * fingerprinter sink: change `void *` to `int32_t *` for encode/decode 89 functions 90 91### Version 3.1.0 (2014-04-19) 92 93 * add acoustid fingerprinter sink. Closes #19 94 * build: revert GNUInstallDirs 95 * update to libav 10.1 96 97### Version 3.0.8 (2014-04-01) 98 99 * loudness scanning: fix memory corruption when scanning large album 100 * update to libav10 101 * playlist: fix segfault on out of memory 102 * playlist: fix segfault race condition when adding a sink 103 104### Version 3.0.7 (2014-03-16) 105 106 * build: fix cmake warnings 107 * use ebur128 true peak instead of sample peak 108 * fix bug where accessing "album" metadata would instead 109 return the "album_artist" 110 * update to libav 10 beta2 111 * use the compand filter to allow setting the gain to > 1.0. Closes #45 112 * log error when cannot set up filter graph 113 * loudness scanning: fix crash for songs with 0 frames. Closes #48 114 * playlist example: fix race condition 115 116### Version 3.0.6 (2014-02-20) 117 118 * build: avoid useless dependencies 119 120### Version 3.0.5 (2014-02-20) 121 122 * update to libav dff1c19140e70. Closes #16 ASF seeking bug 123 * build: use GNUInstallDirs 124 125### Version 3.0.4 (2014-02-09) 126 127 * delete SDL2 config-generated files from repo 128 (they were causing an issue with debian packaging) 129 130### Version 3.0.3 (2014-02-09) 131 132 * update libav to 246d3bf0ec 133 134### Version 3.0.2 (2013-11-25) 135 136 * build: add static targets to all libraries 137 138### Version 3.0.1 (2013-11-25) 139 140 * build: depend on system libav if possible 141 142### Version 3.0.0 (2013-11-24) 143 144 * queue: depend on pthread instead of SDL2 145 * file: depend on pthreads instead of SDL2 146 * isolate SDL dependency to player 147 * encoder: depend on pthread instead of SDL2 148 * player: use pthread for mutexes instead of SDL2 149 * loudness detector: depend on pthread instead of SDL2 150 * playlist: use pthread for mutexes instead of SDL2 151 * separate independent components into their own librares. closes #39 152 * build: use the same version info for all libs 153 154### Version 2.0.4 (2013-11-23) 155 156 * update libav to d4df02131b5522 157 * playlist: set sent_end_of_q at playlist create 158 * better timestamp setting 159 160### Version 2.0.3 (2013-11-22) 161 162 * fix build when libspeexdsp is installed 163 * cmake: support 2.8.7 164 * groove.h conforms to C90 165 * buffer implemented with pthreads instead of SDL 166 * playlist: fix GrooveBuffer ref/unref race condition. closes #28 167 168### Version 2.0.2 (2013-11-19) 169 170 * out-of-tree build for bundled libav 171 * update libav to 16e7b189c54 172 173### Version 2.0.1 (2013-11-18) 174 175 * compile with -O3 176 * update libav to 1c01b0253eb 177 * build system: bundle SDL2 but try to use system SDL2 if possible 178 * when doing bundled SDL2, use the cmake build 179 * enable SDL_File because osx needs it 180 * try to build against system libebur128 and fall back on bundled. closes #38 181 182### Version 2.0.0 (2013-11-16) 183 184 * decode: remove last_decoded_file 185 * SDL2 bundled dependency cleanup 186 * Makefile: libgroove.so links against -ldl 187 * fix 100% CPU by not disabling sdl timer. closes #20 188 * playlist example: check for failure to create player 189 * decode thread: end of playlist sentinel and full checking for every sink 190 * update init_filter_graph to route based on sinks 191 * sink: separate create from attach / destroy from detach 192 * depend on system SDL2 193 * expose GrooveSink buffer_size to public API 194 * rename GroovePlayer to GroovePlaylist 195 * rename player.c to playlist.c 196 * rename GrooveDeviceSink to GroovePlayer 197 * rename device_sink.c to player.c 198 * rename sample_count to frame_count 199 * print error string when cannot create aformat filter 200 * playlist: protect sink_map with a mutex 201 * player: flush queue on detach; reset queue on attach 202 * rename LICENSE to COPYING as per ubuntu suggestion 203 * encoder sink implementation 204 * transcoding example 205 * workaround for av_guess_codec bug 206 * fix some memory leaks found with valgrind 207 * fix segfault when logging is on for file open errors 208 * fix segfault when playlist item deleted 209 * logging: no audio stream found is INFO not ERROR 210 * encoder: stop when encoding buffer full. closes #32 211 * file: loggeng unrecognized format is INFO not ERROR 212 * encoder: default bit_rate to 256kbps 213 * support setting buffer_frame_count. closes #33 214 * transcode example: ability to join multiple tracks into one 215 * encoder: add flushes to correctly obtain format header 216 * encoder: set pts and dts to stream->nb_samples. closes #34 217 * playlist: decode_head waits on a mutex condition instead of sleeping 218 * playlist: when sinks are full wait on mutex condition 219 * encoder: draining uses a mutex condition instead of delay. closes #24 220 * transcode example: copy metadata to new file. closes #31 221 * encoder: fix deadlock race condition 222 * add missing condition signals 223 * consistent pointer conventions in groove.h 224 * avoid prefixing header defines with underscores 225 * better public/private pattern for GrooveFile. see #37 226 * queue: better public/private pattern and no typedefs 227 * encoder: better public/private pattern 228 * buffer: better public/private pattern and get rid of typedef 229 * player: better public/private pattern and remove typedefs 230 * playlist: better public/private pattern and remove typedefs 231 * remove typedef on GrooveTag. see #36 232 * scan: better public/private pattern and remove typedefs 233 * add license information to each file. closes #29 234 * use proper prototypes when no arguments 235 * do not use atexit; provide groove_finish 236 * encoder: fix cleanup deadlock race condition 237 * playlist: fix small memory leak on cleanup 238 * player: delete unused field 239 * loudness detector rewrite. closes #27 and #25 240 * LoudnessDetector also reports duration. closes #23 241 * loudness detector: more error checking 242 * readme update 243 * loudness detector: ability to get position (progress) 244 * add _peek() methods to all sinks 245 * remove groove_loudness_to_replaygain from API 246 * loudness detector: faster and more accurate album info 247 * add groove_encoder_position API 248 * update libav to 72ca830f511fcdc 249 * build with cmake 250 * fix build errors with clang 251 * cmake: only do -Wl,-Bsymbolic on unix environments 252 * fix build on OSX 253 254### Version 1.0.0 (2013-08-08) 255 256 * initial public release 257