Commit 12308a0f authored by Max Kellermann's avatar Max Kellermann

lib/alsa/NonBlock: move the functions into a class managing the state

parent a958abde
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
#include "util/Domain.hxx" #include "util/Domain.hxx"
#include "util/RuntimeError.hxx" #include "util/RuntimeError.hxx"
#include "util/StringCompare.hxx" #include "util/StringCompare.hxx"
#include "util/ReusableArray.hxx"
#include "util/ASCII.hxx" #include "util/ASCII.hxx"
#include "Log.hxx" #include "Log.hxx"
#include "event/MultiSocketMonitor.hxx" #include "event/MultiSocketMonitor.hxx"
...@@ -69,7 +68,7 @@ class AlsaInputStream final ...@@ -69,7 +68,7 @@ class AlsaInputStream final
snd_pcm_t *const capture_handle; snd_pcm_t *const capture_handle;
const size_t frame_size; const size_t frame_size;
ReusableArray<pollfd> pfd_buffer; AlsaNonBlockPcm non_block;
DeferEvent defer_invalidate_sockets; DeferEvent defer_invalidate_sockets;
...@@ -180,7 +179,7 @@ AlsaInputStream::PrepareSockets() noexcept ...@@ -180,7 +179,7 @@ AlsaInputStream::PrepareSockets() noexcept
return std::chrono::steady_clock::duration(-1); return std::chrono::steady_clock::duration(-1);
} }
return PrepareAlsaPcmSockets(*this, capture_handle, pfd_buffer); return non_block.PrepareSockets(*this, capture_handle);
} }
void void
......
...@@ -23,8 +23,7 @@ ...@@ -23,8 +23,7 @@
#include "util/RuntimeError.hxx" #include "util/RuntimeError.hxx"
std::chrono::steady_clock::duration std::chrono::steady_clock::duration
PrepareAlsaPcmSockets(MultiSocketMonitor &m, snd_pcm_t *pcm, AlsaNonBlockPcm::PrepareSockets(MultiSocketMonitor &m, snd_pcm_t *pcm)
ReusableArray<pollfd> &pfd_buffer)
{ {
int count = snd_pcm_poll_descriptors_count(pcm); int count = snd_pcm_poll_descriptors_count(pcm);
if (count <= 0) { if (count <= 0) {
...@@ -51,8 +50,7 @@ PrepareAlsaPcmSockets(MultiSocketMonitor &m, snd_pcm_t *pcm, ...@@ -51,8 +50,7 @@ PrepareAlsaPcmSockets(MultiSocketMonitor &m, snd_pcm_t *pcm,
} }
std::chrono::steady_clock::duration std::chrono::steady_clock::duration
PrepareAlsaMixerSockets(MultiSocketMonitor &m, snd_mixer_t *mixer, AlsaNonBlockMixer::PrepareSockets(MultiSocketMonitor &m, snd_mixer_t *mixer) noexcept
ReusableArray<pollfd> &pfd_buffer) noexcept
{ {
int count = snd_mixer_poll_descriptors_count(mixer); int count = snd_mixer_poll_descriptors_count(mixer);
if (count <= 0) { if (count <= 0) {
......
...@@ -30,23 +30,30 @@ ...@@ -30,23 +30,30 @@
class MultiSocketMonitor; class MultiSocketMonitor;
/** /**
* Update #MultiSocketMonitor's socket list from * Helper class for #MultiSocketMonitor's virtual methods which
* snd_pcm_poll_descriptors(). To be called from * manages the file descriptors for a #snd_pcm_t.
* MultiSocketMonitor::PrepareSockets(). */
* class AlsaNonBlockPcm {
* Throws exception on error. ReusableArray<pollfd> pfd_buffer;
public:
/**
* Throws on error.
*/ */
std::chrono::steady_clock::duration std::chrono::steady_clock::duration PrepareSockets(MultiSocketMonitor &m,
PrepareAlsaPcmSockets(MultiSocketMonitor &m, snd_pcm_t *pcm, snd_pcm_t *pcm);
ReusableArray<pollfd> &pfd_buffer); };
/** /**
* Update #MultiSocketMonitor's socket list from * Helper class for #MultiSocketMonitor's virtual methods which
* snd_mixer_poll_descriptors(). To be called from * manages the file descriptors for a #snd_mixer_t.
* MultiSocketMonitor::PrepareSockets().
*/ */
std::chrono::steady_clock::duration class AlsaNonBlockMixer {
PrepareAlsaMixerSockets(MultiSocketMonitor &m, snd_mixer_t *mixer, ReusableArray<pollfd> pfd_buffer;
ReusableArray<pollfd> &pfd_buffer) noexcept;
public:
std::chrono::steady_clock::duration PrepareSockets(MultiSocketMonitor &m,
snd_mixer_t *mixer) noexcept;
};
#endif #endif
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include "event/DeferEvent.hxx" #include "event/DeferEvent.hxx"
#include "event/Call.hxx" #include "event/Call.hxx"
#include "util/ASCII.hxx" #include "util/ASCII.hxx"
#include "util/ReusableArray.hxx"
#include "util/Domain.hxx" #include "util/Domain.hxx"
#include "util/RuntimeError.hxx" #include "util/RuntimeError.hxx"
#include "Log.hxx" #include "Log.hxx"
...@@ -48,7 +47,7 @@ class AlsaMixerMonitor final : MultiSocketMonitor { ...@@ -48,7 +47,7 @@ class AlsaMixerMonitor final : MultiSocketMonitor {
snd_mixer_t *mixer; snd_mixer_t *mixer;
ReusableArray<pollfd> pfd_buffer; AlsaNonBlockMixer non_block;
public: public:
AlsaMixerMonitor(EventLoop &_loop, snd_mixer_t *_mixer) AlsaMixerMonitor(EventLoop &_loop, snd_mixer_t *_mixer)
...@@ -110,7 +109,7 @@ AlsaMixerMonitor::PrepareSockets() noexcept ...@@ -110,7 +109,7 @@ AlsaMixerMonitor::PrepareSockets() noexcept
return std::chrono::steady_clock::duration(-1); return std::chrono::steady_clock::duration(-1);
} }
return PrepareAlsaMixerSockets(*this, mixer, pfd_buffer); return non_block.PrepareSockets(*this, mixer);
} }
void void
......
...@@ -148,10 +148,7 @@ class AlsaOutput final ...@@ -148,10 +148,7 @@ class AlsaOutput final
*/ */
uint8_t *silence; uint8_t *silence;
/** AlsaNonBlockPcm non_block;
* For PrepareAlsaPcmSockets().
*/
ReusableArray<pollfd> pfd_buffer;
/** /**
* For copying data from OutputThread to IOThread. * For copying data from OutputThread to IOThread.
...@@ -881,7 +878,7 @@ AlsaOutput::PrepareSockets() noexcept ...@@ -881,7 +878,7 @@ AlsaOutput::PrepareSockets() noexcept
} }
try { try {
return PrepareAlsaPcmSockets(*this, pcm, pfd_buffer); return non_block.PrepareSockets(*this, pcm);
} catch (...) { } catch (...) {
ClearSocketList(); ClearSocketList();
LockCaughtError(); LockCaughtError();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment