| Commit message (Collapse) | Author | Age | Files | Lines |
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
When the connection is lost while buffering, the CURL input plugin may
enter an endless loop, because it does not check the EOF condition.
This patch makes fill_buffer() return success only if there's at least
one buffer, which is enough of a check.x
|
| |
| |
| |
| | |
This patch completes the configuration support.
|
| | |
|
| |
| |
| |
| | |
Prevent access on uninitialized variable if the plugin list is empty.
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
Accidently, MPD has been using several GLib 2.16 functions for a
while, and nobody noticed yet. To simplify the code base, let's bump
the minimum GLib version for MPD to 2.16. That version is old enough,
and it's reasonable to expect users to have it.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Based on this API, we will add parsers for EXTM3U, PLS, ASX, last.fm
radio and others.
There is no integration into the MPD core yet. Right now, we have a
command line test program. This is work in progress.
|
| | |
|
| |
| |
| |
| |
| | |
Moved all the code which depends on the decoder plugins to a separate
source. That allows leaner test programs.
|
| |
| |
| |
| |
| | |
The while() clause resets the "plugin" variable. We don't need to
reset it at the end of the loop body.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The "off_t" type may change when you enable or disable large file
support on 32 bit platforms. This caused severe ABI problems within
MPD when we enabled LFS for the first time: two sources included
config.h and sys/types.h in different order, and had different off_t
sizes - leading to memory corruption because of ABI incompatibility.
This patch attempts to get rid of all public "off_t" uses: it removes
"off_t" from the input_stream ABI/API, and switches to GLib's 64 bit
"goffset" type. This may hurt 32 bit embedded platforms a tiny bit,
but that's not even measurable.
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
NEWS
configure.ac
|
| |
| |
| |
| |
| |
| | |
On 32 bit systems with large file support enabled (i.e. "sizeof(off_t)
> sizeof(size_t)") gcc emits a warning because a size_t cast to off_t
can never become negative.
|
| |
| |
| |
| |
| |
| | |
When there is no Content-Type response header, try the "mad" decoder
plugin. It uesd to be named "mp3", and we forgot to change the
fallback name in decoder_thread.c.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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).
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Tracking the "elapsed" time from the chunks which we have sent to the
output pipe is very imprecise: since we have implemented the music
pipe, we're sending large number of chunks at once, giving the
"elapsed" time stamp a resolution of usually more than a second.
This patch changes the source of this information to the outputs. If
a chunk has been played by all outputs, the "elapsed" time stamp is
updated.
The new command PLAYER_COMMAND_REFRESH makes the player thread update
its status information: it tells the outputs to update the chunk time
stamp. After that, player_control.elapsed_time is current.
|
| |
| |
| |
| |
| |
| | |
pc.next_song might be non-NULL even if player.queued==true: when the
decoder has started decoding the next song, but the result hasn't been
read yet.
|
| |
| |
| |
| |
| | |
Sending PLAYER_COMMAND_STOP followed by PLAYER_COMMAND_QUEUE does the
same. PLAYER_COMMAND_PLAY is redundant.
|
| |
| |
| |
| |
| | |
After some of the commands, the player thread must have reset the
pc.next_song attribute.
|
| | |
|
| |
| |
| |
| |
| | |
Without the player error code, it errored_song variable is not used,
and should be cleared, to avoid invalid access in pc_song_deleted().
|
| |
| |
| |
| |
| |
| | |
The new player_status struct replaces a bunch of playerGetX()
functions. When we add proper locking to the player_control struct,
we will only need to lock once for the "status" command.
|
| |
| |
| |
| | |
This lets us eliminate the static fixed-size buffer.
|
| |
| |
| |
| |
| |
| |
| | |
No more CD player emulation. The current behaviour of "previous" is
difficult for a client to predict, because it does not definitely know
the current position within the song. If a client wants to restart
the current song, it can always send "playid".
|
| |
| |
| |
| |
| | |
AC_SYS_LARGEFILE defines macros for config.h. If we don't include
config.h, we don't get large file support.
|
| | |
|
| |
| |
| |
| |
| |
| | |
If nothing has changed since the last save, don't save the state
file. Saving will spin up the hard drive, which is undesirable on
hosts where MPD is idling in background.
|
| | |
|
|\|
| |
| |
| |
| |
| | |
Conflicts:
NEWS
configure.ac
|
| |
| |
| |
| |
| |
| |
| | |
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 implements a light-weight inotify library, and watches all
directories below the music directory. It updates all directories
where files changed after a delay of 5 seconds.
|
| | |
|
| |
| |
| |
| |
| |
| | |
Allow most printable characters in unquoted words. The tokenizer
patch introduced very strict requirements for command parameters -
those were undocumented, and we're reverting the strictness now.
|
| |
| |
| |
| |
| | |
"rescan" is the same as "update", but it discards existing songs in
the database.
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
Don't call g_error(), which will abort the process and dump core.
This patch does not affect all the config_get_X() functions. These
need some more refactoring.
|
| | |
|
| |
| |
| |
| | |
Don't call g_error(), which will abort the process and dump core.
|
| |
| |
| |
| | |
Don't call g_error(), which will abort the process and dump core.
|
| | |
|