Hi, since Eric has handed over MPD development to me 2 weeks ago, there have been no less than 200 patches for all subsystems, here is a very brief summary:
- MPD now depends on GLib. The decision to do this wasn't quite easy, but MPD was duplicating a lot of GLib features where GLib's versions were much more robust (e.g. character set conversion). Some day, I will also use the GLib main loop for asynchronous I/O, but not before 0.14. - we now have authentication over unix sockets. Authenticated clients may add local files to the playlist, with the prefix "file:///" according to RFC 1738 3.10. - the "idle" command has been overhauled, there is now "noidle" to abort idle. This solves some race conditions of the previous specification. - all plugin APIs have been overhauled: input, decoder, output. Superfluous methods and arguments have been removed, and all return "bool" instead of "int" (true/false instead of 0/-1). - the plugins have been moved: decoders to src/decoder, outputs to src/output - the custom HTTP client library has been replaced with libcurl. This should solve a LOT of streaming bugs! - most of the PCM code has been rewritten, and all code paths support 24 bit samples. I consider adding floating point samples, too. - the MP3 and MPC decoders send 24 bit samples. MP3's dithering code has been moved to the PCM library. This allows all decoders to benefit from dithering. This means, MPC has dithering from now on! - of course, you can also configure a forced 24 bit audio format. The jack output can also cope with 24 bit. OSS has been restricted to 16 bit for now (it used to crash when something other than 8 or 16 bit arrived), the same holds true for Pulse. - the local mp4ff library has been removed. - many many bug reports from Mantis have been fixed. Please continue reporting bugs! Shortlog and diffstat follow. I'm planning to do an 0.14~alpha release "real soon now" (maybe 2 weeks), followed by 0.14~beta in the first week of December. The goal is to have a solid 0.14 around christmas. Max Andrzej Rybczak (2): listen: fix "struct ucred" check configure.ac: use libmikmod-config instead of pkg-config Enrico Weigelt (1): fixing several imports to work via pkg-config Eric Wong (5): dirvec: add dirvec_for_each iterator {dir,song}vec: these structs are const dirvec: introduce locking for all iterators update: fix multiple deletes from *vec iterators AUTHORS: Eric Wong is a former developer Max Kellermann (191): listen: use getaddrinfo() instead of gethostbyname() listen: pass protocol family to establishListen() pulse: clarify the meaning of multiple server names client: optimized client_input_received() idle: client command "noidle" aborts idle tag_id3: fix indentation use GLib path, tag_id3: use g_convert() instead of charConv.c path: allow starting MPD with non-existing music directory mapper: moved musicDir initialization from path.c locate: use g_utf8_casefold() instead of string_toupper() shout: check for vorbisenc library update: don't skip hidden files listen, client: enable SO_PASSCRED, get client's uid song: added song_in_database() playlist: moved code to song_by_url() command: print error message on "addid" failure playlist: added support for adding songs not in the music database song: check file type in song_file_update() playlist: also allow world-readable local files command: special case for "add /" configure.ac: removed iconv option configure.ac: find more libraries with pkg-config configure.ac: reformatted AC_ARG_ENABLE section configure.ac: check if "struct ucred" is available removed the "bs" build scripts Makefile.am: fix automake 1.6 errors listen: fixed unused variable warning without HAVE_UCRED command: expect "file:///" url for local files decoder: notify player after entering decodeStart() input: declare struct input_stream input_stream: removed nmemb argument Makefile.am: don't compile disabled sources Makefile.am: don't compile disabled decoder plugins configure.ac: test $with_zeroconf!=no client: handle partial lines correctly client: read() return value is ssize_t client: added assertions on the buffer pointers client: removed CLIENT_MAX_BUFFER_LENGTH client: fixed send buffer client: eliminate variable "left" in client_write() client: converted permissions to unsigned reverted package name to "mpd" Makefile.am: require automake 1.9 ffmpeg: make internal functions static input_stream: don't declare method typedefs mapper: don't return database path with leading slash signal_check.c: don't use leading underscores path: replaced mpd_basename() with g_path_get_basename() path: replaced parent_path() with g_path_get_dirname() path: removed pathcpy_trunc() ffmpeg: detect which ffmpeg headers should be included ffmpeg: link with libavutil ffmpeg: don't pass pointer as hexadecimal string pcm_utils: renamed ConvState to struct pcm_convert_state pcm_utils: no CamelCase pcm_utils: added pcm_convert_init() command: renamed CommandEntry to struct command command: make command pointers constant command: added "commands" array instead of registering manually renamed storedPlaylist.c to stored_playlist.c stored_playlist: no CamelCase stored_playlist: moved functions from playlist.c stored_playlist: de-CamelCase moved function stored_playlist: spl_append_uri() returns enum playlist_result stored_playlist: added spl_list() command: added print_spl_list() command: added command "listplaylists" stored_playlist: send timestamps ack: converted ACK_ERROR_* macros to enum command: removed CommandHandlerFunction typedef command: no CamelCase command: replaced "goto" with "break" command: converted COMMAND_RETURN_* macros to enum command: use the bool datatype instead of int playlist: unsigned integers stored_playlist: unsigned index arguments command: added check_unsigned() / check_bool() command: check over/underflows in check_int() stored_playlist: spl_load() returns GPtrArray stored_playlist: renamed and moved spl_delete() to stored_playlist.c stored_playlist: emit idle event on delete stored_playlist: don't map files outside the database output_buffer: don't split frames audio: allow 24 and 8 bit output pcm_dither: added generic 24 to 16 bit dithering mp3: use sizeof(sample) instead of hard-coded "2" mp3: send 24 bit PCM data command: fix boolean value parser pcm_utils: moved code to pcm_resample.c pcm_resample: don't hard-code sample size pcm_resample: don't resample partial samples pcm_resample: eliminated "sample" local variables pcm_resample: moved code to pcm_resample_set() pcm_resample: implemented 24 bit resampling pcm_utils: moved channel conversion functions to pcm_channels.c pcm_channels: added 24 bit implementations pcm_utils: moved code to pcm_convert_16() pcm_utils: generic pcm_convert_size() implementation pcm_utils: added 24 bit conversion functions player: don't send partial frames of silence pcm_resample: support for libsamplerate < 0.1.3 jack: fix indentation jack: added constant "frame_size" jack: partial writes to ring buffer jack: lockless data transfer to jack thread jack: optimize local variables jack: added assertions against partial frames jack: eliminated CamelCase jack: moved code to jack_write_samples_16() jack: support for 24 bit samples remove unused sources player: don't clear command before do_play() returns pulse: force 16 bit audio sample format removed internal copy of libmp4ff configure.ac: disable libtool configure.ac: changed version number to "0.14~git" renamed ChangeLog to NEWS Makefile.am: install documentation configure.ac: reverted protocol version to 0.14.0 renamed src/inputPlugins/ to src/decoder/ renamed src/audioOutputs/ to src/output/ command: removed range check from check_bool() stored_playlist: fixed signed comparison warning input_stream: added input_stream_global_finish() http: use libcurl input_stream: renamed sources, no CamelCase input_stream: removed the InputStream typedef input_file: don't export internal methods input_file: removed global constructor input_stream: no CamelCase input_stream: added struct input_plugin input_stream: input_stream_close() returns void input_stream: use "bool" instead of "int" input_stream: use g_free() in input_stream_close() input_curl: added local variable "value" input_curl: set input_stream.mime from Content-Type response header curl: read stream name from HTTP response headers dirvec: fixed GCC shadow warning output: don't compile plugins which are disabled configure.ac: fix "xyes: command not found" input_file, input_curl: check URL type before attempting to open player: reset pc.command when decoder startup fails utils: use g_str_has_prefix() instead of prefixcmp() input_stream: convert offset and size to the off_t data type input_file: don't use buffered I/O mp3: remove obsolete comments mp3: no CamelCase mp3: use bool mp3: use GLib allocation functions mp3: no "goto" mp3: moved code to mp3_filesize_to_song_length() decoder_api: don't cast need_chunks() to int mp3: assert that the stream is seekable mp3: moved code to mp3_time_to_frame() mp3: moved code to mp3_this_frame_offset() mp3: moved code to mp3_update_timer_next_frame() mp3: moved code to mp3_send_pcm() mp3: moved code to mp3_synth_and_send() mp3: return from mp3_synth_and_send() on any command mp3: seek in background decoder_api: removed decoder_clear() player: request new song only if there is no pending command decoder_api: make the audio_format parameter mandatory decoder: automatically flush the output buffer after decoder exits player: added variable "play_audio_format" oss: check and override audio_format properly player: handle songs shorter than the initial buffer pulse: no CamelCase pulse: use GLib instead of util.h/log.h pulse: clear pa_simple pointer in pulse_close() audio: removed variable "audioOpened" audio: call closeAudioDevice() on error output: use bool for return values and flags output: close device on play error output: moved audioDeviceStates to audio_output.enabled log: don't use utils.h input_file: use GLib for logging input_file: check fstat() failure input_file: refuse to open non-regular files output: always call cancel() before stop() output: moved code to audio_output_update() output: delay reopen after device failure output: removed audio_output.result mp3: make mp3_read() return bool decoder: use bool for return values and flags mpc: fix boolean interpretation of input_stream_seek() mpc: fix broken integer sample conversion mpc: renamed variable "s16" to "dest" mpc: moved sample size into a constant mpc: provide 24 bit samples Viliam Mateicka (1): ffmpeg: new decoder plugin AUTHORS | 5 ChangeLog | 352 ------- INSTALL | 4 Makefile.am | 6 NEWS | 352 +++++++ autogen.sh | 2 bs/README | 69 - bs/config.mk.default | 64 - bs/cross-arch.sh | 82 - bs/deps-audio.mk | 38 bs/deps-conflicts.mk | 14 bs/deps-input.mk | 46 - bs/deps-misc.mk | 17 bs/mkconfig-header.sh | 88 - bs/mkconfig.h.mk | 55 - bs/mkdep.sh | 58 - bs/mkdir_p.sh | 37 bs/mkdist.sh | 50 - bs/pkginfo-header.sh | 16 bs/pkginfo.sh | 19 build.mk | 103 -- configure.ac | 541 +++++++----- doc/COMMANDS | 19 doc/mpd.conf.5 | 2 m4/alsa.m4 | 142 --- m4/ao.m4 | 112 -- m4/audiofile.m4 | 179 ---- m4/libFLAC.m4 | 104 -- m4/libmikmod.m4 | 207 ---- m4/ogg.m4 | 102 -- m4/shout.m4 | 90 -- m4/ucred.m4 | 32 m4/vorbis.m4 | 122 -- src/Makefile.am | 204 +++- src/ack.h | 27 src/audio.c | 98 -- src/audio.h | 4 src/audioOutputs/audioOutput_alsa.c | 444 --------- src/audioOutputs/audioOutput_ao.c | 253 ----- src/audioOutputs/audioOutput_fifo.c | 290 ------ src/audioOutputs/audioOutput_jack.c | 454 ---------- src/audioOutputs/audioOutput_mvp.c | 280 ------ src/audioOutputs/audioOutput_null.c | 85 - src/audioOutputs/audioOutput_oss.c | 571 ------------ src/audioOutputs/audioOutput_osx.c | 368 -------- src/audioOutputs/audioOutput_pulse.c | 220 ---- src/audioOutputs/audioOutput_shout.c | 596 ------------- src/audioOutputs/audioOutput_shout.h | 93 -- src/audioOutputs/audioOutput_shout_mp3.c | 189 ---- src/audioOutputs/audioOutput_shout_ogg.c | 306 ------ src/charConv.c | 177 --- src/charConv.h | 26 src/client.c | 205 ++-- src/client.h | 12 src/command.c | 1117 +++++++++++++------------ src/command.h | 26 src/database.c | 15 src/dbUtils.c | 10 src/decoder/_flac_common.c | 323 +++++++ src/decoder/_flac_common.h | 168 +++ src/decoder/_ogg_common.c | 49 + src/decoder/_ogg_common.h | 31 src/decoder/aac_plugin.c | 600 +++++++++++++ src/decoder/audiofile_plugin.c | 144 +++ src/decoder/ffmpeg_plugin.c | 418 +++++++++ src/decoder/flac_plugin.c | 462 ++++++++++ src/decoder/mod_plugin.c | 277 ++++++ src/decoder/mp3_plugin.c | 1157 ++++++++++++++++++++++++++ src/decoder/mp4_plugin.c | 423 +++++++++ src/decoder/mpc_plugin.c | 306 ++++++ src/decoder/oggflac_plugin.c | 354 +++++++ src/decoder/oggvorbis_plugin.c | 385 ++++++++ src/decoder/wavpack_plugin.c | 574 ++++++++++++ src/decoder_api.c | 60 - src/decoder_api.h | 25 src/decoder_control.c | 10 src/decoder_control.h | 10 src/decoder_internal.h | 2 src/decoder_list.c | 24 src/decoder_thread.c | 40 src/directory.c | 3 src/directory_save.c | 17 src/dirvec.c | 61 + src/dirvec.h | 3 src/inputPlugins/_flac_common.c | 330 ------- src/inputPlugins/_flac_common.h | 172 --- src/inputPlugins/_ogg_common.c | 55 - src/inputPlugins/_ogg_common.h | 36 src/inputPlugins/aac_plugin.c | 610 ------------- src/inputPlugins/audiofile_plugin.c | 156 --- src/inputPlugins/flac_plugin.c | 482 ---------- src/inputPlugins/mod_plugin.c | 287 ------ src/inputPlugins/mp3_plugin.c | 1132 ------------------------- src/inputPlugins/mp4_plugin.c | 432 --------- src/inputPlugins/mpc_plugin.c | 317 ------- src/inputPlugins/oggflac_plugin.c | 364 -------- src/inputPlugins/oggvorbis_plugin.c | 398 -------- src/inputPlugins/wavpack_plugin.c | 583 ------------- src/inputStream.c | 82 - src/inputStream.h | 72 - src/inputStream_file.c | 114 -- src/inputStream_file.h | 39 src/inputStream_http.c | 1050 ----------------------- src/inputStream_http.h | 39 src/inputStream_http_auth.h | 102 -- src/input_curl.c | 514 +++++++++++ src/input_curl.h | 28 src/input_file.c | 132 ++ src/input_file.h | 26 src/input_stream.c | 107 ++ src/input_stream.h | 75 + src/listen.c | 109 +- src/locate.c | 12 src/log.c | 22 src/ls.c | 89 -- src/ls.h | 2 src/main.c | 17 src/mapper.c | 58 + src/mapper.h | 4 src/mp4ff/Makefile.am | 9 src/mp4ff/drms.c | 1043 ----------------------- src/mp4ff/drms.h | 40 src/mp4ff/drmstables.h | 449 ---------- src/mp4ff/mp4atom.c | 781 ----------------- src/mp4ff/mp4ff.c | 430 --------- src/mp4ff/mp4ff.h | 128 -- src/mp4ff/mp4ff_int_types.h | 32 src/mp4ff/mp4ffint.h | 329 ------- src/mp4ff/mp4meta.c | 414 --------- src/mp4ff/mp4sample.c | 152 --- src/mp4ff/mp4tagupdate.c | 645 -------------- src/mp4ff/mp4util.c | 188 ---- src/output/alsa_plugin.c | 436 +++++++++ src/output/ao_plugin.c | 245 +++++ src/output/fifo_plugin.c | 280 ++++++ src/output/jack_plugin.c | 477 ++++++++++ src/output/mvp_plugin.c | 273 ++++++ src/output/null_plugin.c | 85 + src/output/oss_plugin.c | 570 ++++++++++++ src/output/osx_plugin.c | 361 ++++++++ src/output/pulse_plugin.c | 209 ++++ src/output/shout_mp3.c | 184 ++++ src/output/shout_ogg.c | 302 ++++++ src/output/shout_plugin.c | 591 +++++++++++++ src/output/shout_plugin.h | 88 + src/outputBuffer.c | 11 src/outputBuffer_accessors.h | 88 - src/outputBuffer_ob_send.h | 133 -- src/output_api.c | 2 src/output_api.h | 6 src/output_control.c | 26 src/output_control.h | 14 src/output_init.c | 8 src/output_internal.h | 32 src/output_list.c | 22 src/output_list.h | 4 src/output_thread.c | 49 - src/path.c | 133 -- src/path.h | 29 src/pcm_channels.c | 181 ++++ src/pcm_channels.h | 35 src/pcm_dither.c | 82 + src/pcm_dither.h | 41 src/pcm_resample.c | 26 src/pcm_resample.h | 71 + src/pcm_resample_fallback.c | 93 ++ src/pcm_resample_libsamplerate.c | 228 +++++ src/pcm_utils.c | 456 +++------- src/pcm_utils.h | 45 - src/permission.c | 16 src/permission.h | 4 src/player_thread.c | 45 - src/playlist.c | 376 +++----- src/playlist.h | 46 - src/playlist_save.c | 5 src/signal_check.c | 16 src/song.c | 6 src/song.h | 8 src/songvec.c | 8 src/storedPlaylist.c | 340 ------- src/storedPlaylist.h | 44 src/stored_playlist.c | 395 ++++++++ src/stored_playlist.h | 71 + src/tag_id3.c | 85 - src/tag_id3.h | 13 src/update.c | 29 src/utils.c | 48 - src/utils.h | 8 src/volume.c | 4 src/zeroconf.c | 4 190 files changed, 14533 insertions(+), 20766 deletions(-) ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team