| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
To check for errors without reading. The decoder thread wants to do
that, before it passes the input stream to the plugin.
|
|
|
|
| |
Fix memory leak.
|
|
|
|
|
| |
libsoup's asynchronous API is not thread safe. By moving the calls
into the I/O thread, several crash bugs will be fixed.
|
|
|
|
|
| |
Add the "complete" attribute, and set it in _session_callback().
_close() waits for it to become true.
|
|
|
|
|
| |
Add attribute postponed_error, pass this GError to the caller.
|
|
|
|
| |
Fix deadlock.
|
|
|
|
|
| |
We'll add proper locking now, and there's no need to carry this
duplicate flag.
|
|
|
|
| |
To report failures to callers who don't use _buffer().
|
|
|
|
| |
Avoid recursive deadlock in _session_callback().
|
|
|
|
|
| |
Pausing and resuming after every little chunk adds lots of overhead.
Add a lower level for resuming the stream.
|
|
|
|
|
| |
curl_easy_pause(CURLPAUSE_CONT) may have added enough data to go into
pause again.
|
|
|
|
|
| |
Call _update_fds() directly. This is possible because it's only
called from within the I/O thread.
|
|
|
|
| |
Fix deadlock.
|
| |
|
|\ |
|
| | |
|
|\|
| |
| |
| |
| |
| | |
Conflicts:
NEWS
configure.ac
|
| |
| |
| |
| | |
Reduce heap usage by reducing the number of malloc() / free() calls.
|
| |
| |
| |
| |
| |
| |
| | |
The global data structures are now lock-free, because they are
accessed only from the I/O thread. By using per-request locks, we
have finer grained locking, preparing for locks shared with the
client.
|
| |
| |
| |
| |
| |
| | |
This adds some overheads for indirect calls to the I/O thread, but
reduces the amount of global locks. Next step will be switching to
per-request locks.
|
| | |
|
| |
| |
| |
| |
| | |
Move the assignment to _request_done(), right before the GCond is
signalled. This might fix spurious wakeups.
|
| | |
|
| |
| |
| |
| |
| | |
This is a trivial function. Merge some duplicate code, e.g. the
g_cond_broadcast() call.
|
| | |
|
| |
| |
| |
| |
| | |
Update the struct attributes, important for facades like the "rewind"
plugin. To replace buffer().
|
| | |
|
|\|
| |
| |
| |
| |
| | |
Conflicts:
configure.ac
src/output_control.c
|
| |
| |
| |
| |
| | |
Be sure to stop the operation at some point when the server isn't
responding.
|
| |
| |
| |
| |
| | |
Background buffering and better timeout handling. This patch sort of
obsoletes the input_plugin method buffer().
|
| |
| |
| |
| |
| |
| | |
Assume the flag is true when the "easy" CURL handle is NULL. That
way, we don't need to keep track if CURL has sent us the "DONE"
information yet.
|
| |
| |
| |
| |
| |
| | |
Release it immediately when end-of-file has been reached. We don't
need that handle anymore, because the rest is delivered from the
buffers.
|
| |
| |
| |
| | |
Allow closing the handle while preserving the remaining buffers.
|
| |
| |
| |
| | |
Remove a cast.
|
| |
| |
| |
| | |
Let the caller know what happened, he's responsible for logging.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
To demonstrate the new I/O thread. libsoup is well-integrated into
the GLib main loop, which made this plugin pretty easy to write.
As a side effect, we have to initialize the I/O thread in all debug
programs that use the input API.
|
| | |
|
|\| |
|
| | |
|
| |
| |
| |
| |
| | |
FFmpeg/libav have dropped AVIO_RDONLY in favor of AVIO_FLAG_READ. This
patch fixes that in MPD.
|
| |
| |
| |
| | |
URLContext is deprecated.
|
| |
| |
| |
| |
| | |
All modern distros ship 0.5, so there's no need to support old and buggy
ffmpeg versions.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
For Spotify tracks. Uses a spt URI, so with mpc you can play tracks
with e.g.,
mpc add spt://spotify:track:5qENVY0YEdZ7fiuOax70x1
mpc play
Uses the pcm_decoder_plugin for the output
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
I wanted mpd to play a mp3 stream from a music website. The stream is
only available to subscribers, which restriction is enforced through
normal http authentication. However, the URL I get from the website
is not the final URL of the stream, but a generic URL which points to
the real one through a redirect (code 301). Thus, I cannot predict
the final URL, and so I cannot use the username:password hack to force
the authentication, and mpd (libcurl on mpds behalf) fails to grab the
stream.
libcurl allows the option CURLOPT_NETRC to be set and then the
credentials can be stored in the good old .netrc file (in this case it
would be ~mpd/.netrc, of course). But mpd doesn't set this option. I
think it should.
|
| |
| |
| |
| |
| | |
Seems like we forgot to give this module a name... this can crash MPD
on startup.
|
| | |
|
| | |
|
| | |
|