Max Kellermann
fd2eafa7c6
ClientRead: "close" flushes the output buffer
...
Add a new CommandResult code called "FINISH" which, unlike "CLOSE",
will attempt to flush the output buffer. This is a one-shot attempt;
it will do one write, and not try again.
2013-11-06 22:01:06 +01:00
Max Kellermann
422b8472fe
event/FullyBufferedSocket: try to write without extra roundtrip
...
Postpone the write using IdleMonitor instead of scheduling a write
event. This reduces the number of system calls, because we don't need
to register and unregister the write event in epoll.
2013-11-06 21:52:24 +01:00
Max Kellermann
5b213b0504
event/FullyBufferedSocket: make WriteFromBuffer() protected
...
.. and rename it to Flush().
2013-11-06 21:52:09 +01:00
Max Kellermann
ad27d06979
PlayerThread: enable buffering when starting playback
...
For some reason, this got lost in commit 975deca8
.
Re-enabling this fixes stuttering at the beginning of radio streams.
2013-11-06 20:14:38 +01:00
Max Kellermann
01891f8815
input/curl: fix bug with redirected streams
...
Migrate from the old curl_multi_perform() API to the newer
curl_multi_socket_action() API (since CURL 7.16).
This allows working around a bug with HTTP redirections with epoll:
when CURL closes a socket and the new one happens to have the same
file number, MPD did not have a chance to remove the old one from
epoll and subsequently attempted to use EPOLL_CTL_MOD, which was not
allowed by epoll, because it's a new socket now.
2013-11-06 19:14:22 +01:00
Max Kellermann
adb68450ce
input/curl: move code into class CurlMulti
...
Move all global variables there, and keep just one global variable:
the pointer to the CurlMulti instance. Prepares for the next commit.
2013-11-06 19:07:10 +01:00
Max Kellermann
2520f6fe49
input/curl: remove the global list of requests
...
Unused.
2013-11-06 19:06:14 +01:00
Max Kellermann
c9278bfcdf
input/curl: don't abort all requests on curl_multi_perform() error
...
Eliminate some complicated code that's not worth the trouble.
2013-11-06 19:06:02 +01:00
Max Kellermann
8b838ff9ea
input/curl: use CURLOPT_PRIVATE
...
Replaces the loop in input_curl_find_request().
2013-11-06 19:05:45 +01:00
Max Kellermann
154bdf0bca
event/SocketMonitor: add method Abandon()
2013-11-06 19:05:45 +01:00
Max Kellermann
ed436c6f0c
system/ByteOrder: fix big-endian support
...
D'oh!
2013-11-05 22:08:53 +01:00
Max Kellermann
ae5dd2da4f
playlist/pls: fix reversed song order
...
Remove the forward_list::reverse() call. It was not necessary,
because pls_parser() already reads the playlist in reverse order.
2013-11-05 18:22:34 +01:00
Jurgen Kramer
f4b61e8c8d
decoder/dsf: enable DSD128
2013-11-05 17:38:48 +01:00
Natanael Copa
3f21581a81
add various missing headers
...
Fixes building with gcc-4.8
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
2013-11-05 11:08:36 +01:00
Max Kellermann
62baec1841
output/alsa: avoid endless loop in Raspberry Pi workaround
...
See code comment.
2013-11-04 23:40:34 +01:00
Max Kellermann
7bca61f5bb
event/ServerSocket: don't abort if IPv6 is not available
...
First check if an IPv6 socket can be created.
2013-11-04 23:36:02 +01:00
Max Kellermann
ecf12a60e8
Log: add level "DEFAULT"
...
Map LogLevel::INFO to G_LOG_LEVEL_INFO, and LogLevel::DEFAULT to
G_LOG_LEVEL_MESSAGE. Now client connect/disconnect message are only
logged on log_level "secure".
2013-11-04 22:27:49 +01:00
Max Kellermann
6de85cb047
Log: document the LogLevel items
2013-11-04 22:17:53 +01:00
Max Kellermann
b54762a8f6
event/ServerSocket: fix assertion failure
...
Regression from previous commit. D'oh!
2013-11-04 20:16:28 +01:00
Max Kellermann
bcae86196c
event/ServerSocket: open sockets in the order they were configured
...
Use a std::list which can be appended at the end.
2013-11-04 20:10:46 +01:00
Max Kellermann
7adfea8ca2
system/resolver: return path of UNIX domain sockets
...
getnameinfo() doesn't work well - it always returns "localhost".
2013-11-04 19:13:05 +01:00
Max Kellermann
eab1a77683
ClientRead: always ignore whitespace at the end of the line
2013-11-04 18:11:15 +01:00
Max Kellermann
2ce3900071
filter/AutoConvert: modify child_audio_format, not in_audio_format
...
This prevented using the "volume_normalization" feature with some
codecs (e.g. mp3), because the normalization code requires 16 bit
samples. If the codec happens to deliver formats other than S16, the
AutoConvert filter succeeds to initialize the conversion filter, but
the returned input audio format was wrong.
2013-11-04 08:00:00 +01:00
Max Kellermann
8c6727949c
CommandLine: simplified program name line
2013-10-31 00:12:31 +01:00
Max Kellermann
8c834a4ff6
system/FatalError: use _exit() instead of exit()
...
Skip the global destructors. We don't need them here - we bail out as
quickly as we can.
2013-10-30 23:42:16 +01:00
Max Kellermann
8c01004219
system/FatalError: move code to Abort()
2013-10-30 23:41:02 +01:00
Max Kellermann
8555b65c50
*: update copyright year to 2013
2013-10-30 23:37:06 +01:00
Max Kellermann
304fa5ecac
ClientList: disconnect all clients in destructor
...
Fixes assertion failure.
2013-10-30 23:12:45 +01:00
Max Kellermann
88e630170e
mixer/software: fix double free bug
2013-10-30 23:12:45 +01:00
Max Kellermann
da8bdd62c8
PlaylistState: ignore "mixrampdelay:nan"
...
mixramp_delay==nan() causes severe problems with cross-fading.
2013-10-30 22:33:02 +01:00
Max Kellermann
54abeab80b
increase default buffer size to 4 MB
...
2 MB was too small for cross-fading a 24 bit file. Increasing to 4 MB
is still not too large for weak machines, but is enough for
cross-fading.
2013-10-30 21:46:40 +01:00
Max Kellermann
1dc8a9f0e7
db/proxy: remove obsolete #undefs
2013-10-30 20:51:41 +01:00
Max Kellermann
a62d54425c
db/proxy: auto-reconnect
2013-10-30 19:50:22 +01:00
Max Kellermann
90c899407a
ReplayGainInfo: use large negative value instead of infinity
...
The last piece to allow -ffast-math.
2013-10-30 18:01:45 +01:00
Max Kellermann
55868eecd0
PlayerCommands: show CrossFade/MixRamp only if enabled
2013-10-30 17:49:47 +01:00
Max Kellermann
50dc98367c
PcmMix: use negative value instead of NaN for addition
...
Avoid NaN to allow -ffast-math.
2013-10-30 17:23:49 +01:00
Max Kellermann
c4d3030d24
CrossFade: eliminate NaN from mixramp_interpolate()
...
Use a boolean flag instead.
2013-10-30 17:20:34 +01:00
Max Kellermann
c6f101884b
CrossFade: use negative value for invalid MixRamp overlap
...
Avoid NaN to allow -ffast-math.
2013-10-30 17:20:12 +01:00
Max Kellermann
a65f63747b
CrossFade: use negative value for invalid mixramp_delay
...
Avoid NaN to allow -ffast-math.
2013-10-30 16:50:34 +01:00
Max Kellermann
a21edddf27
CrossFade: remove obsolete API documentation
2013-10-30 16:45:02 +01:00
Max Kellermann
a88c23b6e8
Main: check the g_get_user_special_dir() result
...
Fixes crash.
2013-10-30 16:14:44 +01:00
Max Kellermann
7bb3987acc
db/proxy: return server errors using "enum ack"
2013-10-30 16:04:21 +01:00
Max Kellermann
6a147a17af
db/proxy: pass search/find to remote MPD
2013-10-30 10:00:57 +01:00
Max Kellermann
2b7529e905
db/proxy: pass SongFilter to the remote MPD in VisitUniqueTags()
2013-10-30 09:40:23 +01:00
Max Kellermann
1ed321f964
db/proxy: add missing nullptr check
2013-10-30 09:37:20 +01:00
Max Kellermann
2aee1b86f3
SongFilter: add special keyword "base"
...
Restores the features from the previous draft commands "findin" /
"searchin".
2013-10-29 21:13:40 +01:00
Max Kellermann
b5fc21b9f4
Revert "command: new commands "findin", "searchin" with base URI"
...
This reverts commit a577944ab5
.
Will be replaced by new options for the old commands "search" and
"find".
2013-10-29 21:13:40 +01:00
Max Kellermann
44581dbef5
util/UriUtil: add uri_is_child_or_same()
2013-10-29 21:13:40 +01:00
Jean-Francois Dockes
205448c1e8
db/proxy: enable song matching
2013-10-29 20:58:35 +01:00
Jean-Francois Dockes
2d11c6ab29
SongFilter: make SongFilter::Item class definition public
2013-10-29 20:47:52 +01:00
Max Kellermann
6859c22b69
SongFilter: "any" does not match file name
...
According to the protocol documentation, matching the file name was
wrong. This removes some awkward special-case code.
2013-10-29 20:40:55 +01:00
Max Kellermann
2d5413fc3b
DatabaseSelection: use std::string
2013-10-29 20:36:52 +01:00
Max Kellermann
a6aa0e4cbf
SongFilter: use std::string
2013-10-29 19:39:17 +01:00
Max Kellermann
163848ab3b
fd_util: avoid unnecessary fcntl() calls
2013-10-29 13:02:53 +01:00
Max Kellermann
03747ba93e
PlayerControl: move attributes to struct CrossFadeSettings
2013-10-29 00:14:27 +01:00
Max Kellermann
095c390df7
FilterRegistry: add "pure" attribute
2013-10-29 00:05:04 +01:00
Max Kellermann
20597b3632
*: use nullptr instead of NULL
2013-10-28 23:58:17 +01:00
Max Kellermann
4728735acf
decoder/dsf: don't play junk at the end of the "data" chunk
2013-10-28 23:47:25 +01:00
Max Kellermann
9dcbd005f0
decoder/dsf: add range check
2013-10-28 23:41:51 +01:00
Max Kellermann
0ad2eb34c7
decoder/dsdlib: add class DsdUint64
...
Merge lots of duplicate code.
2013-10-28 23:29:23 +01:00
Max Kellermann
0e8a15e813
decoder/dsdlib: include cleanup
2013-10-28 23:26:37 +01:00
Max Kellermann
5b0d6a59cf
decoder/dsdlib: move API documentation to header
2013-10-28 23:26:16 +01:00
Max Kellermann
fd3dc7e5fb
decoder/dsdlib: convert struct dsdlib_id to a class
2013-10-28 23:12:48 +01:00
Max Kellermann
12e9b7eafa
PcmFormat: move definitions to struct SampleTraits
2013-10-28 21:29:36 +01:00
Max Kellermann
de1261ba28
MusicChunk: return WritableBuffer
2013-10-28 17:10:12 +01:00
Max Kellermann
5ee5a89a7f
MusicChunk: use uint8_t instead of char
2013-10-28 17:08:14 +01:00
Max Kellermann
1ad2475f9e
DecoderControl: convert mutex and client_cond to a reference
...
Share the Mutex between the DecoderThread and the PlayerThread. This
simplifies synchronization between the two threads and fixes a freeze
problem: while the PlayerThread waits for the DeocderThread, it cannot
answer requests from the main thread, and the main thread will block
until the DecoderThread finishes.
2013-10-28 10:22:05 +01:00
Max Kellermann
5b5675cc12
player_control: rename to PlayerControl
2013-10-28 10:12:33 +01:00
Max Kellermann
e699f6781e
decoder_control: rename to DecoderControl
2013-10-28 10:09:21 +01:00
Oddegamra
5f13c1cd9c
output/httpd: accept icy-metadata with and without space
...
Some, or most, Win32 audio players will pass "icy-metadata:1" to
streaming servers. MPD expects a space between ":" and "1" at this
point, and thus does not send any stream metadata. This applies to
foobar2k and Winamp, for example.
According to forums.radiotoolbox.com/viewtopic.php?t=74 not having
a space there is expected behavior, so maybe MPD could accept
both forms to determine if metadata should be sent or not.
2013-10-26 16:32:00 +02:00
Max Kellermann
a577944ab5
command: new commands "findin", "searchin" with base URI
2013-10-26 16:13:35 +02:00
Max Kellermann
17ec3b0c2d
FileCommands: "readcomments" understands APE and ID3v2 tags
...
Implements Mantis ticket 3843.
2013-10-26 16:04:29 +02:00
Max Kellermann
fb75137540
FileCommands: fix wrong control character check in IsValidValue()
...
Check was the wrong way around, and made all valid values invisible.
2013-10-26 16:04:06 +02:00
Max Kellermann
6f87164ad6
ApeTag: support multiple values per name
2013-10-26 16:00:05 +02:00
Max Kellermann
a4d82cfe1e
ApeTag: move code to ForEachValue()
2013-10-26 15:57:09 +02:00
Max Kellermann
9f21eee2ec
ApeTag: simplify the "recognized" flag
2013-10-26 15:52:49 +02:00
Max Kellermann
a40246d312
TagFile: use Path instead of const char *
2013-10-26 15:38:29 +02:00
Max Kellermann
4a5aad0948
PlayerControl: initialize tagged_song in constructor
2013-10-26 15:37:49 +02:00
Max Kellermann
85ae7e9c9a
DecoderControl: move code/attributes to new class MixRampInfo
2013-10-26 14:19:34 +02:00
Max Kellermann
2098b94b47
DecoderThread: move code to DecoderControl::CycleMixRamp()
2013-10-26 14:12:10 +02:00
Max Kellermann
59ad6265a1
DecoderControl: add MixRamp getters
2013-10-26 14:08:09 +02:00
Max Kellermann
067572c6dd
CrossFade: reimplement mixramp_interpolate() without strtok()
...
Don't require a writable string, and don't modify it.
2013-10-26 13:53:32 +02:00
Max Kellermann
7f03f68fcc
CrossFade: apply coding style
2013-10-26 13:53:08 +02:00
Max Kellermann
b5e31c89c0
CrossFade: merge "return" statements using "break"
2013-10-26 13:49:15 +02:00
Max Kellermann
e898400fbd
CrossFade: use nullptr instead of NULL
2013-10-26 13:49:15 +02:00
Max Kellermann
3ac7de7a22
util/NumberParser: add ParseFloat()
2013-10-26 13:49:15 +02:00
Max Kellermann
ade66e7ece
util/NumberParser: indent
2013-10-26 13:49:15 +02:00
Max Kellermann
17dc638c18
command: new command "readcomments" lists arbitrary file tags
2013-10-25 19:35:40 +02:00
Max Kellermann
d6e28c42e5
ReplayGainInfo: refactor to a class
2013-10-25 19:12:46 +02:00
Max Kellermann
6d475c40de
ReplayGainInfo: use CamelCase for struct name
2013-10-25 19:12:38 +02:00
Max Kellermann
ed7891bf01
ReplayGainConfig: add "pure" attributes
2013-10-25 19:12:29 +02:00
Max Kellermann
e17da71a70
output/httpd: support HEAD requests
2013-10-25 00:32:48 +02:00
Max Kellermann
610bef9ff5
output/httpd: remove bogus assertion
2013-10-25 00:26:02 +02:00
Max Kellermann
961c7d0f78
OtherCommands: re-add the "volume" command
...
This command was removed by commit 206392ad
(MPD 0.16), even though it
was been proven useful for some very simple clients. On request, I
add it to the protocol again.
2013-10-25 00:20:36 +02:00
Max Kellermann
c1ba47beee
MixerAll, Volume: add "pure" attributes
2013-10-25 00:15:55 +02:00
Max Kellermann
ac8e5be9f4
decoder/opus: support replay gain
...
Parse the R128_TRACK_GAIN comment string.
2013-10-24 23:56:06 +02:00
Max Kellermann
c76952534e
decoder/Opus: implement seeking
2013-10-24 23:26:58 +02:00
Max Kellermann
f0060718de
decoder/opus: provide time stamps
...
Call decoder_timestamp(). This is not necessary currently, but will
be as soon as we implement seeking.
2013-10-24 23:26:54 +02:00
Max Kellermann
982ab9e496
decoder/opus: show song duration during playback
...
This requires seeking to the end-of-stream, checking its granulepos,
and then seeking back to the previous file position. We do this only
for local files.
2013-10-24 23:26:46 +02:00
Max Kellermann
b74bcf2274
decoder/opus: call ogg_stream_reset() in OggSeekPageAtOffset()
2013-10-24 23:23:23 +02:00