| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
When a received chunk of data has only icy-metadata, there was no
usable data left for input_curl_read() to return, and thus it returned
0 bytes. "0" however is a special value for "end of file" or
"error". This patch makes input_curl_read() read more data from the
socket, until the read request can be fulfilled (or until there's
really EOF).
|
| |
|
| |
|
|
|
|
|
|
|
| |
Usually, we read our "artist" tag from ffmpeg's "author" tag. In some
cases however (e.g. APE), this tag is named "artist". This patch
implements a fallback: if no "author" is found, MPD tries to use
"artist".
|
|
|
|
|
|
| |
When the ID3 tag in an AAC file is larger than the current buffer, the
function decoder_buffer_consume() aborts. By using the new function
decoder_buffer_skip() instead, we can safely skip the ID3 tag.
|
|
|
|
| |
Include CoreServices/CoreServices.h.
|
|
|
|
|
| |
This patch made ov_time_total() unusable, and MPD did not know the
duration of songs.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
using ov_test_callback with function CALLBACKS_STREAMONLY will cause
scanning to stop after the comment field. ov_open (and ov_test)
default to CALLBACKS_DEFAULT which scans the file structure causing a
huge slowdown. The speed improvement is huge: It scanned my files
around 10x faster This procedure has been recommended by monthy (main
vorbis developer) and was said to be safe for scanning files.
|
|
|
|
|
|
|
| |
MPD checks if every flac (possibly other types as well) file contains
cuesheet on every update, which produces unneeded I/O. My music
collection is on NFS share, so it's quite noticeable. IMHO, it
shouldn't re-read unchanged files, so I wrote simple patch to fix it.
|
|
|
|
| |
Fix stuttering due to uninitialized variable.
|
| |
|
| |
|
|
|
|
|
| |
During the pause loop, manually sleep for 500ms if shout_delay()
returns a value greater than that. Don't exhaust libshout's buffer.
|
|
|
|
|
|
| |
Explicitly make the output thread leave the ao_pause() loop. This
patch is a workaround, and the "pause" flag is not managed in a
thread-safe way, but that's good enough for now.
|
|
|
|
|
| |
dirvec_delete() does not free the object, we have to call
directory_free() afterwards.
|
|
|
|
| |
The return value of map_directory_child_fs() must be freed.
|
|
|
|
|
|
|
| |
The function flac_cue_track() first calls FLAC__metadata_object_new(),
then overwrites this pointer with FLAC__metadata_get_cuesheet(). This
allocate two FLAC__StreamMetadata objects, but the first pointer is
lost, and never freed.
|
|
|
|
|
| |
When you pass an empty string to directory_update_init(), it was not
freed by update_task().
|
|
|
|
|
| |
The FLAC replaygain parser used the "||" operator. This made the code
stop after the first value which was found.
|
|
|
|
|
|
|
| |
When libid3tag is disabled, the libmad decoder plugin is unable to
identify ID3 frames. If the file starts with an (unidentified) ID3
frame, it assumes that the file is not a valid MP3 song. This patch
solves this by adding minimal stubs for the ID3 functions.
|
|
|
|
|
|
| |
The function tag_ape_load() retrieves a 32 bit unsigned integer from
the input file, and passes it to g_malloc(). This is dangerous, and
may be used for a denial of service attack on MPD.
|
|
|
|
|
|
|
| |
The expression "tagLen - size > 0" may result in an integer underflow
and a buffer overflow, when "size" is larger than "tagLen". "size" is
read from the input file, and must not be trusted. This patch changes
the expression to "tagLen > size", which is a lot safer.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Initialize flac_data.tag right after flac_data_init(). This way, the
"goto fail" won't jump to the point where tag_free(NULL) can be
called.
|
|
|
|
|
|
| |
On Mac OS X, the httpd plugin cannot be compiled, because OS X's
system headers do nto include sys/types.h, although they use
u_int32_t.
|
|
|
|
|
| |
Don't free an internal configuration value in log_init(). Call
config_get_path() instead of manually calling parsePath().
|
|
|
|
|
|
|
| |
When the filesystem_charset is changed in mpd.conf, MPD should discard
the old database. In this error branch, MPD did not fill the GError
object properly, and logged a warning message instead, which caused a
segmentation fault.
|
|
|
|
|
|
|
|
| |
When MPD was paused, and the client sent the "stop" command (or
"clear"), a glitch caused MPD to continue playback for a split second.
This was because audio_output_all_cancel() calls
audio_output_all_update(), which reopens all output devices, and
re-ignites the playback loop.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Several users had problems with binding MPD to "localhost". The cause
was duplicate /etc/hosts entries: the resolver library returns
127.0.0.1 twice, and of course, MPD attempts to bind to "both" of
them. This patch makes failures non-fatal, given that at least one
address was bound successfully. This is a workaround; users should
rather fix their /etc/hosts file.
|
|
|
|
| |
This allows you to select controls with duplicate names.
|
|
|
|
|
| |
The old global settings "http_proxy_host", "http_proxy_port",
"http_proxy_user" and "http_proxy_password" continue to work.
|
|
|
|
|
|
| |
When all audio outputs have been closed due to failures, pause the
playback instead of stopping it. This way, the user may resume
at the current position after the problem has been dealt with.
|
|
|
|
|
|
|
|
| |
The "lastfm" input plugin is far from complete, because MPD does not
support nesting playlists yet. The "fluidsynth" decoder plugin
suffers from shortcomings in the libfluidsynth library:
http://www.mail-archive.com/fluid-dev@nongnu.org/msg01099.html
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Even if libsamplerate support is enabled, compile the fallback
resampler. When the user specifies the option
"samplerate_converter=internal", it is chosen in favor of
libsamplerate. This may help users with a weak FPU who don't want to
compile a custom MPD from source, because the fallback resampler does
not use floating point operations.
|
|
|
|
|
|
| |
After a seek, wait until enough new chunks are decoded before starting
playback. If this takes too long, send silence chunks to the audio
outputs meanwhile.
|
|
|
|
|
|
| |
This is similar to the MPD 0.14 patch "wait 10 seconds before
reopening a failed device", which only covered open() failures. This
patch adds the same feature for play().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The default values for buffer_time and period_time were both capped by
the hardware limits on practically all chips. The result was a
period_time which was half as big as the buffer_time. On some chips,
this led to lots of underruns when using a high sample rate (192 kHz),
because MPD had very little time to send new samples to ALSA.
A period time which is one fourth of the buffer time turned out to be
much better. If no period_time is configured, see how much
buffer_time the hardware accepts, and try to configure one fourth of
it as period_time, instead of hard-coding the default period_time
value.
This is yet another attempt to provide a solution which is valid for
all sound chips. Using the SND_PCM_NONBLOCK flag also seemed to solve
the underruns, but put a lot more CPU load to MPD.
|