| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
| |
| |
| |
| | |
Duplicate the path string within update.c, do not expect an allocated
string as parameter.
|
| | |
|
| |
| |
| |
| |
| | |
When parsing the songlength database fails, the code forgot to free
the memory allocated by the raw file data.
|
| | |
|
| |
| |
| |
| |
| | |
The caller is responsible fro freeing GError objects. That
g_error_free() call was missing in two places.
|
| |
| |
| |
| |
| | |
The error handler dereferences GError*, but did not retrieve that
object from g_file_get_contents().
|
| |
| |
| |
| |
| | |
Both options are deprecated, and should not be used anymore. Many
users get confused by their presence.
|
| |
| |
| |
| | |
Include CoreServices/CoreServices.h.
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
NEWS
configure.ac
doc/mpdconf.example
|
| |
| |
| |
| |
| | |
This patch made ov_time_total() unusable, and MPD did not know the
duration of songs.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
[mk: added autoconf test; fixed songlen_data_size type]
|
| | |
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
NEWS
configure.ac
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|