|
dxd - dynax driver framework 3.0.0d222
cross platform open source driver development framework
|
the consumer twin of a bus's producing group: it owns this group's pins, its io buffers and ring positions, and runs the consumer data path on the group's own clock - one thread per group, so every group of every device streams in parallel More...
#include <dx_stream_engine_group.h>
Public Types | |
| typedef group_t::clock | clock |
| typedef device_t::desc_t | desc |
| typedef group_t::device_t | device_t |
| typedef _io_t | io_t |
| typedef _pin_t | pin_t |
Public Member Functions | |
| void | attach (const std::shared_ptr< pin_t > &pin) try |
| takes one of this group's pins into the data path, deriving its format conversion and, where the pin's stream says so, the sync reference from it | |
| catch (...) | |
| catch (...) | |
| catch (...) | |
| catch (...) | |
| catch (...) | |
| catch (...) | |
| catch (...) | |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| catch (const std::exception &__std_exception) | |
| catch (const std::exception &__std_exception) | |
| catch (const std::exception &__std_exception) | |
| catch (const std::exception &__std_exception) | |
| catch (const std::exception &__std_exception) | |
| catch (const std::exception &__std_exception) | |
| catch (const std::exception &__std_exception) | |
| virtual void | detach () noexcept |
| releases this group's pins, taking their streams and the clock registration with them: their shares end the session first, the tick works on its cache to the end | |
| virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END void | free () noexcept |
| DX_PRAGMA_IGNORE_RETURN_VALUE_END void | halt () noexcept override |
| this group's streaming session ends with its last started stream | |
| void | initialize (uint32_t iosize, const std::vector< bool >(&channel_map)[dx::stream::direction::directions]) try |
| void | run () override try |
| this group's streaming session begins: the started streams brought it here | |
| DX_PRAGMA_IGNORE_RETURN_VALUE_END uint32_t | samplerate () const try |
| void | samplerate (uint32_t samplerate) try |
| DX_PRAGMA_IGNORE_RETURN_VALUE_END void | take (device_t &device) try |
| takes a device's audio pins into this engine - the app's consumer beside the bus's own group | |
| ~group () override | |
Static Public Member Functions | |
| static DX_PRAGMA_IGNORE_RETURN_VALUE_END group * | attach (device_t &device) try |
| builds the audio pins of a device and hands each to the group of its own stream, returning the group that took them - the app's entry into streaming a device | |
| static DX_PRAGMA_IGNORE_RETURN_VALUE_END void | detach (device_t &device) noexcept |
| the symmetric teardown: every group of the device releases its pins while the device still stands - a pin destroyed with its group cascades into the device's group map, which is going by then | |
Public Attributes | |
| dx::stream::clock::monitor | asio_monitor {} |
| this client's own asio level, in process: every client writes its asio slots (incl. roundtrip), so a shared segment could not attribute them - irq/isr stay in the device's shared segment, written once by the host | |
| struct { | |
| circular_t * circular [direction::directions] | |
| dx::stream::channel::control * control | |
| kernel streaming: the reference stream's buffer switch More... | |
| force_read force_read | |
| force_write force_write | |
| struct { | |
| struct { | |
| uint32_t channels | |
| the ring's interleave More... | |
| uint32_t interval | |
| clock resolution: HW stream frame size in samples More... | |
| uint32_t linesize | |
| struct { | |
| uint32_t channels | |
| uint32_t index | |
| } pin | |
| this group's slice of it More... | |
| uint32_t safety_offset | |
| } io [direction::directions] | |
| direction::direction reference | |
| uint32_t samplerate | |
| int64_t trigger | |
| resync condition More... | |
| } sync | |
| } | cache |
| uint64_t | frame = 0 |
| bool | hw_clock = false |
| io_t ** | io [direction::directions][2] {} |
| uint32_t | iosize = 0 |
| bool | kernel_streaming = false |
| dx::stream::clock::monitor * | monitor = &asio_monitor |
| std::function< void()> | notify_hook = []{} |
| a streaming reset this group's clock signals | |
| std::function< void()> | overload_hook = []{} |
| a tick that came too late for its data | |
| std::shared_ptr< pin_t > | pin [direction::directions] |
| volatile uint64_t | position [direction::directions] {} |
| this engine's own rx/tx positions into the shared circulars | |
| std::function< void(int64_t timestamp)> | process_hook = [](int64_t){} |
| the app's places in this group's tick, set like every other hook of the control base | |
| listener< dx::listen< std::function< void(const uint32_t &)> > > | safety_offset_listener [direction::directions] |
| a margin set mid-session reaches the tick: it reads the cache, never the promoted | |
| std::function< void(uint32_t samplerate)> | samplerate_hook = [](uint32_t){} |
Protected Member Functions | |
| catch (...) | |
| catch (...) | |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN | catch (const dx::exception &__dx_exception) |
| catch (const std::exception &__std_exception) | |
| catch (const std::exception &__std_exception) | |
| void | notify () noexcept override |
| virtual void | notify (uint32_t samplerate) noexcept |
| notify sample rate change from device | |
| virtual void | overload () noexcept |
| virtual void | process (int64_t timestamp) noexcept |
| the consumer's own processing place, set like every other hook of this group's control base | |
| void | sync (const typename clock::clock_t::time_point &now) override try |
| DX_PRAGMA_IGNORE_RETURN_VALUE_END void | tick () override try |
| void | update () noexcept try |
the consumer twin of a bus's producing group: it owns this group's pins, its io buffers and ring positions, and runs the consumer data path on the group's own clock - one thread per group, so every group of every device streams in parallel
| in | case of an error returned by the underlaying API the device class throws a dx::exception. |
| typedef group_t::clock dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::clock |
| typedef device_t::desc_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::desc |
| typedef group_t::device_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::device_t |
| typedef _io_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::io_t |
| typedef _pin_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::pin_t |
|
inlineoverride |
|
inline |
takes one of this group's pins into the data path, deriving its format conversion and, where the pin's stream says so, the sync reference from it
| dx::exception |
|
inlinestatic |
builds the audio pins of a device and hands each to the group of its own stream, returning the group that took them - the app's entry into streaming a device
| dx::exception |
pin creation exception caught here to allow device inspection even if streaming is not possible - most likely due to exclusive access
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotected |
|
inlineprotected |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotected |
|
inlineprotected |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotected |
|
inlineprotected |
|
inline |
|
inline |
|
inline |
|
inlinevirtualnoexcept |
releases this group's pins, taking their streams and the clock registration with them: their shares end the session first, the tick works on its cache to the end
|
inlinestaticnoexcept |
the symmetric teardown: every group of the device releases its pins while the device still stands - a pin destroyed with its group cascades into the device's group map, which is going by then
|
inlinevirtualnoexcept |
|
inlineoverridenoexcept |
this group's streaming session ends with its last started stream
|
inline |
|
inlineoverrideprotectednoexcept |
|
inlineprotectedvirtualnoexcept |
notify sample rate change from device
|
inlineprotectedvirtualnoexcept |
|
inlineprotectedvirtualnoexcept |
the consumer's own processing place, set like every other hook of this group's control base
|
inlineoverride |
this group's streaming session begins: the started streams brought it here
|
inline |
|
inline |
|
inlineoverrideprotected |
|
inline |
takes a device's audio pins into this engine - the app's consumer beside the bus's own group
|
inlineoverrideprotected |
|
inlineprotectednoexcept |
| dx::stream::clock::monitor dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::asio_monitor {} |
this client's own asio level, in process: every client writes its asio slots (incl. roundtrip), so a shared segment could not attribute them - irq/isr stay in the device's shared segment, written once by the host
io[directions][double buffer][channel][sample]
| struct { ... } dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::cache |
| uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::channels |
the ring's interleave
| circular_t* dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::circular[direction::directions] |
| dx::stream::channel::control* dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::control |
kernel streaming: the reference stream's buffer switch
| force_read dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::force_read |
| force_write dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::force_write |
| uint64_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::frame = 0 |
| bool dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::hw_clock = false |
| uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::index |
| uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::interval |
clock resolution: HW stream frame size in samples
| struct { ... } dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::io[direction::directions] |
| io_t** dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::io[direction::directions][2] {} |
| uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::iosize = 0 |
| bool dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::kernel_streaming = false |
| uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::linesize |
| dx::stream::clock::monitor* dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::monitor = &asio_monitor |
| std::function<void()> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::notify_hook = []{} |
a streaming reset this group's clock signals
| std::function<void()> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::overload_hook = []{} |
a tick that came too late for its data
| struct { ... } dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::pin |
this group's slice of it
| std::shared_ptr<pin_t> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::pin[direction::directions] |
| volatile uint64_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::position[direction::directions] {} |
this engine's own rx/tx positions into the shared circulars
| std::function<void(int64_t timestamp)> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::process_hook = [](int64_t){} |
the app's places in this group's tick, set like every other hook of the control base
its data path, running on this group's own thread
| direction::direction dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::reference |
| uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::safety_offset |
| listener<dx::listen<std::function<void(const uint32_t&)> > > dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::safety_offset_listener[direction::directions] |
a margin set mid-session reaches the tick: it reads the cache, never the promoted
| uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::samplerate |
| std::function<void(uint32_t samplerate)> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::samplerate_hook = [](uint32_t){} |
| struct { ... } dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::sync |
| int64_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::trigger |
resync condition
| (c) copyright 2009 dynamic acoustics e.U. | generated on |