| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
| |
The lastfm input plugin enables MPD to play lastfm:// URLs. This
plugin is not complete yet: it plays only the first song in the
last.fm playlist, and the playlist parser isn't even implemented
properly.
|
|
|
|
|
| |
Added a small RIFF parser library. Look for an "id3" chunk, and let
libid3tag parse it.
|
|
|
|
|
|
| |
This is the first patch in a series to enable 32 bit audio samples in
MPD. 32 bit samples are more tricky than 24 bit samples, because the
integer may overflow when you operate on a sample.
|
|
|
|
|
| |
Parse the vorbis comments in libflac's metadata_callback and pass them
as tag struct to the decoder API.
|
|
|
|
|
| |
Don't hard code the "bits" parameter to 16. Try to use the input's
sample format, if possible.
|
|
|
|
|
| |
The option "enabled" is on by default. If you specify "enabled no" in
an audio_output section, then this device is disabled by default.
|
|
|
|
| |
[mk: adapted to new output plugin API]
|
|
|
|
|
|
| |
The generic sockaddr struct is too small for some addresses. For
accept(), we have to allocate a sockaddr_storage struct on the stack,
which is large enough for all addresses.
|
|
|
|
|
|
|
| |
Added the uri_remove_auth() library function which strips username
and password from a HTTP URI, and use it in song_print_url(). This
allows you to add HTTP URIs to the playlist including secret username
and password, without disclosing it to all MPD clients.
|
|
|
|
|
| |
The check "open()!=0" is wrong, you have to write "open()>=0", because
-1 means error, and 0 is a valid file handle.
|
|
|
|
|
| |
When the MVP device has been closed in the cancel() method, and the
play() method attempts to reopen it, check for errors.
|
|
|
|
|
|
| |
Looks like the MVP audio output only supports 16 and 24 bit audio
samples. If MPD generates any other sample formats, force it to use
16 bit.
|
|
|
|
| |
When the channel count is greater than 2, fall back to stereo sound.
|
| |
|
|
|
|
|
|
| |
If mpd.conf specifies a user, and MPD is invoked by exactly this user,
ignore the "user" setting. Don't bother to look up its groups and
don't attempt to change uid, it won't work anyway.
|
| |
|
|
|
|
|
|
| |
Use delete_directory() for removing sub directories instead of
dirvec_clear(). This ensures that all memory occupied by
subdirectories of deleted directories is freed.
|
|
|
|
|
|
|
| |
When a directory is deleted, MPD deleted only the directory from the
database; it did not bother to walk the full tree to free all memory
and to remove deleted songs from the playlist. Replace a
dirvec_delete() with delete_directory().
|
|
|
|
|
| |
Pass the input_stream object to decoder_data(). Without it, the MPD
core does not see stream tags.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are a few problems left in this plugin:
- fluidsynth decodes in real time, while MPD prefers to buffer as
quickly as possible; as a workaround, this plugin uses a timer
object to synchronize with real-time playback
- I don't know yet how fluidsynth tells me when the song has ended
- the "soundfont" configuration setting is not yet documented, and it
will likely change soon (in favor of a per-decoder configuration
block)
|