dxd - dynax driver framework 3.0.1d223
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t > Class Template Reference

CoreAudio client device. More...

#include <dx_coreaudio_device.h>

Inheritance diagram for dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >:
Collaboration diagram for dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >:

Classes

class  clocksource
 the clock source as the HAL models it: a selector control object beside the device, its current item an ::AudioObjectID. The promoted carries the index into the available items instead, which is what a desc's clock settings are numbered by More...
class  icon
 the device's icon as a file system path; the HAL states it as a URL More...

Public Types

typedef desc_t desc_t
typedef event event_t
typedef promoted< uint32_t >::template preference< decltype(dx::device<::AudioObjectID, preference_t >::preference)> source_t
typedef stream_t stream_t

Public Member Functions

 _device (decltype(super::driver)&driver, decltype(super::id)&id)
void attach (channel_t **io[dx::stream::direction::directions][2], const std::vector< bool >(&channel_map)[2])
void conclude () noexcept override
 ends every group's session before the device's resources go; the start counts stay with their holders
void exception (const dx::exception &exception, bool filtered=false) const noexcept override
 notification exception handler
virtual uint64_t frame () const
virtual bool hw_clock () const noexcept
virtual void hw_clock (abstract::event *hw_clock, uint32_t iosize)
 registers a consumer with the device's clock: it is signalled every iosize samples of the clock's own advance. A bus whose driver owns the clock hands the registration on instead
void info (std::ostream &os) noexcept override
 log object class information
std::shared_ptr< stream_t > open (const typename desc_t::stream::desc &desc)
 the desc's stream: the registered one, else created, registered and launched
virtual device & operator>> (std::ostream &) const
 the device's own diagnostics, beyond dx::object::info
group_t & operator[] (const typename desc_t::stream::desc &stream)
 the stream's group, created on first use
virtual _device & reset ()
virtual void sleep ()
 notify system will sleep stub
virtual std::pair< source_t &, bool > source (const struct desc_t::stream &stream)
 the stream's source selector, created on first use: the preference by stream target, the value an index into the stream's sources
std::string string (uint8_t idx)
bool try_conclude () noexcept
 atomically conclude()s if currently launched; returns whether this call did it
bool try_launch ()
 atomically launch()es if not already launched; returns whether this call did it. A launch() that throws is concluded before the exception leaves: the object never claims a launch it did not finish
void wake () override
 ~_device () override
 the device class destructor

Public Attributes

promoted::property< typename super::client_map, typename super::client_map::value_t, false > clients {this->id, {.mSelector= property::device::clients}}
promoted< uint32_t >::preference< decltype(super::preference)> clocksource
dx::driver< decltype(id), preference_t > & driver
std::map< decltype(desc_t::stream::group), group_t > group
 streaming groups by desc::stream::group id: every stream of this device is registered with its group - behind the settings its groups listen to, so they go first
struct dx::stream::device:: { ... }  hw
promoted::property< icon, ::CFURLRef, false > icon {this->id, {.mSelector= ::kAudioDevicePropertyIcon}}
dx::coreaudio::_device::clocksource id
promoted< uint32_t >::preference< decltype(super::preference)> iosize
std::atomic< bool > launched {}
dx::stream::device::monitor monitor
preference_t preference {driver.preference[puuid]}
std::string puid
 persistent UID - system unique - could change with location
std::string puuid
 persistent universal UID - universally unique ID (i.e. serial number)
promoted::property<::Float64 > samplerate {this->id, {.mSelector= ::kAudioDevicePropertyNominalSampleRate}}
std::map< decltype(desc_t::stream::target.idx()), source_t > sources
promoted< structdesc_t::stream * >::template preference< decltype(super::preference), uint32_t > sync_reference
dx::stream::device::monitor version

Static Public Attributes

static constexpr bool hosted
 the transport's settings belong to another process' device: a hosted device mirrors them through its chains, it keeps no store of them

Protected Member Functions

virtual void grouped (group_t &)
 operator[](): a group just came into existence, a host wires its per-group transports here
virtual void launch ()
 launch notification: object mounted and ready to use. Called only through try_launch() - never call this directly from outside the class hierarchy.
virtual void process (const ::AudioTimeStamp *, const ::AudioBufferList *, const ::AudioTimeStamp *, ::AudioBufferList *, const ::AudioTimeStamp *)

Protected Attributes

std::vector< std::shared_ptr< typename super::stream_t > > io_streams
 the streams process() iterates: fixed between AudioDeviceStart and AudioDeviceStop and held for it, so the IOProc never touches the mutable streams map nor a stream its client let go

Friends

template<typename, typename>
class coreaudio::group
 the app wraps this bus's own group, so friendship has to name it, not just the device's group_t

Detailed Description

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
class dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >

CoreAudio client device.

Member Typedef Documentation

◆ desc_t

typedef desc_t dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::desc_t
inherited

◆ event_t

typedef event dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::event_t
inherited

◆ source_t

typedef promoted<uint32_t>::template preference<decltype(dx::device<::AudioObjectID, preference_t >::preference)> dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::source_t
inherited

◆ stream_t

typedef stream_t dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::stream_t
inherited

Constructor & Destructor Documentation

◆ _device()

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::_device ( decltype(super::driver)& driver,
decltype(super::id)& id )
inline

◆ ~_device()

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::~_device ( )
inlineoverride

the device class destructor

Member Function Documentation

◆ attach()

void dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::attach ( channel_t ** io[dx::stream::direction::directions][2],
const std::vector< bool >(&) channel_map[2] )
inlineinherited

◆ conclude()

void dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::conclude ( )
inlineoverridevirtualnoexceptinherited

ends every group's session before the device's resources go; the start counts stay with their holders

Reimplemented from dx::object.

◆ exception()

template<typename id_t, typename preference_t = dx::preference>
void dx::device< id_t, preference_t >::exception ( const dx::exception & exception,
bool filtered = false ) const
inlineoverridevirtualnoexceptinherited

notification exception handler

Implements dx::object.

Reimplemented in dx::proxy::device< preference_t >, dx::proxy::device< preference_t >, dx::proxy::device< dx::preference >, dx::proxy::device<>, dx::service::client::_device< desc_t, preference_t, stream_t, group_t >, dx::service::client::_device< desc, preference, stream< device< desc, preference, stream, group > >, group< device< desc, preference, stream, group > > >, dx::service::client::_device< desc_t, preference_t, stream_t< device< desc_t, preference_t, stream_t, group_t > >, group_t< device< desc_t, preference_t, stream_t, group_t > > >, dx::service::device< preference_t >, dx::service::device< dx::preference >, dx::service::device< super_device_t >, dx::usb::device< preference_t >, dx::usb::device< dx::preference >, dx::usb::platform::device< preference_t >, dx::usb::platform::device< preference_t >, dx::usb::platform::device< dx::preference >, dx::usb::platform::device< preference_t >, dx::usb::platform::device< preference_t >, dx::virtuel::stream::_device< desc_t, preference_t, stream_t, group_t >, dx::virtuel::stream::_device< desc, dx::preference, dx::stream::shared::stream< device< desc, dx::preference, dx::stream::shared::stream, group > >, group< device< desc, dx::preference, dx::stream::shared::stream, group > > >, dx::virtuel::stream::_device< desc_t, preference_t, stream_t< device< desc_t, preference_t, stream_t, group_t > >, group_t< device< desc_t, preference_t, stream_t, group_t > > >, and dx::wasapi::client::_device< desc, preference, stream< device< desc, preference, stream, group > >, group< device< desc, preference, stream, group > > >.

◆ frame()

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
virtual uint64_t dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::frame ( ) const
inlinevirtual

◆ grouped()

virtual void dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::grouped ( group_t & )
inlineprotectedvirtualinherited

operator[](): a group just came into existence, a host wires its per-group transports here

◆ hw_clock() [1/2]

virtual bool dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::hw_clock ( ) const
inlinevirtualnoexceptinherited

◆ hw_clock() [2/2]

virtual void dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::hw_clock ( abstract::event * hw_clock,
uint32_t iosize )
inlinevirtualinherited

registers a consumer with the device's clock: it is signalled every iosize samples of the clock's own advance. A bus whose driver owns the clock hands the registration on instead

◆ info()

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
void dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::info ( std::ostream & os)
inlineoverridevirtualnoexcept

◆ launch()

virtual void dx::object::launch ( )
inlineprotectedvirtualinherited

launch notification: object mounted and ready to use. Called only through try_launch() - never call this directly from outside the class hierarchy.

Reimplemented in dx::asio::client::driver< device_t, devices >, dx::asio::service::device< super_device_t >, dx::coreaudio::driver< device_t >, dx::coremidi::driver< device_t >, dx::map::driver< _device_t, holder_t >, dx::map::driver< device<> >, dx::map::driver< device_t >, dx::map::driver< device_t, dx::apartment< device_t > >, dx::midi::services::driver< device_t >, dx::proxy::driver< device_t >, dx::proxy::driver< device_t >, dx::service::app, dx::service::client::_device< desc_t, preference_t, stream_t, group_t >, dx::service::client::_device< desc, preference, stream< device< desc, preference, stream, group > >, group< device< desc, preference, stream, group > > >, dx::service::client::_device< desc_t, preference_t, stream_t< device< desc_t, preference_t, stream_t, group_t > >, group_t< device< desc_t, preference_t, stream_t, group_t > > >, dx::service::client::driver< device_t >, dx::service::device< preference_t >, dx::service::device< dx::preference >, dx::service::device< super_device_t >, dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >, dx::usb::stream::_device< desc_t, preference_t, stream_t, group_t >, dx::usb::stream::_device< desc_t, dx::preference, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >, dx::usb::stream::_device< desc_t, preference_t, stream_t< device< desc_t, preference_t, stream_t, group_t > >, group_t< device< desc_t, preference_t, stream_t, group_t > > >, dx::virtuel::driver< device_t >, dx::virtuel::driver< device<> >, and dx::wasapi::client::driver< device_t >.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ open()

std::shared_ptr< stream_t > dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::open ( const typename desc_t::stream::desc & desc)
inlineinherited

the desc's stream: the registered one, else created, registered and launched

◆ operator>>()

template<typename id_t, typename preference_t = dx::preference>
virtual device & dx::device< id_t, preference_t >::operator>> ( std::ostream & ) const
inlinevirtualinherited

the device's own diagnostics, beyond dx::object::info

◆ operator[]()

group_t & dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::operator[] ( const typename desc_t::stream::desc & stream)
inlineinherited

the stream's group, created on first use

◆ process()

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
virtual void dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::process ( const ::AudioTimeStamp * ,
const ::AudioBufferList * ,
const ::AudioTimeStamp * ,
::AudioBufferList * ,
const ::AudioTimeStamp *  )
inlineprotectedvirtual

◆ reset()

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
virtual _device & dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::reset ( )
inlinevirtual

◆ sleep()

template<typename id_t, typename preference_t = dx::preference>
virtual void dx::device< id_t, preference_t >::sleep ( )
inlinevirtualinherited

notify system will sleep stub

◆ source()

virtual std::pair< source_t &, bool > dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::source ( const struct desc_t::stream & stream)
inlinevirtualinherited

the stream's source selector, created on first use: the preference by stream target, the value an index into the stream's sources

◆ string()

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
std::string dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::string ( uint8_t idx)
inline

◆ try_conclude()

bool dx::object::try_conclude ( )
inlinenoexceptinherited

atomically conclude()s if currently launched; returns whether this call did it

Here is the call graph for this function:
Here is the caller graph for this function:

◆ try_launch()

bool dx::object::try_launch ( )
inlineinherited

atomically launch()es if not already launched; returns whether this call did it. A launch() that throws is concluded before the exception leaves: the object never claims a launch it did not finish

Here is the call graph for this function:
Here is the caller graph for this function:

◆ wake()

void dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::wake ( )
inlineoverridevirtualinherited

Reimplemented from dx::device< id_t, preference_t >.

◆ coreaudio::group

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
template<typename, typename>
friend class coreaudio::group
friend

the app wraps this bus's own group, so friendship has to name it, not just the device's group_t

Member Data Documentation

◆ clients

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
promoted::property<typename super::client_map, typename super::client_map::value_t, false> dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::clients {this->id, {.mSelector= property::device::clients}}

◆ clocksource

◆ driver

template<typename id_t, typename preference_t = dx::preference>
dx::driver<decltype(id), preference_t>& dx::device< id_t, preference_t >::driver
inherited

◆ group

std::map<decltype(desc_t::stream::group), group_t> dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::group
inherited

streaming groups by desc::stream::group id: every stream of this device is registered with its group - behind the settings its groups listen to, so they go first

◆ hosted

bool dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::hosted
staticconstexprinherited

the transport's settings belong to another process' device: a hosted device mirrors them through its chains, it keeps no store of them

◆ hw

struct { ... } dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::hw

◆ icon

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
promoted::property<icon, ::CFURLRef, false> dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::icon {this->id, {.mSelector= ::kAudioDevicePropertyIcon}}

◆ id

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
dx::coreaudio::_device::clocksource dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::id

◆ io_streams

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
std::vector<std::shared_ptr<typename super::stream_t> > dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::io_streams
protected

the streams process() iterates: fixed between AudioDeviceStart and AudioDeviceStop and held for it, so the IOProc never touches the mutable streams map nor a stream its client let go

◆ iosize

promoted<uint32_t>::preference<decltype(super::preference)> dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::iosize
inherited

◆ launched

std::atomic<bool> dx::object::launched {}
inherited

◆ monitor

dx::stream::device::monitor dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::monitor
inherited

◆ preference

template<typename id_t, typename preference_t = dx::preference>
preference_t dx::device< id_t, preference_t >::preference {driver.preference[puuid]}
inherited

◆ puid

template<typename id_t, typename preference_t = dx::preference>
std::string dx::device< id_t, preference_t >::puid
inherited

persistent UID - system unique - could change with location

◆ puuid

template<typename id_t, typename preference_t = dx::preference>
std::string dx::device< id_t, preference_t >::puuid
inherited

persistent universal UID - universally unique ID (i.e. serial number)

◆ samplerate

template<typename desc_t, typename preference_t, typename stream_t, typename group_t>
promoted::property<::Float64> dx::coreaudio::_device< desc_t, preference_t, stream_t, group_t >::samplerate {this->id, {.mSelector= ::kAudioDevicePropertyNominalSampleRate}}

◆ sources

std::map<decltype(desc_t::stream::target.idx()), source_t> dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::sources
inherited

source selectors by stream target: a stream with sources gets its own on first use

◆ sync_reference

promoted<structdesc_t::stream*>::template preference<decltype(super::preference), uint32_t> dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::sync_reference
inherited

◆ version

dx::stream::device::monitor dx::stream::device< dx::device<::AudioObjectID, preference_t >, desc_t, stream_t, group_t >::version
inherited

The documentation for this class was generated from the following file:

(c) copyright 2009 dynamic acoustics e.U. generated on

a closed source license may be obtained by requesting a written permission from dynamic acoustics e.U.
however - governmental use generally and military use especially is strictly prohibited though.