1135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* 2135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Copyright (C) 2010 The Android Open Source Project 3135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 4135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * you may not use this file except in compliance with the License. 6135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * You may obtain a copy of the License at 7135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 8135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 10135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Unless required by applicable law or agreed to in writing, software 11135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * See the License for the specific language governing permissions and 14135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * limitations under the License. 15135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent */ 16135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 17ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent#ifndef ANDROID_EFFECTSFACTORYAPI_H_ 18ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent#define ANDROID_EFFECTSFACTORYAPI_H_ 19135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 20135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#include <errno.h> 21135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#include <stdint.h> 22135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#include <sys/types.h> 23e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent#include <hardware/audio_effect.h> 24135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 25135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#if __cplusplus 26135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentextern "C" { 27135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#endif 28135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 29135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent///////////////////////////////////////////////// 30135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Effect factory interface 31135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent///////////////////////////////////////////////// 32135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 33135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 34135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 35135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Function: EffectQueryNumberEffects 36135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 37be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent// Description: Returns the number of different effects in all loaded libraries. 38135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Each effect must have a different effect uuid (see 39ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent// effect_descriptor_t). This function together with EffectQueryEffect() 40135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// is used to enumerate all effects present in all loaded libraries. 41135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Each time EffectQueryNumberEffects() is called, the factory must 42135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// reset the index of the effect descriptor returned by next call to 43ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent// EffectQueryEffect() to restart enumeration from the beginning. 44135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 45135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Input/Output: 46135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// pNumEffects: address where the number of effects should be returned. 47135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 48135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Output: 49135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// returned value: 0 successful operation. 50135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// -ENODEV factory failed to initialize 51135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// -EINVAL invalid pNumEffects 52135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// *pNumEffects: updated with number of effects in factory 53135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 54135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 55be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurentint EffectQueryNumberEffects(uint32_t *pNumEffects); 56135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 57135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 58135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 59ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent// Function: EffectQueryEffect 60135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 61135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Description: Returns a descriptor of the next available effect. 62135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// See effect_descriptor_t for a details on effect descriptor. 63ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent// This function together with EffectQueryNumberEffects() is used to enumerate all 64135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// effects present in all loaded libraries. The enumeration sequence is: 65135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// EffectQueryNumberEffects(&num_effects); 66ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent// for (i = 0; i < num_effects; i++) 67ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent// EffectQueryEffect(i,...); 68135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 69135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Input/Output: 70135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// pDescriptor: address where to return the effect descriptor. 71135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 72135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Output: 73135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// returned value: 0 successful operation. 74ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent// -ENOENT no more effect available 75135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// -ENODEV factory failed to initialize 76135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// -EINVAL invalid pDescriptor 778af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten// -ENOSYS effect list has changed since last execution of 788af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten// EffectQueryNumberEffects() 79135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// *pDescriptor: updated with the effect descriptor. 80135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 81135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 82ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurentint EffectQueryEffect(uint32_t index, effect_descriptor_t *pDescriptor); 83135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 84135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 85135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 86135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Function: EffectCreate 87135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 88135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Description: Creates an effect engine of the specified type and returns an 89135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// effect control interface on this engine. The function will allocate the 90135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// resources for an instance of the requested effect engine and return 9199e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten// a handle on the effect control interface. 92135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 93135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Input: 94135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// pEffectUuid: pointer to the effect uuid. 958af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten// sessionId: audio session to which this effect instance will be attached. All effects 968af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten// created with the same session ID are connected in series and process the same signal 978af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten// stream. Knowing that two effects are part of the same effect chain can help the 988af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten// library implement some kind of optimizations. 998af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten// ioId: identifies the output or input stream this effect is directed to at audio HAL. 1008af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten// For future use especially with tunneled HW accelerated effects 101135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 102135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Input/Output: 103e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent// pHandle: address where to return the effect handle. 104135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 105135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Output: 106135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// returned value: 0 successful operation. 107135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// -ENODEV factory failed to initialize 108e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent// -EINVAL invalid pEffectUuid or pHandle 109be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent// -ENOENT no effect with this uuid found 110e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent// *pHandle: updated with the effect handle. 111135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 112135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 1138af901cdea0af7e536579dee6d56e69987035a01Glenn Kastenint EffectCreate(const effect_uuid_t *pEffectUuid, int32_t sessionId, int32_t ioId, 1148af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten effect_handle_t *pHandle); 115135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 116135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 117135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 118135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Function: EffectRelease 119135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 12099e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten// Description: Releases the effect engine whose handle is given as argument. 121135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// All resources allocated to this particular instance of the effect are 122135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// released. 123135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 124135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Input: 12599e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten// handle: handle on the effect interface to be released. 126135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 127135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Output: 128135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// returned value: 0 successful operation. 129135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// -ENODEV factory failed to initialize 13099e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten// -EINVAL invalid interface handle 131135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 132135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 133e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurentint EffectRelease(effect_handle_t handle); 134135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 135135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 136135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 137135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Function: EffectGetDescriptor 138135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 139135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Description: Returns the descriptor of the effect which uuid is pointed 140135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// to by first argument. 141135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 142135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Input: 143135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// pEffectUuid: pointer to the effect uuid. 144135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 145135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Input/Output: 146135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// pDescriptor: address where to return the effect descriptor. 147135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 148135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Output: 149135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// returned value: 0 successful operation. 150135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// -ENODEV factory failed to initialize 151135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// -EINVAL invalid pEffectUuid or pDescriptor 152be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent// -ENOENT no effect with this uuid found 153135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// *pDescriptor: updated with the effect descriptor. 154135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 155135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 1565e92a7861196ddae14638d4b7a63fc4892b7ef59Glenn Kastenint EffectGetDescriptor(const effect_uuid_t *pEffectUuid, effect_descriptor_t *pDescriptor); 157135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 158135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 159135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 160135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Function: EffectIsNullUuid 161135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 162135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Description: Helper function to compare effect uuid to EFFECT_UUID_NULL 163135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 164135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Input: 165135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// pEffectUuid: pointer to effect uuid to compare to EFFECT_UUID_NULL. 166135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 167135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// Output: 168135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// returned value: 0 if uuid is different from EFFECT_UUID_NULL. 169135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 1 if uuid is equal to EFFECT_UUID_NULL. 170135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// 171135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//////////////////////////////////////////////////////////////////////////////// 1725e92a7861196ddae14638d4b7a63fc4892b7ef59Glenn Kastenint EffectIsNullUuid(const effect_uuid_t *pEffectUuid); 173135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 174135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#if __cplusplus 175135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent} // extern "C" 176135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#endif 177135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 178135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 179ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent#endif /*ANDROID_EFFECTSFACTORYAPI_H_*/ 180