aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2009-02-02player_thread: set player error when output device failsMax Kellermann1-1/+4
When the output device fails to play a chunk, set pc.error to PLAYER_ERROR_AUDIO. This way, the playlist knows that it should not queue the next song.
2009-01-30mikmod: call MikMod_Exit() only in the finish() methodMatthias Drochner1-6/+0
Hi - independently of libmikmod's other problems - there seems to be a problem in mpd's wrapper: MikMod_Exit() is called after the first file is decoded, which frees some ressources within the mikmod library. An attempt to play a second file leads to a crash. The appended patch fixes this for me. (I don't know what the "dup" entry is good for - someone who knows should review that too.) best regards Matthias [mk: removed 3 more MikMod_Exit() invocations]
2009-01-30wavpack: pass NULL if the .wvc file fails to openMax Kellermann1-1/+3
The wavpack library seems to use the .wvc stream even if the OPEN_WVC flag is not set. In this case, pass NULL to be sure libwavpack won't use it.
2009-01-30mapper: ignore duplicate slashes in playlistsMax Kellermann1-0/+3
When there are duplicate slashes in the song paths, eliminate them; example: /var/lib/mpd/music//foo.mp3 becomes: /var/lib/mpd/music/foo.mp3 The slash is only detected at the border between the music_directory and the local part.
2009-01-30mapper: remove trailing slashes from music_directoryMax Kellermann1-1/+15
When the user configures a music_directory with a trailing slash, it may break playlist loading, because MPD expects a double slash. Chop off the trailing slash.
2009-01-30ffmeg: added support for the tags comment, genre, yearDavid Horn1-0/+10
ffmpeg_tag_internal() does not look for a few tags that mpd supports. Most noteably: comment -> TAG_ITEM_COMMENT -> Description genre -> TAG_ITEM_GENRE -> WM/Genre (not WM/GenreID) year -> TAG_ITEM_DATE -> WM/Year I *think* that this is the last of the tags that AVFormatContext() in ffmpeg supports that mpd also uses.
2009-01-29jack: reduced sleep time to 1msMax Kellermann1-1/+1
When waiting for free space in the ring buffer, the JACK plugin sleeped 10ms until there is enough space. This delay was too large for low-latency setups (<10ms), and created a lot of xruns. Work around that by reducing the sleep time to 1ms. A proper solution for this would be to use an event based approach, and we will do it, just not now.
2009-01-29jack: clear "shutdown" flag on reconnectMax Kellermann1-0/+2
When the connection failed once, you had to restart MPD, because it never cleared the jack_data.shutdown flag. Instead, it refused to play anything "because there is no client thread" (which is wrong at that point).
2009-01-29jack: allocate ring buffers before connectingMax Kellermann1-5/+3
If the ring buffers are allocated after jack_activate(), mpd_jack_process() might segfault because it attempts to access them.
2009-01-29jack: register ports before activating clientsMax Kellermann1-5/+5
Call jack_port_register() before jack_activate().
2009-01-17oggvorbis: disable seeking on remote songsMax Kellermann1-6/+24
When libvorbis knows that a song is seekable, it seeks around like crazy in the file before starting to decode it. This is very expensive on remote HTTP resources, and delays MPD for 10 or 20 seconds. This patch disables seeking on remote songs, because the advantages of quickly playing a song seem to weigh more than the theoretical ability of seeking for most MPD users. If users feel this feature is needed, we will make a configuration option for that.
2009-01-16decoder_api: added assertion on partial framesMax Kellermann1-0/+1
Decoder plugins must not send partial frames.
2009-01-16pcm_resample_fallback: corrected the sample calculationMax Kellermann1-2/+4
Due to rounding errors, it was possible that the fallback resampler returned partial frames.
2009-01-15input_curl: don't call input_curl_select() when already at EOFMax Kellermann1-1/+3
Calling input_curl_select() after EOF has been reached causes an assertion failure. This can happen if the HTTP response is empty. Check c->eof before calling input_curl_select().
2009-01-15input_curl: set "ready" flag on EOFMax Kellermann1-0/+5
Set the "ready" flag for empty resources.
2009-01-15input_curl: call curl_multi_info_read() in constructorMax Kellermann1-0/+6
To check for early connect failures, call curl_multi_info_read() in the constructor input_curl_open(). This fixes an assertion failure.
2009-01-14playlist: safely search the playlist for deleted songMax Kellermann1-1/+1
When a song file is deleted during database update, all pointers to it must be removed from the playlist. The "for" loop in deleteASongFromPlaylist() did not deal with multiple copies of the deleted song properly, and left instances of the (to-be-invalidated) pointer in. Fix this by reversing the loop.
2009-01-14song_save: check for colon and space when loading a tagMax Kellermann1-2/+4
matchesAnMpdTagItemKey() broke when two tag items had the same prefix, because it did not check if the tag name ended after the prefix. Add a check for the colon and the space after the tag name.
2009-01-13input_curl: honour http_proxy_* config directivesJoe Milbourn1-0/+30
If http_proxy_{host, port, user, password} are provided in mpd.conf they are not passed on to libcurl. As a result mpd cannot stream from behind an http proxy. The attached patch `http_proxy.patch` makes the relevant calls to curl_easy_setopt(...) for all proxy configuration parameters, but is only tested for host and port.
2009-01-13playlist: implement Fisher-Yates shuffle properlyMax Kellermann1-2/+2
MPD's shuffling algorithm was not implemented well: it considers songs which were already swapped, making it somewhat non-random. Fix the Fisher-Yates shuffle algorithm by passing the proper bounds to the PRNG.
2009-01-13playlist: use GLib's random number generatorMax Kellermann1-6/+10
srandom() and random() are not portable. Use GLib's implementation.
2009-01-13input_curl: use select() to eliminate busy loop during connectMax Kellermann1-0/+6
When decoder_run_song() (decoder_thread.c) waits for the input stream to become ready, it did that in a busy loop. Add a select() call to input_curl_buffer() during connect/handshake (i.e. before the first chunk of body data was received), to let the CPU relax.
2009-01-13decoder_api: don't ignore DECODE_COMMAND_STOPMax Kellermann1-2/+1
When the decoder thread is waiting for free chunks in the music pipe, don't ignore the STOP command. Just return dc.command without further checks.
2009-01-13update: save the database even if it is emptyMax Kellermann2-1/+14
Save an empty database, even if the music directory is empty.
2009-01-13pcm_utils: use the custom PRNG for volume ditheringMax Kellermann4-6/+40
Don't use libc's rand() function, because it is slow. Our own trivial linear congruential generator is good enough for dithering.
2009-01-13update: refresh stats when database update is finishedMax Kellermann1-0/+5
2009-01-13playlist: log errors during loadPlaylist()Max Kellermann3-5/+4
Don't call command_error() if loading a song from the playlist fails. This may result in assertion failures, since command_error() may be called more than once.
2009-01-04player_thread: fix cross-fading duplicate chunk bugMax Kellermann1-0/+8
When the decoder of the new song is not fast enough, the player thread has to wait for it for a moment. However the variable "nextChunk" was reset to -1 during that, making the next loop iteration assume that cross-fading has not begun yet. This patch overwrites it with "0" while waiting.
2009-01-04decoder_api: moved code to do_send_tag(), free temporary tagMax Kellermann1-7/+17
This patch fixes a minor memory leak: when decoder_tag() attempted to send a merged tag object (created by tag_add_stream_tags()), and was interrupted by a decoder command, it did not free the temporary merged tag object.
2009-01-02jack: duplicate jack_get_ports() return valuesMax Kellermann1-3/+4
JACK documentation states: "The caller is responsible for calling free(3) any non-NULL returned value." This does not seem to include the array elements. Duplicate them after jack_get_ports(), and free only the array. Convert JackData.output_ports to non-const.
2009-01-02bonjour: fixed "unused parameter" warningsMax Kellermann1-7/+13
Add G_GNUC_UNUSED attributes.
2009-01-02main: use g_setenv() instead of setenv()Max Kellermann1-42/+1
Removed the fallback setenv() implementation for solaris.
2009-01-02log: automatically append newlineMax Kellermann1-2/+17
If a log message does not include a newline character, append it.
2009-01-02tag_id3: strip leading and trailing whitespace from ID3 tagsThomas Jansen1-2/+6
Fix for bug #1491.
2009-01-02mp4: support the writer/composer tagFrank Mulder1-0/+2
I tried to search for a certain composer in my collection, but only non-mp4 files showed up. The source code reveals that this tag is not read. This can be fixed by reading the 'Writer' tag field, in mp4_plugin.c, in function mp4_load_tag. I actually tried this, and after compiling with those lines added, also mp4 (.m4a) files showed up when searching for a composer.
2008-12-24playlist: fix stored playlist modifications with absolute pathsMax Kellermann3-2/+20
When save_absolute_paths_in_playlists was enabled in mpd.conf, MPD broke all playlists when manipulated using the "playlistdelete" command. The reason was that map_directory_child_fs() was used, which doesn't accept slashes in the file name. Use the new map_uri_fs() function instead.
2008-12-24stored_playlist: fix integer overflow in length estimationMax Kellermann1-1/+1
With a large maximum playlist length, the integer multiplication "playlist_max_length * MPD_PATH_MAX" may overflow. Change that to a division. This was not a dangerous bug, since it was only used for a quick estimate.
2008-12-24ffmpeg: case AV_NOPTS_VALUE to int64_tMax Kellermann1-2/+2
The old code casted it to a 32 bit integer, which cut off bits. AVFormatContext.duration is a int64_t, so use this type.
2008-12-24ffmpeg: don't assign "0" to pointerMax Kellermann1-1/+1
Use NULL instead. Found by sparse.
2008-12-24Makefile.am: fix sparse invocationMax Kellermann1-1/+4
Added missing includes.
2008-12-24mp3: "tag" argument is unused when libid3tag is disabledMax Kellermann1-2/+2
Add G_GNUC_UNUSED attributes.
2008-12-24listen: "port" argument is unused when TCP support is disabledMax Kellermann1-1/+2
Add a G_GNUC_UNUSED attribute.
2008-12-24pcm_utils: check pcm_convert()==0Max Kellermann3-5/+16
It is illegal to pass an empty audio buffer around. pcm_resample() sometimes seems to result in 0 samples, maybe related to libsamplerate. To work around that problem, add special checks after both pcm_convert() invocations. Removed the pcm_resample()==0 checks from pcm_convert().
2008-12-24client: always attempt to flush deferred buffersMax Kellermann1-2/+11
When a response is very long (e.g. a large playlist > 100k songs), most of it will end up in the deferred buffers. Filling the deferred queue is very expensive currently, because a new buffer is allocated for every client_write() operation. This may lead to long delays, and the client might give up and disconnect meanwhile. This patch makes MPD attempt to flush the deferred queue as often as possible, to work around this problem. Due to the MPD 0.14 code freeze, we should not optimize the buffering code now.
2008-12-23shout: fixed bad error message printoutViliam Mateicka1-2/+2
2008-12-20Remove obsolete http_buffer* stuff that went away with the new curl backend.Avuton Olrich2-4/+0
2008-12-20log: map log level "SECURE" to GLib's "INFO"Max Kellermann1-3/+3
Make "secure" a log level different from "default". "secure" should be right between "default" and "verbose". Map "default" to Glib's "MESSAGE" log level.
2008-12-17Remove useless statement.Emanuele Giaquinta1-1/+0
2008-12-17player_control: check if errored_song is setMax Kellermann1-4/+14
getPlayerErrorStr() assumes that pc.errored_song is set when an error occured. Since the song may have been deleted meanwhile, add a NULL check.
2008-12-17playlist: clear pc.errored_song on deleteMax Kellermann3-2/+23
When a (remote) song is deleted from the playlist, there may still be a reference to it in pc.errored_song. Clear this reference.