comparison plugin/api/FEAPI.h @ 0:da6937383da8

initial import
author Chris Cannam
date Tue, 10 Jan 2006 16:33:16 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:da6937383da8
1 ////////////////////////////////////////////////////////////////////////////////////
2 // /*! \file FEAPI.h
3 // \brief interface of the feature extraction plugin.
4 // <br><br>
5 // In the following, context function pointers typedefs are referred to as
6 // functions.<br>
7 //
8 //
9 // Create a new instance of the plugin with the function
10 // ::FEAPI_CreatePluginInstance. The call of this function is mandatory.
11 // <br><br>
12 //
13 // Initialize the plugin with the call of function
14 // ::FEAPI_InitializePlugin.<br><br>
15 //
16 // Information about the plugin can be requested via the following
17 // functions:<br>
18 // ::FEAPI_GetPluginAPIVersion, <br>
19 // ::FEAPI_GetPluginName, <br>
20 // ::FEAPI_GetPluginVendor, <br>
21 // ::FEAPI_GetPluginVendorVersion, <br>
22 // ::FEAPI_GetPluginCopyright, <br>
23 // ::FEAPI_GetPluginDescription. <br>
24 // The call of these functions is optional. Combined with a call to
25 // ::FEAPI_GetPluginId, the plugin can be uniquely identified. <br><br>
26 //
27 // The technical capabilities of the plugin can be requested via the call
28 // of the function
29 // ::FEAPI_GetPluginProperty.<br><br>
30 //
31 // To get the number of the features resp. results that are computed
32 // by the plugin, call the function <br>
33 // ::FEAPI_GetPluginNumOfResults; <br>
34 // the function <br>
35 // ::FEAPI_GetPluginResultDescription gives you detailed information about the
36 // meaning and usage of every result (see structure ::_ResultDescription
37 // for details). <br><br>
38 //
39 // To get the number of the options/ parameter settings that can be
40 // done before processing, call the function <br>
41 // ::FEAPI_GetPluginNumOfParameters; <br>
42 // the function <br>
43 // ::FEAPI_GetPluginParamDescription gives you detailed information about
44 // the meaning and usage of every single parameter (see structure
45 // ::FEAPI_ParameterDescription_t for details).<br><br>
46 //
47 // To get or set a specific parameter value, call the function <br>
48 // ::FEAPI_GetPluginParameter resp. <br>
49 // ::FEAPI_SetPluginParameter. <br><br>
50 //
51 // After the plugin is initialized, the actual processing can begin.
52 // The ::FEAPI_ProcessPlugin <br>
53 // function can be called to do the actual feature/result
54 // calculation. ::FEAPI_ProcessPlugin expects subsequently new blocks
55 // of audio data. Note that ::FEAPI_ProcessPlugin does not return
56 // computed feature values.<br>
57 //
58 // After finishing one ::FEAPI_ProcessPlugin call, zero, one or more
59 // results can be available, depending on the plug-ins implementation.
60 // To query the available number of values for every feature/result,
61 // call <br>
62 // ::FEAPI_GetPluginSizeOfResult, <br>
63 // which returns the number of values for this
64 // result. Afterwards, the result values for each result can
65 // be requested via <br>
66 // ::FEAPI_GetPluginResult. Note that the memory for the results has to be
67 // allocated by the host.<br><br>
68 //
69 // To signal that no more audio data is available at the end (e.g. of
70 // the audio file), call <br>
71 // ::FEAPI_ProcessPluginDone and get the last results with
72 // ::FEAPI_GetPluginResult if available.<br><br>
73 //
74 // To flush the internal buffers, the function <br>
75 // ::FEAPI_ResetPlugin <br>
76 // may be called.
77 //
78 // After all processing has been done, destroy the instance of the
79 // plugin with the function <br>
80 // ::FEAPI_DestroyPluginInstance. <br>
81 // The call of this function is mandatory. <br><br>
82 //
83 // <br><br><br>
84 // The Feature Extraction plugin API is released under a BSD style
85 // license. Please make all changes available to the authors.<br>
86 // Contact information: lerch <at> zplane.de.
87 //
88 // */
89 //
90 // Copyright (c) 2004-2005, Alexander Lerch, zplane.development GbR
91 // All rights reserved.
92 //
93 // Redistribution and use in source and binary forms, with or without
94 // modification, are permitted provided that the following conditions
95 // are met:
96 //
97 // * Redistributions of source code must retain the above copyright
98 // notice, this list of conditions and the following disclaimer.
99 // * Redistributions in binary form must link to the FEAPI website
100 // http://www.sf.net/projects/feapi,
101 // reproduce this list of conditions and the following
102 // disclaimer in the documentation and/or other materials
103 // provided with the distribution.
104 // * The name of the contributors to this software must not be used
105 // to endorse or promote products derived from this software
106 // without specific prior written permission.
107 //
108 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
109 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
110 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
111 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
112 // COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
113 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
114 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
115 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
116 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
117 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
118 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
119 // POSSIBILITY OF SUCH DAMAGE.
120 //
121 ////////////////////////////////////////////////////////////////////////////////////
122 // CVS INFORMATION
123 //
124 // $RCSfile: FEAPI.h,v $
125 // $Author: alex_lerch $
126 // $Date: 2005/05/20 17:08:36 $
127 //
128 // $Log: FEAPI.h,v $
129 // Revision 1.2 2005/05/20 17:08:36 alex_lerch
130 // - updated documentation
131 // - added "signal" typedef for inputs and results
132 // - changed function PluginCanDo to PluginGetProperty and changed the function itself to return values instead of bools
133 // - cosmetic changes
134 //
135 // Revision 1.1.1.1 2005/03/30 14:54:40 alex_lerch
136 // first draft version requiring several updates:
137 // - interface check
138 // - check of plugin base class
139 // - implementation of host base class
140 // - update of outdated documentation
141 //
142 //
143 ////////////////////////////////////////////////////////////////////////////////////
144 ////////////////////////////////////////////////////////////////////////////////////
145 // !!!Do never ever edit this file!!!
146 ////////////////////////////////////////////////////////////////////////////////////
147 ////////////////////////////////////////////////////////////////////////////////////
148
149 /*! \brief avoid multiple header includes */
150 #if !defined(FEAPI_HEADER_INCLUDED)
151 #define FEAPI_HEADER_INCLUDED
152
153
154 #ifdef __cplusplus
155 extern "C" {
156 #endif
157
158 /* Maximum string lengths. */
159 const unsigned int FEAPI_uiMaxNameLength = 1024; //!< maximum number of characters for a name string (including null terminator)
160 const unsigned int FEAPI_uiMaxUnitLength = 1024; //!< maximum number of characters for a unit string (including null terminator)
161 const unsigned int FEAPI_uiMaxDescriptionLength = 4096; //!< maximum number of characters for a description string (including null terminator)
162
163 ////////////////////////////////////////////////////////////////////////////////////
164 // interface structures and types
165 /** @defgroup types Interface Structures and Types
166 * @{
167 */
168
169
170 /*! Structure describing properties and other information about one result/feature. */
171 typedef struct FEAPI_SignalDescription_t_tag
172 {
173 char acName[FEAPI_uiMaxNameLength]; //!< name of the result/feature (e.g. "Spectral Centroid", "Loudness", etc.)
174 char acUnit[FEAPI_uiMaxUnitLength]; //!< unit of the result/feature (e.g. "dB", "sone", "Hz", etc.)
175 char acDescription[FEAPI_uiMaxDescriptionLength]; //!< description of the result/feature (clear text description)
176 float fRangeMin; //!< minimum value of the result/feature (if no minimum value: minimum floating point value)
177 float fRangeMax; //!< maximum value of the result/feature (if no maximum value: maximum floating point value)
178 float fQuantizedTo; //!< quantization step size of the result/feature (e.g. 1 for integer result, -1 for no quantization)
179 float fSampleRate; //!< sample rate of the result/feature output in Hz; -1 if sample rate equals input block length, -2 for non-equidistant samples
180 } FEAPI_SignalDescription_t;
181
182
183 /*! Structure describing properties and other information about one parameter. */
184 typedef struct FEAPI_ParameterDescription_t_tag
185 {
186 char acName[FEAPI_uiMaxNameLength]; //!< name of the parameter (e.g. "Gain", "Sensitivity", etc.)
187 char acUnit[FEAPI_uiMaxUnitLength]; //!< unit of the parameter (e.g. "dB", "Hz", etc.)
188 char acDescription[FEAPI_uiMaxDescriptionLength]; //!< description of the parameter (clear text description)
189 float fRangeMin, //!< minimum value of the parameter (if no minimum value: minimum floating point value)
190 fRangeMax, //!< maximum value of the parameter (if no maximum value: maximum floating point value)
191 fDefaultValue; //!< default value for the parameter
192 float fQuantizedTo; //!< quantization step size of the parameter (e.g. 1 for integer quantization, -1 for no quantization)
193 int bIsChangeableInRealTime;//!< 0/false if the parameter has to be set before the processing starts and can not be changed during processing, 1 if the parameter can be changed during processing
194 } FEAPI_ParameterDescription_t;
195
196
197 /*! Structure for user/vendor defined commands. */
198 typedef struct FEAPI_UserData_t_tag
199 {
200 char *pcUserString; //!< user defined string value (memory could be freed by host after function call)
201 void *pcUserData; //!< pointer to user defined data
202 } FEAPI_UserData_t;
203
204
205 /*! Typedef for the plugin instance handle. */
206 typedef void* FEAPI_PluginInstance_t;
207
208
209 /*! This typedef is used for time stamps in seconds.
210 For a block of data, the time stamp is defined to be the time at the beginning of the block. */
211 typedef double FEAPI_TimeStamp_t;
212
213
214 /*! This typedef is used for input and output data.
215 At least for this version of the API, this is exactly float. */
216 typedef float FEAPI_Signal_t;
217
218
219 /*! Enumerator for possible error return values, if any other value than FEAPI_kNoError is returned,
220 the function was not able to execute the specified operation(s).<br>
221 All error defines are negative. */
222 typedef enum FEAPI_Error_t_tag
223 {
224 FEAPI_kNoError = 0, //!< no error occurred
225 FEAPI_kUnspecifiedError = -1, //!< an error occurred, but the type is not yet specified
226 FEAPI_kUnknownError = -9999 //!< an error occurred, but its type is not specifyable
227 } FEAPI_Error_t;
228
229
230 /*! Enumerator for retrieval of version info which can be resolved as major.minor.sub. */
231 typedef enum FEAPI_VersionInfo_t_tag
232 {
233 FEAPI_kMajorVersion = 0, //!< indicates the major version
234 FEAPI_kMinorVersion = 1, //!< indicates the minor version
235 FEAPI_kSubVersion = 2 //!< indicates the sub version or bug-fix version
236 } FEAPI_VersionInfo_t;
237
238
239 /*! Enumerator for retrieval of information about what the plug supports. */
240 typedef enum FEAPI_PluginProperty_t_tag
241 {
242 FEAPI_kMinSampleRate = 0, //!< indicates the minimum sample rate
243 FEAPI_kMaxSampleRate = 1, //!< indicates the maximum sample rate
244 FEAPI_kMinChannels = 2, //!< indicates minimum number of channels
245 FEAPI_kMaxChannels = 3, //!< indicates maximum number of channels
246 FEAPI_kMinFrameSize = 4, //!< indicates minimum number of frames per process call
247 FEAPI_kMaxFrameSize = 5, //!< indicates maximum number of frames per process call
248 FEAPI_kOptFrameSize = 6 //!< indicates optimal number of frames per process call
249 } FEAPI_PluginProperty_t;
250
251 /** @} */
252
253 ////////////////////////////////////////////////////////////////////////////////////
254 // API function declaration
255 /** @defgroup apifun API function pointers
256 * @{
257 */
258
259 /*!
260 * Creates a new instance of the plugin
261 *
262 * @param phInstanceHandle : handle to the instance to be created
263 * @return FEAPI_Error_t : FEAPI_kNoError when no error
264 */
265 typedef FEAPI_Error_t (*FEAPI_CreatePluginInstance_t) ( FEAPI_PluginInstance_t *phInstanceHandle );
266
267 /*!
268 * Destroys an instance of the plugin.
269 *
270 * @param phInstanceHandle : handle to the instance to be destroyed
271 * @return FEAPI_Error_t : FEAPI_kNoError when no error
272 */
273 typedef FEAPI_Error_t (*FEAPI_DestroyPluginInstance_t) ( FEAPI_PluginInstance_t *phInstanceHandle );
274
275 /*!
276 * initializes a new instance of the plugin
277 *
278 * @param hInstanceHandle : handle to the instance
279 * @param fInputSampleRate : sample rate of input(s) in Hz
280 * @param iNumberOfAudioChannels : number of input audio channels
281 * @param iHostApiMajorVersion : major version number of host
282 * @param pstUserData : pointer to user or vendor defined data (may be NULL)
283 *
284 * @return FEAPI_Error_t : FEAPI_kNoError when no error
285 */
286 typedef FEAPI_Error_t (*FEAPI_InitializePlugin_t) (FEAPI_PluginInstance_t hInstanceHandle,
287 float fInputSampleRate,
288 int iNumberOfAudioChannels,
289 int iHostApiMajorVersion,
290 FEAPI_UserData_t *pstUserData);
291
292
293 /*!
294 * Gets the version number (major, minor or subversion) of the API used by the plugin.
295 * This is *not* the plugin version, therefore the function may be called without a previously
296 * created instance.
297 *
298 * @param eAPIMajorMinorOrSubVersion : flag which version type is requested
299 * @return int : requested version number
300 */
301 typedef int (*FEAPI_GetPluginAPIVersion_t) ( FEAPI_VersionInfo_t eAPIMajorMinorOrSubVersion ); //!< \todo change ints to (unsigned) ints where appropriate?
302
303
304 /*!
305 * Gets the name of the plugin.
306 *
307 * @param hInstanceHandle : handle to instance
308 * @param *pcPluginName : pointer to buffer of FEAPI_uiMaxNameLength chars, the name will be copied to this buffer
309 * @return FEAPI_Error_t : FEAPI_kNoError when no error
310 */
311 typedef FEAPI_Error_t (*FEAPI_GetPluginName_t) ( FEAPI_PluginInstance_t hInstanceHandle,
312 char *pcPluginName);
313
314 /*!
315 * Gets the vendor name of the plugin.
316 *
317 * @param hInstanceHandle : handle to instance
318 * @param *pcPluginVendor : pointer to buffer of FEAPI_uiMaxNameLength chars, the vendor name will be copied to this buffer
319 * @return FEAPI_Error_t : FEAPI_kNoError when no error
320 */
321 typedef FEAPI_Error_t (*FEAPI_GetPluginVendor_t) (FEAPI_PluginInstance_t hInstanceHandle,
322 char *pcPluginVendor);
323
324 /*!
325 * Gets an indication of the plugins capabilities.
326 *
327 * @param hInstanceHandle : handle to instance
328 * @param ePluginProperty : requested property
329 * @return float : corresponding value
330 */
331 typedef float (*FEAPI_GetPluginProperty_t) (FEAPI_PluginInstance_t hInstanceHandle,
332 FEAPI_PluginProperty_t ePluginProperty);
333
334 /*!
335 * Gets the (vendor unique) plugin identification string.
336 *
337 * @param hInstanceHandle : handle to instance
338 * @param *pcPluginId : pointer to buffer of FEAPI_uiMaxNameLength chars, the id will be copied to this buffer
339 * @return FEAPI_Error_t : FEAPI_kNoError when no error
340 */
341 typedef FEAPI_Error_t (*FEAPI_GetPluginId_t) (FEAPI_PluginInstance_t hInstanceHandle,
342 char *pcPluginId);
343
344 /*!
345 * Gets the vendor version of the plugin.
346 *
347 * @param hInstanceHandle : handle to instance
348 * @param ePluginMajorMinorOrSubVersion : flag which version type is requested
349 * @return int : requested version number
350 */
351 typedef int (*FEAPI_GetPluginVendorVersion_t) ( FEAPI_PluginInstance_t hInstanceHandle,
352 FEAPI_VersionInfo_t ePluginMajorMinorOrSubVersion);
353
354 /*!
355 * Gets the description of the plugin, containing information about what the plugin actually does.
356 *
357 * @param hInstanceHandle : handle to instance
358 * @param *pcPluginDescription : pointer to buffer of FEAPI_uiMaxDescriptionLength chars, the plugin description will be copied to this buffer
359 * @return FEAPI_Error_t : FEAPI_kNoError when no error
360 */
361 typedef FEAPI_Error_t (*FEAPI_GetPluginDescription_t) (FEAPI_PluginInstance_t hInstanceHandle,
362 char *pcPluginDescription);
363
364 /*!
365 * Gets the copyright information for the plugin.
366 *
367 * @param hInstanceHandle : handle to instance
368 * @param *pcPluginCopyright : pointer to buffer of FEAPI_uiMaxDescriptionLength chars, the plugin copyright information will be copied to this buffer
369 * @return FEAPI_Error_t : FEAPI_kNoError when no error
370 */
371 typedef FEAPI_Error_t (*FEAPI_GetPluginCopyright_t) (FEAPI_PluginInstance_t hInstanceHandle,
372 char *pcPluginCopyright);
373
374 /*!
375 * Gets the number of inputs for the plugin. This number will equal the
376 * number of audio channels in many cases, otherwise exceed the number of audio channels.
377 * The additional input channels are plugin developer specific and not recommended. If used,
378 * they have to be routed host internally.
379 *
380 * @param hInstanceHandle : handle to instance
381 * @return int : number of inputs
382 */
383 typedef int (*FEAPI_GetPluginNumOfInputs_t) (FEAPI_PluginInstance_t hInstanceHandle);
384
385 /*!
386 * Gets information about one of the possible inputs.
387 *
388 * @param hInstanceHandle : handle to instance
389 * @param iInputIndex : index of the input the description is requested for, index ranges from 0...NumOfInputs-1
390 * @param *pstInputDescription : the requested description will be copied to this structure
391 * @return FEAPI_Error_t : FEAPI_kNoError when no error
392 */
393 typedef FEAPI_Error_t (*FEAPI_GetPluginInputDescription_t) (FEAPI_PluginInstance_t hInstanceHandle,
394 int iInputIndex,
395 FEAPI_SignalDescription_t *pstInputDescription);
396
397 /*!
398 * Gets the number of parameters.
399 *
400 * @param hInstanceHandle : handle to instance
401 * @return int : number of parameters
402 */
403 typedef int (*FEAPI_GetPluginNumOfParameters_t) (FEAPI_PluginInstance_t hInstanceHandle);
404
405 /*!
406 * Gets information about one of the possible parameters.
407 *
408 * @param hInstanceHandle : handle to instance
409 * @param iParameterIndex : index of the parameter (setting) the description is requested for, index ranges from 0...NumOfParameters-1
410 * @param *pstParameterDescription : the requested description will be copied to this structure
411 * @return FEAPI_Error_t : FEAPI_kNoError when no error
412 */
413 typedef FEAPI_Error_t (*FEAPI_GetPluginParameterDescription_t) (FEAPI_PluginInstance_t hInstanceHandle,
414 int iParameterIndex,
415 FEAPI_ParameterDescription_t *pstParameterDescription);
416
417 /*!
418 * Sets a parameter to a specified value.
419 *
420 * @param hInstanceHandle : handle to instance
421 * @param iParameterIndex : index of the parameter (setting) to be changed, index ranges from 0...NumOfParameters-1
422 * @param fValue : new value of the parameter
423 * @return FEAPI_Error_t : FEAPI_kNoError when no error
424 */
425 typedef FEAPI_Error_t (*FEAPI_SetPluginParameter_t) ( FEAPI_PluginInstance_t hInstanceHandle,
426 int iParameterIndex,
427 float fValue);
428
429 /*!
430 * Gets the current value of a parameter.
431 *
432 * @param hInstanceHandle : handle to instance
433 * @param iParameterIndex : index of the parameter (setting) requested, index ranges from 0...NumOfParameters-1
434 * @return float : value of the parameter with index iParameterIndex
435 */
436 typedef float (*FEAPI_GetPluginParameter_t) (FEAPI_PluginInstance_t hInstanceHandle,
437 int iParameterIndex);
438
439 /*!
440 * Processes a block of audio data.
441 *
442 * @param hInstanceHandle : handle to instance
443 * @param **ppfInputBuffer : input audio data in the format [channels][samples]; audio samples have a range from -1.0...+1.0
444 * @param *ptFEAPI_TimeStamp : time stamps in seconds for every input, may be NULL
445 * @param iNumberOfFrames : number of frames in ppfInputBuffer
446 * @return FEAPI_Error_t : FEAPI_kNoError when no error
447 */
448 typedef FEAPI_Error_t (*FEAPI_ProcessPlugin_t) (FEAPI_PluginInstance_t hInstanceHandle,
449 const FEAPI_Signal_t **ppfInputBuffer,
450 const FEAPI_TimeStamp_t *ptFEAPI_TimeStamp,
451 int iNumberOfFrames);
452
453 /*!
454 * Signals that no more input data is available (does the final processing).
455 *
456 * @param hInstanceHandle : handle to instance
457 * @return FEAPI_Error_t : FEAPI_kNoError when no error
458 */
459 typedef FEAPI_Error_t (*FEAPI_ProcessPluginDone_t) (FEAPI_PluginInstance_t hInstanceHandle);
460
461 /*!
462 * Gets the number of results/features to be calculated.
463 *
464 * @param hInstanceHandle : handle to instance
465 * @return int : number of results
466 */
467 typedef int (*FEAPI_GetPluginNumOfResults_t) (FEAPI_PluginInstance_t hInstanceHandle);
468
469 /*!
470 * Gets information about one of the possible results/features.
471 *
472 * @param hInstanceHandle : handle to instance
473 * @param iResultIndex : index of the result (feature) the description is requested for, index ranges from 0...NumOfResults-1
474 * @param *pstResultDescription : the requested description will be copied to this structure
475 * @return FEAPI_Error_t : FEAPI_kNoError when no error
476 */
477 typedef FEAPI_Error_t (*FEAPI_GetPluginResultDescription_t) ( FEAPI_PluginInstance_t hInstanceHandle,
478 int iResultIndex,
479 FEAPI_SignalDescription_t *pstResultDescription);
480
481 /*!
482 * Gets the size of one result in FEAPI_Signal_t values (4 bytes per value).
483 *
484 * @param hInstanceHandle : handle to instance
485 * @param iResultIndex : index of the result/feature the size is requested for, index ranges from 0...NumOfResults-1
486 * @return int : size of result in FEAPI_Signal_t values (4 bytes per value)
487 */
488 typedef int (*FEAPI_GetPluginSizeOfResult_t) (FEAPI_PluginInstance_t hInstanceHandle,
489 int iResultIndex);
490
491 /*!
492 * Gets one result.
493 *
494 * @param hInstanceHandle : handle to instance
495 * @param iResultIndex : index of the requested result/feature, index ranges from 0...NumOfResults-1
496 * @param *pfResult : the result data is copied into this buffer
497 * @param *ptFEAPI_TimeStamp : the time stamp of the result
498 * @return FEAPI_Error_t : FEAPI_kNoError when no error
499 */
500 typedef FEAPI_Error_t (*FEAPI_GetPluginResult_t) ( FEAPI_PluginInstance_t hInstanceHandle,
501 int iResultIndex,
502 FEAPI_Signal_t *pfResult,
503 FEAPI_TimeStamp_t *ptFEAPI_TimeStamp);
504
505 /*!
506 * Gets the maximum latency of one result. Since the host buffer size may vary, this is only the
507 * *internal* latency.
508 *
509 * @param hInstanceHandle : handle to instance
510 * @param iResultIndex : index of the requested result (feature), index ranges from 0...NumOfResults-1
511 * @return int : number of samples (at audio input sample rate) which is required to calculate this result the first time (negative values are not allowed, 0 means undefined)
512 */
513 typedef int (*FEAPI_GetPluginResultLatency_t) (FEAPI_PluginInstance_t hInstanceHandle, int iResultIndex);
514
515 /*!
516 * Resets/clears all internal buffers and states, so that the plugin is in a state where it can start processing a new audio stream.
517 *
518 * @param hInstanceHandle : handle to instance
519 * @return FEAPI_Error_t : FEAPI_kNoError when no error
520 */
521 typedef FEAPI_Error_t (*FEAPI_ResetPlugin_t) (FEAPI_PluginInstance_t hInstanceHandle);
522
523 /** @} */
524
525
526 #ifdef __cplusplus
527 }
528 #endif
529
530
531 #endif // #if !defined(FEAPI_HEADER_INCLUDED)