Commit Graph

5845 Commits

Author SHA1 Message Date
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 9ea8a840a9 decoder_api: remove the loop from decoder_read()
This was useless, because input_stream_read() blocks until data is
available.  Calling it in a loop doesn't make sense.
2011-09-16 09:15:10 +02:00
Max Kellermann 7b88089593 decoder_api: move code to decoder_check_cancel_read() 2011-09-16 09:15:10 +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 7e27d660e2 test/test_queue_priority: work around "set but not used" warning 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 443e96381a configure.ac: disable assertions in the non-debugging build
Add -DNDEBUG to AM_CPPFLAGS.
2011-09-16 07:41:41 +02:00
Max Kellermann 1cbba4fc59 input/curl, output/pulse: fix "unused local variable" warnings 2011-09-16 07:41:41 +02:00
Max Kellermann 344b6dd179 configure.ac: enable -Werror for C++ 2011-09-16 07:38:00 +02:00
Max Kellermann d8c829fa0c configure.ac: pass AM_CXXFLAGS, AM_CPPFLAGS to Makefile.am 2011-09-16 07:35:46 +02:00
Max Kellermann e1efc71ad3 input_stream: add "nonnull" attributes 2011-09-15 22:40:44 +02:00
Max Kellermann f804a739b1 Merge branch 'v0.16.x'
Conflicts:
	NEWS
	configure.ac
2011-09-15 21:48:33 +02:00
Max Kellermann 2ed870c854 decoder/ffmpeg: flush the codec after seeking
Let the codec start with fresh buffers.  This should fix the remaining
seeking issues.
2011-09-15 21:41:25 +02:00
Max Kellermann ce35ba9ac9 decoder/ffmpeg: explicitly specify the current stream for seeking
Use AVStream.time_base to convert the decoder_seek_where() value, and
pass the current stream number to av_seek_frame().
2011-09-15 21:35:29 +02:00
Max Kellermann 724a59aaf7 decoder/ffmpeg: don't require key frame for seeking
Use flag AV_TIME_BASE.
2011-09-15 21:32:29 +02:00
Max Kellermann 42d8c2981f decoder/ffmpeg: higher precision timestamps 2011-09-15 21:30:27 +02:00
Max Kellermann 9aa91e0f17 decoder/ffmpeg: move formula to time_from_ffmpeg() 2011-09-15 21:23:48 +02:00
Max Kellermann 5aabee8996 decoder/ffmpeg: add local variable "av_stream"
Code simplification.
2011-09-15 21:14:53 +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 f2be6432a9 Makefile.am: allow out-of-tree sparse call 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 76ec3d3248 udp_server: disable -Wmissing-field-initializers 2011-09-15 09:25:53 +02:00
Max Kellermann d0c85a5a96 gcc.h: add macro GCC_CHECK_VERSION 2011-09-15 09:22:48 +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 8c6e8a6eb8 input_internal: add assertions 2011-09-14 22:06:57 +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 c344d63fb3 decoder_internal: don't call input_stream_buffer()
This is not necessary since all relevant input plugins have been moved
to the I/O thread, and there is no remaining useful buffer()
implementation.  This also fixes a busy loop when playing radio.
2011-09-14 09:41:27 +02:00
Max Kellermann 62557f4d6b test/read_tags: initialize the tag_pool library 2011-09-13 22:46:47 +02:00
Max Kellermann 9c46cc4ea0 test/read_tags: call g_thread_init()
Needed for the I/O thread.
2011-09-13 22:42:21 +02:00
Max Kellermann a236a439cc db_print: move code to function db_selection_print()
Use it in handle_lsinfo(), and eliminate some duplicate code.
2011-09-13 22:09:37 +02:00
Max Kellermann c779e2674a db_visitor: add method playlist() 2011-09-13 22:02:37 +02:00