- player: Add support for "exact mode" - re-opens the audio device when a buffer is encountered that does not match the open audio device's sound parameters.
- build: Simplify cmake find modules.
- Add const qualifier to some fields and functions.
- metadata example: print the number of channels.
- Add documentation.
- Add more channel layouts.
- build: Compile in Debug mode by default.
- updating metadata: set time_base on stream not the codec
- libav lockmgr: set mutex pointer to NULL on destroy
- fix build on GNU/hurd
- build: remove bundled dependencies
- build: simpler cmake find modules, both code and license
- player: add shim to fix build failure on OSX
- playlist: fix race condition which can cause decoder to hang
- dummy player: fix timing issues
- playlist: added
groove_playlist_set_fill_mode. Allows you to choose between buffering until all sinks are full and buffering until any sinks are full.
- Fixed a race condition where seeking to a different playlist item and then back would have a window of time where it could report the wrong position.
- Properly play and pause network streams.
- build: update bundled libav to latest stable 10 release
- build: link player with -lrt for clock_gettime. closes #67
- playlist: fix case where filter graph was not being rebuilt. closes #65
- playlist: fix race condition segfault when attaching a sink
- encoder: properly reset encoding when flush or playlist end is encountered. closes #66
- player: thread cleanup only if thread was initialized - fixes potential crash on player detach
- build: look for includes in the current source tree. Fixes an issue when a previous version of the library is installed.
- build: on unix link with -lm
- groove_playlist_get_position: always set seconds even when item is NULL
- playlist: correct generation of the sink map
- fixes potential error when adding multiple sinks
- optimizes some cases where sinks can share filter graph chain
- dummy player now uses disable_resample optimization
- dummy player: avoid floating point error accumulation
- GrooveBuffer struct contains the presentation time stamp
- move include statements to outside of extern C
- ability to set true peak on playlist items. closes #50
- support per-sink gain adjustment. closes #41
- GroovePlaylist:
volumerenamed togaingroove_playlist_set_gainrenamed togroove_playlist_set_item_gaingroove_playlist_set_volumerenamed togroove_playlist_set_gain
- player: specify device by index rather than name. closes #44
- player: ability to attach a dummy player device. closes #60
- fingerprinter: encode/decode return 0 on success, < 0 on error
- fingerprinter: info struct contains raw fingerprint instead of compressed string. closes #61
- fingerprinter example: add --raw option
- fingerprinter sink: add error checking to chromaprint function calls
- fingerprinter sink: fix documentation. raw fingerprints are signed 32-bit integers, not unsigned 32-bit integers.
- fingerprinter sink: change
void *toint32_t *for encode/decode functions
- add acoustid fingerprinter sink. Closes #19
- build: revert GNUInstallDirs
- update to libav 10.1
- loudness scanning: fix memory corruption when scanning large album
- update to libav10
- playlist: fix segfault on out of memory
- playlist: fix segfault race condition when adding a sink
- build: fix cmake warnings
- use ebur128 true peak instead of sample peak
- fix bug where accessing "album" metadata would instead return the "album_artist"
- update to libav 10 beta2
- use the compand filter to allow setting the gain to > 1.0. Closes #45
- log error when cannot set up filter graph
- loudness scanning: fix crash for songs with 0 frames. Closes #48
- playlist example: fix race condition
- build: avoid useless dependencies
- update to libav dff1c19140e70. Closes #16 ASF seeking bug
- build: use GNUInstallDirs
- delete SDL2 config-generated files from repo (they were causing an issue with debian packaging)
- update libav to 246d3bf0ec
- build: add static targets to all libraries
- build: depend on system libav if possible
- queue: depend on pthread instead of SDL2
- file: depend on pthreads instead of SDL2
- isolate SDL dependency to player
- encoder: depend on pthread instead of SDL2
- player: use pthread for mutexes instead of SDL2
- loudness detector: depend on pthread instead of SDL2
- playlist: use pthread for mutexes instead of SDL2
- separate independent components into their own librares. closes #39
- build: use the same version info for all libs
- update libav to d4df02131b5522
- playlist: set sent_end_of_q at playlist create
- better timestamp setting
- fix build when libspeexdsp is installed
- cmake: support 2.8.7
- groove.h conforms to C90
- buffer implemented with pthreads instead of SDL
- playlist: fix GrooveBuffer ref/unref race condition. closes #28
- out-of-tree build for bundled libav
- update libav to 16e7b189c54
- compile with -O3
- update libav to 1c01b0253eb
- build system: bundle SDL2 but try to use system SDL2 if possible
- when doing bundled SDL2, use the cmake build
- enable SDL_File because osx needs it
- try to build against system libebur128 and fall back on bundled. closes #38
- decode: remove last_decoded_file
- SDL2 bundled dependency cleanup
- Makefile: libgroove.so links against -ldl
- fix 100% CPU by not disabling sdl timer. closes #20
- playlist example: check for failure to create player
- decode thread: end of playlist sentinel and full checking for every sink
- update init_filter_graph to route based on sinks
- sink: separate create from attach / destroy from detach
- depend on system SDL2
- expose GrooveSink buffer_size to public API
- rename GroovePlayer to GroovePlaylist
- rename player.c to playlist.c
- rename GrooveDeviceSink to GroovePlayer
- rename device_sink.c to player.c
- rename sample_count to frame_count
- print error string when cannot create aformat filter
- playlist: protect sink_map with a mutex
- player: flush queue on detach; reset queue on attach
- rename LICENSE to COPYING as per ubuntu suggestion
- encoder sink implementation
- transcoding example
- workaround for av_guess_codec bug
- fix some memory leaks found with valgrind
- fix segfault when logging is on for file open errors
- fix segfault when playlist item deleted
- logging: no audio stream found is INFO not ERROR
- encoder: stop when encoding buffer full. closes #32
- file: loggeng unrecognized format is INFO not ERROR
- encoder: default bit_rate to 256kbps
- support setting buffer_frame_count. closes #33
- transcode example: ability to join multiple tracks into one
- encoder: add flushes to correctly obtain format header
- encoder: set pts and dts to stream->nb_samples. closes #34
- playlist: decode_head waits on a mutex condition instead of sleeping
- playlist: when sinks are full wait on mutex condition
- encoder: draining uses a mutex condition instead of delay. closes #24
- transcode example: copy metadata to new file. closes #31
- encoder: fix deadlock race condition
- add missing condition signals
- consistent pointer conventions in groove.h
- avoid prefixing header defines with underscores
- better public/private pattern for GrooveFile. see #37
- queue: better public/private pattern and no typedefs
- encoder: better public/private pattern
- buffer: better public/private pattern and get rid of typedef
- player: better public/private pattern and remove typedefs
- playlist: better public/private pattern and remove typedefs
- remove typedef on GrooveTag. see #36
- scan: better public/private pattern and remove typedefs
- add license information to each file. closes #29
- use proper prototypes when no arguments
- do not use atexit; provide groove_finish
- encoder: fix cleanup deadlock race condition
- playlist: fix small memory leak on cleanup
- player: delete unused field
- loudness detector rewrite. closes #27 and #25
- LoudnessDetector also reports duration. closes #23
- loudness detector: more error checking
- readme update
- loudness detector: ability to get position (progress)
- add _peek() methods to all sinks
- remove groove_loudness_to_replaygain from API
- loudness detector: faster and more accurate album info
- add groove_encoder_position API
- update libav to 72ca830f511fcdc
- build with cmake
- fix build errors with clang
- cmake: only do -Wl,-Bsymbolic on unix environments
- fix build on OSX
- initial public release