dxd - dynax driver framework 3.0.1d223
cross platform open source driver development framework
Loading...
Searching...
No Matches
dxd::portcls::device< streaming_device_t >::stream Class Reference

WaveRT pin stream: exchanges the frames its device's tick hands it with its stream's ring. More...

#include <dxd_portcls_audio.h>

Inheritance diagram for dxd::portcls::device< streaming_device_t >::stream:
Collaboration diagram for dxd::portcls::device< streaming_device_t >::stream:

Public Types

typedef class device backend
typedef struct desc_t::stream stream_desc

Public Member Functions

void advance (unsigned int frames)
 backend clock: frames elapsed; signals every crossed notification boundary
bool exchange (dx::circular &circular, unsigned int frames, transfer transfer, volatile uint64_t &at)
 moves the frames elapsing with this tick between the WaveRT buffer and a ring
 stream (::IPortWaveRTStream *port, backend &device, const struct desc_t::stream &desc, unsigned int idx, const ::WAVEFORMATEXTENSIBLE &wave)
 the first endpoint to open binds the clock domain's rate: the engine opens its pins before it runs either
void tick (unsigned int frames)
 one tick: the elapsing frames move between this endpoint and its stream's ring - at the transport's index, or at this endpoint's anchor where it is a client, a capture endpoint taking silence without one
 ~stream () override
 the derived stream stops itself before the buffer goes

Public Attributes

os_result status

Protected Member Functions

os_result adopt (const dx::stream::format &ring)
 pairs this endpoint's format with the ring's; called once the endpoint proposed its own and the ring answered
::NTSTATUS __stdcall AllocateAudioBuffer (unsigned long requested, ::MDL **mdl, unsigned long *actual, unsigned long *offset, ::MEMORY_CACHING_TYPE *cache) override final
::NTSTATUS __stdcall AllocateBufferWithNotification (unsigned long notifications, unsigned long requested, ::MDL **mdl, unsigned long *actual, unsigned long *offset, ::MEMORY_CACHING_TYPE *cache) override final
void __stdcall FreeAudioBuffer (::MDL *mdl, unsigned long size) override final
void __stdcall FreeBufferWithNotification (::MDL *, unsigned long) override final
::NTSTATUS __stdcall GetClockRegister (::KSRTAUDIO_HWREGISTER *) override final
void __stdcall GetHWLatency (::KSRTAUDIO_HWLATENCY *latency) override final
::NTSTATUS __stdcall GetPosition (::KSAUDIO_POSITION *position) override final
::NTSTATUS __stdcall GetPositionRegister (::KSRTAUDIO_HWREGISTER *) override final
::NTSTATUS __stdcall RegisterNotificationEvent (::KEVENT *event) override final
::NTSTATUS __stdcall SetFormat (::KSDATAFORMAT *) override final
::NTSTATUS __stdcall SetState (::KSSTATE state) override final
::NTSTATUS __stdcall UnregisterNotificationEvent (::KEVENT *event) override final

Protected Attributes

const unsigned int channels
converter conversion
dx::stream::cursor cursor
 this endpoint's anchor in its ring as a client
const dx::stream::format format
 what Windows negotiated for this endpoint
const unsigned int idx
const unsigned int linesize
const unsigned int samplerate
bool started
bool transport
 this endpoint is its ring's transport

Friends

class device

Detailed Description

template<typename streaming_device_t>
class dxd::portcls::device< streaming_device_t >::stream

WaveRT pin stream: exchanges the frames its device's tick hands it with its stream's ring.

Member Typedef Documentation

◆ backend

template<typename streaming_device_t>
typedef class device dxd::portcls::device< streaming_device_t >::stream::backend

◆ stream_desc

typedef struct desc_t::stream dxd::wavert::stream< struct desc_t::stream >::stream_desc
inherited

Constructor & Destructor Documentation

◆ stream()

template<typename streaming_device_t>
dxd::portcls::device< streaming_device_t >::stream::stream ( ::IPortWaveRTStream * port,
backend & device,
const struct desc_t::stream & desc,
unsigned int idx,
const ::WAVEFORMATEXTENSIBLE & wave )
inline

the first endpoint to open binds the clock domain's rate: the engine opens its pins before it runs either

Here is the call graph for this function:

◆ ~stream()

template<typename streaming_device_t>
dxd::portcls::device< streaming_device_t >::stream::~stream ( )
inlineoverridevirtual

the derived stream stops itself before the buffer goes

Reimplemented from dxd::wavert::stream< struct desc_t::stream >.

Member Function Documentation

◆ adopt()

os_result dxd::wavert::stream< struct desc_t::stream >::adopt ( const dx::stream< struct desc_t::stream >::format & ring)
inlineprotectedinherited

pairs this endpoint's format with the ring's; called once the endpoint proposed its own and the ring answered

Here is the call graph for this function:

◆ advance()

void dxd::wavert::stream< struct desc_t::stream >::advance ( unsigned int frames)
inlineinherited

backend clock: frames elapsed; signals every crossed notification boundary

Here is the caller graph for this function:

◆ AllocateAudioBuffer()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::AllocateAudioBuffer ( unsigned long requested,
::MDL ** mdl,
unsigned long * actual,
unsigned long * offset,
::MEMORY_CACHING_TYPE * cache )
inlinefinaloverrideprotectedinherited
Here is the call graph for this function:

◆ AllocateBufferWithNotification()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::AllocateBufferWithNotification ( unsigned long notifications,
unsigned long requested,
::MDL ** mdl,
unsigned long * actual,
unsigned long * offset,
::MEMORY_CACHING_TYPE * cache )
inlinefinaloverrideprotectedinherited

IMiniportWaveRTStreamNotification

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

◆ exchange()

bool dxd::wavert::stream< struct desc_t::stream >::exchange ( dx::circular & circular,
unsigned int frames,
transfer transfer,
volatile uint64_t & at )
inlineinherited

moves the frames elapsing with this tick between the WaveRT buffer and a ring

A render endpoint's buffer feeds the ring, a capture endpoint's is fed from it, each wrapped at its own end, at the ring position given: the transport's index or this endpoint's own anchor. Without a transfer the buffer takes silence.

Here is the caller graph for this function:

◆ FreeAudioBuffer()

void __stdcall dxd::wavert::stream< struct desc_t::stream >::FreeAudioBuffer ( ::MDL * mdl,
unsigned long size )
inlinefinaloverrideprotectedinherited
Here is the call graph for this function:

◆ FreeBufferWithNotification()

void __stdcall dxd::wavert::stream< struct desc_t::stream >::FreeBufferWithNotification ( ::MDL * ,
unsigned long  )
inlinefinaloverrideprotectedinherited
Here is the caller graph for this function:

◆ GetClockRegister()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::GetClockRegister ( ::KSRTAUDIO_HWREGISTER * )
inlinefinaloverrideprotectedinherited

◆ GetHWLatency()

void __stdcall dxd::wavert::stream< struct desc_t::stream >::GetHWLatency ( ::KSRTAUDIO_HWLATENCY * latency)
inlinefinaloverrideprotectedinherited

◆ GetPosition()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::GetPosition ( ::KSAUDIO_POSITION * position)
inlinefinaloverrideprotectedinherited

◆ GetPositionRegister()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::GetPositionRegister ( ::KSRTAUDIO_HWREGISTER * )
inlinefinaloverrideprotectedinherited

◆ RegisterNotificationEvent()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::RegisterNotificationEvent ( ::KEVENT * event)
inlinefinaloverrideprotectedinherited

◆ SetFormat()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::SetFormat ( ::KSDATAFORMAT * )
inlinefinaloverrideprotectedinherited

IMiniportWaveRTStream

◆ SetState()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::SetState ( ::KSSTATE state)
inlinefinaloverrideprotectedinherited
Here is the call graph for this function:

◆ tick()

template<typename streaming_device_t>
void dxd::portcls::device< streaming_device_t >::stream::tick ( unsigned int frames)
inline

one tick: the elapsing frames move between this endpoint and its stream's ring - at the transport's index, or at this endpoint's anchor where it is a client, a capture endpoint taking silence without one

Here is the call graph for this function:

◆ UnregisterNotificationEvent()

::NTSTATUS __stdcall dxd::wavert::stream< struct desc_t::stream >::UnregisterNotificationEvent ( ::KEVENT * event)
inlinefinaloverrideprotectedinherited

◆ device

template<typename streaming_device_t>
friend class device
friend

Member Data Documentation

◆ channels

const unsigned int dxd::wavert::stream< struct desc_t::stream >::channels
protectedinherited

◆ conversion

converter dxd::wavert::stream< struct desc_t::stream >::conversion
protectedinherited

◆ cursor

dx::stream::cursor dxd::wavert::stream< struct desc_t::stream >::cursor
protectedinherited

this endpoint's anchor in its ring as a client

◆ format

const dx::stream::format dxd::wavert::stream< struct desc_t::stream >::format
protectedinherited

what Windows negotiated for this endpoint

◆ idx

const unsigned int dxd::wavert::stream< struct desc_t::stream >::idx
protectedinherited

◆ linesize

const unsigned int dxd::wavert::stream< struct desc_t::stream >::linesize
protectedinherited

◆ samplerate

const unsigned int dxd::wavert::stream< struct desc_t::stream >::samplerate
protectedinherited

◆ started

bool dxd::wavert::stream< struct desc_t::stream >::started
protectedinherited

◆ status

os_result dxd::wavert::stream< struct desc_t::stream >::status
inherited

◆ transport

bool dxd::wavert::stream< struct desc_t::stream >::transport
protectedinherited

this endpoint is its ring's transport


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.