r8brain-free-src
High-quality pro audio sample rate converter library
Loading...
Searching...
No Matches
Public Member Functions | List of all members
r8b::CDSPProcessor Class Referenceabstract

The base virtual class for DSP processing algorithms. More...

#include <CDSPProcessor.h>

Inheritance diagram for r8b::CDSPProcessor:
r8b::CDSPBlockConvolver r8b::CDSPFracInterpolator r8b::CDSPHBDownsampler r8b::CDSPHBUpsampler r8b::CDSPResampler r8b::CDSPResampler16 r8b::CDSPResampler16IR r8b::CDSPResampler24

Public Member Functions

virtual void clear ()=0
 
virtual int getInLenBeforeOutPos (const int ReqOutPos) const =0
 
virtual int getLatency () const =0
 
virtual double getLatencyFrac () const =0
 
virtual int getMaxOutLen (const int MaxInLen) const =0
 
virtual int process (double *ip, int l0, double *&op0)=0
 

Detailed Description

The base virtual class for DSP processing algorithms.

This class can be used as a base class for various DSP processing algorithms (processors). DSP processors that are derived from this class can be seamlessly integrated into various DSP processing graphs.

Member Function Documentation

◆ clear()

virtual void r8b::CDSPProcessor::clear ( )
pure virtual

Function clears (resets) the state of *this object and returns it to the state after construction. All input data accumulated in the internal buffer so far will be discarded.

Implemented in r8b::CDSPBlockConvolver, r8b::CDSPFracInterpolator, r8b::CDSPHBDownsampler, r8b::CDSPHBUpsampler, and r8b::CDSPResampler.

◆ getInLenBeforeOutPos()

virtual int r8b::CDSPProcessor::getInLenBeforeOutPos ( const int  ReqOutPos) const
pure virtual

Function returns the number of input samples required to advance to the specified output sample position (so that the next process() call passes this output position), starting at the cleared or after-construction state of *this object.

Note that the implementation of this function assumes the caller only needs to estimate an initial buffering requirement; passing a full sample length value (e.g., greater than 100000) may overflow the calculation or cause rounding errors.

Parameters
ReqOutPosThe required output position. Set to 0 to obtain "input length before output start" latency. Must be a non-negative value.
Returns
The number of input samples required.

Implemented in r8b::CDSPBlockConvolver, r8b::CDSPFracInterpolator, r8b::CDSPHBDownsampler, r8b::CDSPHBUpsampler, and r8b::CDSPResampler.

◆ getLatency()

virtual int r8b::CDSPProcessor::getLatency ( ) const
pure virtual
Returns
The latency, in samples, which is present in the output signal. This value is usually zero if the DSP processor "consumes" the latency automatically.

Implemented in r8b::CDSPBlockConvolver, r8b::CDSPFracInterpolator, r8b::CDSPHBDownsampler, r8b::CDSPHBUpsampler, and r8b::CDSPResampler.

◆ getLatencyFrac()

virtual double r8b::CDSPProcessor::getLatencyFrac ( ) const
pure virtual
Returns
Fractional latency, in samples, which is present in the output signal. This value is usually zero if a linear-phase filtering is used. With minimum-phase filters in use, this value can be non-zero even if the getLatency() function returns zero.

Implemented in r8b::CDSPBlockConvolver, r8b::CDSPFracInterpolator, r8b::CDSPHBDownsampler, r8b::CDSPHBUpsampler, and r8b::CDSPResampler.

◆ getMaxOutLen()

virtual int r8b::CDSPProcessor::getMaxOutLen ( const int  MaxInLen) const
pure virtual
Parameters
MaxInLenThe number of samples planned to process at once, at most.
Returns
The maximal length of the output buffer required when processing the "MaxInLen" number of input samples.

Implemented in r8b::CDSPBlockConvolver, r8b::CDSPFracInterpolator, r8b::CDSPHBDownsampler, r8b::CDSPHBUpsampler, and r8b::CDSPResampler.

◆ process()

virtual int r8b::CDSPProcessor::process ( double *  ip,
int  l0,
double *&  op0 
)
pure virtual

Function performs DSP processing.

Parameters
ipInput data pointer.
l0How many samples to process.
[out]op0Output data pointer. The capacity of this buffer should be equal to the value returned by the getMaxOutLen() function for the given "l0". This buffer can be equal to "ip" only if the getMaxOutLen( l0 ) function returned a value lesser than "l0". This pointer can be incremented on function's return if latency compensation was performed by the processor. Note that on function's return, this pointer may point to some internal buffers, including the "ip" buffer, ignoring the originally passed value.
Returns
The number of output samples written to the "op0" buffer and available after processing. This value can be smaller or larger in comparison to the original "l0" value due to processing and filter's latency compensation that took place, and due to resampling if it was performed.

Implemented in r8b::CDSPFracInterpolator, r8b::CDSPHBDownsampler, r8b::CDSPHBUpsampler, r8b::CDSPBlockConvolver, and r8b::CDSPResampler.