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);
155 virtual int SetSampleRate(jack_nframes_t sample_rate);
156 virtual int SetBufferSize(jack_nframes_t buffer_size);
158 virtual int GetInputLatency(
int port_index);
159 virtual int GetOutputLatency(
int port_index);
170 #include "JackCompilerDeps.h"
171 #include "driver_interface.h"
Base class for audio adapters.
Audio adapter using CoreAudio API.