aboutsummaryrefslogtreecommitdiffstats
path: root/alc
diff options
context:
space:
mode:
Diffstat (limited to 'alc')
-rw-r--r--alc/alc.cpp22
-rw-r--r--alc/backends/alsa.cpp26
-rw-r--r--alc/backends/alsa.h2
-rw-r--r--alc/backends/base.h2
-rw-r--r--alc/backends/coreaudio.cpp14
-rw-r--r--alc/backends/coreaudio.h2
-rw-r--r--alc/backends/dsound.cpp37
-rw-r--r--alc/backends/dsound.h2
-rw-r--r--alc/backends/jack.cpp17
-rw-r--r--alc/backends/jack.h2
-rw-r--r--alc/backends/loopback.cpp4
-rw-r--r--alc/backends/loopback.h2
-rw-r--r--alc/backends/null.cpp16
-rw-r--r--alc/backends/null.h2
-rw-r--r--alc/backends/opensl.cpp14
-rw-r--r--alc/backends/opensl.h2
-rw-r--r--alc/backends/oss.cpp30
-rw-r--r--alc/backends/oss.h2
-rw-r--r--alc/backends/portaudio.cpp14
-rw-r--r--alc/backends/portaudio.h2
-rw-r--r--alc/backends/pulseaudio.cpp10
-rw-r--r--alc/backends/pulseaudio.h2
-rw-r--r--alc/backends/sdl2.cpp11
-rw-r--r--alc/backends/sdl2.h2
-rw-r--r--alc/backends/sndio.cpp14
-rw-r--r--alc/backends/sndio.h2
-rw-r--r--alc/backends/solaris.cpp22
-rw-r--r--alc/backends/solaris.h2
-rw-r--r--alc/backends/wasapi.cpp9
-rw-r--r--alc/backends/wasapi.h2
-rw-r--r--alc/backends/wave.cpp16
-rw-r--r--alc/backends/wave.h2
-rw-r--r--alc/backends/winmm.cpp26
-rw-r--r--alc/backends/winmm.h2
34 files changed, 192 insertions, 144 deletions
diff --git a/alc/alc.cpp b/alc/alc.cpp
index 691b9274..0851305a 100644
--- a/alc/alc.cpp
+++ b/alc/alc.cpp
@@ -1217,18 +1217,28 @@ void ProbeAllDevicesList()
DO_INITCONFIG();
std::lock_guard<std::recursive_mutex> _{ListLock};
- alcAllDevicesList.clear();
- if(PlaybackFactory)
- PlaybackFactory->probe(DevProbe::Playback, &alcAllDevicesList);
+ if(!PlaybackFactory)
+ decltype(alcAllDevicesList){}.swap(alcAllDevicesList);
+ else
+ {
+ std::string names{PlaybackFactory->probe(DevProbe::Playback)};
+ if(names.empty()) names += '\0';
+ names.swap(alcAllDevicesList);
+ }
}
void ProbeCaptureDeviceList()
{
DO_INITCONFIG();
std::lock_guard<std::recursive_mutex> _{ListLock};
- alcCaptureDeviceList.clear();
- if(CaptureFactory)
- CaptureFactory->probe(DevProbe::Capture, &alcCaptureDeviceList);
+ if(!CaptureFactory)
+ decltype(alcCaptureDeviceList){}.swap(alcCaptureDeviceList);
+ else
+ {
+ std::string names{CaptureFactory->probe(DevProbe::Capture)};
+ if(names.empty()) names += '\0';
+ names.swap(alcCaptureDeviceList);
+ }
}
} // namespace
diff --git a/alc/backends/alsa.cpp b/alc/backends/alsa.cpp
index bfeec1b8..f132cb72 100644
--- a/alc/backends/alsa.cpp
+++ b/alc/backends/alsa.cpp
@@ -1229,27 +1229,31 @@ bool AlsaBackendFactory::init()
bool AlsaBackendFactory::querySupport(BackendType type)
{ return (type == BackendType::Playback || type == BackendType::Capture); }
-void AlsaBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string AlsaBackendFactory::probe(DevProbe type)
{
- auto add_device = [outnames](const DevMap &entry) -> void
+ std::string outnames;
+
+ auto add_device = [&outnames](const DevMap &entry) -> void
{
/* +1 to also append the null char (to ensure a null-separated list and
* double-null terminated list).
*/
- outnames->append(entry.name.c_str(), entry.name.length()+1);
+ outnames.append(entry.name.c_str(), entry.name.length()+1);
};
switch(type)
{
- case DevProbe::Playback:
- PlaybackDevices = probe_devices(SND_PCM_STREAM_PLAYBACK);
- std::for_each(PlaybackDevices.cbegin(), PlaybackDevices.cend(), add_device);
- break;
+ case DevProbe::Playback:
+ PlaybackDevices = probe_devices(SND_PCM_STREAM_PLAYBACK);
+ std::for_each(PlaybackDevices.cbegin(), PlaybackDevices.cend(), add_device);
+ break;
- case DevProbe::Capture:
- CaptureDevices = probe_devices(SND_PCM_STREAM_CAPTURE);
- std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
- break;
+ case DevProbe::Capture:
+ CaptureDevices = probe_devices(SND_PCM_STREAM_CAPTURE);
+ std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
+ break;
}
+
+ return outnames;
}
BackendPtr AlsaBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/alsa.h b/alc/backends/alsa.h
index fb9de006..e1c50444 100644
--- a/alc/backends/alsa.h
+++ b/alc/backends/alsa.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/base.h b/alc/backends/base.h
index 6f0c773d..764fb3f4 100644
--- a/alc/backends/base.h
+++ b/alc/backends/base.h
@@ -66,7 +66,7 @@ struct BackendFactory {
virtual bool querySupport(BackendType type) = 0;
- virtual void probe(DevProbe type, std::string *outnames) = 0;
+ virtual std::string probe(DevProbe type) = 0;
virtual BackendPtr createBackend(ALCdevice *device, BackendType type) = 0;
diff --git a/alc/backends/coreaudio.cpp b/alc/backends/coreaudio.cpp
index 5570b716..56520641 100644
--- a/alc/backends/coreaudio.cpp
+++ b/alc/backends/coreaudio.cpp
@@ -637,16 +637,18 @@ bool CoreAudioBackendFactory::init() { return true; }
bool CoreAudioBackendFactory::querySupport(BackendType type)
{ return type == BackendType::Playback || type == BackendType::Capture; }
-void CoreAudioBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string CoreAudioBackendFactory::probe(DevProbe type)
{
+ std::string outnames;
switch(type)
{
- case DevProbe::Playback:
- case DevProbe::Capture:
- /* Includes null char. */
- outnames->append(ca_device, sizeof(ca_device));
- break;
+ case DevProbe::Playback:
+ case DevProbe::Capture:
+ /* Includes null char. */
+ outnames.append(ca_device, sizeof(ca_device));
+ break;
}
+ return outnames;
}
BackendPtr CoreAudioBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/coreaudio.h b/alc/backends/coreaudio.h
index 37b9ebe5..212db92b 100644
--- a/alc/backends/coreaudio.h
+++ b/alc/backends/coreaudio.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/dsound.cpp b/alc/backends/dsound.cpp
index 83b10116..abe36e57 100644
--- a/alc/backends/dsound.cpp
+++ b/alc/backends/dsound.cpp
@@ -869,14 +869,15 @@ bool DSoundBackendFactory::init()
bool DSoundBackendFactory::querySupport(BackendType type)
{ return (type == BackendType::Playback || type == BackendType::Capture); }
-void DSoundBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string DSoundBackendFactory::probe(DevProbe type)
{
- auto add_device = [outnames](const DevMap &entry) -> void
+ std::string outnames;
+ auto add_device = [&outnames](const DevMap &entry) -> void
{
/* +1 to also append the null char (to ensure a null-separated list and
* double-null terminated list).
*/
- outnames->append(entry.name.c_str(), entry.name.length()+1);
+ outnames.append(entry.name.c_str(), entry.name.length()+1);
};
/* Initialize COM to prevent name truncation */
@@ -884,24 +885,26 @@ void DSoundBackendFactory::probe(DevProbe type, std::string *outnames)
HRESULT hrcom{CoInitialize(nullptr)};
switch(type)
{
- case DevProbe::Playback:
- PlaybackDevices.clear();
- hr = DirectSoundEnumerateW(DSoundEnumDevices, &PlaybackDevices);
- if(FAILED(hr))
- ERR("Error enumerating DirectSound playback devices (0x%lx)!\n", hr);
- std::for_each(PlaybackDevices.cbegin(), PlaybackDevices.cend(), add_device);
- break;
+ case DevProbe::Playback:
+ PlaybackDevices.clear();
+ hr = DirectSoundEnumerateW(DSoundEnumDevices, &PlaybackDevices);
+ if(FAILED(hr))
+ ERR("Error enumerating DirectSound playback devices (0x%lx)!\n", hr);
+ std::for_each(PlaybackDevices.cbegin(), PlaybackDevices.cend(), add_device);
+ break;
- case DevProbe::Capture:
- CaptureDevices.clear();
- hr = DirectSoundCaptureEnumerateW(DSoundEnumDevices, &CaptureDevices);
- if(FAILED(hr))
- ERR("Error enumerating DirectSound capture devices (0x%lx)!\n", hr);
- std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
- break;
+ case DevProbe::Capture:
+ CaptureDevices.clear();
+ hr = DirectSoundCaptureEnumerateW(DSoundEnumDevices, &CaptureDevices);
+ if(FAILED(hr))
+ ERR("Error enumerating DirectSound capture devices (0x%lx)!\n", hr);
+ std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
+ break;
}
if(SUCCEEDED(hrcom))
CoUninitialize();
+
+ return outnames;
}
BackendPtr DSoundBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/dsound.h b/alc/backends/dsound.h
index 6bef0bfc..d1948198 100644
--- a/alc/backends/dsound.h
+++ b/alc/backends/dsound.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/jack.cpp b/alc/backends/jack.cpp
index 0cad064d..f784fed9 100644
--- a/alc/backends/jack.cpp
+++ b/alc/backends/jack.cpp
@@ -504,18 +504,19 @@ bool JackBackendFactory::init()
bool JackBackendFactory::querySupport(BackendType type)
{ return (type == BackendType::Playback); }
-void JackBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string JackBackendFactory::probe(DevProbe type)
{
+ std::string outnames;
switch(type)
{
- case DevProbe::Playback:
- /* Includes null char. */
- outnames->append(jackDevice, sizeof(jackDevice));
- break;
-
- case DevProbe::Capture:
- break;
+ case DevProbe::Playback:
+ /* Includes null char. */
+ outnames.append(jackDevice, sizeof(jackDevice));
+ break;
+ case DevProbe::Capture:
+ break;
}
+ return outnames;
}
BackendPtr JackBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/jack.h b/alc/backends/jack.h
index 10beebfb..793d6f8e 100644
--- a/alc/backends/jack.h
+++ b/alc/backends/jack.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/loopback.cpp b/alc/backends/loopback.cpp
index 511061f3..44ac68d1 100644
--- a/alc/backends/loopback.cpp
+++ b/alc/backends/loopback.cpp
@@ -66,8 +66,8 @@ bool LoopbackBackendFactory::init()
bool LoopbackBackendFactory::querySupport(BackendType)
{ return true; }
-void LoopbackBackendFactory::probe(DevProbe, std::string*)
-{ }
+std::string LoopbackBackendFactory::probe(DevProbe)
+{ return std::string{}; }
BackendPtr LoopbackBackendFactory::createBackend(ALCdevice *device, BackendType)
{ return BackendPtr{new LoopbackBackend{device}}; }
diff --git a/alc/backends/loopback.h b/alc/backends/loopback.h
index 09c085b8..df4929e6 100644
--- a/alc/backends/loopback.h
+++ b/alc/backends/loopback.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/null.cpp b/alc/backends/null.cpp
index 4cdebf57..1b90a1ee 100644
--- a/alc/backends/null.cpp
+++ b/alc/backends/null.cpp
@@ -154,17 +154,19 @@ bool NullBackendFactory::init()
bool NullBackendFactory::querySupport(BackendType type)
{ return (type == BackendType::Playback); }
-void NullBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string NullBackendFactory::probe(DevProbe type)
{
+ std::string outnames;
switch(type)
{
- case DevProbe::Playback:
- /* Includes null char. */
- outnames->append(nullDevice, sizeof(nullDevice));
- break;
- case DevProbe::Capture:
- break;
+ case DevProbe::Playback:
+ /* Includes null char. */
+ outnames.append(nullDevice, sizeof(nullDevice));
+ break;
+ case DevProbe::Capture:
+ break;
}
+ return outnames;
}
BackendPtr NullBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/null.h b/alc/backends/null.h
index f19d5b4d..1d714349 100644
--- a/alc/backends/null.h
+++ b/alc/backends/null.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/opensl.cpp b/alc/backends/opensl.cpp
index b1355061..d9ee47eb 100644
--- a/alc/backends/opensl.cpp
+++ b/alc/backends/opensl.cpp
@@ -939,16 +939,18 @@ bool OSLBackendFactory::init() { return true; }
bool OSLBackendFactory::querySupport(BackendType type)
{ return (type == BackendType::Playback || type == BackendType::Capture); }
-void OSLBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string OSLBackendFactory::probe(DevProbe type)
{
+ std::string outnames;
switch(type)
{
- case DevProbe::Playback:
- case DevProbe::Capture:
- /* Includes null char. */
- outnames->append(opensl_device, sizeof(opensl_device));
- break;
+ case DevProbe::Playback:
+ case DevProbe::Capture:
+ /* Includes null char. */
+ outnames.append(opensl_device, sizeof(opensl_device));
+ break;
}
+ return outnames;
}
BackendPtr OSLBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/opensl.h b/alc/backends/opensl.h
index 809aa339..4309293b 100644
--- a/alc/backends/opensl.h
+++ b/alc/backends/opensl.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/oss.cpp b/alc/backends/oss.cpp
index a24744c2..ef3ca556 100644
--- a/alc/backends/oss.cpp
+++ b/alc/backends/oss.cpp
@@ -670,32 +670,36 @@ bool OSSBackendFactory::init()
bool OSSBackendFactory::querySupport(BackendType type)
{ return (type == BackendType::Playback || type == BackendType::Capture); }
-void OSSBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string OSSBackendFactory::probe(DevProbe type)
{
- auto add_device = [outnames](const DevMap &entry) -> void
+ std::string outnames;
+
+ auto add_device = [&outnames](const DevMap &entry) -> void
{
struct stat buf;
if(stat(entry.device_name.c_str(), &buf) == 0)
{
/* Includes null char. */
- outnames->append(entry.name.c_str(), entry.name.length()+1);
+ outnames.append(entry.name.c_str(), entry.name.length()+1);
}
};
switch(type)
{
- case DevProbe::Playback:
- PlaybackDevices.clear();
- ALCossListPopulate(&PlaybackDevices, DSP_CAP_OUTPUT);
- std::for_each(PlaybackDevices.cbegin(), PlaybackDevices.cend(), add_device);
- break;
+ case DevProbe::Playback:
+ PlaybackDevices.clear();
+ ALCossListPopulate(&PlaybackDevices, DSP_CAP_OUTPUT);
+ std::for_each(PlaybackDevices.cbegin(), PlaybackDevices.cend(), add_device);
+ break;
- case DevProbe::Capture:
- CaptureDevices.clear();
- ALCossListPopulate(&CaptureDevices, DSP_CAP_INPUT);
- std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
- break;
+ case DevProbe::Capture:
+ CaptureDevices.clear();
+ ALCossListPopulate(&CaptureDevices, DSP_CAP_INPUT);
+ std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
+ break;
}
+
+ return outnames;
}
BackendPtr OSSBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/oss.h b/alc/backends/oss.h
index 9e63d7b6..4305dc78 100644
--- a/alc/backends/oss.h
+++ b/alc/backends/oss.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/portaudio.cpp b/alc/backends/portaudio.cpp
index 96eb1af4..7696e4f6 100644
--- a/alc/backends/portaudio.cpp
+++ b/alc/backends/portaudio.cpp
@@ -419,16 +419,18 @@ bool PortBackendFactory::init()
bool PortBackendFactory::querySupport(BackendType type)
{ return (type == BackendType::Playback || type == BackendType::Capture); }
-void PortBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string PortBackendFactory::probe(DevProbe type)
{
+ std::string outnames;
switch(type)
{
- case DevProbe::Playback:
- case DevProbe::Capture:
- /* Includes null char. */
- outnames->append(pa_device, sizeof(pa_device));
- break;
+ case DevProbe::Playback:
+ case DevProbe::Capture:
+ /* Includes null char. */
+ outnames.append(pa_device, sizeof(pa_device));
+ break;
}
+ return outnames;
}
BackendPtr PortBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/portaudio.h b/alc/backends/portaudio.h
index 082e9020..d88d78e1 100644
--- a/alc/backends/portaudio.h
+++ b/alc/backends/portaudio.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/pulseaudio.cpp b/alc/backends/pulseaudio.cpp
index e40204f5..102e3915 100644
--- a/alc/backends/pulseaudio.cpp
+++ b/alc/backends/pulseaudio.cpp
@@ -1501,14 +1501,16 @@ bool PulseBackendFactory::init()
bool PulseBackendFactory::querySupport(BackendType type)
{ return type == BackendType::Playback || type == BackendType::Capture; }
-void PulseBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string PulseBackendFactory::probe(DevProbe type)
{
- auto add_device = [outnames](const DevMap &entry) -> void
+ std::string outnames;
+
+ auto add_device = [&outnames](const DevMap &entry) -> void
{
/* +1 to also append the null char (to ensure a null-separated list and
* double-null terminated list).
*/
- outnames->append(entry.name.c_str(), entry.name.length()+1);
+ outnames.append(entry.name.c_str(), entry.name.length()+1);
};
switch(type)
@@ -1523,6 +1525,8 @@ void PulseBackendFactory::probe(DevProbe type, std::string *outnames)
std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
break;
}
+
+ return outnames;
}
BackendPtr PulseBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/pulseaudio.h b/alc/backends/pulseaudio.h
index 40f3e305..575eecc1 100644
--- a/alc/backends/pulseaudio.h
+++ b/alc/backends/pulseaudio.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/sdl2.cpp b/alc/backends/sdl2.cpp
index af3081f1..e894e6a6 100644
--- a/alc/backends/sdl2.cpp
+++ b/alc/backends/sdl2.cpp
@@ -193,22 +193,25 @@ bool SDL2BackendFactory::init()
bool SDL2BackendFactory::querySupport(BackendType type)
{ return type == BackendType::Playback; }
-void SDL2BackendFactory::probe(DevProbe type, std::string *outnames)
+std::string SDL2BackendFactory::probe(DevProbe type)
{
+ std::string outnames;
+
if(type != DevProbe::Playback)
- return;
+ return outnames;
int num_devices{SDL_GetNumAudioDevices(SDL_FALSE)};
/* Includes null char. */
- outnames->append(defaultDeviceName, sizeof(defaultDeviceName));
+ outnames.append(defaultDeviceName, sizeof(defaultDeviceName));
for(int i{0};i < num_devices;++i)
{
std::string name{DEVNAME_PREFIX};
name += SDL_GetAudioDeviceName(i, SDL_FALSE);
if(!name.empty())
- outnames->append(name.c_str(), name.length()+1);
+ outnames.append(name.c_str(), name.length()+1);
}
+ return outnames;
}
BackendPtr SDL2BackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/sdl2.h b/alc/backends/sdl2.h
index 041d47ee..3c6d09bc 100644
--- a/alc/backends/sdl2.h
+++ b/alc/backends/sdl2.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/sndio.cpp b/alc/backends/sndio.cpp
index 5b95a8f0..e9f11791 100644
--- a/alc/backends/sndio.cpp
+++ b/alc/backends/sndio.cpp
@@ -452,16 +452,18 @@ bool SndIOBackendFactory::init()
bool SndIOBackendFactory::querySupport(BackendType type)
{ return (type == BackendType::Playback || type == BackendType::Capture); }
-void SndIOBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string SndIOBackendFactory::probe(DevProbe type)
{
+ std::string outnames;
switch(type)
{
- case DevProbe::Playback:
- case DevProbe::Capture:
- /* Includes null char. */
- outnames->append(sndio_device, sizeof(sndio_device));
- break;
+ case DevProbe::Playback:
+ case DevProbe::Capture:
+ /* Includes null char. */
+ outnames.append(sndio_device, sizeof(sndio_device));
+ break;
}
+ return outnames;
}
BackendPtr SndIOBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/sndio.h b/alc/backends/sndio.h
index 1ed63d5e..5928ebd9 100644
--- a/alc/backends/sndio.h
+++ b/alc/backends/sndio.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/solaris.cpp b/alc/backends/solaris.cpp
index 93ab64cb..a6f1c3f0 100644
--- a/alc/backends/solaris.cpp
+++ b/alc/backends/solaris.cpp
@@ -270,21 +270,23 @@ bool SolarisBackendFactory::init()
bool SolarisBackendFactory::querySupport(BackendType type)
{ return type == BackendType::Playback; }
-void SolarisBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string SolarisBackendFactory::probe(DevProbe type)
{
+ std::string outnames;
switch(type)
{
- case DevProbe::Playback:
- {
- struct stat buf;
- if(stat(solaris_driver.c_str(), &buf) == 0)
- outnames->append(solaris_device, sizeof(solaris_device));
- }
- break;
+ case DevProbe::Playback:
+ {
+ struct stat buf;
+ if(stat(solaris_driver.c_str(), &buf) == 0)
+ outnames.append(solaris_device, sizeof(solaris_device));
+ }
+ break;
- case DevProbe::Capture:
- break;
+ case DevProbe::Capture:
+ break;
}
+ return outnames;
}
BackendPtr SolarisBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/solaris.h b/alc/backends/solaris.h
index 98b10593..14ace580 100644
--- a/alc/backends/solaris.h
+++ b/alc/backends/solaris.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/wasapi.cpp b/alc/backends/wasapi.cpp
index fc48d492..74c3afbe 100644
--- a/alc/backends/wasapi.cpp
+++ b/alc/backends/wasapi.cpp
@@ -1744,14 +1744,15 @@ bool WasapiBackendFactory::init()
bool WasapiBackendFactory::querySupport(BackendType type)
{ return type == BackendType::Playback || type == BackendType::Capture; }
-void WasapiBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string WasapiBackendFactory::probe(DevProbe type)
{
- auto add_device = [outnames](const DevMap &entry) -> void
+ std::string outnames;
+ auto add_device = [&outnames](const DevMap &entry) -> void
{
/* +1 to also append the null char (to ensure a null-separated list and
* double-null terminated list).
*/
- outnames->append(entry.name.c_str(), entry.name.length()+1);
+ outnames.append(entry.name.c_str(), entry.name.length()+1);
};
switch(type)
@@ -1766,6 +1767,8 @@ void WasapiBackendFactory::probe(DevProbe type, std::string *outnames)
std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
break;
}
+
+ return outnames;
}
BackendPtr WasapiBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/wasapi.h b/alc/backends/wasapi.h
index 067dd259..ef718a6f 100644
--- a/alc/backends/wasapi.h
+++ b/alc/backends/wasapi.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/wave.cpp b/alc/backends/wave.cpp
index f4fa2b70..2c4c4412 100644
--- a/alc/backends/wave.cpp
+++ b/alc/backends/wave.cpp
@@ -373,17 +373,19 @@ bool WaveBackendFactory::init()
bool WaveBackendFactory::querySupport(BackendType type)
{ return type == BackendType::Playback; }
-void WaveBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string WaveBackendFactory::probe(DevProbe type)
{
+ std::string outnames;
switch(type)
{
- case DevProbe::Playback:
- /* Includes null char. */
- outnames->append(waveDevice, sizeof(waveDevice));
- break;
- case DevProbe::Capture:
- break;
+ case DevProbe::Playback:
+ /* Includes null char. */
+ outnames.append(waveDevice, sizeof(waveDevice));
+ break;
+ case DevProbe::Capture:
+ break;
}
+ return outnames;
}
BackendPtr WaveBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/wave.h b/alc/backends/wave.h
index b9b62d7f..637d082c 100644
--- a/alc/backends/wave.h
+++ b/alc/backends/wave.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;
diff --git a/alc/backends/winmm.cpp b/alc/backends/winmm.cpp
index a2437496..cd63352f 100644
--- a/alc/backends/winmm.cpp
+++ b/alc/backends/winmm.cpp
@@ -590,28 +590,30 @@ bool WinMMBackendFactory::init()
bool WinMMBackendFactory::querySupport(BackendType type)
{ return type == BackendType::Playback || type == BackendType::Capture; }
-void WinMMBackendFactory::probe(DevProbe type, std::string *outnames)
+std::string WinMMBackendFactory::probe(DevProbe type)
{
- auto add_device = [outnames](const std::string &dname) -> void
+ std::string outnames;
+ auto add_device = [&outnames](const std::string &dname) -> void
{
/* +1 to also append the null char (to ensure a null-separated list and
* double-null terminated list).
*/
if(!dname.empty())
- outnames->append(dname.c_str(), dname.length()+1);
+ outnames.append(dname.c_str(), dname.length()+1);
};
switch(type)
{
- case DevProbe::Playback:
- ProbePlaybackDevices();
- std::for_each(PlaybackDevices.cbegin(), PlaybackDevices.cend(), add_device);
- break;
-
- case DevProbe::Capture:
- ProbeCaptureDevices();
- std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
- break;
+ case DevProbe::Playback:
+ ProbePlaybackDevices();
+ std::for_each(PlaybackDevices.cbegin(), PlaybackDevices.cend(), add_device);
+ break;
+
+ case DevProbe::Capture:
+ ProbeCaptureDevices();
+ std::for_each(CaptureDevices.cbegin(), CaptureDevices.cend(), add_device);
+ break;
}
+ return outnames;
}
BackendPtr WinMMBackendFactory::createBackend(ALCdevice *device, BackendType type)
diff --git a/alc/backends/winmm.h b/alc/backends/winmm.h
index e357ec19..28b66e98 100644
--- a/alc/backends/winmm.h
+++ b/alc/backends/winmm.h
@@ -9,7 +9,7 @@ public:
bool querySupport(BackendType type) override;
- void probe(DevProbe type, std::string *outnames) override;
+ std::string probe(DevProbe type) override;
BackendPtr createBackend(ALCdevice *device, BackendType type) override;