20 #ifndef __JackCoreAudioDriver__    21 #define __JackCoreAudioDriver__    23 #include <AudioToolbox/AudioConverter.h>    24 #include <CoreAudio/CoreAudio.h>    25 #include <AudioUnit/AudioUnit.h>    26 #include "JackAudioDriver.h"    38 typedef UInt8   CAAudioHardwareDeviceSectionID;
    39 #define kAudioDeviceSectionInput        ((CAAudioHardwareDeviceSectionID)0x01)    40 #define kAudioDeviceSectionOutput       ((CAAudioHardwareDeviceSectionID)0x00)    41 #define kAudioDeviceSectionGlobal       ((CAAudioHardwareDeviceSectionID)0x00)    42 #define kAudioDeviceSectionWildcard     ((CAAudioHardwareDeviceSectionID)0xFF)    44 #define WAIT_COUNTER 60    45 #define WAIT_NOTIFICATION_COUNTER 30    64         AudioBufferList* fJackInputData;
    65         AudioBufferList* fDriverOutputData;
    67         AudioDeviceID fDeviceID;    
    68         AudioObjectID fPluginID;    
    70         AudioUnitRenderActionFlags* fActionFags;
    71         const AudioTimeStamp* fCurrentTime;
    76         char fCaptureUID[256];
    77         char fPlaybackUID[256];
    80         float fComputationGrain;
    81         bool fClockDriftCompensate;
    82         bool fDigitalPlayback;
    84         static OSStatus Render(
void *inRefCon,
    85                                AudioUnitRenderActionFlags *ioActionFlags,
    86                                const AudioTimeStamp *inTimeStamp,
    88                                UInt32 inNumberFrames,
    89                                AudioBufferList *ioData);
    91         static OSStatus AudioHardwareNotificationCallback(AudioHardwarePropertyID inPropertyID,
void* inClientData);
    93         static OSStatus DeviceNotificationCallback(AudioDeviceID inDevice,
    96                                                     AudioDevicePropertyID inPropertyID,
    99         static OSStatus SRNotificationCallback(AudioDeviceID inDevice,
   102                                                AudioDevicePropertyID inPropertyID,
   105         static OSStatus BSNotificationCallback(AudioDeviceID inDevice,
   108                                                 AudioDevicePropertyID inPropertyID,
   111         OSStatus GetDeviceIDFromUID(
const char* UID, AudioDeviceID* 
id);
   112         OSStatus GetDefaultDevice(AudioDeviceID* 
id);
   113         OSStatus GetDefaultInputDevice(AudioDeviceID* 
id);
   114         OSStatus GetDefaultOutputDevice(AudioDeviceID* 
id);
   115         OSStatus GetDeviceNameFromID(AudioDeviceID 
id, 
char* name);
   116         OSStatus GetTotalChannels(AudioDeviceID device, 
int& channelCount, 
bool isInput);
   117         OSStatus GetStreamLatencies(AudioDeviceID device, 
bool isInput, vector<int>& latencies);
   120         OSStatus CreateAggregateDevice(AudioDeviceID captureDeviceID, AudioDeviceID playbackDeviceID, jack_nframes_t samplerate, AudioDeviceID* outAggregateDevice);
   121         OSStatus CreateAggregateDeviceAux(vector<AudioDeviceID> captureDeviceID, vector<AudioDeviceID> playbackDeviceID, jack_nframes_t samplerate, AudioDeviceID* outAggregateDevice);
   122         OSStatus DestroyAggregateDevice();
   123         bool IsAggregateDevice(AudioDeviceID device);
   125         int SetupDevices(
const char* capture_driver_uid,
   126                          const char* playback_driver_uid,
   127                          char* capture_driver_name,
   128                          char* playback_driver_name,
   129                          jack_nframes_t samplerate,
   132         int SetupChannels(
bool capturing,
   140         int SetupBuffers(
int inchannels);
   141         void DisposeBuffers();
   143         int SetupBufferSize(jack_nframes_t buffer_size);
   144         int SetupSampleRate(jack_nframes_t samplerate);
   145         int SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes_t samplerate);
   147         int OpenAUHAL(
bool capturing,
   153                       const vector<int>& chan_in_list,
   154                       const vector<int>& chan_out_list,
   155                       jack_nframes_t nframes,
   156                       jack_nframes_t samplerate);
   160         void RemoveListeners();
   162         bool TakeHogAux(AudioDeviceID deviceID, 
bool isInput);
   165         void UpdateLatencies();
   167         bool IsDigitalDevice(AudioDeviceID device);
   168         OSStatus Render(AudioUnitRenderActionFlags* ioActionFlags, 
const AudioTimeStamp* inTimeStamp,  AudioBufferList* ioData);
   175         int Open(jack_nframes_t buffer_size,
   176                  jack_nframes_t samplerate,
   181                  const char* chan_in_list,
   182                  const char* chan_out_list,
   184                  const char* capture_driver_name,
   185                  const char* playback_driver_name,
   186                  jack_nframes_t capture_latency,
   187                  jack_nframes_t playback_latency,
   188                  int async_output_latency,
   189                  int computation_grain,
   206         bool IsFixedBufferSize()
   211         int SetBufferSize(jack_nframes_t buffer_size);
 
Locked Engine, access to methods is serialized using a mutex. 
Inter process synchronization using POSIX semaphore. 
The base class for audio drivers: drivers with audio ports.