Max Kellermann
a92aa0bedc
output/alsa: use IsCleared() instead of IsDrained() in DrainInternal()
...
Really drain all data from the period_buffer in any case.
2019-06-28 09:30:33 +02:00
Max Kellermann
d66f5a8590
output/alsa: replace PeriodBuffer::IsEmpty() with IsCleared()
...
This assertion is not about whether all data has been consumed, but
about whether there has been any data at all.
2019-06-28 09:29:18 +02:00
Max Kellermann
30ca6b8881
Merge branch 'v0.21.x'
2019-06-28 09:28:04 +02:00
Max Kellermann
c926021599
output/alsa: always redo DrainInternal() after writing
...
Draining isn't finished just because the period_buffer has run empty.
It is only finished after snd_pcm_drain() has succeeded.
2019-06-28 09:10:16 +02:00
Max Kellermann
543776d9c9
output/alsa: check PCM state before calling snd_pcm_drain()
...
Apparently, if snd_pcm_drain() returns EAGAIN, it does not actually
want to be called again; the next call will snd_pcm_drain() will also
return EAGAIN, forever, even though the PCM state has meanwhile
switched to SND_PCM_STATE_SETUP. This causes a busy loop; to fix
this, we should always check snd_pcm_state() to see if draining is
really required.
2019-06-28 08:55:25 +02:00
Max Kellermann
cf631fca50
output/alsa: check GetFrames()>0 instead of IsEmpty() in WriteFromPeriodBuffer()
2019-06-27 21:59:43 +02:00
Max Kellermann
f0ac63d5af
output/alsa: DrainInternal() ignores postponed partial frame
2019-06-27 21:23:28 +02:00
Max Kellermann
c1eb0583c4
output/alsa: add "full" assertion to WriteFromPeriodBuffer()
2019-06-27 21:22:52 +02:00
Max Kellermann
549faa8a9c
output/alsa: add full check before calling FillWithSilence()
2019-06-27 21:20:38 +02:00
Max Kellermann
8f6c750064
output/alsa: improve silence generator test in DrainInternal()
...
There cannot be partial frames in the buffer, so we don't need
GetPeriodPosition(); it's enough to check whether head has been moved
in this period.
2019-06-27 21:17:37 +02:00
Max Kellermann
9fc1668de3
output/alsa: hold back snd_pcm_writei() until period_buffer is full
...
This gives MPD more control, because attempts to avoid having partial
periods in the ALSA period buffer. For example, this means that
DrainInternal() doesn't need to generate silence to fill the partial
period.
2019-06-27 15:40:07 +02:00
Max Kellermann
2f243f2295
pcm/Export: rename GetFrameSize() to GetOutputFrameSize()
2019-06-26 15:46:49 +02:00
Max Kellermann
e69fd0300a
pcm/Export: rename CalcSourceSize() to CalcInputSize()
2019-06-26 15:46:05 +02:00
Max Kellermann
f43cafbf7d
pcm/Export: eliminate the AudioFormat parameter from GetFrameSize()
2019-06-26 15:42:47 +02:00
Max Kellermann
28e07e900f
pcm/Export: convert the DSD bools to an enum
...
These options are exclusive.
2019-06-17 22:35:00 +02:00
Max Kellermann
c75dc4a647
output/osx: remove redundant initializer
2019-06-17 22:35:00 +02:00
Max Kellermann
47bb1cd8b5
output/{alsa,osx}: use ConstBuffer::empty()
2019-06-17 22:09:47 +02:00
Max Kellermann
ccc96e25d3
output/{alsa,osx}: remove comment after PcmExport::Export()
...
Returning an empty buffer is a normal result now (since commit
79839db3a3
), and doesn't deserve such a
big comment.
2019-06-17 22:09:06 +02:00
Max Kellermann
33f5e03e80
Merge branch 'v0.21.x'
2019-06-17 22:06:54 +02:00
Max Kellermann
79839db3a3
output/oss: return early if PcmExport::Export() returns empty array
...
This can happen if the DoP converter doesn't get enough source samples
for one destination quad. This isn't a critical bug, because the OSS
plugin doesn't support DoP yet, but it's good to be prepared.
2019-06-17 21:07:30 +02:00
Max Kellermann
fd7caab872
output/winmm: fix build breakage after e87f0ca771
2019-06-17 12:23:34 +02:00
Max Kellermann
e87f0ca771
pcm/Pcm*: drop more "Pcm" prefixes from source file names
2019-06-17 11:17:48 +02:00
Max Kellermann
a139279575
Copyright year 2019
2019-06-17 11:17:30 +02:00
Max Kellermann
fd5e74dbd0
pcm/Pcm{Dop,Export}: drop "Pcm" prefix
2019-06-16 12:11:44 +02:00
Max Kellermann
3055c1266d
output/osx: don't use variable-length arrays
2019-06-08 11:51:15 +02:00
Max Kellermann
931c3a1de0
output/osx: convert int
to size_t
2019-06-08 11:49:15 +02:00
Max Kellermann
adffbba2a5
release v0.21.10
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlz4JuAQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEq9nD/40/ryDwvgsQnKhYcpPhlV8bf8iTOUSPsrW
2P5m48sfGb3LBHV+U/sHLWH8svODSxloyvyxYSUOEJyqOu42lj0BnxPBDvRwTjcq
PxJPHHKVuExys04k4SOKIEci742WEHTVRzO8EeOvIdgkjXCak7tpQk/wmhrGfHF1
+rLfSu6jq90/tELsOyTLGmk3KapY637Qf2Q99Z6VZnAXhIRLK4O1E8oKGOjl2h8I
xvjZckVZV1FYeNrC0OYdNQX0A+JhkFwLFAeWP3ksBmKfs+Csf8X0JTCofnYph46t
5SmhTd9I6NEVnNoZyOplV7QVawGPK1p69ORB052d/9QUhMqcPmwnHrhcrWtrYl5I
6QtUwf8nJz/TnUc7/a3BBIPHLB/PD0fGsmdDoElikkPz76sGYNor+UZIdQke1HQL
m3zmNDxjU++sRfrSjAPOK2mxD0Km8tYIcrQBMZcyxoc7GCHaw1pIa2cxxs1aB5QZ
gFxYICL7LJ+g5Q19JhTiWlwfdOS7jGH7mVUjhLDA/mcxGf6ln6FkDx58GqPJV+es
UcWVbOjb3T448TVNH0Jj+FrtWK5uBmOFNTk102BbTnfDT8muedbRmRCxn0NyKkFQ
dS8/FdU7ffw2II49ZI6BfmeLucfoTwuQ1Ky297K/62NrM67/1dKKkBLAE3/aGxwh
xzIDTT3Mkg==
=SELi
-----END PGP SIGNATURE-----
Merge tag 'v0.21.10'
release v0.21.10
2019-06-05 22:38:54 +02:00
cathugger
f9ca2f52c1
output/httpd: reject some well-known request paths
...
Return `404 not found` for some common well-known paths, as clients requesting them usually do that automatically and don't expect endless audio stram.
Closes #572
2019-06-05 21:53:46 +02:00
cathugger
4b81cf0c2c
output/httpd: use strncmp instead of memcmp
...
memcmp use may result in out of bounds access
2019-06-05 21:53:46 +02:00
Max Kellermann
e7acbf112c
output/httpd: fix indent
2019-06-05 21:53:43 +02:00
Max Kellermann
620a39afb4
thread/Slack: use std::chrono::duration
2019-05-29 21:11:32 +02:00
Max Kellermann
9d1906da8a
{event,output}/Thread: downgrade realtime scheduling errors to "info"
...
These messages can be confusing, but they are not critical.
2019-05-23 14:24:27 +02:00
Max Kellermann
973c87b351
event/Call, ...: use wait() with predicate
2019-05-07 20:01:45 +02:00
Max Kellermann
0a0cc66e8f
thread/Mutex: use using
instead of making it a derived class
...
Prepare the transition to std::mutex.
2019-05-07 19:23:01 +02:00
Max Kellermann
23d56cb6a1
output/Control: pass std::unique_lock<> to Cond::wait()
2019-04-26 18:28:44 +02:00
Max Kellermann
4473816384
output/Control: add LockEnableDisableAsync()
2019-04-26 18:28:09 +02:00
Max Kellermann
2c8d004f78
output/Control: add LockWaitForCommand()
2019-04-26 18:25:36 +02:00
Max Kellermann
684bd9153e
output/MultipleOutputs: simplify locking in CheckPipe()
...
Instead of keeping all open outputs locked, let ClearTailChunk() stall
playback until MultipleOutputs::CheckPipe() has updated the MusicPipe.
2019-04-26 18:13:14 +02:00
Max Kellermann
ec456fc57c
output/MultipleOutputs: make variable more local
2019-04-26 18:13:02 +02:00
Max Kellermann
7c92eb4360
output/Control: add noexcept
2019-04-26 17:53:27 +02:00
Max Kellermann
376f4a2b16
output/MultipleOutputs: wrap AudioOutputControl in std::unique_ptr<>
2019-04-26 14:28:59 +02:00
Max Kellermann
b42f19f514
output/Control: implicitly call BeginDestroy() in destructor
2019-04-26 14:28:30 +02:00
Max Kellermann
92022658f9
thread/Cond: add wait() overload which takes a unique_lock<>
...
Just like std::condition_variable, which however has no way to specify
the std::mutex directly.
2019-04-26 11:51:45 +02:00
Max Kellermann
b51bae5500
thread/*Cond: rename methods to match std::condition_variable
2019-04-25 19:46:43 +02:00
Max Kellermann
ea5e6d8f33
Merge branch 'v0.21.x'
2019-04-04 10:29:58 +02:00
Max Kellermann
325c7b8e8b
output/httpd: close client connection on error
...
This missing piece probably never really hurt, because
HttpdClient::OnSocketClosed() would be called right after a socket
error, but it's better to be explicit about closing on error.
2019-04-04 09:39:22 +02:00
Max Kellermann
380656d8c9
output/httpd: add missing mutex lock
2019-04-03 22:53:03 +02:00
Max Kellermann
9111bc2c21
output/httpd: add more API documentation about locking
2019-04-03 22:49:25 +02:00
Max Kellermann
7a1b56fe96
release v0.21.7
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlykiHUQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFErFWEACP0T0em6pKOV9W2YHivtnJoBhb3wG46a2w
rnyNuj0FM8nhMsWunvqbOExogGxZziTKYhSdvzOBwNSleG1Eyjks8yNuPpp7nHH/
Y5gyRr1o6BR4hkukWDAIBWN/iXatUWHb/itInN0KhrqyU0YptNGbOF87vLfAZlqW
MNVTXO4YAx/tYHEt/4ze/ljtrNvXsB8Zw86cNI+jrivdujdKVfiN5dUpbc5Hj8DA
3i6Y5YFm4OvHbFENeMy/kVht8Ln0/3Ak+Z9L7ti9ZSWLbOaQc7+Nl0P/3pfftzWf
YK6DsRyvJ2dEPylAXqRIkZWdIU1VwjKc7cKYJFljNAMhaUWcrefXIGQOv0+1kbqz
CxLgk3hIK3R7lGbxLXDU7xD05hbOGgXe1BKO9alGhEsyB8+sT6qfVay/RlJPN+da
mSnslSzPyS+p9ZdyDnWXq68FS8BIriajDVXP7/WNMKz9OEe5BiXBBQVDM5/XbxQU
qPxLn/BVYzDXOw8msgyIZ/vqE1rpomJDILsK/EMJ/HLAOdR/Jo10wIAGAqiLPp2j
n2R9jS7nxZKmEvcZkg/HroNiGSpT89f38bbW/MCdzxAkg4vQDxQ0OE9GoeBi3oiP
g/SkM/sJ9UdlC3bq7TAhxK0huimAEg5Rh6Z1II00D89QmWFQT0hjmxo++9WwCQXw
CkIiKRf7Ug==
=KzqS
-----END PGP SIGNATURE-----
Merge tag 'v0.21.7'
release v0.21.7
2019-04-03 12:32:20 +02:00
François Revol
0d8942e64a
Haiku: remove redundant calls to delete_sem()
...
Fixes #184 .
Semaphores are kernel-managed objects, calling delete_sem() twice is not more
dangerous than calling close() twice on an fd though, it would just return
an error.
2019-03-29 14:33:49 +01:00