completely stopped. Instead, send them SIGSTOP to pause the process until
they're needed again. Then send them SIGCONT instead of re-spawning them.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6485 09075e82-0dd4-0310-85a5-a0d7c8717e4f
some versions of shoutcast send "content-type" in all lowercase, and I
don't trust other servers to get the case right for the rest of the headers
we look for.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6482 09075e82-0dd4-0310-85a5-a0d7c8717e4f
have any effect until the aac and mp4 input plugins actually support a
stream decoding API.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6481 09075e82-0dd4-0310-85a5-a0d7c8717e4f
been redirected. This prevents zeroconf from blocking daemonization, and
makes sure any errors get sent to the logs and not stdout.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6477 09075e82-0dd4-0310-85a5-a0d7c8717e4f
header. While this is odd for an HTTP header, it's actually quite common
for streaming clients to send it without a space. Some clients do send
with a space as well, but without one has always worked fine and may in
fact be more compatible.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6472 09075e82-0dd4-0310-85a5-a0d7c8717e4f
silence a warning about an unused variable without using stupid checks for
HAVE_AVAHI || HAVE_BONJOUR.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6471 09075e82-0dd4-0310-85a5-a0d7c8717e4f
I couldn't test mDNSResponder support on Linux, as Debian doesn't include it - but should work as well.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6453 09075e82-0dd4-0310-85a5-a0d7c8717e4f
playback is stopped completely. This means the player process will no
longer have to wake up 100 times per second to see if it's been told to
start playing (the main process will just spawn a new player process when
it needs to). On the downside, this means an extra pair of forks() and the
re-initializing of the player and decode processes each time playback is
restarted.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6446 09075e82-0dd4-0310-85a5-a0d7c8717e4f
one now, and trying to call NULL was causing a segfault at exit.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6398 09075e82-0dd4-0310-85a5-a0d7c8717e4f
uninitialized variables and non-returning functions that return. Let's
tell it to stfu.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6277 09075e82-0dd4-0310-85a5-a0d7c8717e4f
because lsr may return less than the input buffer size, and the rest of the
audio code needs to know the new size. This fixes the clicking that was
introduced with recent changes to the lsr code. A huge thanks to remiss
for figuring this out.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6273 09075e82-0dd4-0310-85a5-a0d7c8717e4f
relative paths in the DB or URLs. The main functional difference is that
playlistmove and playlistdelete will rewrite playlists in the correct
encoding and remove invalid lines instead of potentially modifying them.
The specific changes are:
appendSongToStoredPlaylist:
* Don't convert to FS charset
* Don't prepend music_directory if saving absolute paths
writeStoredPlaylistToPath:
* Convert to FS charset
* Prepend music_directory if saving absolute paths
loadStoredPlaylist:
* Make sure each line is either in the DB or a URL
loadPlaylist:
* Don't bother checking paths, since it's done in loadStoredPlaylist now
git-svn-id: https://svn.musicpd.org/mpd/trunk@6266 09075e82-0dd4-0310-85a5-a0d7c8717e4f
audio at once, so it won't work for us. The old full API code was still
heavily broken, as each call to pcm_convertSampleRate() used the same
state, even if it was processing two streams of audio. The new code keeps
a separate state for each audio stream that's being converted.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6255 09075e82-0dd4-0310-85a5-a0d7c8717e4f
number of channels is specified when the converter state is created.
Previously this was only done once, thus breaking horribly when the input
audio suddenly had a different channel count. A new state could be created
every time the number of channels changes, but this could happen many times
a second if resampling to two different formats at once. The simple API
doesn't have this problem, as channel count is an argument to the
conversion function itself.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6229 09075e82-0dd4-0310-85a5-a0d7c8717e4f
and samplerate conversion. This makes the code much easier to read, and
fixes a few bugs that were previously there.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6224 09075e82-0dd4-0310-85a5-a0d7c8717e4f
playlistadd, playlistdelete, etc. and would've caused the playlist to be
rewritten only up to the line with the error.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6133 09075e82-0dd4-0310-85a5-a0d7c8717e4f
returning a list of matching songs, the number of results and total play
time of the results are returned.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5950 09075e82-0dd4-0310-85a5-a0d7c8717e4f
db file is written. So don't try to set directory_dbModTime to the mtime
of the db file, since it will be incorrect.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5945 09075e82-0dd4-0310-85a5-a0d7c8717e4f
NULL. Doing so would mean future calls to commandError with a socket as an
argument will still write the error message to the error log, and not the
socket.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5891 09075e82-0dd4-0310-85a5-a0d7c8717e4f
message and trailing new line to STDERR_FILENO along with the ACK, instead
of sending them over the socket.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5890 09075e82-0dd4-0310-85a5-a0d7c8717e4f
LOCATE_TAG_KEY_FILE. Specifying "file: " as an argument to
search/find/list wasn't the point of that patch...
git-svn-id: https://svn.musicpd.org/mpd/trunk@5670 09075e82-0dd4-0310-85a5-a0d7c8717e4f
to segfault. This could be exploited by malicious users to crash other
users' mpd. But more importantly, I believe clients are doing this
unintentionally, and that this is what is causing mpd to segfault for many
people after running for long periods of time.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5649 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Mixing code and declarations is ugly, anyways.
We could probably get away with using alloca(), but I'm not sure
how good compiler support is for that, either. It's probably
more supported than mixed declarations and code. Nevertheless;
we'll trigger memory checkers on exit because we don't free
the buffers; but we won't actually leak because we reuse those
buffers (just like the non-SRC code path).
git-svn-id: https://svn.musicpd.org/mpd/trunk@5397 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Avoid unnecessary memset to zero, snprintf always puts a
trailing '\0'. We also have no need to subtract one from the
buffer we're snprintf-ing it to.
We also check the return value of snprintf to ensure it's not
too long. I have a feeling we might as well avoid snprintf
altogether so we don't have to worry about buffer sizing/stack
overflow and just do a bunch of write(2)s, letting Nagle sort it
out...
Also, centralize some of the exit error handling in with
goto. This makes the code a bit more consistent and
maintainable as well as reducing code and binary size.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5395 09075e82-0dd4-0310-85a5-a0d7c8717e4f
We need to identify ourselves as HTTP/1.1 so Range: works;
and so the server can return HTTP/1.1 instead of HTTP/1.0.
Tested against lighttpd 1.4.13
git-svn-id: https://svn.musicpd.org/mpd/trunk@5394 09075e82-0dd4-0310-85a5-a0d7c8717e4f
implementation, and fixing it is a big enough job that I don't know when
I'll get around to it. Probably best just starting from scratch anyhow.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5373 09075e82-0dd4-0310-85a5-a0d7c8717e4f
#2) fix a deadlock condition when attempting to seek if the decoder quit and returned to playerInit()
git-svn-id: https://svn.musicpd.org/mpd/trunk@5325 09075e82-0dd4-0310-85a5-a0d7c8717e4f
size_t (1.1.3) makes a lot more sense, but older flac used unsigned
here...
git-svn-id: https://svn.musicpd.org/mpd/trunk@5258 09075e82-0dd4-0310-85a5-a0d7c8717e4f
just casting to int because it's the simplest (%z is not
well-supported)
Noticed-by: avuton on a 64-bit machine
git-svn-id: https://svn.musicpd.org/mpd/trunk@5257 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Some compilers and linkers aren't smart enough to optimize this,
as global variables are implictly initialized to zero. As a
result, binaries are a bit smaller as more goes in the .bss and
less in the text section.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5254 09075e82-0dd4-0310-85a5-a0d7c8717e4f
We'll be dealing with legacy server configurations for a long
time to come.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5253 09075e82-0dd4-0310-85a5-a0d7c8717e4f
There's no reason they shouldn't be static. Additionally,
output_ports doesn't need to be initialized to NULLs; that is
(and has always been) implicit (for all global variables)
git-svn-id: https://svn.musicpd.org/mpd/trunk@5247 09075e82-0dd4-0310-85a5-a0d7c8717e4f
sendDataToOutputBuffer returns an int (and always has), and
using the existing 'ret' is fine in mp3Read().
git-svn-id: https://svn.musicpd.org/mpd/trunk@5246 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This fixes a bug where streams that won't play somehow appear with the
metadata of a previously played stream. As far as I can tell, the only
reason this is done is to sync any buffered metadata with the displayed
metadata when decoding stops, so there should be no other adverse effects.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5161 09075e82-0dd4-0310-85a5-a0d7c8717e4f
MP3 playback, thus allowing songs that run longer than the Xing frame
claims (f.e., an MP3 created by catting two MP3s together) to continue
playing past the end.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5157 09075e82-0dd4-0310-85a5-a0d7c8717e4f
assumption that non-seekable streams are live and any gapless info is
incorrect.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5150 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Instead, stop decoding as soon as we've found the frames/samples at the
"end" that we want drop.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5149 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This means that when using libFLAC as a shared object,
OggFLAC support is dependent on the compile-time options of
the libFLAC library loaded.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5112 09075e82-0dd4-0310-85a5-a0d7c8717e4f
We will restore compatibility with the old API in the
next few commits; along with OggFLAC support.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5110 09075e82-0dd4-0310-85a5-a0d7c8717e4f
move flac_decode to the bottom, so we don't have to declare
all of our static functions.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5109 09075e82-0dd4-0310-85a5-a0d7c8717e4f
- don't close and reopen an audioOutput when it has a fixed output format, and closing and reopening the device is unneccessary when the input audio format changes
git-svn-id: https://svn.musicpd.org/mpd/trunk@4908 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This patch should continue to allow mpd to play as well as
possible to icecast servers while avoiding stalls on local
devices. This has eliminated ALSA underrun errors
for me while streaming to a remote host while the network
connection was bad.
Of course, this makes opening a connection non-blocking, too,
so myShout_openShoutConn is a bit more complex.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4898 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Make the unit tests compile correctly without using xstrdup.
Also, use "static inline" instead of "inline static": certain
compilers or cflags are likely to complain about the latter.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4892 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Warren's fix in r4872 made phpMp work again, but also broke
the unit tests completely (they work in this version).
The version in 0.12.0 is far too buggy (it was from mpd-ke, what
do you expect?). This one passes all the unit tests that the
mpd-ke one passed, and should also work with phpMp when used
with PHP magic quotes.
This also means we can search on 100 (or more) tags at once, so
no more arbitrary limits other than system memory.
To run the unit tests, just do this:
gcc -o t -DUNIT_TEST=1 src/buffer2array.c && ./t && echo OK
git-svn-id: https://svn.musicpd.org/mpd/trunk@4874 09075e82-0dd4-0310-85a5-a0d7c8717e4f
I'm still not entirely certain why we index cb->metaChunkSet[]
with currentChunk (and not currentMetaChunk), but shank told me
that currentChunk is correct...
git-svn-id: https://svn.musicpd.org/mpd/trunk@4814 09075e82-0dd4-0310-85a5-a0d7c8717e4f
(based on suggested patch by Jan-Benedict Glaw):
> While hacking mpd, I noticed that an assert()ion in xrealloc is wrong.
> A null size is perfectly legal, so we shouldn't assert on that.
Since some C libraries return NULL when size == 0, we'll make
sure we get a free()-able pointer since some of those C
libraries also barf on free(NULL).
git-svn-id: https://svn.musicpd.org/mpd/trunk@4740 09075e82-0dd4-0310-85a5-a0d7c8717e4f
I'm checking for zero-size allocations and assert()-ing them,
so we can more easily get backtraces and debug problems, but we'll
also allow -DNDEBUG people to live on the edge if they wish.
We do not rely on errno when checking for OOM errors because
some implementations of malloc do not set it, and malloc
is commonly overridden by userspace wrappers.
I've spent some time looking through the source and didn't find any
obvious places where we would explicitly allocate 0 bytes, so we
shouldn't trip any of those assertions.
We also avoid allocating zero bytes because C libraries don't
handle this consistently (some return NULL, some not); and it's
dangerous either way.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4690 09075e82-0dd4-0310-85a5-a0d7c8717e4f
leave out initCommands to keep jat happy, and keep labels
at the left hand side
git-svn-id: https://svn.musicpd.org/mpd/trunk@4687 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This finally fixes a bug from over two years ago playing a wave file
(oprah.wav) with the following characteristics (from sfinfo):
File Format Microsoft RIFF WAVE Format (wave)
Data Format 8-bit integer (unsigned, little endian)
Audio Data 986827 bytes begins at offset 58 (3a hex)
1 channel, 986827 frames
Sampling Rate 22050.00 Hz
Duration 44.754 seconds
Of course, this has been regression tested with all the files
that the previous commit got working. Thanks to Michael Pruett
(audiofile author) for the hint and shame on me for forgetting
about it for over two years :x
git-svn-id: https://svn.musicpd.org/mpd/trunk@4682 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Use the 'Virtual' variants of afGetSampleFormat, afGetChannels,
afGetVirtualFrameSize in the audiofile library, since it already does
the necessary abstraction for us.
Of course, I've regression tested these changes against my
standard 44100Hz/2ch/16bit wave files and they continue to play
fine.
Files tested:
english.au (Linus Torvalds pronouncing 'Linux' in English)
B01.Red_Bright_Heart.au (Chinese opera, sounds correct to me even though
I don't actually understand the words)
git-svn-id: https://svn.musicpd.org/mpd/trunk@4681 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This bug was NOT introduced in my OggFLAC additions, honest!
As far as I can see, it was introduced way back in r2482, but
nobody ever noticed until the post here:
http://www.musicpd.org/forum/index.php?topic=1152.0
While we're at it, clean up some of the variable typing.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4664 09075e82-0dd4-0310-85a5-a0d7c8717e4f
I'm not using __FUNCTION__ or __func__ because compiler support
for these is still a bit iffy as far as I know...
git-svn-id: https://svn.musicpd.org/mpd/trunk@4662 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Unfortunately there doesn't seem to be an indent switch for this,
but we have find + perl:
find src -name '*.[ch]' | xargs perl -i -p -e \
's/^\s+(\w+):/$1:/g unless /^\s+default:/'
This is a followup to r4605, and there are no actual code
changes in this.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4661 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Add -Wmissing-prototypes if compiling with gcc
Static where possible
git-svn-id: https://svn.musicpd.org/mpd/trunk@4657 09075e82-0dd4-0310-85a5-a0d7c8717e4f
size_t is bigger than int on most 64-bit machines, so cast
size_t to long when passing them to printf-like functions.
Ideally we'd use %z, but many compilers don't support it.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4656 09075e82-0dd4-0310-85a5-a0d7c8717e4f