AV module

DeviceManager

Enumerates and manages system audio and video devices.

#include <icy/av/devicemanager.h>

class DeviceManager

Defined in src/av/include/icy/av/devicemanager.h:210

Public Attributes

ReturnNameDescription
NullSignalDevicesChangedSignals when a system device is connected or removed. Emitted by the platform-specific DeviceWatcher.

DevicesChanged

NullSignal DevicesChanged

Type: NullSignal

Defined in src/av/include/icy/av/devicemanager.h:297

Signals when a system device is connected or removed. Emitted by the platform-specific DeviceWatcher.

NOTE: This signal may be emitted from a background thread (e.g. inotify thread on Linux, COM callback on Windows, CoreAudio listener on macOS). Handlers must be thread-safe and should NOT call back into DeviceManager to enumerate. Instead, post to the main thread or set a flag.

Public Methods

ReturnNameDescription
DeviceManager
~DeviceManager noexcept
boolgetCameras constPopulate devices with all connected video input (camera) devices.
boolgetMicrophones constPopulate devices with all connected audio input (microphone) devices.
boolgetSpeakers constPopulate devices with all connected audio output (speaker) devices.
boolgetDefaultCamera constReturn the default (or first available) camera.
boolgetDefaultMicrophone constReturn the default (or first available) microphone.
boolgetDefaultSpeaker constReturn the default (or first available) speaker.
boolfindCamera constFind a camera by display name or device id.
boolfindMicrophone constFind a microphone by display name or device id.
boolfindSpeaker constFind a speaker by display name or device id.
boolgetDeviceList constPopulate devices from the platform-specific backend for the given type.
intgetCapabilities const
voidsetWatcherReplace the active device watcher. Takes ownership.
DeviceWatcher *watcher const
voidprint constPrint all devices to the output stream.
std::vector< HardwareCodec >getHardwareCodecs constDetect available hardware-accelerated codecs via FFmpeg.
std::optional< std::pair< Device, Device::VideoCapability > >negotiateVideoCapture constResolve the best video capture parameters for a device.
std::optional< std::pair< Device, Device::AudioCapability > >negotiateAudioCapture constResolve the best audio capture parameters for a device. Returns std::nullopt if no microphone is available.
const AVInputFormat *findVideoInputFormat constFind base FFmpeg formats.
const AVInputFormat *findAudioInputFormat const

DeviceManager

DeviceManager()

Defined in src/av/include/icy/av/devicemanager.h:213


~DeviceManager

noexcept

~DeviceManager() noexcept

Defined in src/av/include/icy/av/devicemanager.h:214


getCameras

const

bool getCameras(std::vector< Device > & devices) const

Defined in src/av/include/icy/av/devicemanager.h:219

Populate devices with all connected video input (camera) devices.

Returns

True if enumeration succeeded (even if the list is empty).

Parameters

ParameterTypeDescription
devicesstd::vector< Device > &Output vector to fill.

getMicrophones

const

bool getMicrophones(std::vector< Device > & devices) const

Defined in src/av/include/icy/av/devicemanager.h:224

Populate devices with all connected audio input (microphone) devices.

Returns

True if enumeration succeeded.

Parameters

ParameterTypeDescription
devicesstd::vector< Device > &Output vector to fill.

getSpeakers

const

bool getSpeakers(std::vector< Device > & devices) const

Defined in src/av/include/icy/av/devicemanager.h:229

Populate devices with all connected audio output (speaker) devices.

Returns

True if enumeration succeeded.

Parameters

ParameterTypeDescription
devicesstd::vector< Device > &Output vector to fill.

getDefaultCamera

const

bool getDefaultCamera(Device & device) const

Defined in src/av/include/icy/av/devicemanager.h:234

Return the default (or first available) camera.

Returns

True if a camera was found.

Parameters

ParameterTypeDescription
deviceDevice &Output Device to fill.

getDefaultMicrophone

const

bool getDefaultMicrophone(Device & device) const

Defined in src/av/include/icy/av/devicemanager.h:239

Return the default (or first available) microphone.

Returns

True if a microphone was found.

Parameters

ParameterTypeDescription
deviceDevice &Output Device to fill.

getDefaultSpeaker

const

bool getDefaultSpeaker(Device & device) const

Defined in src/av/include/icy/av/devicemanager.h:244

Return the default (or first available) speaker.

Returns

True if a speaker was found.

Parameters

ParameterTypeDescription
deviceDevice &Output Device to fill.

findCamera

const

bool findCamera(std::string_view name, Device & device) const

Defined in src/av/include/icy/av/devicemanager.h:250

Find a camera by display name or device id.

Returns

True if a matching device was found.

Parameters

ParameterTypeDescription
namestd::string_viewThe name or id to search for.
deviceDevice &Output Device to fill if found.

findMicrophone

const

bool findMicrophone(std::string_view name, Device & device) const

Defined in src/av/include/icy/av/devicemanager.h:256

Find a microphone by display name or device id.

Returns

True if a matching device was found.

Parameters

ParameterTypeDescription
namestd::string_viewThe name or id to search for.
deviceDevice &Output Device to fill if found.

findSpeaker

const

bool findSpeaker(std::string_view name, Device & device) const

Defined in src/av/include/icy/av/devicemanager.h:262

Find a speaker by display name or device id.

Returns

True if a matching device was found.

Parameters

ParameterTypeDescription
namestd::string_viewThe name or id to search for.
deviceDevice &Output Device to fill if found.

getDeviceList

const

bool getDeviceList(Device::Type type, std::vector< av::Device > & devices) const

Defined in src/av/include/icy/av/devicemanager.h:268

Populate devices from the platform-specific backend for the given type.

Returns

True if enumeration succeeded.

Parameters

ParameterTypeDescription
typeDevice::TypeThe device type to enumerate.
devicesstd::vector< av::Device > &Output vector to fill.

getCapabilities

const

int getCapabilities() const

Defined in src/av/include/icy/av/devicemanager.h:271

Returns

A bitmask of MediaCapabilities flags indicating which capture/render types are available.


setWatcher

void setWatcher(DeviceWatcher * watcher)

Defined in src/av/include/icy/av/devicemanager.h:275

Replace the active device watcher. Takes ownership.

Parameters

ParameterTypeDescription
watcherDeviceWatcher *The new DeviceWatcher, or nullptr to disable watching.

watcher

const

DeviceWatcher * watcher() const

Defined in src/av/include/icy/av/devicemanager.h:278

Returns

The currently active DeviceWatcher, or nullptr if none has been set.


print

const

void print(std::ostream & ost) const

Defined in src/av/include/icy/av/devicemanager.h:281

Print all devices to the output stream.


getHardwareCodecs

const

std::vector< HardwareCodec > getHardwareCodecs() const

Defined in src/av/include/icy/av/devicemanager.h:307

Detect available hardware-accelerated codecs via FFmpeg.


negotiateVideoCapture

const

std::optional< std::pair< Device, Device::VideoCapability > > negotiateVideoCapture(std::string_view deviceName, int width, int height, double fps) const

Defined in src/av/include/icy/av/devicemanager.h:321

Resolve the best video capture parameters for a device.

Looks up the device by name/id (or default camera if empty), queries its capabilities, and returns the closest match. Returns std::nullopt if no camera is available.

Usage: if (auto result = devman.negotiateVideoCapture("", 1280, 720, 30)) { auto& [dev, cap] = *result; capture.openVideo(dev.id, cap.width, cap.height, cap.maxFps, cap.pixelFormat); }


negotiateAudioCapture

const

std::optional< std::pair< Device, Device::AudioCapability > > negotiateAudioCapture(std::string_view deviceName, int sampleRate, int channels) const

Defined in src/av/include/icy/av/devicemanager.h:326

Resolve the best audio capture parameters for a device. Returns std::nullopt if no microphone is available.


findVideoInputFormat

const

const AVInputFormat * findVideoInputFormat() const

Defined in src/av/include/icy/av/devicemanager.h:330

Find base FFmpeg formats.


findAudioInputFormat

const

const AVInputFormat * findAudioInputFormat() const

Defined in src/av/include/icy/av/devicemanager.h:331

Public Static Methods

ReturnNameDescription
DeviceManager &instance staticReturns the default DeviceManager singleton.
voidshutdown staticShuts down the MediaFactory and deletes the singleton instance.

instance

static

static DeviceManager & instance()

Defined in src/av/include/icy/av/devicemanager.h:284

Returns the default DeviceManager singleton.


shutdown

static

static void shutdown()

Defined in src/av/include/icy/av/devicemanager.h:287

Shuts down the MediaFactory and deletes the singleton instance.

Protected Attributes

ReturnNameDescription
std::unique_ptr< DeviceWatcher >_watcher

_watcher

std::unique_ptr< DeviceWatcher > _watcher

Type: std::unique_ptr< DeviceWatcher >

Defined in src/av/include/icy/av/devicemanager.h:335