Commit Graph

13936 Commits

Author SHA1 Message Date
Max Kellermann
41cdc4e14b input/Offset: add macro PRIoffset 2018-07-06 19:06:05 +02:00
Max Kellermann
87dfca0477 input/curl: remove obsolete Windows sprintf() fallback
See commit be137a191e
2018-07-06 19:05:09 +02:00
Max Kellermann
e1ee8e7812 util/FormatString: remove obsolete Windows fallback
Since 7d353bbe2a, _GNU_SOURCE is always
defined, which implies __USE_MINGW_ANSI_STDIO and thus switches to
the mingw implementations of the printf() family.  That's
standards-compliant, unlike Microsoft's CRT implementations.
2018-07-06 19:04:33 +02:00
Max Kellermann
63406efcd8 db/update/ExcludeList: allow comments only at start of line 2018-07-06 18:27:17 +02:00
Max Kellermann
d5c132fca0 db/update/ExcludeList: move code to ParseLine() 2018-07-06 18:25:27 +02:00
Max Kellermann
5f082a2739 output/httpd: remove broken DLNA support code
This code was added in 21851c0673 but
looks completely broken:

- the status code is "206 OK" but "206" would be "Partial Content"

- the "Content-Length" header has a bogus value

- the "Content-RangeX" parameter has different bogus values (why
  "Content-RangeX" anyway and not "Content-Range"?)

Apart from that, there are strange undocumented non-standard headers
which are probably there to work around bugs/expectations in one
broken proprietary client product.  But these days, MPD doesn't bend
over to support broken clients.  So let's kill this code.

Closes #304
2018-07-06 17:28:01 +02:00
Max Kellermann
45139f94bb db/LightSong: pass URI to constructor 2018-07-06 16:56:12 +02:00
Max Kellermann
80cb680fca db/LightSong: implicit initialization 2018-07-06 16:50:37 +02:00
Max Kellermann
b9ff6383a4 db/LightSong: make Tag a reference
This enforces the "not nullptr" rule.
2018-07-06 16:47:47 +02:00
Max Kellermann
ebc006ab52 db/simple: wrap LightSong in Manual<>
Prepare to make LightSong non-assignable.
2018-07-06 16:46:01 +02:00
Max Kellermann
86a02871fc decoder/vorbis: call TagHandler::OnAudioFormat() 2018-07-06 12:44:58 +02:00
Max Kellermann
e152e843d8 tag/Handler: add method OnAudioFormat() 2018-07-06 12:44:58 +02:00
Max Kellermann
9ff1ff75cb tag/Handler: add FullTagHandler constructor with want_mask 2018-07-06 12:44:58 +02:00
Max Kellermann
abea4a24ba tag/Handler: move WANT_DURATION|WANT_TAG to protected AddTagHandler() 2018-07-06 12:44:11 +02:00
Max Kellermann
3d3a1232b1 tag/Handler: convert to class with virtual methods 2018-07-05 19:07:05 +02:00
Max Kellermann
09d4176210 output/multiple: use WaitAll() in EnableDisable() 2018-06-23 19:23:56 +02:00
Max Kellermann
30d41e45e2 output/multiple: remove unnecessary IsBusy() check from WaitAll()
AudioOutputControl::WaitForCommand() doesn't need this check.
2018-06-23 19:23:18 +02:00
Max Kellermann
bd9a5021da notify: remove unused library 2018-06-23 19:15:26 +02:00
Max Kellermann
1624a5eb8d output/Control: add another Cond attribute, replacing audio_output_client_notify 2018-06-23 19:11:48 +02:00
Max Kellermann
1bca29f9e2 output/Control: rename "cond" to "wake_cond"
Prepare for adding another Cond attribute.
2018-06-23 19:10:23 +02:00
Max Kellermann
efb8a9bd2c player, decoder, output: wrap MusicPipe in std::shared_ptr/std::unique_ptr 2018-06-23 18:45:57 +02:00
Max Kellermann
82954d1d6f player/Thread: eliminate ClearAndReplacePipe()
Since commit e81b089612, this is the
same code as in ReplacePipe().
2018-06-23 18:44:48 +02:00
Max Kellermann
5a02324c09 MusicBuffer: make constructor explicit 2018-06-23 18:40:36 +02:00
Max Kellermann
eb93bebbc1 MusicBuffer: fix potential deadlock while cross-fading in Return() 2018-06-23 18:39:50 +02:00
Max Kellermann
2be905b2e2 MusicPipe: eliminate the unused MusicBuffer reference
This requires re-adding the reference to struct DecoderControl, which
was removed recently by commit
9f14e7a98d
2018-06-23 18:36:24 +02:00
Max Kellermann
076be809c2 Music{Pipe,Chunk}: use MusicChunkPtr for the list links 2018-06-23 17:58:42 +02:00
Max Kellermann
88f1233d7b MusicPipe, output/multiple: include cleanup 2018-06-23 17:44:32 +02:00
Max Kellermann
54d295c247 MusicChunkPtr: managed MusicChunk pointer
Make all uses of MusicChunk safe.
2018-06-22 23:11:52 +02:00
Max Kellermann
e81b089612 MusicPipe: automatically clear in destructor
We can implement this now that we have a MusicBuffer reference.
2018-06-22 23:09:13 +02:00
Max Kellermann
9f14e7a98d MusicPipe: add MusicBuffer reference
This tiny amount of overhead allows omitting the MusicBuffer in
Clear().
2018-06-22 22:59:44 +02:00
Max Kellermann
cb412b221c output/multiple: update API documentation 2018-06-22 22:59:30 +02:00
Max Kellermann
7d6a762845 python/build/libs.py: upgrade FFmpeg to 4.0.1 2018-06-22 22:35:27 +02:00
Max Kellermann
1ca1269a59 input/curl: use class MaybeBufferedInputStream
For remote files (not streams), this downloads as quickly as possible
to a large buffer instead of throttling the stream during playback.
Throttling can make the server impatient and it may then disconnect.

This is what Qobuz and Tidal do, and this commit attempts to solve
this by not letting the Qobuz/Tidal server wait (closes #241).
2018-06-22 22:33:16 +02:00
Max Kellermann
6681b14b71 input/MaybeBuffered: proxy InputStream implementation which auto-uses BufferedInputStream 2018-06-22 22:33:16 +02:00
Max Kellermann
12f2418445 input/buffered: proxy InputStream implementation which caches in a huge buffer 2018-06-22 22:33:16 +02:00
Max Kellermann
ae8a2ab652 util/SparseBuffer: new utility class 2018-06-22 22:18:26 +02:00
Max Kellermann
d0fbf6db59 input/Stream: remove attribute "cond", replace with handler interface
This adds a bit of overhead, but also adds flexibility to the API,
because arbitrary triggers may be invoked from that virtual method
implementation, not just Cond::signal().

The motivation for this is to make the handlers more dynamic, for the
upcoming buffering class utilizing ProxyInputStream.
2018-06-22 19:37:18 +02:00
Max Kellermann
01d8eb6290 input/rewind: move sources out of the "plugins" directory
This is not a plugin.
2018-06-22 19:31:06 +02:00
Max Kellermann
197968d65e input/Stream: mark qobuz:// and tidal:// as "seeking is expensive"
Those are loaded with the "curl" input plugin, and this one is
"expensive", because it needs to send a new HTTP request with Range
header for each seek.
2018-06-21 22:35:36 +02:00
Max Kellermann
2cb83a1f84 input/Stream: make "uri" const 2018-06-14 17:31:54 +02:00
Max Kellermann
d7c94e30c5 input/Stream: remove obsolete comment 2018-06-14 17:31:33 +02:00
Max Kellermann
510d2514a0 doc/user.xml: mention the cache_directory requirement for mounts 2018-06-05 22:10:28 +02:00
Max Kellermann
5217a74b7f storage/udisks: return file path in MapUTF8()
The absolute udisks:// URI is not usable with InputStream::Open(), and
thus we need to return the LocalStorage::MapUTF8() return value
instead.
2018-06-05 22:01:28 +02:00
Max Kellermann
cccf35d140 storage/udisks: add missing MountWait() call to MapFS() 2018-06-05 21:56:28 +02:00
Max Kellermann
249316c8fc storage/udisks: implement MapFS() 2018-06-05 21:54:50 +02:00
Max Kellermann
cd24449495 doc/user.xml: document the two udisks plugins 2018-06-05 21:35:30 +02:00
Max Kellermann
687834328c doc/user.xml: add section explaining storage/neighbor plugins and mounts 2018-06-05 21:35:30 +02:00
Max Kellermann
4d015aff30 doc/user.xml: rewrite the "Introduction" section with text from the website 2018-06-05 21:35:30 +02:00
Max Kellermann
ba8040d068 storage/udisks: new plugin
Documentation will follow soon.
2018-06-04 22:00:52 +02:00
Max Kellermann
5fa94d2a85 lib/dbus/AsyncRequest: add missing include 2018-06-04 22:00:52 +02:00