Max Kellermann
0debba0f6e
mixer/null: new mixer plugin
2014-12-02 18:20:44 +01:00
Max Kellermann
f2bd2c318c
MixerType: convert to strictly-typed enum
2014-12-02 18:20:44 +01:00
Max Kellermann
21c42819c7
MixerType: rename to CamelCase
2014-12-02 18:19:31 +01:00
Max Kellermann
5899a272ef
decoder/gme: simplify ParseContainerPath()
...
Use simple string and path parsing functions instead of GLib's
g_pattern_match(), which was used in a very clumsy way.
2014-12-02 07:11:11 +01:00
Max Kellermann
27b4c62bc1
decoder/gme: merge get_container_name() and get_song_num()
...
There is duplicate code in the two.
2014-12-02 06:53:33 +01:00
Max Kellermann
b227fddec7
fs/Path: add methods GetBase() and GetDirectoryName()
2014-12-02 06:45:57 +01:00
Max Kellermann
2c1f1de33c
decoder/gme: get_song_num() returns unsigned
2014-12-01 23:28:21 +01:00
Max Kellermann
c26622cf8f
decoder/gme: move code to ScanMusicEmu()
2014-12-01 23:01:58 +01:00
Max Kellermann
9e91873428
decoder/gme: move code to ScanGmeInfo()
2014-12-01 22:56:48 +01:00
Max Kellermann
7363d50a1e
output/httpd/IcyMetaDataServer: use CopyString() instead of g_strlcpy()
2014-12-01 22:33:57 +01:00
Max Kellermann
15213a041d
output/httpd/IcyMetaDataServer: don't use GLib types
2014-12-01 22:31:29 +01:00
Max Kellermann
fb70a34c80
output/httpd/IcyMetaDataServer: make variables more local
2014-12-01 22:28:14 +01:00
Max Kellermann
fbf76c6d21
input/cdio_paranoia: use CopyString() instead of g_strlcpy()
2014-12-01 22:22:29 +01:00
Nix
811af02f56
Output: start with a null mixer.
...
There are code paths (mostly error cases) in which it is possible to
initialize an AudioOutput and then kill it without ever calling
audio_output_new(). In such a case, its destructor will attempt to
free a mixer that was never initialized, leading to an attempt to
take out a lock on a mutex that was similarly never initialized,
which hangs forever.
Fix by always initializing the mixer appropriately.
2014-12-01 22:14:09 +01:00
Max Kellermann
bc00c38f9d
lib/icu/Converter: add ICU-based backend
2014-12-01 21:56:48 +01:00
Max Kellermann
6eb1caa417
fs/Config: add HAVE_GLIB check
2014-11-30 20:35:26 +01:00
Max Kellermann
41efc1376e
fs/Config: swap #if/#else
2014-11-30 20:34:32 +01:00
Max Kellermann
0f35016773
lib/icu/Converter: add TODO comment
2014-11-30 19:08:38 +01:00
Max Kellermann
c641ca90a9
lib/icu/Collate: move code to Util.cxx
2014-11-30 10:53:05 +01:00
Max Kellermann
87c88fcb27
fs/Charset: move code to wrapper class IcuConverter
...
Prepare for a ICU-based backend without GLib.
2014-11-30 00:31:13 +01:00
Max Kellermann
4f80a129f1
fs/Charset: return std::string from PathFromUTF8()
...
Don't expose pointer that requires the caller to invoke g_free(),
because that's GLib-only.
2014-11-30 00:28:27 +01:00
Max Kellermann
6987f2ba82
fs/Charset: use macro HAVE_FS_CHARSET internally
2014-11-30 00:27:58 +01:00
Max Kellermann
563db580ae
fs/Charset: add DeinitFSCharset()
2014-11-29 23:47:48 +01:00
Max Kellermann
125daea16a
fs/Charset: add macro HAVE_FS_CHARSET
2014-11-29 23:36:44 +01:00
Max Kellermann
fd2c6b8a4b
fs/Charset: return Error on SetFSCharset() failure
...
Don't abort the process, let the caller decide instead.
2014-11-29 23:36:44 +01:00
Max Kellermann
5b1db917bc
fs/Config: remove bogus WIN32 check
2014-11-29 23:36:44 +01:00
Max Kellermann
849b0563ce
util/Alloc: add fallback for gcc 4.6
2014-11-28 19:44:32 +01:00
Max Kellermann
16a99ad515
Compiler.h: exclude clang from GCC_CHECK_VERSION()
2014-11-28 19:33:09 +01:00
Max Kellermann
d93172bee8
Compiler.h: add macro CLANG_OR_GCC_VERSION()
2014-11-28 19:09:56 +01:00
Max Kellermann
25429af122
Compiler.h: add macro GCC_OLDER_THAN()
2014-11-28 19:09:52 +01:00
Max Kellermann
4bfd104a23
util/Manual: reimplement GCC_CHECK_VERSION() using GCC_MAKE_VERSION()
2014-11-28 19:07:59 +01:00
Max Kellermann
7745067d99
Compiler.h: add macro GCC_MAKE_VERSION()
2014-11-28 19:00:26 +01:00
Max Kellermann
b19d3629b9
util/Manual: use GCC_CHECK_VERSION
2014-11-28 19:00:26 +01:00
Max Kellermann
84c519df09
util/Alloc: remove bogus "unused" attribute
2014-11-27 18:21:50 +01:00
Max Kellermann
737a56a030
release v0.19.5
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABAgAGBQJUdiYnAAoJECNuiljG20USDB4P/3RGHBV5XgdInmYKjGg89hex
YRiy3BVvrBri53wkj+3YwOi05Cx0fp0pCuwQ9Nm7bmPCwfdC3ASF+UBlBBhnLdfc
dlISXDHciuKDJwiTtTlBvaKCENoZhjAJQ1SOa5zceH7j/V/XbY0FauHCeE8Ek7ht
KjimIt1ft0mdgsGNfyisdfbnh/3r4T9V9tBs/wnr7oDTYS/eUX8vCDr5qYIZipjx
W6pug2m4nfDtHYtN5gv53WYCIm7MiXo9vh7hCjJHd3T3xqKwdWVuz5RRcZcgd9yT
WWlzOKAI1cgmU7rZaV6Gu+tAq9g7MpNLOGoeN6mhH9E8V16rKqvCiLaXMK5wEGs9
JWGsTBcbTnSCdG1iivJtP2kOGVHXvNthbSunzwmbowMATi6xIBm8AoqidSzCaW1F
C7mss8VlhkHdCtHTvyK3XCE2wGEbx4OfsfsL3PWBonrs0DpNOR2AqWQYLsZUhbff
RV7aeyphMVvgLP67cT9YnGswKGEPOqP2EO9Mh51AQ7wiUESZ+O5J9YHWCc0E3SML
qs9A+lpA8fstj0QJewx/HNofiHXw5A2THjs/BVqs3vYkcHnTI94Nmdxps82r/rEA
oy9d6nQqglkPJZF3JwHqJMj1VtBIhihaHBpnLeyegjtiajZV6mVNVg9ezt9EpEA6
OjJFh2xzQJ7w5qL0gy2R
=1kbY
-----END PGP SIGNATURE-----
Merge tag 'v0.19.5'
2014-11-26 20:19:17 +01:00
Max Kellermann
27ce80544f
release v0.18.19
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABAgAGBQJUdiMjAAoJECNuiljG20USjnMP/jQl/aIEiUwbwqq1F8+0wlFh
lX5xix5+7QuvTH2Lw5brNSRdVRsHGGeDqVcSi1zY4tgNXK/EBmS1mDVKWQO5qJd9
v+ueDRr7xI3HFECe0J7h2Q5GGD/YkeSyjB2k7C7I7t1axukLOXbP+qVyz6/d1azZ
SkUKKmIUD4KdJuDWy34JYYiltGl94JNyTBvC+jJV4Mbg2qd7XV6MSvJipiK6aM05
UsEza9bF/jG2aHL/xtR+dEnNLAoFoZ/h1RqUoYw4DLEKxfip+E3MD4sEx6Sg8XSv
v2rZQrMhl2LvJkwCjo57KrJ4YmHK0U3zg3ElDefqRsW4J10x5d3hhOINJPpHUpyZ
T5RvoDCJ5BL+6wg0tA57338pNydSBQDV5+WjI9+vD8ahnZlFgjY+OoJDxkxtFlYz
pLazEQbkUWlU62ZGW/dVpwgYInalNH9ZTrvelwXtGmwMfLhp01S4DHX3ipFgmMGd
do3x/FoVRyOnFWQPotga3+ZoARqmXhfQ70DqESoajBHeLTzYBs9vh+fw6y1iVeGb
rIBEIyMPlyuPt+2NrLflo6o0VMYB8MV3nh3P3DX8Ywavae3+k4WPGx2w/MEM34lF
sWUDXfZeCwJ5rrXeyP/s2C9ZmJ+Bm6WlxQ0gUZXMtrfDShPBY8gHzGi4m3ooslde
OZCIokCaATDa9Fp6CRD8
=I9PV
-----END PGP SIGNATURE-----
Merge tag 'v0.18.19' into v0.19.x
2014-11-26 20:02:57 +01:00
Max Kellermann
12b6959ea2
Playlist: reset song priority on playback
...
A priority should be a volatile thing: it should schedule a song for
playing back once, but it should not affect the next time the queue
gets played.
2014-11-26 08:54:16 +01:00
Max Kellermann
7519768cb1
Queue: add "reorder" parameter to SetPriority()
2014-11-26 08:50:58 +01:00
Max Kellermann
9af470c92d
Playlist: add method SongStarted()
...
Empty currently, but code will be added song.
2014-11-26 08:49:19 +01:00
Max Kellermann
ac8c1d0a01
Playlist: move more functions into the class
2014-11-26 08:34:51 +01:00
Max Kellermann
921d01b59d
Playlist: add another assertion
2014-11-26 08:25:48 +01:00
Max Kellermann
8aa4a66ba0
Playlist: move playlist_song_started() into the class
2014-11-26 08:24:25 +01:00
Max Kellermann
2e7153d8d6
DatabasePrint: cast int to unsigned before comparison
...
Fixes compiler warning.
2014-11-26 08:21:55 +01:00
Max Kellermann
70b5a81a29
{Tag,Song}Print, PlayerCommands: report song duration with milliseconds precision
2014-11-25 17:46:43 +01:00
Max Kellermann
83fd822e8b
ApeTag: drop support for non-standard tag "album artist"
...
This was used by proprietary software. MPD adopted it a few years
ago, which turns out to be a mistake, because it now creates problems
for some MPD users (http://bugs.musicpd.org/view.php?id=4168 ).
2014-11-25 17:07:08 +01:00
Max Kellermann
e72eef421b
lib/nfs/FileReader: clean up on disconnect
...
Avoids crash because Close() invokes a call on a destructed
NfsConnection.
2014-11-25 14:02:15 +01:00
Max Kellermann
016063c810
lib/nfs/FileReader: move code to CancelOrClose()
2014-11-25 14:00:32 +01:00
Max Kellermann
38f19981b2
lib/nfs/FileReader: reset state in OnNfsConnectionFailed()
...
Avoid calling NfsConnection::RemoveLease(), because the lease has been
removed already.
2014-11-25 13:51:09 +01:00
Max Kellermann
40dd968f13
lib/nfs/FileReader: update "state" in OnNfsError()
...
Clean up the "state" to indicate that there is no longer any
asynchronous operation. Fixes another NFS-related crash due to
cleanup of a non-existing asynchronous operation.
2014-11-25 13:39:42 +01:00
Max Kellermann
3cef348f30
lib/nfs/Manager: defer NfsConnection destruction
...
Avoids a crash that occurs when NfsConnection::OnSocketReady()
dereferences itself before returning.
2014-11-25 13:31:18 +01:00
Max Kellermann
b293b16007
lib/nfs/Connection: broadcast error before closing connection
...
During the NfsLease::OnNfsConnectionFailed() call, the old (defunct)
nfs_context may be used to close file handles. Such code does not yet
exist, but will be added soon to fix other bugs.
2014-11-25 13:27:06 +01:00
Max Kellermann
f5f43db2da
lib/nfs/Connection: cancel DeferredMonitor on disconnect
...
Fixes potential second mount attempt after the old connection to the
NFS server was shut down.
2014-11-25 13:22:25 +01:00
Max Kellermann
029555d192
lib/nfs/FileReader: include Compiler.h for "final" fallback
2014-11-25 13:18:22 +01:00
Max Kellermann
fa4d202e71
decoder/mp4v2: remove because of incompatible license
...
libmp4v2 is licensed under MPL 1.1, which is incompatible with GPLv2.
Unfortunately, this means that we must remove the plugin.
More information can be found in the Debian bug report:
http://bugs.debian.org/767504
2014-11-25 13:10:52 +01:00
Max Kellermann
a8ebfd7a92
event/DeferredMonitor: include cleanup
2014-11-25 10:44:06 +01:00
Max Kellermann
a254f5a3a8
archive/zzip: fix inverted error handler
...
Set the Error when zzip_seek()==-1 and not on success. Fixes a crash
after seeking.
2014-11-24 22:08:50 +01:00
Max Kellermann
bf15cac980
Merge branch 'v0.19.x'
2014-11-24 09:00:14 +01:00
Max Kellermann
951bad46e0
decoder/{dsdiff,dsf,opus}: fix deadlock while seeking
2014-11-24 08:54:30 +01:00
Max Kellermann
0709065f50
Java/File: fix include guard
2014-11-24 07:51:25 +01:00
Max Kellermann
c643b6ff16
configure.ac: add macro MPD_ENABLE_AUTO_PKG_LIB
2014-11-22 23:50:21 +01:00
Max Kellermann
b3f5b4932c
configure.ac: add macro MPD_ENABLE_AUTO_PKG
...
Simplify the definition of many build options.
2014-11-21 22:19:57 +01:00
Max Kellermann
ed001e0cfb
configure.ac: add option "--disable-daemon"
2014-11-20 20:38:37 +01:00
Max Kellermann
26382713c2
release v0.19.4
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABAgAGBQJUa674AAoJECNuiljG20USNMUQAIpl0/cJI98dljXWZ4uzaRoc
JMPTvWkVUP9qBN3VnNISR+2NXsL7iGO6rXh9MACpfv8mcOf+/jg8LCX/3/RzDkP+
lnhFqQ+xnl3TUjwpABKM2lU87I8QXamtCbxEvONTpcH4Dt/GVfBolrlzBu1G17cF
7f07uZntpz/Dhtg0SWCVLS+QDGQtDNCgpXcfGlxWsGfEBWKAC+Aifv+2QDA0nXOU
WfOU2r3vV3UNmQSu0/O6cyB5Du01SVVYSa5BNpLu3o6CHawAhVcTXdLX12JSDahk
Qjy9VAF9bX+odZJ9M4xAlRBZYZWKfiZ6Dt0FevevqAllkd2GlQJPXWWXWXJ4PWd+
a3K/js1hLgCIO2qk8aDKaFGTOnVk5F5eFN6d+jh5gwcuFiGa0CcSWxaCEe7vBVy3
CTukuUBlgN4hA9gBNNvJrpbV+BO8ZY1LkS6w3E95Qz3VrwclTl5qKW2+6TYLMKBA
VIBQM8TwOHAKyhn50vhBfk6Zz6c28LkrMc0Ycm5xFD1I3fC6E62vqDVfBUMr9HJi
fG3PmxcrSTH8ZKgSADjF7DtR0M5munUrQhw7w0pwXUpKuDvUg3nIHulu88Dl9rZq
MDODNRpBkQwGXs9i4SxLTSA9nQtlAh3x3mqtjOf1i2jhkuSJ8R8jQne+8wDaT0Bt
dXD9h+qc/8+FOnrB0uYd
=LYOC
-----END PGP SIGNATURE-----
Merge tag 'v0.19.4'
2014-11-18 21:47:20 +01:00
Max Kellermann
dc03f003ac
release v0.18.18
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABAgAGBQJUa62OAAoJECNuiljG20US1CkP/3YaAg76hJDaeFAyi7/10lOs
yI8tPmpQk8S+nuclsBJeIr+9xNRsjb1ebW4tI9uBRxqMT10SF7rMCH/qAmgnS9tQ
6M48hF0o9xegjz4x5BosEJjXtiekYN068Xi/hk+H27guVy14f6Xx7oRpdr5oI/O0
F83D1V2+vs6FuOyn42UQQNHVlYMac5SScHoSFomnwRYWI2wb2ay4H5Dlykb5BUl0
tTjJ2lYwN18vUoMxjmCNS+bLd7jag6FZ/PXntB1zXe22R17eAIuFZAMKaQvnQtUi
QZjFPhpd+mBsZLfokB3belyNNb4F6qSG2W6lZrFRB+SU/LqnY2AL/dxPJD9eiufs
5jEIOw9hNBBKo217+hkPwp5pAF50u11tKXUXbKGeR42zAO0zll/+g2afVwoqdAfD
llPDyQyXiB3tmA1bgJD7u9gaud3UaaXoxajPb5LnmklzGxiN5u1rnoo+E5ppBvQ4
31wPHGpzsjxEC7Xn9hErPP17jYXY1HT/xRb8XZNrFqJVZxSyjqQlDWomhCWDcvPc
Du1PyKaQ08zgElEM5trwC9RjJxQdr0sckQcTnYC/0ksfJ7Nhh8M2yepEI/gmWbnO
JBQ7YzpQhE9oMMH8jzVLLdC44yF6QvXcGQ3D9eUfwvPk9Z70mHlNI3Q6kbZ76U5j
RHLp+oSaxFUXfPdciZaw
=GO+k
-----END PGP SIGNATURE-----
Merge tag 'v0.18.18' into v0.19.x
2014-11-18 21:38:44 +01:00
Max Kellermann
460cfba6ff
QueueCommands: workaround for buggy clients that send "add /"
2014-11-18 21:31:54 +01:00
Max Kellermann
c8b93d6573
Client: assume uid==0 is local socket
...
A negative uid value means it's not a "local socket" (PF_LOCAL).
uid==0 means user "root" connected.
2014-11-18 20:56:27 +01:00
Max Kellermann
3f5f96ac91
event/ServerSocket: fix get_remote_uid() error value
...
Must return -1 on error, not 0. 0 is root.
2014-11-18 20:53:59 +01:00
Max Kellermann
f37481f843
DatabaseCommands: add "window" parameter to "search"/"find"
2014-11-18 14:31:27 +01:00
Max Kellermann
7c6b991de7
decoder/opus: add MIME types audio/ogg and application/ogg
2014-11-12 15:16:34 +01:00
Florent Le Coz
7e7b403043
Construct a Null AllocatedPath if the filename conversion into UTF8 failed
2014-11-11 17:15:19 +01:00
Max Kellermann
c3f6502be2
release v0.19.3
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABAgAGBQJUYeOEAAoJECNuiljG20USToUP/2g/M7jKlM1MpADeFh2TOYEC
dnSDPFCMosu1Hjxyz/rzwqOh7FlMnYPtANtVn90v4D6XVkuhv5WMwSnlMBWJXspy
VWA6bewGihbWvDvOcLcYsb31VH78JnvNjxxDaeakVZ7Bq43wQBJRNi2VKEKMmg27
Shp8MUL+UXsMMtLABvZlhajPQS+CNQB1DijP7wlemrbPpmUtmeHEgbpmQk9BKBq0
eXJt5QRQRgI9J51j1yaXSaeKsPFk/2AV36KMBv3kh+rgCGWetd1XeBkknN/HjNw4
2qWsQ8Ng3s/kOCZhEa0nXqnR+w2RtpOJ4bOQaIDeBSzCdXSeDWq5yh/kHKHsXzO4
5uq++GwCcm/Odwj17rJ4wJDGnl4DkP8abQIPb4AiwfpuUtQ+fHvQuNU0Dc2SY4Oz
KkNU4nIcJwaHlDAQDsWjowAJJC2W0GPSGzVKCWjH2W3kmJZq2hV3o3y3YOMH8gpN
wmdmqE8JKCOJm5QxnfoiMKoUxUgNMxN3iceMnDkNqz/g1uOq5TUk8B5adLuY0OSg
n+2eDBaUNe2tCbxgIeKxVlXrWVBZyrzwFk3FGyVuGhobmVJ1Wwvx5kOIVvwo0JTC
LSc8FP4R8/87G1XlVMo0alqChLpXbH+ncaGhdN74pKVP8TFtJCoTPgRPj+svF9YY
A7AiNXCXCCOD78gKYCtu
=GH2D
-----END PGP SIGNATURE-----
Merge tag 'v0.19.3'
2014-11-11 11:43:52 +01:00
Max Kellermann
c98cb1d6f9
decoder/opus: support chained streams
2014-11-11 11:20:18 +01:00
Max Kellermann
ba6f2b0467
decoder/opus: move code to HandleEOS()
2014-11-11 11:20:16 +01:00
Max Kellermann
23465ad985
decoder/opus: improved error logging
2014-11-11 11:20:03 +01:00
Max Kellermann
7886a14b74
decoder/opus: fix mistyped LoadEOSPacket() return value
2014-11-11 11:18:51 +01:00
Max Kellermann
466b6a23cd
decoder/opus: eliminate flag "found_opus"
...
Check opus_decoder!=nullptr instead.
2014-11-11 08:30:11 +01:00
Max Kellermann
4a04f73434
decoder/opus: add constexpr output_buffer_frames
2014-11-11 07:45:31 +01:00
Misty De Meo
134cb6a017
Main: fix compilation on OS X using non-Apple compilers
...
Commit d42c0f1dc5
added an OS X-specific
method of calling mpd_main_after_fork(), which uses Grand Central
Dispatch. Since this uses a block literal, it breaks compilation on
compilers which don't support the block extension, e.g. non-Apple
compilers. This affects users on older OS X releases with GCD (which
depend on older Clang releases, or Apple GCCs, which don't support the
C++11 features MPD needs); or which don't support GCD at all (10.5 and
lower).
This patch changes the #ifdef so that the non-GCD code is used
as it was on OS X before this patch if blocks aren't available, via
checking __BLOCKS__ macro.
2014-11-11 06:22:24 +01:00
Max Kellermann
8d036c4b7c
pcm/SoxrResampler: round output buffer size up
...
The old formula calculates the output buffer size with "regular"
rounding (to the nearest integer), however sometimes, that is
insufficient and the last sample cannot be resampled. This causes
audible distortions. By changing the formula to consider the worst
case (always round up), this problem is eliminated.
2014-11-10 22:52:17 +01:00
Max Kellermann
c64ad78c7b
decoder/ffmpeg: support opus
2014-11-10 18:00:30 +01:00
Max Kellermann
8ff0d99092
decoder/audiofile: fix bit rate calculation
2014-11-10 09:00:50 +01:00
Max Kellermann
ff6f1655f0
input/curl: ignore ResponseBoundary() while seeking
...
While seeking, metadata must not be updated. ResponseBoundary() was
added in MPD 0.19.1, but I forgot to add the IsSeeking() check there.
This caused the "seekable" flag to reset.
2014-11-10 08:45:19 +01:00
Max Kellermann
0120f396ac
db/upnp/Directory: TitleToPathSegment() returns rvalue reference
...
Eliminate one implicit std::string copy.
2014-11-09 20:46:32 +01:00
Max Kellermann
231fffe594
db/upnp/Directory: apply coding style
2014-11-09 20:40:05 +01:00
Max Kellermann
b5ba94f1de
tag/Set: do AlbumArtist/Artist fallback only if AlbumArtist is not disabled
...
On "list albumartist", songs that have no AlbumArtist tag will use the
Artist tag. However, if AlbumArtist is disabled via
"metadata_to_use", the TagBuilder::AddItem() call is ignored, and
PrintUniqueTag() attempts to print a nullptr string.
This commit fixes the problem by attempting the fallback only if
AlbumArtist is not disabled.
2014-11-08 19:25:01 +01:00
Max Kellermann
cbf79769d3
db/Count: include cleanup
2014-11-08 19:21:42 +01:00
Max Kellermann
e67afc35b8
db/upnp/Directory: move checkobjok() to class UPnPDirObject
2014-11-08 10:55:59 +01:00
Max Kellermann
5e73007b1d
db/upnp/Object: apply coding style
2014-11-08 10:52:35 +01:00
Max Kellermann
2d9876a261
Merge branch 'v0.19.x'
2014-11-07 19:41:19 +01:00
Max Kellermann
125eb01e03
decoder/ffmpeg: support opus
2014-11-07 19:22:26 +01:00
Max Kellermann
ccb13205f4
db/upnp: fix valgrind warning
2014-11-07 19:12:43 +01:00
Max Kellermann
6f23e91e33
lib/upnp/ContentDirectoryService: swap uri_apply_base() parameters
...
When uri_apply_base() was moved from db/upnp/Util.cpp to
util/UriUtil.cpp, the parameter order was changed, however without
swapping the parameters in the ContentDirectoryService constructor.
2014-11-07 18:43:00 +01:00
Max Kellermann
1bd8a322f5
input/AsyncInputStream: set Error when seeking unseekable
...
Fixes crash in the "audiofile" decoder while logging the seek error.
2014-11-07 13:57:57 +01:00
Max Kellermann
362e73bea8
input/Open: expose input_domain
2014-11-07 13:57:57 +01:00
Max Kellermann
303d67aed2
release v0.19.2
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABAgAGBQJUVifPAAoJECNuiljG20USJbYP/2SjixBWtHjHn1wF9K3tRzs3
7GGSBxxBpJVZCTg/PGRJ9m2BNJvocBPhw3WN7PU29xi5kBxDy5yvBcc58OzYHz28
HVZymj8zhdiDqULHPn6b9px6f4Oe8+1xh9q6gwR8rZsRAXKYDrC0GPDMGBeSkWo1
ycnSVTcZ4CjfkM2/jfnCc79q4mC+k2BR5T9OYRnznThVMx+gimMwLFYBjNNdh1MT
ugAxXVtpDs2aTR8fqu/ADGLJosfTjzGdqQ3eowOqVXmsmVIttBGruZdKyrN9KAtU
FfPf60zZ3I8qKppArfEoJAejNyGbhIg1AqX7J7IxHMI+zjlo2kGnEcVFJaG5zZb/
GQThrzGXRPFLlvVDtzfALmBNo3gN0y4I73exlpRCupaxZdFaD5UUPlaLak8r9bt5
30YBBxs7ydIPqs25AwZ9f94NT2QrKityLv+O+Q8lz8AfurqJnuOwEo/HuT4Bxv47
pSx86TtokknyN0A3lw5ttIMbTqN5eNHjJY4PulGJPEPfKjn9p4NLtLrZjT4fnnKG
GKXYcMzeOhMKszbHzOR7dcjI0uKXyx4r7LE4SdL+3msCYbyXDTbCirdusZ1pZDC3
ttkSf+a/dILHZagEAN37t53/NlsAjxjJzenKD4H6Eprxm6er24kSWu+W410b3Bw0
jYLYGXCWVZyJ5dqpTcYb
=NiFd
-----END PGP SIGNATURE-----
Merge tag 'v0.19.2'
2014-11-02 14:06:05 +01:00
Max Kellermann
56f763a4a8
input/curl: forget Content-Length (and more) after redirect
...
Fixes playback of redirected streams.
2014-11-02 13:00:28 +01:00
Max Kellermann
a2eb14f3b3
AsyncInputStream: add method ClearTag()
2014-11-02 13:00:28 +01:00
Max Kellermann
05c63af7c4
InputStream: add method ClearMimeType()
2014-11-02 12:59:16 +01:00
Max Kellermann
1f59701c46
Merge branch 'v0.18.x' into v0.19.x
2014-11-02 12:27:46 +01:00
Max Kellermann
ec3191f502
input/curl: fix curl_easy_setopt() parameter types
2014-11-02 11:55:48 +01:00
Max Kellermann
32b5654a6e
Decoder, Playlist: ignore URI query string for plugin detection
...
Use the new uri_get_suffix() overload that removes the query string.
2014-11-02 11:54:26 +01:00
Max Kellermann
674091424e
util/UriUtil: add uri_get_suffix() overload that ignores query string
2014-11-02 11:53:31 +01:00
Max Kellermann
6ad336743d
PlaylistFile: don't allow empty playlist name
2014-11-02 11:52:48 +01:00
Max Kellermann
c882568ccd
playlist/m3u: recognize the file suffix ".m3u8"
2014-11-02 11:50:56 +01:00
Max Kellermann
f6b2899dd2
decoder/faad: remove workaround for ancient libfaad2 ABI bug
...
Many years ago, FAAD had a serious ABI bug: the NeAACDecInit()
prototype in its header declared the "samplerate" parameter to be
"unsigned long *", but internally, the function assumed it was
"uint32_t *" instead. On 32 bit machines, that was no difference, but
on 64 bit, this left one portion of the return value uninitialized;
and worse, on big-endian, the wrong word was filled. This bug had to
be worked around in MPD (commit 9c4e97a6
).
A few months later, the bug was fixed in the FAAD CVS in commit 1.117
on file libfaad/decoder.c; the commit message was:
"Use public headers internally to prevent duplicate declarations"
The commit message was too brief at best; the problem was not
duplicate declarations, but a prototype mismatch. No mention of the
bug fix in the ChangeLog.
The MPD project never learned about this bug fix, and so MPD would
always pass a "uin32_t *" dressed up as a "unsigned long *". Nearly 6
years later, it's about time to fix this second ABI problem. Let's
kill the workaround!
2014-11-02 11:50:56 +01:00
Steven OBrien
bccd4ef2f7
decoder/ffmpeg: recognize MIME type audio/aacp
2014-11-02 11:50:56 +01:00
Max Kellermann
c50a0cf7bf
output/roar: remove unnecessary "volatile" keyword
...
A mutex acts as a memory barrier, and thus "volatile" is not
necessary.
2014-11-02 11:50:56 +01:00
Max Kellermann
c37f7abb79
TagString: use g_strndup() for unterminated string
...
Fixes buffer overflow bug.
2014-11-02 11:48:13 +01:00
Max Kellermann
054323c2bc
lib/upnp/Discovery: add missing stdlib.h include
2014-11-02 11:04:13 +01:00
Max Kellermann
a8770aa606
input/curl: fix curl_easy_setopt() parameter types
2014-11-01 14:09:30 +01:00
Max Kellermann
7d5442e103
Decoder, Playlist: ignore URI query string for plugin detection
...
Use the new uri_get_suffix() overload that removes the query string.
2014-11-01 13:41:18 +01:00
Max Kellermann
eab32f2e5d
util/UriUtil: add uri_get_suffix() overload that ignores query string
2014-11-01 12:45:47 +01:00
NanoTech
d42c0f1dc5
Main: run the OS X native event loop after forking
2014-10-31 15:03:53 +01:00
NanoTech
6ad1e4d99a
Revert "Main: run the OS X native event loop"
...
This reverts commit f0be48ff90
(except for the NEWS entry).
If libdispatch (GCD) is used before forking, it
can't safely be used again after forking.
2014-10-31 15:03:46 +01:00
Max Kellermann
7350144ab3
PlaylistFile: don't allow empty playlist name
2014-10-31 14:59:27 +01:00
Max Kellermann
54c591bd9d
decoder/mad: fix negative replay gain values
...
Negating an unsigned integer does not work.
2014-10-28 22:22:30 +01:00
Max Kellermann
217d88f21f
TextInputStream: don't ignore unterminated last line
2014-10-28 22:10:47 +01:00
Max Kellermann
394e3be482
playlist/m3u: recognize the file suffix ".m3u8"
2014-10-26 08:14:16 +01:00
Max Kellermann
575fbad254
AllCommands: "commands" returns playlist commands only if playlist_directory configured
2014-10-25 23:50:47 +02:00
Max Kellermann
fa0aa91bf9
SongSticker, playlist/soundcloud: add missing stdlib.h include
...
For free().
2014-10-25 23:49:29 +02:00
Max Kellermann
d7f024c510
OutputThread: fall back to PCM if given DSD sample rate is not supported
...
Works around the "PCM conversion from f to dsd is not implemented"
error message that prevents DSD playback.
2014-10-25 22:06:08 +02:00
Max Kellermann
bc5a53574c
decoder/faad: remove workaround for ancient libfaad2 ABI bug
...
Many years ago, FAAD had a serious ABI bug: the NeAACDecInit()
prototype in its header declared the "samplerate" parameter to be
"unsigned long *", but internally, the function assumed it was
"uint32_t *" instead. On 32 bit machines, that was no difference, but
on 64 bit, this left one portion of the return value uninitialized;
and worse, on big-endian, the wrong word was filled. This bug had to
be worked around in MPD (commit 9c4e97a6
).
A few months later, the bug was fixed in the FAAD CVS in commit 1.117
on file libfaad/decoder.c; the commit message was:
"Use public headers internally to prevent duplicate declarations"
The commit message was too brief at best; the problem was not
duplicate declarations, but a prototype mismatch. No mention of the
bug fix in the ChangeLog.
The MPD project never learned about this bug fix, and so MPD would
always pass a "uin32_t *" dressed up as a "unsigned long *". Nearly 6
years later, it's about time to fix this second ABI problem. Let's
kill the workaround!
2014-10-25 20:42:50 +02:00
Max Kellermann
3e641e2147
SongSticker: don't use GLib
2014-10-25 01:25:33 +02:00
Max Kellermann
de7e4f0db7
decoder/wavpack: don't use GLib
2014-10-25 01:24:45 +02:00
Max Kellermann
a1cb1d78bd
playlist/SoundCloud: don't use GLib for string allocation
2014-10-25 01:24:27 +02:00
Max Kellermann
1178f2c1ab
Util/Alloc: add xstrcatdup(), replacing g_strconcat()
2014-10-25 01:24:10 +02:00
Steven Newbury
76f277eeb4
Set pulseaudio channel map to WAVE-EX
...
Pulseaudio expects clients to specify their channel-map if the
default (ALSA) map does not route the audio to the expected speakers.
Many Google results suggest dealing with this by re-routing the audio
channels with the appropriate ALSA plugin, but this will then simply
break any clients which expect the default ALSA mapping.
Virtually all media files and codecs, certainly flac, dca, a52, and of
course anything based on Microsoft's WAVEFORMAT_EXTENSIBLE specification,
assume the layout in the table here:
http://en.wikipedia.org/wiki/Surround_sound#Standard_speaker_channels
Fortunately, pulseaudio directly addresses this with a built-in channel
map for WAVE-EX which can be set automatically in the stream sample-spec.
2014-10-25 01:08:09 +02:00
Steven OBrien
8cd17ce045
decoder/ffmpeg: recognize MIME type audio/aacp
2014-10-25 00:26:58 +02:00
Max Kellermann
c48733e34f
fs/Charset: work around clang's -Wunused-const-variable
...
MPD_PATH_MAX_UTF8 is only used by GLib-specific code currently.
2014-10-25 00:07:25 +02:00
Max Kellermann
a7b09d3d1c
OutputThread: close the output plugin after filter failure
...
Fixes memory leak because ao_plugin_close() never gets called.
2014-10-24 00:35:16 +02:00
Max Kellermann
8fc3768166
OutputThread: unlock mutex for CloseFilter()
...
Be consistent.
2014-10-24 00:29:03 +02:00
Max Kellermann
b07bddf742
output/roar: remove unnecessary "volatile" keyword
...
A mutex acts as a memory barrier, and thus "volatile" is not
necessary.
2014-10-23 23:29:56 +02:00
Max Kellermann
220f957cd8
pcm/ChannelsConverter: fix variable used to generate error message
...
Use the "_format" parameter instead of the (uninitialized) "format"
attribute.
2014-10-23 22:44:53 +02:00
Max Kellermann
8ce48d83eb
pcm/FormatConverter: move check to Open()
...
Report unsupported format while opening the filter, not later when the
first conversion takes place.
2014-10-23 22:42:08 +02:00
Max Kellermann
200cdb6b0a
pcm/PcmConvert: assign {src,dest}_format at the end
...
Fixes assertion failure in destructor by not assigning
{src,dest}_format when an error occurs.
2014-10-23 22:39:51 +02:00
Max Kellermann
d9fb40203a
pcm/PcmConvert: make AudioFormat parameters "const"
2014-10-23 22:39:51 +02:00
Max Kellermann
493cd866f1
TextInputStream: manually shift the buffer before reading
...
Fixes truncated lines in m3u and cue files (regression by commit
67958f7
).
2014-10-19 00:50:52 +02:00
Max Kellermann
063d369672
util/StaticFifoBuffer: make Shift() public
2014-10-19 00:49:08 +02:00
Max Kellermann
a0fae8dacc
playlist/extm3u: strip first line for #EXTM3U detection
2014-10-17 20:45:18 +02:00
Max Kellermann
85301853d6
ThreadInputStream: call ThreadRead() inside the thread instead of Read()
...
Fixes deadlock bug in the "mms" plugin.
2014-10-11 21:59:06 +02:00
Max Kellermann
7cd53fb452
ThreadInputStream: add assertions
2014-10-11 21:57:31 +02:00
Max Kellermann
8ed4124184
util/DynamicFifoBuffer: make the "Range" type public
...
Export it from the protected base class. This fixes a build failure
on Mac OS X.
2014-10-11 20:28:08 +02:00
Max Kellermann
464767c5fd
db/upnp/Util: move caturl() to util/UriUtil.cxx
2014-10-10 22:43:40 +02:00
Max Kellermann
a9c3ca8606
event/IdleMonitor: remove redundant comment
2014-10-10 22:39:11 +02:00
Max Kellermann
86dd677e0c
ZeroconfBonjour: use htons() instead of g_htons()
2014-10-10 22:30:38 +02:00
Max Kellermann
666f700a93
TagString: implement fix_utf8() without GLib
2014-10-10 22:11:38 +02:00
Max Kellermann
b70bf938c2
util/UTF8: add SequenceLengthUTF8()
2014-10-10 22:11:38 +02:00
Max Kellermann
d5cf41e043
util/UTF8: new library
2014-10-10 22:11:38 +02:00
Max Kellermann
b7a1954c33
TagString: return WritableBuffer<char>
2014-10-10 22:07:19 +02:00
Max Kellermann
6520589a37
TagString: use strndup() for unterminated string
...
Fixes buffer overflow bug.
2014-10-10 22:06:48 +02:00
Max Kellermann
f445b0178a
TagString: remove ISO-Latin-1 fallback
...
MPD handles all strings in UTF-8 internally. Those decoders which
read Latin-1 tags are supposed to implement the conversion, instead of
passing Latin-1 to TagBuilder::AddItem(). FixTagString() is simply
the wrong place to do that, and hard-coding Latin-1 is kind of
arbitrary.
2014-10-10 20:53:08 +02:00
Max Kellermann
f618065f7c
fs/Traits: use value_type
2014-10-10 19:51:44 +02:00
nanotech
f0be48ff90
Main: run the OS X native event loop
2014-10-10 19:51:44 +02:00
Max Kellermann
bb922d577d
storage/nfs: use the libnfs async API
...
Share the NFS connection with the NFS input plugin.
2014-10-09 08:09:08 +02:00
Max Kellermann
990809cc21
lib/nfs/Connection: reduce Error instance allocations
2014-10-09 08:08:17 +02:00
Max Kellermann
bfcc466647
lib/nfs/Glue: add assertion
2014-10-09 07:59:53 +02:00
Max Kellermann
3d2558bde6
StoragePlugin: pass EventLoop to constructor
2014-10-09 07:45:25 +02:00
Max Kellermann
e5ff85b63c
storage/nfs: move code to class MemoryStorageDirectoryReader
...
Read all directory entries into memory and close the struct nfsdir
before returning the StorageDirectoryReader instance. This is what
libnfs does, anyway.
2014-10-07 06:36:11 +02:00
Max Kellermann
f0bb5b84f9
storage/nfs: move code to Copy()
2014-10-07 06:35:53 +02:00
Max Kellermann
07b50f6c69
lib/nfs/Connection: add methods {Open,Read,Close}Directory()
2014-10-07 06:35:50 +02:00
Max Kellermann
61b3aaaa07
lib/nfs/Connection: add method Stat(path)
2014-10-07 06:35:46 +02:00
Max Kellermann
60512ffa09
lib/nfs/Connection: make GetEventLoop() public
2014-10-06 08:47:13 +02:00
Max Kellermann
b1a252a64d
lib/nfs/Base: kludge to reduce number of NFS mounts
...
Creating a NfsStorage sets its own export_name as the "base". Now
NfsFileReader can use this information to derive the export_name to be
mounted, instead of guessing. This solves the "too many connection"
problem on the NFS server while updating the database.
2014-10-05 07:41:50 +02:00
Max Kellermann
6e7a398263
PlaylistStream: use OpenLocalInputStream()
2014-10-02 22:03:02 +02:00
Max Kellermann
44d2d9b1e8
PlaylistStream: pass Path instance to playlist_open_path()
...
Convert filesystem charset to UTF-8 for playlist_list_open_uri().
This fixes one of many remaining charset bugs.
2014-10-02 22:02:11 +02:00
Max Kellermann
8302ed44aa
archive/bzip2: use OpenLocalInputStream()
2014-10-02 22:00:42 +02:00
Max Kellermann
7e12aea1d8
input/Open: use OpenLocalInputStream()
...
Make the "open" method of plugins "file" and "archive" dummy methods
that always fail. Instead, let InputStream::Open() hard-code access
to these two plugins by using OpenLocalInputStream(). This allows
simplifyin the algorithm for falling back to probing archive plugins.
2014-10-02 21:50:14 +02:00
Max Kellermann
20346b0da4
DecoderThread: use OpenLocalInputStream() for local files
2014-10-02 21:48:52 +02:00
Max Kellermann
e0e65cbdf9
TagFile: use OpenLocalInputStream()
2014-10-02 21:43:40 +02:00
Max Kellermann
9d2d58c4b6
input/LocalOpen: new library for opening local files
...
Combines the "file" and the "archive" input plugins.
2014-10-02 21:06:01 +02:00
Max Kellermann
0c461c3859
input/archive: export function OpenArchiveInputStream()
2014-10-02 21:00:38 +02:00
Max Kellermann
0d38bd9b3b
input/file: export function OpenFileInputStream()
2014-10-02 20:44:03 +02:00
Max Kellermann
2f02e49b9f
input/file: generate Error when errno==ENOENT
...
This special case was useless. Fixes the dreaded "Unrecognized URI"
error message when a file does not exist.
2014-10-02 20:16:05 +02:00
Max Kellermann
064e8a7c68
input/file: make the "fd" attribute "const"
2014-10-02 19:55:01 +02:00
Max Kellermann
e4dd269609
input/file: make variables more local
2014-10-02 19:18:58 +02:00
Max Kellermann
19dd59f38c
storage: remove redundant "virtual" keywords
...
"override" implies "virtual".
2014-10-02 19:17:46 +02:00
Max Kellermann
37501d9bc7
input/file: convert to class
2014-10-02 19:14:59 +02:00
Max Kellermann
89f9561d10
storage/Interface: include cleanup
2014-10-01 23:38:17 +02:00
Max Kellermann
0661fd6f7c
lib/nfs/FileReader: postpone the nfs_close_async() call
...
If an async opertion is in progress, nfs_close_async() will make
libnfs crash because the RPC callback will dereference an object that
was freed by nfs_close_async().
2014-10-01 23:10:32 +02:00
Max Kellermann
edd003b62a
lib/nfs/Connection: fix memory leak when cancelling Open()
...
Close the newly allocated file handle passed to the callback.
2014-10-01 23:03:31 +02:00
Max Kellermann
10cc87e422
lib/nfs/Connection: remove Mutex
...
All locks are currenly held from only a single thread (the IOThread)
and thus we don't need the Mutex.
2014-10-01 22:15:06 +02:00
Max Kellermann
0470f648c6
lib/nfs/Connection: add method GetEventLoop()
2014-10-01 22:10:46 +02:00
Max Kellermann
777360149d
lib/nfs/Connection: remove obsolete flag postponed_destroy
2014-10-01 22:10:05 +02:00
Max Kellermann
aa7774b82b
lib/nfs/Connection: remove deprecated move constructor workaround
...
Not used anymore because NfsManager now uses boost::intrusive::set
instead of std::map.
2014-10-01 22:09:37 +02:00
Max Kellermann
d44da875e7
storage/nfs: make a few attributes "const"
2014-10-01 21:14:26 +02:00
Max Kellermann
f9ad73598b
lib/nfs/Manager: use boost::intrusive::map
...
Reduce overhead for storing the key twice, and more overhead while
looking up the connection to remove it after a failure.
2014-10-01 20:49:40 +02:00
Max Kellermann
952fe98796
lib/nfs/Glue: add assertion
2014-10-01 20:44:54 +02:00
Max Kellermann
579912e52f
lib/nfs/Glue: destruct the NfsManager in the I/O thread
...
This allows eliminating the indirection code from the NfsConnection
destructor.
2014-10-01 20:39:50 +02:00
Max Kellermann
1b5ec3e3ca
lib/nfs/Glue: eliminate class NfsGlue
...
It's just a useless wrapper for class NfsManager.
2014-10-01 20:37:25 +02:00
Max Kellermann
fb4e6ac923
lib/nfs/Cancellable: use boost::intrusive::list
...
Reduce Remove() overhead because we don't have to walk the list to
find an iterator by reference.
2014-10-01 19:49:38 +02:00
Max Kellermann
3560dc4be6
Tag: support "AlbumSort"
...
The new tag is supported by all decoders that use the tag name table,
and the ID3v2 tag "TSOA" maps to it.
2014-09-29 18:55:59 +02:00
Max Kellermann
b002ea9a20
storage/nfs: convert file name to UTF-8
...
Assume the configured filesystem character set is also used by the NFS
server.
2014-09-28 18:26:54 +02:00
Max Kellermann
540317ea2b
storage/nfs: use string::append() instead of string::insert()
...
Swap the order of adding the URI and the slash, because appending is
cheaper than inserting.
2014-09-28 18:25:51 +02:00
Max Kellermann
142d1951d2
storage/nfs: move code to UriToNfsPath()
2014-09-28 18:12:20 +02:00
Max Kellermann
cf06ba6d13
fs/AllocatedPath: add method Steal()
2014-09-28 18:12:20 +02:00
Max Kellermann
a8d800572e
fs/AllocatedPath: API documentation grammar fixes
2014-09-28 18:06:18 +02:00
Wieland Hoffmann
5525ea45a4
Add MusicBrainz' Release Track Id tag
...
The Release Track Id uniquely identifies a recording on a release - that
is, even if a recording appears twice on a release (meaning that the
combination of recording and release id are not enough to figure out
which one it is), the release track id will allow differentiating the two.
The tag names are taken from
https://musicbrainz.org/doc/MusicBrainz_Picard/Tags/Mapping
2014-09-27 19:54:12 +02:00
Max Kellermann
3120958a17
pcm: --disable-dsd also disables the dsd2pcm library
2014-09-26 12:17:47 +02:00
Max Kellermann
052726ed50
PcmConvert: eliminate unused local variable "format"
2014-09-26 12:17:37 +02:00
Max Kellermann
8397196fbb
output/alsa: change a few "dsd" to "dop"
2014-09-26 11:07:53 +02:00