dxd - dynax driver framework 2.7.0d222
cross platform open source driver development framework
Loading...
Searching...
No Matches
dxd::wavert::stream< stream_desc_t > Class Template Referenceabstract

wavert::stream: cyclic WaveRT buffer with client notifications More...

#include <dxd_portcls_audio.h>

Inheritance diagram for dxd::wavert::stream< stream_desc_t >:
Collaboration diagram for dxd::wavert::stream< stream_desc_t >:

Public Types

typedef stream_desc_t stream_desc

Public Member Functions

void advance (unsigned int frames)
 backend clock: frames elapsed; signals every crossed notification boundary
 stream (::IPortWaveRTStream *port, const stream_desc_t &stream_desc, unsigned int idx, const ::WAVEFORMATEXTENSIBLE &wave)
virtual ~stream ()
 the derived stream stops itself before the buffer goes

Public Attributes

os_result status = not_initialized

Protected Member Functions

::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
virtual os_result start ()=0
virtual void stop ()=0
::NTSTATUS __stdcall UnregisterNotificationEvent (::KEVENT *event) override final

Protected Attributes

const unsigned int channels
const unsigned int idx
const unsigned int linesize
const unsigned int samplerate
bool started = false

Detailed Description

template<typename stream_desc_t>
class dxd::wavert::stream< stream_desc_t >

wavert::stream: cyclic WaveRT buffer with client notifications

The buffer is port-allocated and kernel-mapped; the byte position advances through advance(), driven by the backend's clock, signalling every registered notification event at each notification boundary. start()/stop() bind the stream to its backend.

Member Typedef Documentation

◆ stream_desc

template<typename stream_desc_t>
typedef stream_desc_t dxd::wavert::stream< stream_desc_t >::stream_desc

Constructor & Destructor Documentation

◆ stream()

template<typename stream_desc_t>
dxd::wavert::stream< stream_desc_t >::stream ( ::IPortWaveRTStream * port,
const stream_desc_t & stream_desc,
unsigned int idx,
const ::WAVEFORMATEXTENSIBLE & wave )
inline

◆ ~stream()

template<typename stream_desc_t>
virtual dxd::wavert::stream< stream_desc_t >::~stream ( )
inlinevirtual

the derived stream stops itself before the buffer goes

Here is the call graph for this function:

Member Function Documentation

◆ advance()

template<typename stream_desc_t>
void dxd::wavert::stream< stream_desc_t >::advance ( unsigned int frames)
inline

backend clock: frames elapsed; signals every crossed notification boundary

◆ AllocateAudioBuffer()

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

◆ AllocateBufferWithNotification()

template<typename stream_desc_t>
::NTSTATUS __stdcall dxd::wavert::stream< stream_desc_t >::AllocateBufferWithNotification ( unsigned long notifications,
unsigned long requested,
::MDL ** mdl,
unsigned long * actual,
unsigned long * offset,
::MEMORY_CACHING_TYPE * cache )
inlinefinaloverrideprotected

IMiniportWaveRTStreamNotification

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

◆ FreeAudioBuffer()

template<typename stream_desc_t>
void __stdcall dxd::wavert::stream< stream_desc_t >::FreeAudioBuffer ( ::MDL * mdl,
unsigned long size )
inlinefinaloverrideprotected
Here is the call graph for this function:

◆ FreeBufferWithNotification()

template<typename stream_desc_t>
void __stdcall dxd::wavert::stream< stream_desc_t >::FreeBufferWithNotification ( ::MDL * ,
unsigned long  )
inlinefinaloverrideprotected
Here is the caller graph for this function:

◆ GetClockRegister()

template<typename stream_desc_t>
::NTSTATUS __stdcall dxd::wavert::stream< stream_desc_t >::GetClockRegister ( ::KSRTAUDIO_HWREGISTER * )
inlinefinaloverrideprotected

◆ GetHWLatency()

template<typename stream_desc_t>
void __stdcall dxd::wavert::stream< stream_desc_t >::GetHWLatency ( ::KSRTAUDIO_HWLATENCY * latency)
inlinefinaloverrideprotected

◆ GetPosition()

template<typename stream_desc_t>
::NTSTATUS __stdcall dxd::wavert::stream< stream_desc_t >::GetPosition ( ::KSAUDIO_POSITION * position)
inlinefinaloverrideprotected

◆ GetPositionRegister()

template<typename stream_desc_t>
::NTSTATUS __stdcall dxd::wavert::stream< stream_desc_t >::GetPositionRegister ( ::KSRTAUDIO_HWREGISTER * )
inlinefinaloverrideprotected

◆ RegisterNotificationEvent()

template<typename stream_desc_t>
::NTSTATUS __stdcall dxd::wavert::stream< stream_desc_t >::RegisterNotificationEvent ( ::KEVENT * event)
inlinefinaloverrideprotected

◆ SetFormat()

template<typename stream_desc_t>
::NTSTATUS __stdcall dxd::wavert::stream< stream_desc_t >::SetFormat ( ::KSDATAFORMAT * )
inlinefinaloverrideprotected

IMiniportWaveRTStream

◆ SetState()

template<typename stream_desc_t>
::NTSTATUS __stdcall dxd::wavert::stream< stream_desc_t >::SetState ( ::KSSTATE state)
inlinefinaloverrideprotected
Here is the call graph for this function:

◆ start()

template<typename stream_desc_t>
virtual os_result dxd::wavert::stream< stream_desc_t >::start ( )
protectedpure virtual
Here is the caller graph for this function:

◆ stop()

template<typename stream_desc_t>
virtual void dxd::wavert::stream< stream_desc_t >::stop ( )
protectedpure virtual
Here is the caller graph for this function:

◆ UnregisterNotificationEvent()

template<typename stream_desc_t>
::NTSTATUS __stdcall dxd::wavert::stream< stream_desc_t >::UnregisterNotificationEvent ( ::KEVENT * event)
inlinefinaloverrideprotected

Member Data Documentation

◆ channels

template<typename stream_desc_t>
const unsigned int dxd::wavert::stream< stream_desc_t >::channels
protected

◆ idx

template<typename stream_desc_t>
const unsigned int dxd::wavert::stream< stream_desc_t >::idx
protected

◆ linesize

template<typename stream_desc_t>
const unsigned int dxd::wavert::stream< stream_desc_t >::linesize
protected

◆ samplerate

template<typename stream_desc_t>
const unsigned int dxd::wavert::stream< stream_desc_t >::samplerate
protected

◆ started

template<typename stream_desc_t>
bool dxd::wavert::stream< stream_desc_t >::started = false
protected

◆ status

template<typename stream_desc_t>
os_result dxd::wavert::stream< stream_desc_t >::status = not_initialized

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.