this repo has no description
1#ifndef _AUDIO_CODEC_H
2#define _AUDIO_CODEC_H
3
4#include <CoreAudio/CoreAudioTypes.h>
5#include <AudioToolbox/AudioComponent.h>
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11typedef AudioComponentInstance AudioCodec;
12typedef UInt32 AudioCodecPropertyID;
13struct AudioCodecMagicCookieInfo
14{
15 UInt32 mMagicCookieSize;
16 const void* _Nullable mMagicCookie;
17};
18typedef struct AudioCodecMagicCookieInfo AudioCodecMagicCookieInfo;
19enum
20{
21 kAudioDecoderComponentType = 'adec',
22 kAudioEncoderComponentType = 'aenc',
23 kAudioUnityCodecComponentType = 'acdc'
24};
25enum
26{
27 kAudioCodecPropertySupportedInputFormats = 'ifm#',
28 kAudioCodecPropertySupportedOutputFormats = 'ofm#',
29 kAudioCodecPropertyAvailableInputSampleRates = 'aisr',
30 kAudioCodecPropertyAvailableOutputSampleRates = 'aosr',
31 kAudioCodecPropertyAvailableBitRateRange = 'abrt',
32 kAudioCodecPropertyMinimumNumberInputPackets = 'mnip',
33 kAudioCodecPropertyMinimumNumberOutputPackets = 'mnop',
34 kAudioCodecPropertyAvailableNumberChannels = 'cmnc',
35 kAudioCodecPropertyDoesSampleRateConversion = 'lmrc',
36 kAudioCodecPropertyAvailableInputChannelLayoutTags = 'aicl',
37 kAudioCodecPropertyAvailableOutputChannelLayoutTags = 'aocl',
38 kAudioCodecPropertyInputFormatsForOutputFormat = 'if4o',
39 kAudioCodecPropertyOutputFormatsForInputFormat = 'of4i',
40 kAudioCodecPropertyFormatInfo = 'acfi'
41};
42enum
43{
44 kAudioCodecPropertyInputBufferSize = 'tbuf',
45 kAudioCodecPropertyPacketFrameSize = 'pakf',
46 kAudioCodecPropertyHasVariablePacketByteSizes = 'vpk?',
47 kAudioCodecPropertyMaximumPacketByteSize = 'pakb',
48 kAudioCodecPropertyPacketSizeLimitForVBR = 'pakl',
49 kAudioCodecPropertyCurrentInputFormat = 'ifmt',
50 kAudioCodecPropertyCurrentOutputFormat = 'ofmt',
51 kAudioCodecPropertyMagicCookie = 'kuki',
52 kAudioCodecPropertyUsedInputBufferSize = 'ubuf',
53 kAudioCodecPropertyIsInitialized = 'init',
54 kAudioCodecPropertyCurrentTargetBitRate = 'brat',
55 kAudioCodecPropertyCurrentInputSampleRate = 'cisr',
56 kAudioCodecPropertyCurrentOutputSampleRate = 'cosr',
57 kAudioCodecPropertyQualitySetting = 'srcq',
58 kAudioCodecPropertyApplicableBitRateRange = 'brta',
59 kAudioCodecPropertyRecommendedBitRateRange = 'brtr',
60 kAudioCodecPropertyApplicableInputSampleRates = 'isra',
61 kAudioCodecPropertyApplicableOutputSampleRates = 'osra',
62 kAudioCodecPropertyPaddedZeros = 'pad0',
63 kAudioCodecPropertyPrimeMethod = 'prmm',
64 kAudioCodecPropertyPrimeInfo = 'prim',
65 kAudioCodecPropertyCurrentInputChannelLayout = 'icl ',
66 kAudioCodecPropertyCurrentOutputChannelLayout = 'ocl ',
67 kAudioCodecPropertySettings = 'acs ',
68 kAudioCodecPropertyFormatList = 'acfl',
69 kAudioCodecPropertyBitRateControlMode = 'acbf',
70 kAudioCodecPropertySoundQualityForVBR = 'vbrq',
71 kAudioCodecPropertyDelayMode = 'dmod',
72 kAudioCodecPropertyAdjustLocalQuality = '^qal',
73 kAudioCodecPropertyProgramTargetLevel = 'pptl',
74 kAudioCodecPropertyDynamicRangeControlMode = 'mdrc',
75 kAudioCodecPropertyProgramTargetLevelConstant = 'ptlc',
76};
77enum
78{
79 kAudioCodecQuality_Max = 0x7F,
80 kAudioCodecQuality_High = 0x60,
81 kAudioCodecQuality_Medium = 0x40,
82 kAudioCodecQuality_Low = 0x20,
83 kAudioCodecQuality_Min = 0
84};
85enum
86{
87 kAudioCodecPrimeMethod_Pre = 0,
88 kAudioCodecPrimeMethod_Normal = 1,
89 kAudioCodecPrimeMethod_None = 2
90};
91enum
92{
93 kAudioCodecBitRateControlMode_Constant = 0,
94 kAudioCodecBitRateControlMode_LongTermAverage = 1,
95 kAudioCodecBitRateControlMode_VariableConstrained = 2,
96 kAudioCodecBitRateControlMode_Variable = 3,
97};
98enum
99{
100 kAudioCodecDelayMode_Compatibility = 0,
101 kAudioCodecDelayMode_Minimum = 1,
102 kAudioCodecDelayMode_Optimal = 2
103};
104enum
105{
106 kProgramTargetLevel_None = 0,
107 kProgramTargetLevel_Minus31dB = 1,
108 kProgramTargetLevel_Minus23dB = 2,
109 kProgramTargetLevel_Minus20dB = 3
110};
111enum
112{
113 kDynamicRangeControlMode_None = 0,
114 kDynamicRangeControlMode_Light = 1,
115 kDynamicRangeControlMode_Heavy = 2
116};
117typedef struct AudioCodecPrimeInfo
118{
119 UInt32 leadingFrames;
120 UInt32 trailingFrames;
121} AudioCodecPrimeInfo;
122typedef UInt32 AudioSettingsFlags; enum {
123 kAudioSettingsFlags_ExpertParameter = (1L << 0),
124 kAudioSettingsFlags_InvisibleParameter = (1L << 1),
125 kAudioSettingsFlags_MetaParameter = (1L << 2),
126 kAudioSettingsFlags_UserInterfaceParameter = (1L << 3)
127};
128enum
129{
130 kAudioCodecProduceOutputPacketFailure = 1,
131 kAudioCodecProduceOutputPacketSuccess = 2,
132 kAudioCodecProduceOutputPacketSuccessHasMore = 3,
133 kAudioCodecProduceOutputPacketNeedsMoreInputData = 4,
134 kAudioCodecProduceOutputPacketAtEOF = 5
135};
136enum
137{
138 kAudioCodecGetPropertyInfoSelect = 0x0001,
139 kAudioCodecGetPropertySelect = 0x0002,
140 kAudioCodecSetPropertySelect = 0x0003,
141 kAudioCodecInitializeSelect = 0x0004,
142 kAudioCodecUninitializeSelect = 0x0005,
143 kAudioCodecAppendInputDataSelect = 0x0006,
144 kAudioCodecProduceOutputDataSelect = 0x0007,
145 kAudioCodecResetSelect = 0x0008,
146 kAudioCodecAppendInputBufferListSelect = 0x0009,
147 kAudioCodecProduceOutputBufferListSelect = 0x000A
148};
149enum
150{
151 kAudioCodecNoError = 0,
152 kAudioCodecUnspecifiedError = 'what',
153 kAudioCodecUnknownPropertyError = 'who?',
154 kAudioCodecBadPropertySizeError = '!siz',
155 kAudioCodecIllegalOperationError = 'nope',
156 kAudioCodecUnsupportedFormatError = '!dat',
157 kAudioCodecStateError = '!stt',
158 kAudioCodecNotEnoughBufferSpaceError = '!buf'
159};
160extern OSStatus
161AudioCodecGetPropertyInfo( AudioCodec inCodec,
162 AudioCodecPropertyID inPropertyID,
163 UInt32* _Nullable outSize,
164 Boolean* _Nullable outWritable);
165extern OSStatus
166AudioCodecGetProperty( AudioCodec inCodec,
167 AudioCodecPropertyID inPropertyID,
168 UInt32* ioPropertyDataSize,
169 void* outPropertyData);
170extern OSStatus
171AudioCodecSetProperty( AudioCodec inCodec,
172 AudioCodecPropertyID inPropertyID,
173 UInt32 inPropertyDataSize,
174 const void* inPropertyData);
175extern OSStatus
176AudioCodecInitialize( AudioCodec inCodec,
177 const AudioStreamBasicDescription* _Nullable inInputFormat,
178 const AudioStreamBasicDescription* _Nullable inOutputFormat,
179 const void* _Nullable inMagicCookie,
180 UInt32 inMagicCookieByteSize);
181extern OSStatus
182AudioCodecUninitialize(AudioCodec inCodec);
183extern OSStatus
184AudioCodecAppendInputData( AudioCodec inCodec,
185 const void* inInputData,
186 UInt32* ioInputDataByteSize,
187 UInt32* ioNumberPackets,
188 const AudioStreamPacketDescription* _Nullable inPacketDescription);
189extern OSStatus
190AudioCodecProduceOutputPackets( AudioCodec inCodec,
191 void* outOutputData,
192 UInt32* ioOutputDataByteSize,
193 UInt32* ioNumberPackets,
194 AudioStreamPacketDescription* _Nullable outPacketDescription,
195 UInt32* outStatus);
196
197extern OSStatus
198AudioCodecAppendInputBufferList( AudioCodec inCodec,
199 const AudioBufferList * inBufferList,
200 UInt32* ioNumberPackets,
201 const AudioStreamPacketDescription* _Nullable inPacketDescription,
202 UInt32* outBytesConsumed);
203
204extern OSStatus
205AudioCodecProduceOutputBufferList( AudioCodec inCodec,
206 AudioBufferList * ioBufferList,
207 UInt32* ioNumberPackets,
208 AudioStreamPacketDescription* _Nullable outPacketDescription,
209 UInt32* outStatus);
210extern OSStatus
211AudioCodecReset(AudioCodec inCodec);
212
213
214typedef OSStatus
215(*AudioCodecGetPropertyInfoProc)(void *self, AudioCodecPropertyID inPropertyID, UInt32 * _Nullable outSize, Boolean * _Nullable outWritable);
216
217typedef OSStatus
218(*AudioCodecGetPropertyProc)(void *self, AudioCodecPropertyID inPropertyID, UInt32 *ioPropertyDataSize,
219 void *outPropertyData);
220
221typedef OSStatus
222(*AudioCodecSetPropertyProc)(void *self, AudioCodecPropertyID inPropertyID, UInt32 inPropertyDataSize,
223 const void *inPropertyData);
224
225typedef OSStatus
226(*AudioCodecInitializeProc)(void *self, const AudioStreamBasicDescription * _Nullable inInputFormat,
227 const AudioStreamBasicDescription * _Nullable inOutputFormat, const void * _Nullable inMagicCookie,
228 UInt32 inMagicCookieByteSize);
229
230typedef OSStatus
231(*AudioCodecUninitializeProc)(void *self);
232
233typedef OSStatus
234(*AudioCodecAppendInputDataProc)(void *self, const void *inInputData, UInt32 *ioInputDataByteSize, UInt32 *ioNumberPackets,
235 const AudioStreamPacketDescription * _Nullable inPacketDescription);
236
237typedef OSStatus
238(*AudioCodecProduceOutputPacketsProc)(void *self, void *outOutputData, UInt32 *ioOutputDataByteSize, UInt32 *ioNumberPackets,
239 AudioStreamPacketDescription * _Nullable outPacketDescription, UInt32 *outStatus);
240
241typedef OSStatus
242(*AudioCodecResetProc)(void *self);
243
244typedef OSStatus
245(*AudioCodecAppendInputBufferListProc)(void *self, const AudioBufferList *ioBufferList, UInt32 *inNumberPackets,
246 const AudioStreamPacketDescription * _Nullable inPacketDescription, UInt32 *outBytesConsumed);
247
248typedef OSStatus
249(*AudioCodecProduceOutputBufferListProc)(void *self, AudioBufferList *ioBufferList, UInt32 *ioNumberPackets,
250 AudioStreamPacketDescription *_Nullable outPacketDescription, UInt32 *outStatus);
251enum
252{
253 kAudioCodecPropertyMinimumDelayMode = 'mdel'
254};
255enum
256{
257 kAudioCodecPropertyNameCFString = 'lnam',
258 kAudioCodecPropertyManufacturerCFString = 'lmak',
259 kAudioCodecPropertyFormatCFString = 'lfor'
260};
261enum
262{
263 kAudioCodecPropertyRequiresPacketDescription = 'pakd',
264 kAudioCodecPropertyAvailableBitRates = 'brt#',
265 kAudioCodecExtendFrequencies = 'acef',
266 kAudioCodecUseRecommendedSampleRate = 'ursr',
267 kAudioCodecOutputPrecedence = 'oppr',
268 kAudioCodecBitRateFormat = kAudioCodecPropertyBitRateControlMode,
269 kAudioCodecDoesSampleRateConversion = kAudioCodecPropertyDoesSampleRateConversion,
270 kAudioCodecInputFormatsForOutputFormat = kAudioCodecPropertyInputFormatsForOutputFormat,
271 kAudioCodecOutputFormatsForInputFormat = kAudioCodecPropertyOutputFormatsForInputFormat,
272 kAudioCodecPropertyInputChannelLayout = kAudioCodecPropertyCurrentInputChannelLayout,
273 kAudioCodecPropertyOutputChannelLayout = kAudioCodecPropertyCurrentOutputChannelLayout,
274 kAudioCodecPropertyAvailableInputChannelLayouts = kAudioCodecPropertyAvailableInputChannelLayoutTags,
275 kAudioCodecPropertyAvailableOutputChannelLayouts = kAudioCodecPropertyAvailableOutputChannelLayoutTags,
276 kAudioCodecPropertyZeroFramesPadded = kAudioCodecPropertyPaddedZeros
277};
278enum
279{
280 kAudioCodecBitRateFormat_CBR = kAudioCodecBitRateControlMode_Constant,
281 kAudioCodecBitRateFormat_ABR = kAudioCodecBitRateControlMode_LongTermAverage,
282 kAudioCodecBitRateFormat_VBR = kAudioCodecBitRateControlMode_VariableConstrained
283};
284enum
285{
286 kAudioCodecOutputPrecedenceNone = 0,
287 kAudioCodecOutputPrecedenceBitRate = 1,
288 kAudioCodecOutputPrecedenceSampleRate = 2
289};
290typedef struct AudioCodecMagicCookieInfo MagicCookieInfo __attribute__((deprecated));
291enum
292{
293 kHintBasic = 0,
294 kHintAdvanced = 1,
295 kHintHidden = 2
296};
297
298#ifdef __cplusplus
299}
300#endif
301
302#endif