| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
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)
|
| |
|
|
|
|
|
| |
The ffmpeg library supports the "True Audio Codec". The entry in
ffmpeg_suffixes was missing.
|
|
|
|
|
|
| |
Don't define HAVE_FFMPEG if the ffmpeg libraries were found via
pkg-config, but ffmpeg support was disabled because
avcodec_decode_audio2() is not available.
|
|
|
|
|
|
|
| |
Always assume the buffer is empty before calling the encoder. Always
flush the buffer immediately after there has been added something.
This reduces the risk of buffer overruns, because there will never be
a "rest" in the current buffer.
|
|
|
|
|
| |
Don't duplicate the tag received by the send_metadata() method - send
it to the shout server directly.
|
|
|
|
|
| |
Removed the manual timer synchronization from the shout plugin.
libshout's shout_sync() function does it for us.
|
|
|
|
|
|
| |
The non-blocking mode of libshout is sparsely documented, and MPD's
implementation had several bugs. Also removed connect throttling
code, that is done by the MPD core since 0.14.
|
|
|
|
|
|
|
| |
The "current" variable is used for calculating the seek destination,
and was declared as "int". With very long song files, the 32 bit
integer can overflow. ffmpeg expects an int64_t, which is very
unlikely to overflow. Switch to int64_t.
|
|
|
|
|
|
| |
When ffmpeg cannot estimate the elapsed time, it sets
AVPacket.pts=AV_NOPTS_VALUE. Our ffmpeg decoder plugin did not check
for that special value.
|
|
|
|
|
|
| |
If avcodec_decode_audio2() returns no output for an AVPacket,
libavcodec may buffer some data, and return a larger chunk of output
later. This patch disables a lot of bogus warnings.
|
|
|
|
|
|
|
|
|
|
| |
The shout_mp3 encoder had two bugs: when no song was ever played, MPD
segfaulted during cleanup. Second bug: memory leak, each time the
shout device was opened, lame_init() was called again, and
lame_close() is only called once during shutdown.
Fix this by shutting down LAME each time the clear_encoder() method is
called.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
This patch implements the MMS protocol, by using libmms. It is quite
experimental: it does not support seeking yet, and it is currently
using synchronous I/O, which causes MPD to hang while waiting for the
server.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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).
|
|
|
|
|
| |
If the ring buffers are allocated after jack_activate(),
mpd_jack_process() might segfault because it attempts to access them.
|
| |
|
|
|
|
|
|
|
|
|
| |
Added all important id tags from the MusicBrainz wiki:
http://musicbrainz.org/doc/MusicBrainzTag
This should automatically enable its suport in the vorbis and flac
decoder plugins.
|
|
|
|
|
| |
When you delete a song from the playlist which was paused, MPD forgot
that it was paused and started playing the next song.
|
|
|
|
|
|
| |
When the random mode is toggled, MPD did not clear the queue. Because
of this, MPD continued with the next (random or non-random) song
according to the previous mode. Clear the queued song to fix that.
|
|
|
|
|
|
|
| |
The null plugin synchronizes the playback so it will happen in real
time. This patch adds a configuration option which disables this: the
playback will then be as fast as possible. This can be useful to
profile MPD.
|
| |
|
|
|
|
| |
Without a music_directory, MPD is an excellent streaming client.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
Due to rounding errors, it was possible that the fallback resampler
returned partial frames.
|
|
|
|
| |
When tremor (libvorbisidec) is used, HAVE_OGGVORBIS was not defined.
|
|
|
|
| |
Set the "ready" flag for empty resources.
|
|
|
|
|
| |
To check for early connect failures, call curl_multi_info_read() in
the constructor input_curl_open(). This fixes an assertion failure.
|
|
|
|
| |
Copy changelog items from the upcoming 0.14.1 release.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
Start the daemon after --create-db. This makes --create-db a flag
which discards the old database and starts with a fresh one.
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
If the state file cannot be read, for whatever reason, don't abort
MPD. The state file isn't _that_ important.
|
|
|
|
|
|
| |
If no music_directory is configured, fall back to the XDG music
directory, determined by
g_get_user_special_dir(G_USER_DIRECTORY_MUSIC).
|
| |
|
|
|
|
| |
Allow logging to syslog if log_file is configured to "syslog".
|