Max Kellermann
7d579e7400
lib/alsa/NonBlock: throw exception on error
...
Avoid another potential deadlock: if no file descriptors are
registered, our non-blocking ALSA code cannot ever work.
2017-11-14 21:08:07 +01:00
Max Kellermann
e0f777d4eb
output/alsa: move code to LockCaughtError()
2017-11-14 21:07:59 +01:00
Max Kellermann
febd1ad09c
output/alsa: fix deadlock bug
...
After UnlockActivate() returns, we not only need to check for errors,
but also for more room in the ring buffer. If we don't check the ring
buffer, it may be drained already, and the cond.wait() call will never
finish.
Closes #151
2017-11-14 21:02:53 +01:00
Max Kellermann
e2c81aa9ea
Merge branch 'v0.20.x'
2017-11-14 12:31:13 +01:00
Max Kellermann
014f8cd693
output/httpd: flush encoder after tag
...
Without the flush, ReadPage() may not return any data, or not all
data. This may result in incomplete ddata the new "header" page,
corrupting streams with some encoders such as Vorbis.
Fixes #145
2017-11-14 12:00:14 +01:00
Max Kellermann
c582a9faae
event/MultiSocketMonitor: add "noexcept"
2017-11-12 17:42:50 +01:00
Max Kellermann
390e830994
{mixer,output}/alsa: migrate from DeferredMonitor to DeferEvent
2017-11-12 17:27:58 +01:00
Max Kellermann
44c60567dd
output/alsa: add "allowed_formats" setting
...
Allows defining a list of supported audio formats, and allows
switching on and off DoP with certain formats.
This is a first rough draft. The setting syntax and its semantics may
still be redesigned.
2017-11-10 23:05:50 +01:00
Max Kellermann
20199e770c
output/shout: use the shout_metadata_t only once
...
There is no documentation on whether calling shout_metadata_add()
multiple times on one instance is allowed. To be sure, let's allocate
the object on demand each time in SendTag().
2017-11-10 22:30:53 +01:00
Max Kellermann
4c824e5309
output/shout: simplify shout_tag_to_metadata()
2017-11-10 22:26:25 +01:00
Max Kellermann
981bc85879
output/shout: relax quality and bitrate checks, forward as-is
2017-11-10 22:19:00 +01:00
Max Kellermann
015527d870
output/shout: make "quality" and "bitrate" local variables
2017-11-10 22:17:51 +01:00
Max Kellermann
6464b4b372
encoder/Configured: glue code to initialize PreparedEncoder
2017-11-10 21:54:57 +01:00
Max Kellermann
fef9747fbf
output/shout: use MIME type instead of the encoder plugin name
...
This is more robust, for example it allows using the Shine encoder
plugin instead of LAME.
2017-11-10 21:52:54 +01:00
Max Kellermann
13816c1c7d
output/{recorder,httpd,shout}: use std::unique_ptr to manage PreparedEncoder pointer
2017-11-10 21:35:22 +01:00
Max Kellermann
c54a920d13
output/httpd: make enum strictly-typed
2017-11-10 21:25:03 +01:00
Max Kellermann
83f8eeec44
output/httpd: migrate from DeferredMonitor to DeferEvent
2017-11-10 21:18:00 +01:00
Max Kellermann
b83fbad6a1
output/httpd: use C++11 initializers
2017-11-10 21:15:57 +01:00
Max Kellermann
0ff4350352
event/ServerSocket: pass UniqueSocketDescriptor by value
...
Passing it by value is actually smaller (32 bit) than the rvalue
reference (64 bit pointer), and it ensures that the object is consumed
after the call returns, no matter how the methods are implemented.
2017-11-10 20:43:14 +01:00
Max Kellermann
5fd2b7cc79
event/SocketMonitor: eliminate Read(), Write()
...
Migrate callers to GetSocket().Read(), GetSocket.Write(), which is the
same.
2017-11-10 20:37:52 +01:00
Max Kellermann
59a8836924
event/SocketMonitor: add "noexcept"
2017-11-10 20:20:07 +01:00
Max Kellermann
e2a74051dc
lib/alsa/HwSetup: return effective parameters
2017-10-26 12:13:00 +02:00
Max Kellermann
b7e035b6f3
output/alsa: move AlsaSetupHw() to lib/alsa/HwSetup.cxx
2017-10-26 11:15:01 +02:00
Max Kellermann
890f1f5928
lib/alsa/Format: move HAVE_ALSA_DSD* definitions from the Alsa output plugin
2017-10-26 09:39:18 +02:00
Max Kellermann
b30c37eb79
output/alsa: move functions to lib/alsa/Format.hxx
2017-10-26 09:30:45 +02:00
Max Kellermann
b08cb148ae
output/alsa: move class PeriodBuffer to lib/alsa/PeriodBuffer.hxx
2017-10-26 09:27:36 +02:00
Max Kellermann
6657801fb1
output/alsa: pass SampleFormat& to AlsaSetupFormat()
2017-10-26 08:46:28 +02:00
Max Kellermann
a199366157
output/alsa: remove period_time adjust loop
...
This loop was introduced in commit
24c1f46353
, but -EPIPE is not a possible
error condition for snd_pcm_hw_params(). This code does not appear to
make sense. Problems with a wrong period_time should be caught before
that by snd_pcm_hw_params_set_period_time_near().
This commit removes the last "goto" in MPD! Yay!
2017-10-26 08:40:59 +02:00
Max Kellermann
ddabe1a6df
output/alsa: add "noexcept"
2017-10-26 08:18:05 +02:00
Max Kellermann
e7b47ce335
output/alsa: in_frame_size is a debug-only variable
2017-10-26 08:17:21 +02:00
Max Kellermann
5ce93d6fa8
output/sndio: refuse to build with libroarsndio
...
RoarAudio's sndio emulation has been a source for annoyances. First,
their headers turned out to be broken with C++, due to their use of
the "new" keyword. Then they used a preprocessor macro to rename
"sio_hdl" to something else, effectively disallowing the use of
forward declarations. Enough is enough, and I'm removing support for
it.
RoarAudio users should better use the RoarAudio output plugin.
2017-09-19 19:38:43 +02:00
Max Kellermann
735eabb066
output/sndio: move #include below guard
2017-09-19 18:59:04 +02:00
Max Kellermann
412ff762bb
output/sndio: use forward declarations
2017-09-19 18:58:13 +02:00
Max Kellermann
44bbf42a9f
Merge branch 'v0.20.x'
2017-09-19 18:58:02 +02:00
Max Kellermann
75c740fe2b
output/sndio: fix indent
2017-09-19 18:50:35 +02:00
Max Kellermann
6c8d86bb90
output/sndio: rename the "sio_hdl" variable to avoid clash with struct name
2017-09-19 18:49:33 +02:00
Christopher Zimmermann
030f87c90c
Add sndio mixer plugin
2017-09-16 11:58:33 +02:00
Christopher Zimmermann
ae941a7665
SndioOutput: Move class definition to header
...
no change in behaviour.
2017-09-16 09:14:56 +02:00
Max Kellermann
d0f6131ba4
output/Interface: allow Pause() to throw exception
...
Coverity discovered that the Pulse plugin could throw exceptions from
Pause(), but that method was marked "noexcept" because its caller was
not designed to catch exceptions. So instead of avoiding exceptions
(by catching and logging them in each and every implementation), let's
allow them, and do the catch/log game in the MPD core.
2017-09-08 14:45:53 +02:00
Matthew Leon
aa9c6062b0
Merge branch 'v0.20.x' into master
...
contains OSX mixer
2017-08-22 10:36:37 +01:00
Matthew Leon
5fb39658f1
OSX mixer
2017-08-21 20:05:50 +01:00
Max Kellermann
9d0a71f245
output/Jack: add "noexcept"
2017-08-11 12:41:11 +02:00
Max Kellermann
ff1b435232
output/Jack: reorder methods
2017-08-11 12:39:42 +02:00
Max Kellermann
33b4114534
system/fd_util: remove unused library
2017-08-11 09:20:15 +02:00
Max Kellermann
3c7c0515d8
output/oss: use class FileDescriptor
2017-08-10 19:42:23 +02:00
Max Kellermann
df5cc3f0f6
fs/FileSystem: OpenFile() returns UniqueFileDescriptor
2017-08-10 19:34:52 +02:00
Max Kellermann
9a5bcc6db0
net/ServerSocket: pass UniqueSocketDescriptor&& to OnAccept()
2017-08-10 19:20:14 +02:00
Max Kellermann
492b20a89d
event/SocketMonitor: use class SocketDescriptor
2017-08-10 19:19:58 +02:00
Max Kellermann
fcfc8bacc0
output/httpd: remove obsolete accept() error check
2017-08-10 19:19:53 +02:00
Max Kellermann
54de8b8e77
net/*, ...: use AF_LOCAL instead of AF_UNIX
2017-08-10 13:12:13 +02:00
Max Kellermann
31bad5f7af
output/Interface: convert to abstract class
...
Yet another C-style vtable replaced with C++.
2017-08-10 09:01:41 +02:00
Max Kellermann
1cf7f3d87c
output/Solaris: use class FileDescriptor
2017-08-10 08:56:56 +02:00
Max Kellermann
bea5681fd8
output/Interface: define a new struct AudioOutput
...
Hide struct FilteredAudioOutput from the plugins, preparing for hiding
MPD's core internals.
2017-08-08 18:58:40 +02:00
Max Kellermann
e11229494e
output/Filtered: add method NeedFullyDefinedAudioFormat()
...
Avoid accessing FilteredAudioFormat attributes directly.
2017-08-08 18:57:59 +02:00
Max Kellermann
ccc0fcb5b7
output/Shout: move ConfigureShoutAudioInfo() call to Open()
...
Configure the AudioFormat after opening the encoder, because only now
we know the final format.
2017-08-08 18:56:14 +02:00
Max Kellermann
6e24381962
output/Shout: move code to ShoutSetAudioInfo()
2017-08-08 18:56:12 +02:00
Max Kellermann
3ab905644d
output/Shout: open the encoder first, then open connection
...
This order will be necessary for proper AudioFormat initialization,
because the encoder may change the format.
2017-08-08 18:53:04 +02:00
Max Kellermann
f46d545307
output/Shout: pass shout_t* to shout_connect()
2017-08-08 18:52:03 +02:00
Max Kellermann
8134b0073b
output/Shout: move write_page() into the struct
2017-08-08 18:47:37 +02:00
Max Kellermann
6ab19c7ef2
output/Shout: pass shout_t* to handle_shout_error()
2017-08-08 18:47:30 +02:00
Max Kellermann
d22361f7c7
output/Shout: remove unnecessary nullptr check
2017-08-08 18:47:02 +02:00
Max Kellermann
47c9d6ac64
output/Internal: rename source to Filtered.cxx
2017-08-07 21:50:13 +02:00
Max Kellermann
d0157af13e
filter/Internal: rename struct AudioOutput to FilteredAudioOutput
...
Prepare to add an abstract class AudioOutput, to be implemented by
plugins, to get rid of the C-style vtable.
2017-08-07 18:47:39 +02:00
Max Kellermann
27d68d8fdd
output/Internal: move the Mutex to struct AudioOutputControl
...
struct AudioOutput should not know or care about multi-threading.
2017-08-07 17:44:46 +02:00
Max Kellermann
dad7d7e798
util/TruncateString: rename CopyString() to CopyTruncateString()
2017-07-05 17:15:58 +02:00
Max Kellermann
4b94ae8040
util/StringUtil: move CopyString() to TruncateString.cxx
2017-07-05 17:11:34 +02:00
Max Kellermann
979f1b6c39
release v0.20.9
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlkz5jkQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEubuD/kBXMcV4XawqGNNtSHdrY8CxSL8wJMCMJQl
aMgRkKLPRml8Hj9FNNG9pjXBuT+qUgPX7t9gBEiT7c+sV3fHH40gUf1js5GIsEPm
BAVfvww5EhmQWWVhPTLk1iZ4jp6E96mDmIG1znwo7etSZHXU8RJfR7woBi3SPJ9f
OPcrimskNuWpAWeaEIKi/1Iwzy8d9VK9Ttb73gA3M5zSm7ioXzt3YClpwLRM8JU6
QeUJchy6VwXnygswjUNmbhPc3GsD2FyUZ4OtJ0hodnqqajfldBxhcHUnQk4zZULr
1nLSyOuA9bwLuFohH1T6HiY9z8PFzgqdIHvsjOJgZ4gQa69PVNjal2tUEUav9zFv
aK4LvTVPnIk+hqRbtLpV7/rPKuClrC9BO4oYdBGBDNY4hqVpvRA9obP1s00aOi+K
UhYqLqg7yeIEeTlUxFOhXJCKAEL69BuXT5ihJtDlB/dCUzv37sEch/4WDgs7uc+O
9kJYlElvozw57mbczsee/PCSnSWrLCq/qG/bNEUUQOTueWNuifh3PL62UXGgfbEH
01hJDyLr6ETSmWn7rjTfLJiHThX/EQQvOhs+35fbCyry65z4tFwrilGDmFVUWGPq
/6QEpY1D6q4fkoma/iWOZoTkfKewatAPGMGWoJaGhCnfQFz4VTFtS2bDtuUctQ16
jnXnPFxqBw==
=0SSp
-----END PGP SIGNATURE-----
Merge tag 'v0.20.9'
release v0.20.9
2017-06-04 12:57:05 +02:00
Max Kellermann
a057b4f6d8
*: add lost of "noexcept" specifications
2017-06-04 12:46:48 +02:00
Max Kellermann
dd29e6e475
output/pulse: add "pause" flag
...
Don't access AudioOutput::pause.
2017-05-23 11:17:04 +02:00
Max Kellermann
ae4b30a697
output/httpd: add "pause" flag
...
Don't access AudioOutput::pause.
2017-05-23 11:13:41 +02:00
Max Kellermann
353299168a
output/Thread: skip WaitForDelay() after resuming playback
...
This allows removing the "base.pause" check from the JACK output
plugin, and will allow removing similar accesses from other plugins.
2017-05-23 11:00:28 +02:00
Max Kellermann
59e4f1ee0f
*: remove lots of GCC 4.8 fallback code
...
We can remove those C++11 and C++14 kludges because we require GCC 4.9
now.
2017-05-16 11:29:15 +02:00
Max Kellermann
0a3a5a7c65
Merge branch 'v0.20.x'
2017-05-16 10:09:20 +02:00
Max Kellermann
b3c82f8886
output/{osx,haiku,pulse,sles}: add missing "noexcept"
...
Fixes build failure on OS X, closes #44 . With the other plugins,
that's not critical, because those use the AudioOutputWrapper, which
hides this problem.
2017-05-16 07:12:30 +02:00
Max Kellermann
c5996c0593
*: add "noexcept" to many, many function prototypes
...
See commit 71f0ed8b74
2017-05-15 23:05:45 +02:00
Max Kellermann
4faef28cc5
release v0.20.7
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlkaFL0QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEr4ID/9iAQC+7fFv06uLOm48Ufu+PgoD8uJkAwF5
QuLQkc85g9urn+bu9N7Qs7Vypp7aLyGcJKY0jyA8wxkOj24pUC3GYk80daUt561V
5s20FnoS/Uoman3CSJL94IfCUBxejizE6vgIIHTc5bb6U0qIsPub/8JTTE2Ih7uP
nvFZ5uBQ+YTc7at+iIH9123eUMKkitkh8osNblovqQT9v42++Tm4ztAytRHBjwUA
Itew5HhlvahbLKqFs/7vmICh/YX1FcOV7cV+erEWYfkH0KCI2bhSle4u2d0CBOvD
VJlDnBCo9bM7WKcPYqJiFFFXA0CRk06wbkkkAtwF4zjp8xos7aQcq4FyQnYL8KXo
5lijIhRwBURBd+nt8oA9kuEhBt/T75otcemJkzVaYappHTJCLjhxSGcPt8mw+nE9
9WQzsp/MIVzg9l5g3D9S/43xM7uhvn98Tn1Qf2s8YRd2o8CZeOhW+X3RvbCvVPv2
mOlx4sFAv8DOJ3KxMdqiJT+PmylPyJluQdqH+tMc8BdPg/kpSpYIPTuSjjRqK1yh
ld5do0HtAAwiHtvXfk5YVFjJSpO0c8yVn6xci2Cl4k/5ZHj2UE1ln+N5vCea2BRF
2J3HAjROwtcwY3lU1jFnEAogf24KWiFJqhhC0EqBGUdlrM8Dn37P5cEWWjROIMNK
lPEdovokNw==
=CdDy
-----END PGP SIGNATURE-----
Merge tag 'v0.20.7'
release v0.20.7
2017-05-15 23:01:49 +02:00
Max Kellermann
788e3b31e1
*: remove "pure" and "const" attributes from throwing functions
...
The "pure" and "const" attributes are not so well-defined, and a
recent clang version implements an optimization which pushes the
definition's boundary beyond what I believed it was. clang now
assumes that functions declared "pure" cannot throw exceptions, even
if they lack the "noexcept" specification.
When compiled with this new clang version, MPD will crash randomly if
an exception happens to get thrown by such as "pure" function
(https://github.com/MusicPlayerDaemon/MPD/issues/41 ).
This commit removes all such misplaced "pure" and "const" attributes,
closing #41 .
2017-05-08 17:25:06 +02:00
Max Kellermann
71f0ed8b74
*: add "noexcept" to many, many function prototypes
...
This eliminates some overhead, because the compiler doesn't need to
consider these functions throwing.
2017-05-08 14:44:49 +02:00
Max Kellermann
89b900432e
output/Internal: move thread-specific stuff to AudioOutputControl
...
The AudioOutput struct (which is exposed to all plugins) should not be
aware that it's being controlled by another thread.
2017-04-28 22:04:30 +02:00
Max Kellermann
f6e428ac22
Merge branch 'v0.20.x'
2017-04-24 11:44:27 +02:00
Bart Nagel
ccb4f44caf
Add support for the OriginalDate tag
...
See https://picard.musicbrainz.org/docs/mappings/
This tag is useful when the user would like all releases of the same
album to be sorted next to each other.
2017-04-21 09:43:26 -07:00
Bart Nagel
0a7d612f41
Remove some redundant code
2017-04-18 16:10:38 +02:00
Max Kellermann
f85d4d28d1
output/alsa: work around dmix non-blocking snd_pcm_drain() bug
...
See code comment. Bug was reported against MPD, but it's really an
alsa-lib bug.
https://bugs.musicpd.org/view.php?id=4662
2017-03-29 20:36:04 +02:00
Max Kellermann
dae8b78569
output/httpd: copy the Page reference; fixes use-after-free
2017-03-29 20:17:09 +02:00
François Revol
46aa4d2f91
haiku: fix build
...
Some missing bits when converted to C++ exceptions...
2017-02-20 11:25:00 +01:00
Max Kellermann
512e81c629
output/httpd: use emplace() instead of push()
2017-02-19 20:48:17 +01:00
Max Kellermann
452666f742
output/httpd: wake up the I/O thread only if pages have been read from encoder
2017-02-19 20:46:20 +01:00
Max Kellermann
72008d951b
output/httpd: no mutex lock while reading data from encoder
2017-02-19 20:45:16 +01:00
Max Kellermann
72146e7800
output/httpd: use std::lock_guard
2017-02-19 20:43:45 +01:00
Max Kellermann
f7af1bb8e2
output/httpd: cancel the DeferredMonitor in Close()
2017-02-19 20:41:34 +01:00
Max Kellermann
f88f1fca3f
output/httpd: move Close() lock into the I/O thread
...
Fixes a potential deadlock introduced by commit 945287358b
2017-02-19 20:41:06 +01:00
Max Kellermann
26e4a40cc7
output/httpd/Page: use std::shared_ptr instead of class RefCount
2017-02-19 20:17:57 +01:00
Max Kellermann
8b1931072a
output/httpd/Page: no variable size, use AllocatedArray
...
Using variable-size objects is not worth the trouble here. Let's drop
this and use existing and simpler code.
2017-02-19 20:13:41 +01:00
Max Kellermann
45e15b6cc6
output/httpd/Page: make all attributes private
2017-02-19 20:13:35 +01:00
Max Kellermann
be7e52c882
output/httpd/Page: remove unused method Concat()
2017-02-19 20:13:19 +01:00
Max Kellermann
4162ce0bc5
output/httpd/Page: use uint8_t instead of unsigned char
2017-02-19 19:49:53 +01:00
Max Kellermann
7e46277016
Merge branch 'v0.20.x'
2017-02-19 19:46:18 +01:00
Max Kellermann
4bb83781e8
output/httpd/IcyMetaDataServer: cast length to unsigned
...
Fixes another buffer overflow: if the stream has a very long title or
URL, resulting in a metadata string of more than 2 kB, icy_string[0]
is a negative value, which gets casted to size_t - ouch!
https://bugs.musicpd.org/view.php?id=4652
2017-02-19 19:28:52 +01:00
Max Kellermann
a73195b7cc
output/httpd/IcyMetaDataServer: pad the string with 15 spaces
...
Fixes a buffer overflow due to the bad formula rounding the buffer
size up. At the same time, remove the "+1" from the meta_length
calculation, which takes the padding into account and at the same time
implements proper rounding.
2017-02-19 19:27:37 +01:00
Max Kellermann
1bd00b8a9a
output/httpd/IcyMetaDataServer: remove the int cast
...
Why did this cast exist??
2017-02-19 19:27:37 +01:00
Max Kellermann
47dffe66aa
output/alsa: fix race condition on early snd_pcm_writei() error
...
During UnlockActivate() while the mutex is unlocked, the IOThread can
set a new error condition, and will never again wake up the
OutputThread. This race condition can cause a deadlock in the
OutputThread.
2017-02-15 11:23:44 +01:00
Max Kellermann
4a80e9cb25
output/alsa: copy the PcmExport result to the ring_buffer
...
.. and not the input data.
Regression from commit b1c7649edb
(integer underflow).
https://bugs.musicpd.org/view.php?id=4639
2017-02-10 22:23:00 +01:00
Max Kellermann
cfd056231b
output/alsa: use the EventLoop& parameter instead of io_thread_get()
2017-02-10 21:21:15 +01:00
Max Kellermann
b1c7649edb
output/alsa: non-blocking mode
...
Use SND_PCM_NONBLOCK, and perform all snd_pcm_writei() calls in the
IOThread. Use a lockless queue to copy data from the OutputThread to
the IOThread.
This rather major change aims to improve MPD's internal latency. All
waits are now under MPD's control, instead of blocking inside
libasound2.
As a side effect, an output's filter is now decoupled from the actual
device I/O, which solves a major latency problem with the conversion
filter on slow CPUs and small period buffers. See:
https://bugs.musicpd.org/view.php?id=3900
2017-02-09 21:36:18 +01:00
Max Kellermann
03a97d87ea
tag/Tag*: rename several source files
2017-02-08 08:49:42 +01:00
Max Kellermann
df4af2b550
release v0.20.4
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAliSTDkQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEsIQD/4iNkylzLp8mID2aFT690MFzv4TRXi2XS7v
r3Rlx3hpGyDdzeXZeFc5zxsc9Ei8OfLcdFC/Umj9LjQanXakOxwsdhagrW9cadNX
YLxkyVcREXalmzUvoWeRnya1LjoTdYA8llvG2tAJosXVr0o/GHZi56aHcrYnW2a6
XD8kEk5k9beuEcBLk1rdZCTGPbVLwCFvMcpZ7j5Hd4kDGQjjw2aoEaPWchJdhLQh
p+GRSU+A8hyTo9zy+aNO3cKvq6zqVxDLlHnIqh8XPWQoLPyWuD7ETvwERKmdmiPZ
bSo0MR7azTlhkWbNZxjPHgZuacJDlwKvXPg1ofjn8VVcaVe5ONeX+1WP0ozUYqyU
fmhLxMHKuwZcKo6do/jNhAVp//VBWhSwJHPA8kjBTuZHHc0HvgyTxlAgvzlrSswe
dxc8vnvzgJfUKz5k7mf3amVg6Cu1CmNi59CkyL0NL+8N0inyMfdeQuQEYgbPoI6X
jIRwACfXpMX75VtiDaNpnFLBjL5emE6u2bDoU2c5ezgpthaWjb0PqSmoLBBF8TNm
k0ecXlIwCjT3pDcqmFdqgG3AJiYLTgX0rETC8PInl6toLzr2oVMVlijU3YK5PjMl
nTvgs8TwprTWImgcBnidqRMb39p3AKs12pHfZ4Y5Iu82Bm60acZQMkv6sQh43Wyc
+W2+T3D2IA==
=b2Fz
-----END PGP SIGNATURE-----
Merge tag 'v0.20.4'
release v0.20.4
2017-02-01 22:05:33 +01:00
Max Kellermann
38d263ac19
output/sndio: work around a libroar C++ incompatibility
...
Same as in commit e02d8ad8d2
, but this time for the sndio plugin
which can be emulated by libroar.
2017-02-01 19:53:23 +01:00
Max Kellermann
8fd9d91974
output/Plugin: pass EventLoop& to init()
...
Eliminate dependency on io_thread_get().
2017-01-25 22:54:41 +01:00
Max Kellermann
d3f35dab1e
output/ao: convert to class, make attributes private
2017-01-25 10:46:09 +01:00
Max Kellermann
487e2618cd
output/ao: use AudioOutputWrapper
2017-01-25 10:45:20 +01:00
Max Kellermann
30d5186db4
output/ao: use const_cast instead of the union hack
2017-01-25 10:44:19 +01:00
Max Kellermann
cbe59714d4
output/solaris: convert to class, make attributes private
2017-01-25 10:33:38 +01:00
Max Kellermann
704a28ca17
output/solaris: use AudioOutputWrapper
2017-01-25 10:29:42 +01:00
Max Kellermann
8d70d10aba
output/httpd: use AudioOutputWrapper
2017-01-25 10:05:08 +01:00
Max Kellermann
ddd8b16f2b
output/roar: use AudioOutputWrapper::Init()
2017-01-25 10:05:08 +01:00
Max Kellermann
6b968beede
output/alsa: convert to class, make attributes private
2017-01-24 23:08:16 +01:00
Max Kellermann
f68dd1bffb
output/alsa: make AlsaSetup() an AlsaOutput method
2017-01-24 23:06:33 +01:00
Max Kellermann
f92b71ca99
output/alsa: move code from AlsaSetup() to AlsaSetupSw()
2017-01-24 23:05:29 +01:00
Max Kellermann
2b79fe2d6a
output/alsa: move code from AlsaSetup() to AlsaSetupHw()
2017-01-24 22:48:48 +01:00
Max Kellermann
6eea56861b
AUTHORS, ...: update my email address
2017-01-17 11:54:55 +01:00
Max Kellermann
4ad0747c78
output/alsa: explicitly mention all snd_pcm_state() enums
...
I want a compiler warning when a new state needs to be considered
here.
2017-01-14 20:49:15 +01:00
Max Kellermann
c7b0c46d9f
output/recorder: fix typo in variable name
...
Fixes the dreaded error "Failed to create : No such file or
directory".
https://bugs.musicpd.org/view.php?id=4625
2017-01-12 21:36:32 +01:00
Max Kellermann
df578c91ad
output/alsa: log DoP mode
2017-01-11 22:50:40 +01:00
Max Kellermann
70008c47c9
output/alsa: support DSD_U16
2017-01-11 22:47:21 +01:00
Max Kellermann
8364029db8
output/alsa: move code to PlayRaw()
2017-01-11 21:38:05 +01:00
Max Kellermann
78a73eac53
pcm/Export: add (dummy) method Cancel()
...
We'll have some code for it soon.
2017-01-11 15:41:28 +01:00
Max Kellermann
9c4df66925
pcm/Export: halve the sample rate for DoP
...
Move this sample rate fixup from the ALSA output plugin to PcmExport,
where it belongs.
2017-01-11 10:33:23 +01:00
Max Kellermann
c143adba91
pcm/Export: add CalcOutputSampleRate(), CalcInputSampleRate()
...
Prepare for DSD sample rate fixups.
2017-01-10 23:48:26 +01:00
Max Kellermann
5900253b85
update copyright year
2017-01-03 20:48:59 +01:00
Max Kellermann
2e182e84c3
thread/Mutex: remove ScopeLock, use std::lock_guard directly
2017-01-03 07:11:57 +01:00
Max Kellermann
71e7d32b08
output/Timer: use std::chrono
2016-12-28 22:00:33 +01:00
Max Kellermann
d5e422970c
output/Plugin: delay() returns std::chrono::steady_clock::duration
2016-12-28 22:00:29 +01:00
Max Kellermann
35a2a48c47
Merge branch 'v0.19.x'
2016-11-17 22:20:24 +01:00
Max Kellermann
5c3e55b5b1
{input,output}/alsa: fix gcc 7.0 -Wimplicit-fallthrough
2016-11-16 19:50:38 +01:00
Dave Hocker
f6a85f0b0b
output/osx: fix build failure
2016-11-10 12:55:08 +01:00
Max Kellermann
d9cb85df83
output/Plugin: remove 'Error&' parameters, use C++ exceptions only
2016-11-09 12:36:21 +01:00
Max Kellermann
bbe7a37359
output/Internal: hide Configure() and remove the non-configuring constructor
2016-11-09 12:06:06 +01:00
Max Kellermann
d0aa154ea6
output/null: migrate from class Error to C++ exceptions
2016-11-09 12:03:20 +01:00
Max Kellermann
df4616ae4a
output/osx: migrate from class Error to C++ exceptions
...
Beware, this commit was not tested. I don't have OS X, but I want to
prepare an API change.
2016-11-09 11:51:28 +01:00
Max Kellermann
10f62db9fd
output/osx: use std::unique_ptr
...
Eliminate all those "goto"s and make the function exception-safe.
2016-11-09 11:50:14 +01:00
Max Kellermann
5c075210d6
output/osx: use AtScopeExit() to call CFRelease()
2016-11-09 11:49:21 +01:00
Max Kellermann
0cf85b0771
output/haiku: eliminate DoClose()
2016-11-09 11:42:00 +01:00
Max Kellermann
fa90047e52
output/haiku: migrate from class Error to C++ exceptions
...
Beware, this commit was not tested. I don't have Haiku, but I want to
prepare an API change.
2016-11-09 11:39:11 +01:00
Max Kellermann
b9f64fe19b
output/haiku: embed "format" into the HaikuOutput class
...
Avoid one level of dynamic allocation.
2016-11-09 11:36:38 +01:00
Max Kellermann
dd072912e8
output/solaris: migrate from class Error to C++ exceptions
2016-11-09 11:18:19 +01:00
Max Kellermann
9dbdc75689
output/httpd: migrate from class Error to C++ exceptions
2016-11-09 08:40:10 +01:00
Max Kellermann
dce211dbba
output/sles: migrate from class Error to C++ exceptions
2016-11-09 08:35:35 +01:00
Max Kellermann
b4e5fa5c1b
output/roar: migrate from class Error to C++ exceptions
2016-11-09 08:29:44 +01:00
Max Kellermann
f12fa7e20a
output/shout: migrate from class Error to C++ exceptions
2016-11-08 15:40:19 +01:00
Max Kellermann
96f8f1da0c
output/OpenAL: migrate from class Error to C++ exceptions
2016-11-08 15:19:30 +01:00
Max Kellermann
db7eec042e
output/sndio: migrate from class Error to C++ exceptions
2016-11-08 15:15:16 +01:00
Max Kellermann
52aed3f8a1
output/jack: migrate from class Error to C++ exceptions
2016-11-08 15:11:21 +01:00
Max Kellermann
cadd186f1b
output/jack: use AtScopeExit()
2016-11-08 15:10:38 +01:00
Max Kellermann
dd9ab16d67
output/recorder: migrate from class Error to C++ exceptions
2016-11-07 09:48:10 +01:00
Max Kellermann
d8b6aff23a
encoder: migrate from class Error to C++ exceptions
2016-11-07 09:25:51 +01:00
Max Kellermann
4aab97ccb1
config/Path: throw std::runtime_error on error
2016-11-07 09:07:50 +01:00
Max Kellermann
1859ba5ec8
output/winmm: 8 bit playback is not supported
...
Everything must be S16.
2016-11-07 08:53:57 +01:00
Max Kellermann
54d5184255
output/winmm: use std::array
2016-11-07 08:50:58 +01:00
Max Kellermann
0c5b986fc4
output/winmm: use range-based "for"
2016-11-07 08:28:41 +01:00
Max Kellermann
7b2cdd618e
output/winmm: use AudioOutputWrapper
2016-11-07 08:08:42 +01:00
Max Kellermann
30bb3f1fcb
output/winmm: migrate from class Error to C++ exceptions
2016-11-07 07:42:18 +01:00
Max Kellermann
b45ea66175
output/pipe: migrate from class Error to C++ exceptions
2016-11-05 15:24:10 +01:00
Max Kellermann
543c5034af
output/fifo: migrate from class Error to C++ exceptions
2016-11-05 15:13:14 +01:00
Max Kellermann
c8aa7afdc6
output/oss: migrate from class Error to C++ exceptions
2016-11-05 13:18:45 +01:00
Max Kellermann
b35bb1b50c
output/alsa: use C++ initializers
2016-11-04 11:31:23 +01:00
Max Kellermann
6341be9cdf
output/alsa: migrate from class Error to C++ exceptions
2016-11-04 11:31:23 +01:00
Max Kellermann
93a14a93f9
output/alsa: use Error::FormatPrefix()
2016-11-04 11:31:23 +01:00
Max Kellermann
65e6755b8b
output/ao: migrate from class Error to C++ exceptions
2016-11-02 12:36:13 +01:00
Max Kellermann
6ead9750f4
output/pulse: migrate from class Error to C++ exceptions
2016-11-02 11:01:22 +01:00
Max Kellermann
6532c7e089
output/pulse: use C++11 initializers
2016-11-02 11:01:07 +01:00
Max Kellermann
e2b7c30811
event/BufferedSocket: pass std::exception_ptr to OnSocketError()
2016-11-02 10:38:05 +01:00
Max Kellermann
e17805f208
config/Block: GetPath() throws exception on error
2016-10-28 23:08:42 +02:00
Max Kellermann
d8bcdca55a
config/Block: rename GetBlockPath() to GetPath()
2016-10-28 23:07:26 +02:00
Max Kellermann
f6f2a3b366
output/alsa: throw C++ exception on init error
2016-10-28 22:56:27 +02:00
Max Kellermann
d52c7e7a1b
output/httpd: throw C++ exception on init error
2016-10-28 22:42:10 +02:00
Max Kellermann
0c343cb1c3
encoder/Plugin: migrate from class Error to C++ exceptions
2016-10-28 21:29:01 +02:00
Max Kellermann
aead221184
event/ServerSocket: migrate from class Error to C++ exceptions
2016-10-28 21:22:25 +02:00
Yue Wang
d73267df5e
use osx_output_delay to wait until ring buffer is able to write
...
This further optimize the performance.
This is now working properly with a conditional variable bug being fixed (8bbfb5cda1
).
2016-09-19 08:51:03 -07:00
Yue Wang
f881917d2f
Fix a bug that buffer_frame_size is not properly initialized
2016-09-18 21:09:57 -07:00
Yue Wang
99244f51b0
Remove unused imports
2016-09-18 19:40:55 -07:00
Yue Wang
606d029ed9
Kill mutex and locks in osx_render. Improve performance. Also fix an initialization problem
2016-09-18 19:40:04 -07:00
Yue Wang
e4b9d679fb
options for sample rate syncing and device hogging
2016-09-18 19:12:45 -07:00
Yue Wang
4a8a33ea85
Hogging is for user selected device only.
...
do not hog system device.
2016-09-18 13:15:46 -07:00
Yue Wang
ac4b83046a
Add sample rate synchronization and device hogging to core audio plugin
...
which ensures mpd do bit perfect playback on OS X
2016-09-18 12:52:08 -07:00
Max Kellermann
e7d327226a
mixer: migrate to C++ exceptions
2016-09-09 14:44:15 +02:00
Max Kellermann
860064c812
output/pulse: use a RTTI lock guard
...
Make all the locks exception-safe.
2016-09-09 14:36:24 +02:00
Earnestly
e2f6cc9c9f
Don't overwrite ss.format
...
Currently the switch statement is invalidated by ss.format being overwritten
with the default value of PA_SIMPLE_S16NE which results in white noise during
playback as my server is expected S16LE (S16NE).
Signed-off-by: Earnestly <zibeon@gmail.com>
2016-08-23 10:01:56 +02:00
Max Kellermann
ba69ade024
Compiler.h: add macro CLANG_OR_GCC_VERSION()
2016-08-23 09:48:58 +02:00
Max Kellermann
ea0e6d9824
fs/FileSystem: RemoveFile() throws exception on error
2016-08-15 22:25:15 +02:00
Max Kellermann
743fa73a01
Merge branch 'v0.19.x'
2016-08-15 12:33:07 +02:00
Nils Schneider
62000670e3
Support S24_P32/S32/FLOAT sample formats on Pulse
...
This is based on a patch from Ian Scott in 2014. It was never committed,
so I figured I'd fix the outstanding issue and resubmit it.
https://www.mail-archive.com/mpd-devel%40musicpd.org/msg00139.html
2016-08-15 10:02:29 +02:00
Max Kellermann
ac49043fbb
output/pulse: move variable declaration down
2016-08-15 10:02:22 +02:00
Jacob Vosmaer
4d6192adcd
Use a ScopeLock around condition.wait()
2016-08-07 15:47:21 +02:00
Jacob Vosmaer
9f1ada898e
Improve readability of frame completion loop
2016-08-07 14:15:55 +02:00
Jacob Vosmaer
5617521380
Must lock/unlock around wait
2016-08-06 15:25:58 +02:00
Jacob Vosmaer
9835a2545d
Do not assume two pops are enough
2016-08-06 15:19:10 +02:00
Jacob Vosmaer
c28cefeeb0
output/osx: wait-free render callback
...
Closes https://bugs.musicpd.org/view.php?id=4537 .
Removed the 'cancel' function because it violates 'single producer,
single consumer'.
2016-08-06 00:08:10 +02:00
Max Kellermann
2777a23672
Merge branch 'v0.19.x'
2016-07-29 20:25:59 +02:00
Max Kellermann
83aed7051c
output/shout: rename "encoding" to "encoder"
...
The user manual specifies "encoder", which is consistent with other
output plugins. "encoding" should be deprecated.
2016-07-29 10:52:03 +02:00
Jacob Vosmaer
ad80acb22a
output/osx: remove incorrect memset behavior
...
In e068d62
I added code that zeros the remainder of the output buffer
if there are not enough input frames available. I have now learned
that we can signal to the caller of the render callback how much data
is in the output buffers. In practice, the input buffer is so large
that it does not matter so much how we handle input buffer underruns,
but I suppose that saying 'there is no data' is better than 'here is
some silence for you'.
2016-07-22 20:58:37 +02:00