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