| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
If the UFID frame's owner is "http://musicbrainz.org", assume its
value is the MusicBrainz track id.
|
| |
|
|
|
|
|
|
|
|
| |
Flush the encoder before calling encoder_tag(). The first page
generated by the encoder after sending the tag will be the new
"header" page, which is sent to all HTTP clients when they connect.
This is a little bit specific to the vorbis encoder, but there are no
other encoders which support tags (yet).
|
|
|
|
|
|
| |
Moved some code from httpd_output_encode_and_play() into separate
functions httpd_output_broadcast_page() and
httpd_output_encoder_to_clients().
|
|
|
|
|
|
| |
There's no reason to send both encoder tags and Icy-Metadata to the
client. Let's disable Icy-Metadata when the encoder supports embedded
tags.
|
|
|
|
|
|
|
| |
When a new tag is set, end the current stream and begin a new one.
Use vorbis_analysis_headerout() to write a full ogg header. This
fixes a problem with icecast: after a song change in MPD, icecast
stops forwarding ogg packets to its clients.
|
| |
|
|
|
|
|
| |
In the tag() method, MPD guarantees that it does not pass tag==NULL.
Converted the runtime check to an assertion.
|
|
|
|
|
| |
The second parameter of zzip_dir_open() is a pointer. Pass the NULL
pointer instead of 0 (with implicit conversion at compile time).
|
|
|
|
| |
Don't loop over source files, do all checks in one run.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Remove mpd.spec and makerpm.sh. It was never used or maintained
and the distributors take care of this kinda thing now anyhow.
|
|
|
|
|
| |
Added the per-device option "mixer_enabled" which allows users to
disable the hardware mixer of an audio output.
|
| |
|
|
|
|
|
| |
sticker_delete_value() deletes only one value in a sticker, while
the old function sticker_delete() deletes all values.
|
|
|
|
|
|
| |
When a song was in the database twice (which shouldn't happen), and
the first song had no tag items, MPD calledd tag_free(NULL). Add a
check to that source location, and an assertion to tag_free().
|
| |
|
|
|
|
|
| |
strncasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
|
| |
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
|
|
|
|
| |
This allows you to select controls with duplicate names.
|
|
|
|
|
| |
The doxygen invocation was misplaced: it was only defined when xmlto
is available.
|
|
|
|
|
|
| |
Database update was broken due to the dc.pipe!=NULL assertion. This
assertion is only valid while MPD decodes a song, not during database
update.
|
|
|
|
|
|
|
| |
libvorbis goes into a very long loop if we try to add data after a
flush was invoked by vorbis_analysis_wrote(0). This seems to be a
problem with the internal end-of-stream marker. Thus, we cannot reuse
the vorbis_dsp_state object.
|
|
|
|
|
|
|
| |
When the decoder thread has a pending command, send the STOP command
to cancel this command. Send STOP again if the decoder thread is
still running after that, just in case the decoder thread has executed
the previous command (which was overwritten).
|
|
|
|
|
| |
dc.pipe must be non-NULL while the decoder thread is running. Ensure
that with a load of assertions.
|
| |
|
|
|
|
|
| |
To determine whether to rewind the current song or to go to the
previous song, use a GTimer instead of manually diffing time(NULL).
|
|
|
|
|
|
| |
Using two different kinds of locks may result in a race condition with
a deadlock. The libpulse callbacks need no locks at all, because the
mainloop object can be assumed to be already locked.
|
|
|
|
|
| |
The old global settings "http_proxy_host", "http_proxy_port",
"http_proxy_user" and "http_proxy_password" continue to work.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
$(TAG_SRC) contains the names of all tag reader source files. Some of
these are required for test/run_decoder.
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
When no audio outputs could be opened while seeking, leave MPD seeked
at that position and pause playback. The user may continue from this
point at any time, as soon as the audio outputs are fixed. The old
behaviour triggered an assertion failure: the failure wasn't passed
properly to the do_play() function, which attempted to play audio
chunks.
|
|
|
|
|
| |
spl_append_song() can crash when fopen() fails, because it attempts to
close the invalid file handle (NULL) in the error handler.
|