| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
The matchesAnMpdTagItemKey() API becomes more powerful and flexible if
the return value is the value pointer instead of a boolean. It also
removes (invalid and dangerous) assumptions about the string from its
caller.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
| |
Added TAG_ITEM_ALBUM_ARTIST.
With this patch, MPD should be able to read the (inofficial)
"ALBUMARTIST" Vorbis comment. Implementations in other decoder
plugins will follow soon.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
There is only one valid error condition for setsid(): when the current
process is already the process group leader. This is non-critical.
|
|
|
|
|
| |
To detach from the parent process, fork once and make the old process
exit. No need to do that twice.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
MPD will (optionall) use sqlite databases in the future. Add a
configure option to enable that. There is no code yet to really use
sqlite, so the practical use of this patch is limited.
|
| |
|
|
|
|
| |
mixer (passing parameters)
|
|
|
|
|
| |
If a range is "-1", display the whole list. This behavior is
undocumented, but some clients rely on it.
|
| |
|
| |
|
|
|
|
| |
Free memory before exiting.
|
|
|
|
| |
Free memory before exiting.
|
|
|
|
|
| |
Make the listen socket an object, allowing us to add more fields
later. Convert listenSockets into a simple linked list.
|
| |
|
|
|
|
|
| |
This patch tryes to introduce pluggable mixer (struct mixer_plugin) along with some basic infrastructure (mixer_* functions). Instance of mixer (struct mixer) is used in
alsa and oss output plugin
|
|
|
|
|
| |
A song index cannot be negative. Also require the second parameter to
be valid.
|
|
|
|
|
| |
In a range "start:end", "end" itself should not be included. Use the
same semantics as other languages implementing ranges, e.g. Python.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Loosely based on a patch provided by lesion in bug #1766. The playlistinfo
command can now retrieve ranges of the playlist. The new argument indicates
which entry is the last one that will be displayed. The number of displayed
entries may be smaller than expected if the end of the playlist is reached.
Previous usage:
playlistinfo [start]
New usage:
playlistinfo [start[:end]]
|
|
|
|
|
| |
A range argument looks like start[:end] and is used to specify the entries
of a list that should be returned (rather than the whole list).
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Don't use fixed static buffers. GLib allocates a new string for us
anyway, let's just return this one instead of copying it.
|
|
|
|
|
| |
The archive code was disabled, because config.h was not included and
thus ENABLE_ARCHIVE was not defined.
|
| |
|
|
|
|
| |
Save an empty database, even if the music directory is empty.
|
|
|
|
| |
Use the PCM buffer library for the libsamplerate output buffer.
|
|
|
|
| |
Return a temporary buffer from pcm_resample_*() and pcm_convert().
|
|
|
|
| |
Replace a "static" buffer with the PCM buffer library.
|
|
|
|
| |
Replace a "static" buffer with the PCM buffer library.
|
|
|
|
|
|
| |
This library allocates temporary buffers for storing PCM conversion
results. It should replace all those "static" buffer variables which
are racy and never freed.
|
|
|
|
|
| |
Be sure that the output thread has quite before we start destructing
the output object.
|
|
|
|
|
| |
Free memory allocated by the notify object (GMutex, GCond) when it's
not used by the output object anymore.
|
| |
|
|
|
|
|
| |
Free memory allocated by libsamplerate when the output or the decoder
is closed.
|
|
|
|
|
| |
1024 is 2^10, and allows gcc to use bit shift operations instead of
multiplication / division.
|
|
|
|
|
| |
In generic PCM functions allowing all sample formats, pass a void
pointer instead of a char pointer.
|
| |
|
|
|
|
|
| |
All what's left in pcm_utils.h is the pcm_range() utility function,
which is only used internally by pcm_volume and pcm_mix.
|
|
|
|
| |
The function does not need the full pcm_convert_state struct.
|
|
|
|
| |
Moved all code which converts the sample format to a separate library.
|
| |
|