20 #ifndef __JackCoreAudioAdapter__ 21 #define __JackCoreAudioAdapter__ 23 #include "JackAudioAdapterInterface.h" 26 #include <AudioToolbox/AudioConverter.h> 27 #include <CoreAudio/CoreAudio.h> 28 #include <AudioUnit/AudioUnit.h> 37 typedef UInt8 CAAudioHardwareDeviceSectionID;
38 #define kAudioDeviceSectionInput ((CAAudioHardwareDeviceSectionID)0x01) 39 #define kAudioDeviceSectionOutput ((CAAudioHardwareDeviceSectionID)0x00) 40 #define kAudioDeviceSectionGlobal ((CAAudioHardwareDeviceSectionID)0x00) 41 #define kAudioDeviceSectionWildcard ((CAAudioHardwareDeviceSectionID)0xFF) 43 #define WAIT_COUNTER 60 55 AudioBufferList* fInputData;
57 char fCaptureUID[256];
58 char fPlaybackUID[256];
63 AudioDeviceID fDeviceID;
64 AudioObjectID fPluginID;
66 vector<int> fInputLatencies;
67 vector<int> fOutputLatencies;
71 AudioUnitRenderActionFlags* fActionFags;
72 AudioTimeStamp* fCurrentTime;
73 bool fClockDriftCompensate;
75 static OSStatus Render(
void *inRefCon,
76 AudioUnitRenderActionFlags *ioActionFlags,
77 const AudioTimeStamp *inTimeStamp,
79 UInt32 inNumberFrames,
80 AudioBufferList *ioData);
82 static OSStatus AudioHardwareNotificationCallback(AudioHardwarePropertyID inPropertyID,
void* inClientData);
84 static OSStatus SRNotificationCallback(AudioDeviceID inDevice,
87 AudioDevicePropertyID inPropertyID,
89 static OSStatus DeviceNotificationCallback(AudioDeviceID inDevice,
92 AudioDevicePropertyID inPropertyID,
95 OSStatus GetDefaultDevice(AudioDeviceID*
id);
96 OSStatus GetTotalChannels(AudioDeviceID device,
int& channelCount,
bool isInput);
97 OSStatus GetDeviceIDFromUID(
const char* UID, AudioDeviceID*
id);
98 OSStatus GetDefaultInputDevice(AudioDeviceID*
id);
99 OSStatus GetDefaultOutputDevice(AudioDeviceID*
id);
100 OSStatus GetDeviceNameFromID(AudioDeviceID
id,
char* name);
101 AudioDeviceID GetDeviceIDFromName(
const char* name);
104 OSStatus CreateAggregateDevice(AudioDeviceID captureDeviceID, AudioDeviceID playbackDeviceID, jack_nframes_t samplerate, AudioDeviceID* outAggregateDevice);
105 OSStatus CreateAggregateDeviceAux(vector<AudioDeviceID> captureDeviceID, vector<AudioDeviceID> playbackDeviceID, jack_nframes_t samplerate, AudioDeviceID* outAggregateDevice);
106 OSStatus DestroyAggregateDevice();
107 bool IsAggregateDevice(AudioDeviceID device);
109 int SetupDevices(
const char* capture_driver_uid,
110 const char* playback_driver_uid,
111 char* capture_driver_name,
112 char* playback_driver_name,
113 jack_nframes_t samplerate);
115 int SetupChannels(
bool capturing,
123 int OpenAUHAL(
bool capturing,
129 jack_nframes_t buffer_size,
130 jack_nframes_t samplerate);
132 int SetupBufferSize(jack_nframes_t buffer_size);
133 int SetupSampleRate(jack_nframes_t samplerate);
134 int SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes_t samplerate);
136 int SetupBuffers(
int inchannels);
137 void DisposeBuffers();
141 void RemoveListeners();
143 int GetLatency(
int port_index,
bool input);
144 OSStatus GetStreamLatencies(AudioDeviceID device,
bool isInput, vector<int>& latencies);
146 OSStatus Render(AudioUnitRenderActionFlags *ioActionFlags,
147 const AudioTimeStamp *inTimeStamp,
148 UInt32 inNumberFrames,
149 AudioBufferList *ioData);
160 virtual int SetSampleRate(jack_nframes_t sample_rate);
161 virtual int SetBufferSize(jack_nframes_t buffer_size);
163 virtual int GetInputLatency(
int port_index);
164 virtual int GetOutputLatency(
int port_index);
175 #include "JackCompilerDeps.h" 176 #include "driver_interface.h" Base class for audio adapters.
Audio adapter using CoreAudio API.