IOAudioEngineUserClient.h [plain text]
#ifndef _IOKIT_IOAUDIOENGINEUSERCLIENT_H
#define _IOKIT_IOAUDIOENGINEUSERCLIENT_H
#include <IOKit/IOUserClient.h>
#ifndef IOAUDIOFAMILY_SELF_BUILD
#include <IOKit/audio/IOAudioEngine.h>
#include <IOKit/audio/IOAudioTypes.h>
#else
#include "IOAudioEngine.h"
#include "IOAudioTypes.h"
#endif
#include <IOKit/IOBufferMemoryDescriptor.h>
class IOAudioEngine;
class IOAudioStream;
class IOMemoryDescriptor;
class IOCommandGate;
class IOWorkLoop;
class IOAudioEngineUserClient;
class IOAudioClientBufferSet;
struct IOAudioFormatNotification;
typedef struct IOAudioClientBuffer
{
IOAudioEngineUserClient *userClient;
IOAudioStream *audioStream;
void *sourceBuffer;
IOMemoryDescriptor *sourceBufferDescriptor;
IOMemoryMap *sourceBufferMap;
void *unmappedSourceBuffer;
UInt32 numSampleFrames;
UInt32 numChannels;
IOAudioEnginePosition mixedPosition;
struct IOAudioClientBuffer *mNextBuffer32;
struct IOAudioClientBuffer *nextClip;
struct IOAudioClientBuffer *previousClip;
struct IOAudioClientBuffer *nextClient;
IOAudioBufferDataDescriptor *bufferDataDescriptor;
} IOAudioClientBuffer;
typedef struct IOAudioClientBuffer64
{
IOAudioClientBuffer mAudioClientBuffer32;
mach_vm_address_t mUnmappedSourceBuffer64;
struct IOAudioClientBuffer64 *mNextBuffer64;
} IOAudioClientBuffer64;
typedef struct IOAudioClientBufferExtendedInfo
{
UInt32 bufferSetID;
void *paramBuffer;
IOMemoryDescriptor *paramBufferDescriptor;
IOMemoryMap *paramBufferMap;
void *unmappedParamBuffer;
struct IOAudioClientBufferExtendedInfo *mNextExtended;
} IOAudioClientBufferExtendedInfo;
typedef struct IOAudioClientBufferExtendedInfo64
{
IOAudioClientBufferExtendedInfo mAudioClientBufferExtended32;
mach_vm_address_t mUnmappedParamBuffer64;
struct IOAudioClientBufferExtendedInfo64 *mNextExtended64;
} IOAudioClientBufferExtendedInfo64;
class IOAudioEngineUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOAudioEngineUserClient)
friend class IOAudioEngine;
friend class IOAudioClientBufferSet;
friend class IOAudioStream;
protected:
IOAudioEngine *audioEngine;
IOWorkLoop *workLoop;
IOCommandGate *commandGate;
IOExternalMethod old_methods[5]; IOExternalTrap trap;
task_t clientTask;
UInt32 numSampleFrames;
IOAudioClientBufferSet *clientBufferSetList;
IORecursiveLock *clientBufferLock;
IOAudioNotificationMessage *notificationMessage;
bool online;
protected:
struct ExpansionData {
IOAudioClientBufferExtendedInfo64 *extendedInfo;
IOExternalMethod methods[kIOAudioEngineNumCalls]; UInt32 classicMode;
UInt32 commandGateStatus; SInt32 commandGateUsage; };
ExpansionData *reserved;
public:
virtual IOReturn externalMethod( uint32_t selector, IOExternalMethodArguments * arguments, IOExternalMethodDispatch * dispatch,
OSObject * target, void * reference);
virtual IOReturn registerClientParameterBuffer (void * parameterBuffer, UInt32 bufferSetID); virtual IOAudioClientBufferExtendedInfo * findExtendedInfo(UInt32 bufferSetID);
virtual IOReturn getNearestStartTime(IOAudioStream *audioStream, IOAudioTimeStamp *ioTimeStamp, UInt32 isInput);
virtual IOReturn getClientNearestStartTime(IOAudioStream *audioStream, IOAudioTimeStamp *ioTimeStamp, UInt32 isInput);
virtual IOReturn safeRegisterClientBuffer(UInt32 audioStreamIndex, void * sourceBuffer, UInt32 bufSizeInBytes, UInt32 bufferSetID);
virtual bool initWithAudioEngine(IOAudioEngine *engine, task_t task, void *securityToken, UInt32 type, OSDictionary *properties);
virtual IOReturn safeRegisterClientBuffer64(UInt32 audioStreamIndex, mach_vm_address_t * sourceBuffer, UInt32 bufSizeInBytes, UInt32 bufferSetID);
virtual IOReturn registerClientBuffer64(IOAudioStream *audioStream, mach_vm_address_t sourceBuffer, UInt32 bufSizeInBytes, UInt32 bufferSetID);
virtual IOReturn registerBuffer64(IOAudioStream *audioStream, mach_vm_address_t sourceBuffer, UInt32 bufSizeInBytes, UInt32 bufferSetID);
virtual IOReturn unregisterBuffer64(mach_vm_address_t sourceBuffer, UInt32 bufferSetID);
virtual IOReturn unregisterClientBuffer64(mach_vm_address_t * sourceBuffer, UInt32 bufferSetID);
virtual IOAudioClientBufferExtendedInfo64 * findExtendedInfo64(UInt32 bufferSetID);
private:
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 0);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 1);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 2);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 3);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 4);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 5);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 6);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 7);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 8);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 9);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 10);
OSMetaClassDeclareReservedUsed(IOAudioEngineUserClient, 11);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 12);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 13);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 14);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 15);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 16);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 17);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 18);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 19);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 20);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 21);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 22);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 23);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 24);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 25);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 26);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 27);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 28);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 29);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 30);
OSMetaClassDeclareReservedUnused(IOAudioEngineUserClient, 31);
protected:
virtual IOReturn clientClose();
virtual IOReturn clientDied();
static IOReturn _closeClientAction(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3); static IOReturn closeClientAction(OSObject *owner, void *arg1, void *arg2, void *arg3, void *arg4);
virtual IOReturn closeClient();
virtual IOReturn clientMemoryForType(UInt32 type, UInt32 *flags, IOMemoryDescriptor **memory);
virtual IOExternalMethod *getExternalMethodForIndex(UInt32 index);
virtual IOExternalTrap *getExternalTrapForIndex(UInt32 index);
virtual IOReturn registerNotificationPort(mach_port_t port, UInt32 type, UInt32 refCon);
static IOReturn _registerNotificationAction(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3); static IOReturn registerNotificationAction(OSObject *owner, void *arg1, void *arg2, void *arg3, void *arg4);
virtual IOReturn registerNotification(mach_port_t port, UInt32 refCon);
virtual void setOnline(bool newOnline);
virtual IOReturn performClientOutput(UInt32 firstSampleFrame, UInt32 loopCount, IOAudioClientBufferSet *bufferSet, UInt32 sampleIntervalHi, UInt32 sampleIntervalLo);
virtual IOReturn performClientInput(UInt32 firstSampleFrame, IOAudioClientBufferSet *bufferSet);
virtual void performWatchdogOutput(IOAudioClientBufferSet *clientBufferSet, UInt32 generationCount);
virtual void lockBuffers();
virtual void unlockBuffers();
static void setCommandGateUsage(IOAudioEngineUserClient *userClient, bool increment);
public:
static IOAudioEngineUserClient *withAudioEngine(IOAudioEngine *engine, task_t clientTask, void *securityToken, UInt32 type);
static IOAudioEngineUserClient *withAudioEngine(IOAudioEngine *engine, task_t clientTask, void *securityToken, UInt32 type, OSDictionary *properties);
virtual bool initWithAudioEngine(IOAudioEngine *engine, task_t task, void *securityToken, UInt32 type);
virtual void free();
virtual void freeClientBufferSetList();
virtual void freeClientBuffer(IOAudioClientBuffer64 *clientBuffer);
virtual void stop(IOService *provider);
virtual bool isOnline();
virtual IOReturn registerBuffer(IOAudioStream *audioStream, void* sourceBuffer, UInt32 bufSizeInBytes, UInt32 bufferSetID);
virtual IOReturn unregisterBuffer( void * sourceBuffer, UInt32 bufferSetID);
static IOReturn _registerBufferAction(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3); static IOReturn registerBufferAction(OSObject *owner, void *arg1, void *arg2, void *arg3, void *arg4);
static IOReturn _unregisterBufferAction(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3); static IOReturn unregisterBufferAction(OSObject *owner, void *arg1, void *arg2, void *arg3, void *arg4);
virtual IOReturn registerClientBuffer(IOAudioStream *audioStream, void * sourceBuffer, UInt32 bufSizeInBytes, UInt32 bufferSetID);
virtual IOReturn unregisterClientBuffer(void * sourceBuffer, UInt32 bufferSetID);
static IOReturn _getNearestStartTimeAction(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3); static IOReturn getNearestStartTimeAction(OSObject *owner, void *arg1, void *arg2, void *arg3, void *arg4);
virtual IOAudioClientBufferSet *findBufferSet(UInt32 bufferSetID);
virtual void removeBufferSet(IOAudioClientBufferSet *bufferSet);
virtual IOReturn getConnectionID(UInt32 *connectionID);
virtual IOReturn clientStart();
virtual IOReturn clientStop();
static IOReturn _startClientAction(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3); static IOReturn startClientAction(OSObject *owner, void *arg1, void *arg2, void *arg3, void *arg4);
static IOReturn _stopClientAction(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3); static IOReturn stopClientAction(OSObject *owner, void *arg1, void *arg2, void *arg3, void *arg4);
virtual IOReturn startClient();
virtual IOReturn stopClient();
virtual IOReturn performClientIO(UInt32 firstSampleFrame, UInt32 loopCount, bool inputIO, UInt32 bufferSetID, UInt32 sampleIntervalHi, UInt32 sampleIntervalLo);
virtual void sendFormatChangeNotification(IOAudioStream *audioStream);
virtual IOReturn sendNotification(UInt32 notificationType);
};
#endif