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.