PortAudio 2.0
pa_mac_core_internal.h
Go to the documentation of this file.
1/*
2 * Internal interfaces for PortAudio Apple AUHAL implementation
3 *
4 * PortAudio Portable Real-Time Audio Library
5 * Latest Version at: http://www.portaudio.com
6 *
7 * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code.
8 * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation)
9 *
10 * Dominic's code was based on code by Phil Burk, Darren Gibbs,
11 * Gord Peters, Stephane Letz, and Greg Pfiel.
12 *
13 * The following people also deserve acknowledgements:
14 *
15 * Olivier Tristan for feedback and testing
16 * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O
17 * interface.
18 *
19 *
20 * Based on the Open Source API proposed by Ross Bencina
21 * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining
24 * a copy of this software and associated documentation files
25 * (the "Software"), to deal in the Software without restriction,
26 * including without limitation the rights to use, copy, modify, merge,
27 * publish, distribute, sublicense, and/or sell copies of the Software,
28 * and to permit persons to whom the Software is furnished to do so,
29 * subject to the following conditions:
30 *
31 * The above copyright notice and this permission notice shall be
32 * included in all copies or substantial portions of the Software.
33 *
34 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
35 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
36 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
37 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
38 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
39 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
40 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
41 */
42
43/*
44 * The text above constitutes the entire PortAudio license; however,
45 * the PortAudio community also makes the following non-binding requests:
46 *
47 * Any person wishing to distribute modifications to the Software is
48 * requested to send the modifications to the original developer so that
49 * they can be incorporated into the canonical version. It is also
50 * requested that these non-binding requests be included along with the
51 * license above.
52 */
53
61#ifndef PA_MAC_CORE_INTERNAL_H__
62#define PA_MAC_CORE_INTERNAL_H__
63
64#include <CoreAudio/CoreAudio.h>
65#include <CoreServices/CoreServices.h>
66#include <AudioUnit/AudioUnit.h>
67#include <AudioToolbox/AudioToolbox.h>
68
69#include "portaudio.h"
70#include "pa_util.h"
71#include "pa_hostapi.h"
72#include "pa_stream.h"
73#include "pa_allocation.h"
74#include "pa_cpuload.h"
75#include "pa_process.h"
76#include "pa_ringbuffer.h"
77
79
80/* function prototypes */
81
82#ifdef __cplusplus
83extern "C"
84{
85#endif /* __cplusplus */
86
88
89#ifdef __cplusplus
90}
91#endif /* __cplusplus */
92
93#define RING_BUFFER_ADVANCE_DENOMINATOR (4)
94
95PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames );
96PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames );
97signed long GetStreamReadAvailable( PaStream* stream );
98signed long GetStreamWriteAvailable( PaStream* stream );
99
100/* PaMacAUHAL - host api datastructure specific to this implementation */
101typedef struct
102{
106
108
109 /* implementation specific data goes here */
111 AudioDeviceID *devIds; /*array of all audio devices*/
112 AudioDeviceID defaultIn;
113 AudioDeviceID defaultOut;
114}
116
118{
119 /* Values in Frames from property queries. */
122 // UInt32 streamLatency; // Seems to be the same as deviceLatency!?
124 /* Current device sample rate. May change!
125 These are initialized to the nominal device sample rate,
126 and updated with the actual sample rate, when/where available.
127 Note that these are the *device* sample rates, prior to any required
128 SR conversion. */
129 Float64 sampleRate;
130 Float64 samplePeriod; // reciprocal
131}
133
134/* stream data structure specifically for this implementation */
135typedef struct PaMacCoreStream
136{
140
141 /* implementation specific data goes here */
143 AudioUnit inputUnit;
144 AudioUnit outputUnit;
145 AudioDeviceID inputDevice;
146 AudioDeviceID outputDevice;
152 /* We use this ring buffer when input and out devs are different. */
154 /* We may need to do SR conversion on input. */
155 AudioConverterRef inputSRConverter;
156 /* We need to preallocate an inputBuffer for reading data. */
157 AudioBufferList inputAudioBufferList;
158 AudioTimeStamp startTime;
159 /* FIXME: instead of volatile, these should be properly memory barriered */
160 volatile uint32_t xrunFlags; /*PaStreamCallbackFlags*/
161 volatile enum {
162 STOPPED = 0, /* playback is completely stopped,
163 and the user has called StopStream(). */
164 CALLBACK_STOPPED = 1, /* callback has requested stop,
165 but user has not yet called StopStream(). */
166 STOPPING = 2, /* The stream is in the process of closing
167 because the user has called StopStream.
168 This state is just used internally;
169 externally it is indistinguishable from
170 ACTIVE.*/
171 ACTIVE = 3 /* The stream is active and running. */
176
177 /* data updated by main thread and notifications, protected by timingInformationMutex */
179 pthread_mutex_t timingInformationMutex;
180
181 /* These are written by the PA thread or from CoreAudio callbacks. Protected by the mutex. */
185
186 /* Offsets in seconds to be applied to Apple timestamps to convert them to PA timestamps.
187 * While the io proc is active, the following values are only accessed and manipulated by the ioproc */
191}
193
194#endif /* PA_MAC_CORE_INTERNAL_H__ */
Allocation Group prototypes. An Allocation Group makes it easy to allocate multiple blocks of memory ...
Functions to assist in measuring the CPU utilization of a callback stream. Used to implement the Pa_G...
Interfaces and representation structures used by pa_front.c to manage and communicate with host API i...
PaError WriteStream(PaStream *stream, const void *buffer, unsigned long frames)
Definition pa_mac_core_blocking.c:502
PaError ReadStream(PaStream *stream, void *buffer, unsigned long frames)
Definition pa_mac_core_blocking.c:423
struct PaMacCoreDeviceProperties PaMacCoreDeviceProperties
signed long GetStreamReadAvailable(PaStream *stream)
Definition pa_mac_core_blocking.c:625
struct PaMacCoreStream PaMacCoreStream
PaError PaMacCore_Initialize(PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index)
Definition pa_mac_core.c:752
signed long GetStreamWriteAvailable(PaStream *stream)
Definition pa_mac_core_blocking.c:634
Buffer Processor prototypes. A Buffer Processor performs buffer length adaption, coordinates sample f...
Single-reader single-writer lock-free ring buffer.
Stream interfaces, representation structures and helper functions used to interface between pa_front....
Prototypes for utility functions used by PortAudio implementations.
The portable PortAudio API.
void PaStream
Definition portaudio.h:644
int PaError
Definition portaudio.h:122
int PaHostApiIndex
Definition portaudio.h:240
char buffer[NUM_BYTES]
Definition recplay.c:26
Definition pa_mac_core_internal.h:102
long devCount
Definition pa_mac_core_internal.h:110
AudioDeviceID * devIds
Definition pa_mac_core_internal.h:111
PaUtilStreamInterface callbackStreamInterface
Definition pa_mac_core_internal.h:104
PaUtilAllocationGroup * allocations
Definition pa_mac_core_internal.h:107
PaUtilStreamInterface blockingStreamInterface
Definition pa_mac_core_internal.h:105
PaUtilHostApiRepresentation inheritedHostApiRep
Definition pa_mac_core_internal.h:103
AudioDeviceID defaultIn
Definition pa_mac_core_internal.h:112
AudioDeviceID defaultOut
Definition pa_mac_core_internal.h:113
Definition pa_mac_core_blocking.h:79
Definition pa_mac_core_internal.h:118
Float64 sampleRate
Definition pa_mac_core_internal.h:129
Float64 samplePeriod
Definition pa_mac_core_internal.h:130
UInt32 bufferFrameSize
Definition pa_mac_core_internal.h:121
UInt32 deviceLatency
Definition pa_mac_core_internal.h:123
UInt32 safetyOffset
Definition pa_mac_core_internal.h:120
Definition pa_mac_core_internal.h:136
Float64 timestampOffsetCombined
Definition pa_mac_core_internal.h:182
AudioUnit inputUnit
Definition pa_mac_core_internal.h:143
PaUtilRingBuffer inputRingBuffer
Definition pa_mac_core_internal.h:153
size_t inputFramesPerBuffer
Definition pa_mac_core_internal.h:149
PaUtilStreamRepresentation streamRepresentation
Definition pa_mac_core_internal.h:137
double sampleRate
Definition pa_mac_core_internal.h:173
Float64 timestampOffsetInputDevice
Definition pa_mac_core_internal.h:183
Float64 timestampOffsetOutputDevice_ioProcCopy
Definition pa_mac_core_internal.h:190
Float64 timestampOffsetInputDevice_ioProcCopy
Definition pa_mac_core_internal.h:189
PaUtilCpuLoadMeasurer cpuLoadMeasurer
Definition pa_mac_core_internal.h:138
size_t outputFramesPerBuffer
Definition pa_mac_core_internal.h:150
PaMacCoreDeviceProperties inputProperties
Definition pa_mac_core_internal.h:174
PaMacCoreDeviceProperties outputProperties
Definition pa_mac_core_internal.h:175
size_t userInChan
Definition pa_mac_core_internal.h:147
Float64 timestampOffsetOutputDevice
Definition pa_mac_core_internal.h:184
AudioUnit outputUnit
Definition pa_mac_core_internal.h:144
AudioDeviceID inputDevice
Definition pa_mac_core_internal.h:145
Float64 timestampOffsetCombined_ioProcCopy
Definition pa_mac_core_internal.h:188
int timingInformationMutexIsInitialized
Definition pa_mac_core_internal.h:178
AudioBufferList inputAudioBufferList
Definition pa_mac_core_internal.h:157
PaUtilBufferProcessor bufferProcessor
Definition pa_mac_core_internal.h:139
size_t userOutChan
Definition pa_mac_core_internal.h:148
AudioTimeStamp startTime
Definition pa_mac_core_internal.h:158
pthread_mutex_t timingInformationMutex
Definition pa_mac_core_internal.h:179
AudioConverterRef inputSRConverter
Definition pa_mac_core_internal.h:155
bool bufferProcessorIsInitialized
Definition pa_mac_core_internal.h:142
@ STOPPED
Definition pa_mac_core_internal.h:162
@ CALLBACK_STOPPED
Definition pa_mac_core_internal.h:164
@ STOPPING
Definition pa_mac_core_internal.h:166
@ ACTIVE
Definition pa_mac_core_internal.h:171
AudioDeviceID outputDevice
Definition pa_mac_core_internal.h:146
PaMacBlio blio
Definition pa_mac_core_internal.h:151
volatile uint32_t xrunFlags
Definition pa_mac_core_internal.h:160
enum PaMacCoreStream::@0 state
Definition pa_allocation.h:66
The main buffer processor data structure.
Definition pa_process.h:253
Definition pa_cpuload.h:56
Definition pa_hostapi.h:201
Definition pa_ringbuffer.h:94
Definition pa_stream.h:67
Definition pa_stream.h:147