IOAudioTimeIntervalFilter.h [plain text]
#ifndef _IOAUDIOTIMEINTERVALFILTER_H
#define _IOAUDIOTIMEINTERVALFILTER_H
#include "BigNum128.h"
class IOAudioTimeIntervalFilter : public OSObject
{
OSDeclareAbstractStructors(IOAudioTimeIntervalFilter)
public:
virtual IOReturn reInitialiseFilter(uint32_t expectedInterval = 0, uint32_t multiIntervalCount = 1 );
virtual void free();
virtual AbsoluteTime newTimePosition(AbsoluteTime rawSnapshot);
virtual uint64_t getMultiIntervalTime(void);
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 0 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 1 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 2 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 3 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 4 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 5 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 6 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 7 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 8 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 9 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 10 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 11 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 12 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 13 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 14 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilter, 15 );
protected:
struct ExpansionData
{
};
ExpansionData *reserved;
virtual bool initFilter(uint32_t expectedInterval, uint32_t multiIntervalCount = 1);
virtual uint64_t calculateNewTimePosition(uint64_t rawSnapshot) = 0;
inline int decCircularBufferPosition(int n, int dec = 1) { return (n + mMultiIntervalCount - dec) % mMultiIntervalCount; }
inline int incCircularBufferPosition(int n, int inc = 1) { return (n + mMultiIntervalCount + inc) % mMultiIntervalCount; }
uint32_t mExpectedInterval;
uint32_t mMultiIntervalCount;
uint64_t* mIntervalTimeHistory;
int mIntervalTimeHistoryPointer;
uint64_t mFilterCount;
IOLock* timeIntervalLock;
};
class IOAudioTimeIntervalFilterIIR : public IOAudioTimeIntervalFilter
{
OSDeclareDefaultStructors(IOAudioTimeIntervalFilterIIR)
public:
virtual bool initFilter(uint32_t expectedInterval, uint32_t multiIntervalCount = 1, uint16_t filterCoef = 4);
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 0 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 1 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 2 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 3 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 4 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 5 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 6 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 7 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 8 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 9 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 10 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 11 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 12 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 13 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 14 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterIIR, 15 );
protected:
virtual void IIR(U128* filterVal, U128 input, int shiftAmount);
virtual uint64_t calculateNewTimePosition(uint64_t rawSnapshot);
U128 mFilteredSnapshot;
U128 mFilteredOffset;
uint16_t mIIRCoef;
};
class IOAudioTimeIntervalFilterFIR : public IOAudioTimeIntervalFilter
{
OSDeclareDefaultStructors(IOAudioTimeIntervalFilterFIR)
public:
virtual bool initFilter(uint32_t expectedInterval, uint32_t multiIntervalCount = 1);
virtual void free();
IOReturn reInitialiseFilter(uint32_t expectedInterval = 0, uint32_t multiIntervalCount = 1 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 0 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 1 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 2 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 3 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 4 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 5 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 6 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 7 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 8 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 9 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 10 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 11 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 12 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 13 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 14 );
OSMetaClassDeclareReservedUnused (IOAudioTimeIntervalFilterFIR, 15 );
protected:
virtual uint64_t calculateNewTimePosition(uint64_t rawSnapshot);
virtual IOReturn setNewFilter(uint32_t numCoeffs, const uint64_t* filterCoefficients, uint32_t scale);
U128 FIR(uint64_t *history, uint64_t input);
uint64_t* mCoeffs;
uint64_t* mDataOffsetHistory;
uint64_t* mDataHistory;
uint32_t mNumCoeffs;
uint32_t mFilterScale;
uint32_t mFilterWritePointer;
};
#endif // _IOAUDIOTIMEINTERVALFILTER_H