dxd - dynax driver framework 3.0.1d223
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t > Class Template Reference

a pin's stream on the kernel driver: the ring is the driver's, mapped into this process, and this client is a participant in it - it anchors a cursor where the indices stand and never resets them (dx::stream::cursor) More...

#include <dx_proxy_stream_device.h>

Inheritance diagram for dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >:
Collaboration diagram for dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >:

Public Member Functions

template<typename channel_t>
super & attach (channel_t **io[2], const std::vector< bool > &channel_map, dx::stream::direction::direction direction)
 takes the driver's planar channel buffers for one pin of this stream
 stream (device_t &device, const decltype(super::id)&id, const super::desc &desc)
 ~stream () override

Public Attributes

dx::promoted< dx::stream::format >::chain format_server
 the driver owns the ring's format: a wish goes there and what it answers is what this stream runs

Protected Member Functions

void alloc (size_t size, bool free=true) override
 maps the driver's ring for this pin, sized as the request asks
void free () noexcept override

Detailed Description

template<typename device_t, typename circular_t = dx::circular, typename super_stream_t = dx::stream::control<dx::stream::object<device_t>>, typename event_t = dx::shared::event>
class dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >

a pin's stream on the kernel driver: the ring is the driver's, mapped into this process, and this client is a participant in it - it anchors a cursor where the indices stand and never resets them (dx::stream::cursor)

Constructor & Destructor Documentation

◆ stream()

template<typename device_t, typename circular_t = dx::circular, typename super_stream_t = dx::stream::control<dx::stream::object<device_t>>, typename event_t = dx::shared::event>
dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >::stream ( device_t & device,
const decltype(super::id)& id,
const super::desc & desc )
inline

start without touching the shared circular: the kernel hosting the ring resets it on its own session start - a client anchors its cursor to the indices as they stand; the group share, then the driver's own stream start IOCTL

◆ ~stream()

template<typename device_t, typename circular_t = dx::circular, typename super_stream_t = dx::stream::control<dx::stream::object<device_t>>, typename event_t = dx::shared::event>
dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >::~stream ( )
inlineoverride
Here is the call graph for this function:

Member Function Documentation

◆ alloc()

template<typename device_t, typename circular_t = dx::circular, typename super_stream_t = dx::stream::control<dx::stream::object<device_t>>, typename event_t = dx::shared::event>
void dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >::alloc ( size_t size,
bool free = true )
inlineoverrideprotected

maps the driver's ring for this pin, sized as the request asks

The ring is the driver's: alloc() asks for it and keeps the mapping, free() gives it back - the driver unmaps it with this client's reference, so the base's ::free() must never see it. The pin's own direction event travels along as the broadcast the driver signals.

Here is the call graph for this function:

◆ attach()

template<typename device_t, typename circular_t = dx::circular, typename super_stream_t = dx::stream::control<dx::stream::object<device_t>>, typename event_t = dx::shared::event>
template<typename channel_t>
super & dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >::attach ( channel_t ** io[2],
const std::vector< bool > & channel_map,
dx::stream< device_t, circular_t, super_stream_t, event_t >::direction::direction direction )
inline

takes the driver's planar channel buffers for one pin of this stream

Kernel streaming: the engine works on the driver's own double buffers instead of the ring, and the driver de-/interleaves them against it. The control block it returns carries the frame counter and the last two buffer switch timestamps.

Here is the call graph for this function:

◆ free()

template<typename device_t, typename circular_t = dx::circular, typename super_stream_t = dx::stream::control<dx::stream::object<device_t>>, typename event_t = dx::shared::event>
void dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >::free ( )
inlineoverrideprotectednoexcept
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ format_server

template<typename device_t, typename circular_t = dx::circular, typename super_stream_t = dx::stream::control<dx::stream::object<device_t>>, typename event_t = dx::shared::event>
dx::promoted<dx::stream::format>::chain dx::proxy::stream::stream< device_t, circular_t, super_stream_t, event_t >::format_server
Initial value:
{this->format,
this->format.commit(std::move(lock),
this->device.template ioctl<dx::stream::format, dx::stream::format_value<decltype(this->target)>>(
ioctl::stream::format, {this->target, value}));
}}
std::unique_lock< mutex_t > lock_t
Definition dx_value.h:75
the bus's device as a product composes it: the _device above with this bus's own stream and group,...
Definition dx_proxy_stream_device.h:435
@ format
get/set a stream's negotiated sample format
Definition macOS/dx_platform.h:147
IOCTLs namespace.
Definition macOS/dx_platform.h:121
a stream's negotiated sample format, addressed by the bus's own stream target
Definition dx_stream.h:308
what one sample frame looks like, container and content apart: the resolution inside the container's ...
Definition dx_stream.h:75

the driver owns the ring's format: a wish goes there and what it answers is what this stream runs

the driver owns the ring's format: a wish goes there and what it answers is what this stream runs


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.