Max Kellermann
70e4399334
input/ffmpeg: add constructor/destructor
2013-01-28 21:46:38 +01:00
Max Kellermann
00f8c2d46f
input/ffmpeg: rename the class
2013-01-28 21:45:44 +01:00
Max Kellermann
0dd4b52b63
decoder/ffmpeg: require ffmpeg/libav 0.7.6
...
This is the version present in Ubuntu Oneiric, the oldest distribution
with gcc 4.6. Debian Squeeze is off target, because it has gcc 4.4,
which is unable to compile MPD anyway.
This commit drops all API compatibility hacks for older versions.
2013-01-28 21:32:14 +01:00
Max Kellermann
6f3d70b5e2
DecoderControl, InputStream: use Mutex/Cond instead of GMutex/GCond
2013-01-27 18:39:32 +01:00
Max Kellermann
0273cd44b0
input_stream: forward-declare the struct
...
Hide the definition from C code, to prepare the transition to C++.
2013-01-26 01:24:01 +01:00
Max Kellermann
49567f1f3e
input_{internal,plugin}: convert to C++
2013-01-25 22:43:01 +01:00
Max Kellermann
94fffb332b
archive/*: convert to C++
2013-01-24 19:18:58 +01:00
Max Kellermann
7c0e4dfb56
input/archive: fix memory leak in error handler
2013-01-21 19:08:35 +01:00
Max Kellermann
9ec069104f
input,playlist/despotify: convert to C++
2013-01-21 19:01:10 +01:00
Max Kellermann
9cc90b1fbe
input/cdio_paranoia: convert to C++
2013-01-21 17:58:30 +01:00
Max Kellermann
0c9f22507f
input/ffmpeg: convert to C++
2013-01-21 17:50:43 +01:00
Max Kellermann
9c870e4276
input/rewind: convert to C++
2013-01-21 17:36:19 +01:00
Max Kellermann
5cffe693b0
input/file,mms: convert to C++
2013-01-21 10:52:40 +01:00
Max Kellermann
e01615fd1e
input_internal.h: add extern "C"
2013-01-21 10:52:19 +01:00
Max Kellermann
452a30d7af
input/Curl: break loop when remaining length becomes 0
...
Fixes assertion failure (regression).
2013-01-15 23:39:32 +01:00
Max Kellermann
083065f433
input/Curl: move code to class MultiSocketMonitor
2013-01-15 18:16:55 +01:00
Max Kellermann
4cfc4a5a94
input/Curl: simpler GPollFD initialisation
...
Using initializer list.
2013-01-15 18:16:38 +01:00
Max Kellermann
1c7ee737e6
input/Curl: don't remove/add modified GPollFD
...
Not necessary, GLib will pick up the updated GPollFD automatically.
2013-01-15 18:16:15 +01:00
Max Kellermann
e83f805b8f
Main, IOThread: move GMainLoop setup code to class EventLoop
2013-01-14 09:15:49 +01:00
Max Kellermann
631a268996
input/curl: use std::list instead of GQueue
2013-01-10 23:00:23 +01:00
Max Kellermann
85074f5ac6
icy_metadata: convert to C++
2013-01-10 22:33:16 +01:00
Max Kellermann
12a8ed39d4
input/Curl: add constructor to input_curl class
2013-01-10 22:25:57 +01:00
Max Kellermann
b9ac5e9e76
input/Curl: remove unused source/source_id attributes
2013-01-10 22:25:33 +01:00
Max Kellermann
2758a734a2
input/Curl: remove redundant attribute "url"
...
Use the "url" attribute from the base class instead.
2013-01-10 22:21:30 +01:00
Max Kellermann
01f3131c81
input/Curl: use std::forward_list instead of GSList
2013-01-10 20:52:58 +01:00
Max Kellermann
2ca9236864
input/Curl: remove unused attribute "fds"
2013-01-10 20:52:44 +01:00
Max Kellermann
3bb711837e
input/Curl: require libcurl 7.18
2013-01-10 20:46:47 +01:00
Max Kellermann
e0a97a030f
io_thread: convert to C++
2013-01-10 10:33:20 +01:00
Max Kellermann
33ba288622
input/{curl,soup}: convert to C++
2013-01-10 10:23:20 +01:00
Max Kellermann
ef0392e854
input/file: use errno_quark()
2012-10-04 10:32:04 +02:00
Max Kellermann
12838c6294
input/ffmpeg: remove fallback AV_VERSION_INT definition
...
This is part of libavutil.
2012-08-14 19:07:27 +02:00
Max Kellermann
712e3eb120
input/curl: use g_source_get_time()
...
g_source_get_current_time() is deprecated since GLib 2.28. This patch
adds a compatibility wrapper for older GLib versions to glib_compat.h.
2012-04-04 20:05:48 +02:00
Jonathan Neuschäfer
6ab4fb368c
input/cdio_paranoia: whitespace-fix a comment
2012-02-15 21:22:49 +01:00
Max Kellermann
e87b7daab5
input/soup: use #pragma only with gcc 4.6+
...
It seems gcc 4.5 does not allow #pragma within function:
src/input/soup_input_plugin.c:284:9: error: #pragma GCC diagnostic not allowed inside functions
2012-01-29 14:46:05 +01:00
Max Kellermann
9937ff8ac0
Merge branch 'v0.16.x'
...
Conflicts:
src/decoder/ffmpeg_decoder_plugin.c
src/input/ffmpeg_input_plugin.c
2012-01-05 00:33:23 +01:00
Max Kellermann
56257f072b
input/ffmpeg: use the new AVIOContext API
...
URLContext is deprecated.
2012-01-04 21:47:19 +01:00
Max Kellermann
44401158e8
input/ffmpeg: define AV_VERSION_INT if not present
...
Support ancient ffmpeg versions.
2012-01-04 21:47:01 +01:00
Max Kellermann
744d729dab
input/soup: disable -Wcast-qual to work around libsoup header problem
2011-12-12 10:15:04 +01:00
Max Kellermann
52b77f6e31
input/cdio_paranoia: pass byte order swapping to the PCM "decoder"
...
Send another "magic" MIME type when the byte order must be reversed.
This also fixes byte order issues when big-endian was involved (input
data or host byte order) - that was completely broken.
2011-10-10 10:13:43 +02:00
Max Kellermann
2be245b75e
input/soup: wait some more before resuming the stream
2011-09-16 21:50:05 +02:00
Max Kellermann
17927f5c26
input/soup: improve error messages
...
Copy the reason_phrase from the SoupMessage, and check for transport
errors in the session callback.
2011-09-16 21:50:05 +02:00
Max Kellermann
754f26a97c
input_stream: non-blocking I/O
...
Add GMutex, GCond attributes which will be used by callers to
conditionally wait on the stream.
Remove the (now-useless) plugin method buffer(), wait on GCond
instead. Lock the input_stream before each method call. Do the same
with the playlist plugins.
2011-09-16 21:22:13 +02:00
Max Kellermann
29241c4f83
input_plugin: add method check()
...
To check for errors without reading. The decoder thread wants to do
that, before it passes the input stream to the plugin.
2011-09-16 21:22:02 +02:00
Max Kellermann
6f655eb9b9
input/{soup,curl}: free unused postponed_error
...
Fix memory leak.
2011-09-16 21:13:25 +02:00
Max Kellermann
65dfd90141
input/soup: move libsoup calls to the I/O thread
...
libsoup's asynchronous API is not thread safe. By moving the calls
into the I/O thread, several crash bugs will be fixed.
2011-09-16 20:34:47 +02:00
Max Kellermann
59abdbd2dd
input/soup: wait for _cancel_message() to complete
...
Add the "complete" attribute, and set it in _session_callback().
_close() waits for it to become true.
2011-09-16 20:34:47 +02:00
Max Kellermann
a6d6873856
input/soup: return real GErrors to the caller
...
Add attribute postponed_error, pass this GError to the caller.
2011-09-16 11:36:09 +02:00
Max Kellermann
e99df3a3be
input/soup: set the "ready" flag on failure
...
Fix deadlock.
2011-09-16 11:35:02 +02:00
Max Kellermann
8b657255cc
input/soup: remove redundant flag "ready"
...
We'll add proper locking now, and there's no need to carry this
duplicate flag.
2011-09-16 11:34:50 +02:00
Max Kellermann
0e1dc79321
input/soup: report failure in _read()
...
To report failures to callers who don't use _buffer().
2011-09-16 11:30:56 +02:00
Max Kellermann
0ef15e5fac
input/soup: unlock before cancelling the soup message
...
Avoid recursive deadlock in _session_callback().
2011-09-16 11:30:30 +02:00
Max Kellermann
b513943893
input/curl: wait some more before resuming the stream
...
Pausing and resuming after every little chunk adds lots of overhead.
Add a lower level for resuming the stream.
2011-09-16 09:14:29 +02:00
Max Kellermann
edffc56600
input/curl: clear the "paused" flag before resuming
...
curl_easy_pause(CURLPAUSE_CONT) may have added enough data to go into
pause again.
2011-09-16 09:11:15 +02:00
Max Kellermann
856b0e6886
input/curl: remove _schedule_update()
...
Call _update_fds() directly. This is possible because it's only
called from within the I/O thread.
2011-09-16 09:11:09 +02:00
Max Kellermann
bf1eb46b87
input/curl: unlock the mutex for io_thread_call()
...
Fix deadlock.
2011-09-16 09:10:39 +02:00
Max Kellermann
53174ea45f
input/soup: fix "unused local variable" warnings
2011-09-16 09:10:33 +02:00
Max Kellermann
87b624f5d5
Merge branch 'v0.16.x'
2011-09-16 07:52:39 +02:00
Max Kellermann
1cbba4fc59
input/curl, output/pulse: fix "unused local variable" warnings
2011-09-16 07:41:41 +02:00
Max Kellermann
f804a739b1
Merge branch 'v0.16.x'
...
Conflicts:
NEWS
configure.ac
2011-09-15 21:48:33 +02:00
Max Kellermann
48a84ca23e
input/rewind: copy the MIME type only once
...
Reduce heap usage by reducing the number of malloc() / free() calls.
2011-09-15 20:24:15 +02:00
Max Kellermann
8751783a1b
input/curl: per-request mutex/cond
...
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.
2011-09-15 10:24:50 +02:00
Max Kellermann
3a2ec50d5f
input/curl: move all libCURL calls to the I/O thread
...
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.
2011-09-15 09:48:36 +02:00
Max Kellermann
ce9aeed4cb
input/file: return NULL instead of "false"
2011-09-15 09:48:36 +02:00
Max Kellermann
e96f8c0444
input/curl: don't set "ready" on _easy_free()
...
Move the assignment to _request_done(), right before the GCond is
signalled. This might fix spurious wakeups.
2011-09-15 09:27:16 +02:00
Max Kellermann
2bf3bc3e10
input/curl: add assertions on io_thread_inside()
2011-09-15 09:27:15 +02:00
Max Kellermann
28143f86f9
input/curl: merge _request_abort() into _request_done()
...
This is a trivial function. Merge some duplicate code, e.g. the
g_cond_broadcast() call.
2011-09-15 09:27:13 +02:00
Max Kellermann
46ed717af4
input/curl: API documentation fix
2011-09-15 06:44:20 +02:00
Max Kellermann
ad37c88f80
input_plugin: add method update()
...
Update the struct attributes, important for facades like the "rewind"
plugin. To replace buffer().
2011-09-14 22:25:29 +02:00
Max Kellermann
dd33317f45
input_stream: move input_stream_init(), _deinit() to _internal.c
2011-09-14 22:01:55 +02:00
Max Kellermann
6a3008d7ff
Merge branch 'v0.16.x'
...
Conflicts:
configure.ac
src/output_control.c
2011-09-01 19:19:42 +02:00
Max Kellermann
11626e48bf
input/curl: implement a hard-coded timeout of 10 seconds
...
Be sure to stop the operation at some point when the server isn't
responding.
2011-08-26 19:28:09 +02:00
Max Kellermann
4f021cbced
input/curl: use the I/O thread
...
Background buffering and better timeout handling. This patch sort of
obsoletes the input_plugin method buffer().
2011-08-25 19:20:57 +02:00
Max Kellermann
ba31d176c8
input/curl: eliminate attribute "eof"
...
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.
2011-08-25 19:20:28 +02:00
Max Kellermann
68edbc3e4a
input/curl: release "easy" CURL handle as early as possible
...
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.
2011-08-25 19:19:31 +02:00
Max Kellermann
5068227a46
input/curl: move code to input_curl_flush_buffers()
...
Allow closing the handle while preserving the remaining buffers.
2011-08-25 18:48:05 +02:00
Max Kellermann
f8f3bc89e7
input/curl: pass input_curl to fill_buffer()
...
Remove a cast.
2011-08-25 18:43:26 +02:00
Max Kellermann
37c8f5c1da
input/curl: set GError when init() fails
...
Let the caller know what happened, he's responsible for logging.
2011-08-25 08:43:05 +02:00
Max Kellermann
5bba2df526
input/soup: free all resources in method close()
2011-08-24 19:31:59 +02:00
Max Kellermann
3b9ffea36f
input/soup: new input plugin based on libsoup
...
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.
2011-08-24 03:33:49 +02:00
Max Kellermann
523f89cc8c
input/curl: remove obsolete function input_curl_reinit()
2011-08-24 02:55:05 +02:00
Max Kellermann
5ecb6fecc4
Merge branch 'v0.16.x'
2011-08-24 01:47:10 +02:00
Max Kellermann
8d70f808d9
input/curl: limit the receive buffer size
2011-08-23 20:46:51 +02:00
Skottish
e54748d355
decoder/ffmpeg: use AVIO_FLAG_READ on newer ffmpeg versions
...
FFmpeg/libav have dropped AVIO_RDONLY in favor of AVIO_FLAG_READ. This
patch fixes that in MPD.
2011-07-03 15:17:44 +02:00
Max Kellermann
98acf3f281
input/ffmpeg: use the new AVIOContext API
...
URLContext is deprecated.
2011-05-09 21:23:24 +02:00
Anton Khirnov
9d91aa23e6
decoder/ffmpeg: drop support for pre-0.5 ffmpeg
...
All modern distros ship 0.5, so there's no need to support old and buggy
ffmpeg versions.
2011-04-12 08:14:14 +02:00
Simon Kagstrom
124d1a5942
input: Add despotify input plugin
...
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
2011-03-29 17:01:16 +02:00
Max Kellermann
c6cbcc2c25
copyright year 2011
2011-01-29 10:13:54 +01:00
Ian Zimmerman
27aa34d4ae
input/curl: enable CURLOPT_NETRC
...
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.
2011-01-29 08:43:30 +01:00
Max Kellermann
cf696ce443
input/cdio_paranoia: add module name
...
Seems like we forgot to give this module a name... this can crash MPD
on startup.
2011-01-08 18:27:57 +01:00
Max Kellermann
4783ebc918
input/cdda: rename plugin to "cdio_paranoia"
2010-12-22 09:43:57 +01:00
Max Kellermann
8bda52783b
input/cdda: support reading the whole disc
2010-12-22 09:43:53 +01:00
Max Kellermann
07feec7ea6
input/cdda: remove unused function input_cdda_archive_extract_trackno()
2010-12-22 09:43:49 +01:00
Max Kellermann
e7471f589a
input/cdda: import missing pcm16_to_wave() from the wave encoder
2010-12-22 09:43:47 +01:00
Max Kellermann
24208be5cf
input/cdda: implement parse_cdda_uri()
...
Was missing.
2010-12-22 09:43:41 +01:00
Max Kellermann
8db5f66498
input/cdda: call input_cdda_close() with an input_stream pointer
...
Another build fix.
2010-12-22 09:43:27 +01:00
Max Kellermann
be670bfd1f
input/cdda: move code to cdda_detect_drive()
2010-12-22 09:43:20 +01:00
Max Kellermann
19acf090ed
input/cdda: remove newlines from error messages
2010-12-22 09:43:16 +01:00
Max Kellermann
2de7f6b457
input/cdda: remove debug code
2010-12-22 09:42:10 +01:00
Max Kellermann
a2e265e9a2
input/cdda: some general build failure fixes
2010-12-22 07:44:56 +01:00
Viliam Mateicka
28d7b29d72
input_cdda_plugin: new plugin to handle cdda:// protocol to access CD-DA audio CD's
2010-12-22 07:36:14 +01:00