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
Bart Nagel
0a7d612f41
Remove some redundant code
2017-04-18 16:10:38 +02: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
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
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
5e93cfdd9e
output/Source: reset the ReplayGain serials ion OpenFilter()
...
Each close/open cycle resets the Filter's state, because a new Filter
instance is being created. That results in the serials
(replay_gain_serial and other_replay_gain_serial) being out of sync
with the internal ReplayGainFilter state.
So instead of initializing those serials once, we need to initialize
them each time we create new ReplayGainFilter instances, i.e. in
OpenFilter().
https://bugs.musicpd.org/view.php?id=4632
2017-01-23 17:55:04 +01:00
Max Kellermann
39114f91a7
AudioFormat: replace struct audio_format_string with class StringBuffer, return it
2017-01-17 22:18:21 +01:00
Max Kellermann
6eea56861b
AUTHORS, ...: update my email address
2017-01-17 11:54:55 +01:00
Max Kellermann
d14ec6aea5
output/Thread: reconfigure ConvertFilter for its new input AudioFormat
...
If the input AudioFormat changes but the out_audio_format doesn't
change (e.g. because there is a fixed "format" setting in this
"audio_output" section), the ConvertFilter needs to be reconfigured.
This didn't happen, resulting in awful static noise after changing
songs.
2017-01-15 01:24:17 +01:00
Max Kellermann
917cedf893
output/Thread: move AudioFormat logging code around
2017-01-15 01:23:49 +01:00
Max Kellermann
193dd71600
output/Thread: remember the original filter audio format in local variable
2017-01-15 01:21:14 +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
533cb99c33
output/Source: reset all filters in Cancel()
2017-01-11 15:39:18 +01:00
Max Kellermann
79726940dc
output/Source: un-inline Cancel()
2017-01-11 15:39:00 +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
3c565baf9d
output/Source: clear current_chunk in Close()
...
Fixes assert failure after unpausing.
2017-01-03 10:50:02 +01:00
Max Kellermann
2e182e84c3
thread/Mutex: remove ScopeLock, use std::lock_guard directly
2017-01-03 07:11:57 +01:00
Max Kellermann
4484411a77
output/Internal: add various trivial getter methods
2016-12-29 23:28:54 +01:00
Max Kellermann
61a151c803
output/State: add missing mutex lock
2016-12-29 23:28:46 +01:00
Max Kellermann
5149c950aa
output/Multiple: add missing mutex lock
2016-12-29 23:28:46 +01:00
Max Kellermann
18f4d846c9
output/Internal: make the Mutex mutable
2016-12-29 23:28:37 +01:00
Max Kellermann
db95aa250d
output/Control: pass "force" flag to LockUpdate()
...
Reduce overhead by eliminating MultipleOutputs::ResetReopen().
2016-12-29 23:20:26 +01:00
Max Kellermann
982d1bf662
output/Init: convert audio_output_setup() to method
2016-12-29 22:59:03 +01:00
Max Kellermann
256f40d4f5
output/Multiple: obtain detailed error information in Open()
2016-12-29 14:46:13 +01:00
Max Kellermann
ef9acc54ec
output/Internal: remember the most recent error
2016-12-29 14:21:12 +01:00
Max Kellermann
a9f2d25957
output/Thread: unify exception handling
2016-12-29 14:10:37 +01:00
Max Kellermann
4011899846
system/PeriodClock: use std::chrono::steady_clock
2016-12-28 22:23:45 +01:00
Max Kellermann
28e743ba70
output/Timer: include cleanup
2016-12-28 22:23:45 +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
a3ca9963a5
output/Timer: pass size_t to Add()
2016-12-28 10:17:29 +01:00
Max Kellermann
2d3c23876c
output/Timer: use C++11 initializers
2016-12-28 10:16:41 +01:00
Max Kellermann
bd8d8eef3e
output/Timer: no "time" initialization if !started
2016-12-28 10:16:11 +01:00
Max Kellermann
9e33074735
output/Thread: move software_mixer_set_filter() call to Open()
...
.. and remove the obsolete method OpenFilter().
2016-12-27 14:44:39 +01:00
Max Kellermann
d6d465cdf4
output/Thread: fix assertion failure in CLOSE handler
...
Convert assertion to runtime check; this assertion could fail when the
output was closed due to an error before CLOSE arrived.
2016-12-27 07:57:22 +01:00
Max Kellermann
e76573cc1a
output/Thread: use "true" instead of "1"
2016-12-27 07:53:02 +01:00
Max Kellermann
3fa6dc71e2
output/Source: add assertion
2016-12-26 20:10:00 +01:00