AudioEffect.h revision 801a1186eb1d2ce195b15222701865932e08f3dc
165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian/* 265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Copyright (C) 2009 The Android Open Source Project 365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * you may not use this file except in compliance with the License. 665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * You may obtain a copy of the License at 765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 1065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Unless required by applicable law or agreed to in writing, software 1165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 1265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * See the License for the specific language governing permissions and 1465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * limitations under the License. 1565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 1665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 1765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#ifndef ANDROID_AUDIOEFFECT_H 1865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#define ANDROID_AUDIOEFFECT_H 1965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 2065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <stdint.h> 2165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <sys/types.h> 2265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 2365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/IAudioFlinger.h> 2465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/IEffect.h> 2565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/IEffectClient.h> 2665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/EffectApi.h> 2765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/AudioSystem.h> 2865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 2965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <utils/RefBase.h> 3065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <utils/Errors.h> 3165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <binder/IInterface.h> 3265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 3365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 3465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopiannamespace android { 35799a70e7028a4d714436c3a744a775acfbd31aaeDima Zavin 3665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian// ---------------------------------------------------------------------------- 3765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 385462fc9a38fa8c9dff434cd53fa5fb1782ae3042Mathias Agopianclass effect_param_cblk_t; 395462fc9a38fa8c9dff434cd53fa5fb1782ae3042Mathias Agopian 405462fc9a38fa8c9dff434cd53fa5fb1782ae3042Mathias Agopian// ---------------------------------------------------------------------------- 4164760240f931714858a59c1579f07264d7182ba2Dima Zavin 427394a4f358fa9908a9f0a7c954b65c399f4268e6Dima Zavinclass AudioEffect : public RefBase 4365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian{ 4465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianpublic: 4565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 46feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent /* 47feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent * Static methods for effect libraries management. 4865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 4965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 5065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* 5165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Loads the effect library which path is given as first argument. 5265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * This must be the full path of a dynamic library (.so) implementing one or 5365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * more effect engines and exposing the effect library interface described in 5465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * EffectApi.h. The function returns a handle on the library for use by 5565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * further call to unloadEffectLibrary() to unload the library. 5665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 5765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 5865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * libPath: full path of the dynamic library file in the file system. 5965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * handle: address where to return the library handle 605462fc9a38fa8c9dff434cd53fa5fb1782ae3042Mathias Agopian * 615462fc9a38fa8c9dff434cd53fa5fb1782ae3042Mathias Agopian * Returned status (from utils/Errors.h) can be: 625462fc9a38fa8c9dff434cd53fa5fb1782ae3042Mathias Agopian * NO_ERROR successful operation. 6365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * PERMISSION_DENIED could not get AudioFlinger interface or 645462fc9a38fa8c9dff434cd53fa5fb1782ae3042Mathias Agopian * application does not have permission to configure audio 6565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NO_INIT effect factory not initialized or 6654c3b66444ebfb9f2265ee70ac3b76ccefa0506aGlenn Kasten * library could not be loaded or 6765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * library does not implement required functions 6865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * BAD_VALUE invalid libPath string or handle 6965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 7065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned value: 7165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * *handle updated with library handle 7265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 7365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian static status_t loadEffectLibrary(const char *libPath, int *handle); 7465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 750d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi /* 760d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * Unloads the effect library which handle is given as argument. 7765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 7865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 7965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * handle: library handle 8065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 8165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 8265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NO_ERROR successful operation. 8365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * PERMISSION_DENIED could not get AudioFlinger interface or 8465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * application does not have permission to configure audio 8565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NO_INIT effect factory not initialized 860d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * BAD_VALUE invalid handle 8765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 8865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian static status_t unloadEffectLibrary(int handle); 8965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 9065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* 9165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Static methods for effects enumeration. 9265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 9365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 9465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* 9565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returns the number of effects available. This method together 9665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * with EffectQueryNext() is used to enumerate all effects: 9765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * The enumeration sequence is: 9865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * QueryNumberEffects(&num_effects); 9965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * while (num_effects--) 10065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * QueryNextEffect(); 10165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 10265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 10365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * pNumEffects: address where the number of effects should be returned. 10465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 10565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 10665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NO_ERROR successful operation. 10765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * PERMISSION_DENIED could not get AudioFlinger interface 10865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NO_INIT effect library failed to initialize 10965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * BAD_VALUE invalid numEffects pointer 11065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 11165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned value 11265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * *numEffects: updated with number of effects available 11365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 11465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian static status_t queryNumberEffects(uint32_t *numEffects); 11565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 11665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* 11765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returns number effect descriptor during effect 11865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * enumeration. 11965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 12065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 12165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * pDescriptor: address where the effect descriptor should be returned. 12265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 12365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 12465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NO_ERROR successful operation. 12565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NAME_NOT_FOUND no more effect available 12665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * PERMISSION_DENIED could not get AudioFlinger interface 12765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NO_INIT effect library failed to initialize 12865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * BAD_VALUE invalid descriptor pointer 12965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * INVALID_OPERATION effect list has changed since last execution of queryNumberEffects() 13065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 13165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned value 13265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * *descriptor: updated with effect descriptor 13365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 13465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian static status_t queryNextEffect(effect_descriptor_t *descriptor); 13565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 13665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 13765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* 13865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returns the descriptor for the specified effect uuid. 13965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 14065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 14165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * uuid: pointer to effect uuid. 14265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * descriptor: address where the effect descriptor should be returned. 14365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 14465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 14565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * NO_ERROR successful operation. 1463a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen * PERMISSION_DENIED could not get AudioFlinger interface 1473a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen * NO_INIT effect library failed to initialize 1483a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen * BAD_VALUE invalid uuid or descriptor pointers 1493a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen * NAME_NOT_FOUND no effect with this uuid found 15065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 15165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned value 15265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * *descriptor updated with effect descriptor 15365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 15465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian static status_t getEffectDescriptor(effect_uuid_t *uuid, effect_descriptor_t *descriptor); 15565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 15665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 15765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* 15865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Events used by callback function (effect_callback_t). 15965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 1607c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent enum event_type { 16165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian EVENT_CONTROL_STATUS_CHANGED = 0, 16265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian EVENT_ENABLE_STATUS_CHANGED = 1, 16365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian EVENT_PARAMETER_CHANGED = 2, 16465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian EVENT_ERROR = 3 16565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 16659255e4fc7d8ff52874b85b1988dc0785140cf81Eric Laurent 16765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Callback function notifying client application of a change in effect engine state or 16865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * configuration. 16965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * An effect engine can be shared by several applications but only one has the control 17065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * of the engine activity and configuration at a time. 17165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * The EVENT_CONTROL_STATUS_CHANGED event is received when an application loses or 17265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * retrieves the control of the effect engine. Loss of control happens 17365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * if another application requests the use of the engine by creating an AudioEffect for 17465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * the same effect type but with a higher priority. Control is returned when the 17565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * application having the control deletes its AudioEffect object. 17665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * The EVENT_ENABLE_STATUS_CHANGED event is received by all applications not having the 17765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * control of the effect engine when the effect is enabled or disabled. 17865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * The EVENT_PARAMETER_CHANGED event is received by all applications not having the 17965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * control of the effect engine when an effect parameter is changed. 18065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * The EVENT_ERROR event is received when the media server process dies. 18165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 18265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 18365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 18465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * event: type of event notified (see enum AudioEffect::event_type). 18565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * user: Pointer to context for use by the callback receiver. 18665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * info: Pointer to optional parameter according to event type: 18765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - EVENT_CONTROL_STATUS_CHANGED: boolean indicating if control is granted (true) 18865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * or stolen (false). 18965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - EVENT_ENABLE_STATUS_CHANGED: boolean indicating if effect is now enabled (true) 19065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * or disabled (false). 19165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - EVENT_PARAMETER_CHANGED: pointer to a effect_param_t structure. 1920d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * - EVENT_ERROR: status_t indicating the error (DEAD_OBJECT when media server dies). 1930d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi */ 19465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 19565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian typedef void (*effect_callback_t)(int32_t event, void* user, void *info); 19665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 19765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 19865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Constructor. 19965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * AudioEffect is the base class for creating and controlling an effect engine from 20065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * the application process. Creating an AudioEffect object will create the effect engine 20165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * in the AudioFlinger if no engine of the specified type exists. If one exists, this engine 20265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * will be used. The application creating the AudioEffect object (or a derived class like 20365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Reverb for instance) will either receive control of the effect engine or not, depending 20465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * on the priority parameter. If priority is higher than the priority used by the current 20565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * effect engine owner, the control will be transfered to the new application. Otherwise 20665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * control will remain to the previous application. In this case, the new application will be 207bee5337da7659b3b7128622ba1f42618b11df5beEric Laurent * notified of changes in effect engine state or control ownership by the effect callback. 20859bd0da8373af0e5159b799495fda51e03120ea4Eric Laurent * After creating the AudioEffect, the application must call the initCheck() method and 20965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * check the creation status before trying to control the effect engine (see initCheck()). 21065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * If the effect is to be applied to an AudioTrack or MediaPlayer only the application 21165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * must specify the audio session ID corresponding to this player. 21265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 2135a61d2f277af3098fc10b2881babca16391362daDima Zavin 2145a61d2f277af3098fc10b2881babca16391362daDima Zavin /* Simple Constructor. 215799a70e7028a4d714436c3a744a775acfbd31aaeDima Zavin */ 2163a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen AudioEffect(); 21765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 21865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 21965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Constructor. 22065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 22165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 22265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 22365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * type: type of effect created: can be null if uuid is specified. This corresponds to 22465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * the OpenSL ES interface implemented by this effect. 22565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * uuid: Uuid of effect created: can be null if type is specified. This uuid corresponds to 22665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * a particular implementation of an effect type. 22765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * priority: requested priority for effect control: the priority level corresponds to the 22865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * value of priority parameter: negative values indicate lower priorities, positive values 22965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * higher priorities, 0 being the normal priority. 23065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * cbf: optional callback function (see effect_callback_t) 23165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * user: pointer to context for use by the callback receiver. 23265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * sessionID: audio session this effect is associated to. If 0, the effect will be global to 23365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * the output mix. If not 0, the effect will be applied to all players 23465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * (AudioTrack or MediaPLayer) within the same audio session. 23565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * output: HAL audio output stream to which this effect must be attached. Leave at 0 for 23665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * automatic output selection by AudioFlinger. 23765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 23865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 23965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioEffect(const effect_uuid_t *type, 24065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian const effect_uuid_t *uuid = NULL, 24165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int32_t priority = 0, 24265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian effect_callback_t cbf = 0, 24365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void* user = 0, 24465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int sessionId = 0, 24565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian audio_io_handle_t output = 0 24665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian ); 24765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 24865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Constructor. 24965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Same as above but with type and uuid specified by character strings 25065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 25165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioEffect(const char *typeStr, 25265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian const char *uuidStr = NULL, 25365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int32_t priority = 0, 25465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian effect_callback_t cbf = 0, 25565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void* user = 0, 25665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int sessionId = 0, 25765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian audio_io_handle_t output = 0 25865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian ); 25965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 26065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Terminates the AudioEffect and unregisters it from AudioFlinger. 26165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * The effect engine is also destroyed if this AudioEffect was the last controlling 26265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * the engine. 26365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 26465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian ~AudioEffect(); 26565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 26665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Initialize an uninitialized AudioEffect. 26765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 26865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_ERROR or ALREADY_EXISTS: successful initialization 26965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - INVALID_OPERATION: AudioEffect is already initialized 27065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - BAD_VALUE: invalid parameter 27165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_INIT: audio flinger or audio hardware not initialized 27265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * */ 27365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t set(const effect_uuid_t *type, 274799a70e7028a4d714436c3a744a775acfbd31aaeDima Zavin const effect_uuid_t *uuid = NULL, 275799a70e7028a4d714436c3a744a775acfbd31aaeDima Zavin int32_t priority = 0, 27665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian effect_callback_t cbf = 0, 27765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void* user = 0, 27865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int sessionId = 0, 2797c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent audio_io_handle_t output = 0 28065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian ); 28165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 2827c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent /* Result of constructing the AudioEffect. This must be checked 2837c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent * before using any AudioEffect API. 2847c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent * initCheck() can return: 2857c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent * - NO_ERROR: the effect engine is successfully created and the application has control. 2867c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent * - ALREADY_EXISTS: the effect engine is successfully created but the application does not 2877c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent * have control. 2887c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent * - NO_INIT: the effect creation failed. 2897c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent * 29065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 2911d2bff0e588afe183a1baaae731519b4e957bbdbEric Laurent status_t initCheck() const; 29265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 293feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent 294feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent /* Returns the unique effect Id for the controlled effect engine. This ID is unique 29565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * system wide and is used for instance in the case of auxiliary effects to attach 29665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * the effect to an AudioTrack or MediaPlayer. 29765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 29865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 29965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int32_t id() const { return mId; } 30065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 30165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Returns a descriptor for the effect (see effect_descriptor_t in EffectApi.h). 30265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 30365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian effect_descriptor_t descriptor() const; 30465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 30565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Returns effect control priority of this AudioEffect object. 30665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 30765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int32_t priority() const { return mPriority; } 30865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 30965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 31065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Enables the effect engine. 31165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 31265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 31365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * None. 31465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 31565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 31665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_ERROR: successful operation 31765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - INVALID_OPERATION: the application does not have control of the effect engine 3180d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi */ 3190d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi status_t enable(); 32065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 32165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Disables the effect engine. 32265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 32365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 32465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * None. 32565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 32665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 32765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_ERROR: successful operation 32865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - INVALID_OPERATION: the application does not have control of the effect engine 32965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 33065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t disable(); 33165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 33265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian bool isEnabled() const; 33365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 33465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Sets a parameter value. 33565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 33665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 33765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * param: pointer to effect_param_t structure containing the parameter 33865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * and its value (See EffectApi.h). 33965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 34065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_ERROR: successful operation. 34165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - INVALID_OPERATION: the application does not have control of the effect engine. 34265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - BAD_VALUE: invalid parameter identifier or value. 34365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - DEAD_OBJECT: the effect engine has been deleted. 34465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 34565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t setParameter(effect_param_t *param); 3460d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi 34765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Prepare a new parameter value that will be set by next call to 34865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * setParameterCommit(). This method can be used to set multiple parameters 34965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * in a synchronous manner or to avoid multiple binder calls for each 35065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * parameter. 35165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 3520d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * Parameters: 3530d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * param: pointer to effect_param_t structure containing the parameter 35465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * and its value (See EffectApi.h). 35565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 35665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 35765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_ERROR: successful operation. 35865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - INVALID_OPERATION: the application does not have control of the effect engine. 35965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_MEMORY: no more space available in shared memory used for deferred parameter 36065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * setting. 36165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 36265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t setParameterDeferred(effect_param_t *param); 36365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 36465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Commit all parameter values previously prepared by setParameterDeferred(). 36565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 36665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 36765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * none 36865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 36965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 37065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_ERROR: successful operation. 37165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - INVALID_OPERATION: No new parameter values ready for commit. 37265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - BAD_VALUE: invalid parameter identifier or value: there is no indication 37365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * as to which of the parameters caused this error. 37465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - DEAD_OBJECT: the effect engine has been deleted. 37565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 37665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t setParameterCommit(); 37765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 37865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Gets a parameter value. 3790d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * 38065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Parameters: 38165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * param: pointer to effect_param_t structure containing the parameter 3820d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * and the returned value (See EffectApi.h). 3830d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * 38465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Returned status (from utils/Errors.h) can be: 38565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - NO_ERROR: successful operation. 38665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - INVALID_OPERATION: the AudioEffect was not successfully initialized. 38765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - BAD_VALUE: invalid parameter identifier. 38865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * - DEAD_OBJECT: the effect engine has been deleted. 38965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 39065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t getParameter(effect_param_t *param); 39165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 39265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian /* Sends a command and receives a response to/from effect engine. 39365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * See EffectApi.h for details on effect command() function, valid command codes 394feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent * and formats. 395feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent */ 396feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent status_t command(int32_t cmdCode, int32_t cmdSize, void *cmdData, int32_t *replySize, void *replyData); 397feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent 398feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent 399feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent /* 400feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent * Utility functions. 401feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent */ 402feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent 403feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent /* Converts the string passed as first argument to the effect_uuid_t 404feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent * pointed to by second argument 405feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent */ 406feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent static status_t stringToGuid(const char *str, effect_uuid_t *guid); 407feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent /* Converts the effect_uuid_t pointed to by first argument to the 408feb0db689c17dced50afaee54c659f1676e2d505Eric Laurent * string passed as second argument 4097c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent */ 4107c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent static status_t guidToString(const effect_uuid_t *guid, char *str, size_t maxLen); 41165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 41265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianprivate: 4130d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi 41465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // Implements the IEffectClient interface 41565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class EffectClient : public android::BnEffectClient, public android::IBinder::DeathRecipient 41665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian { 41765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 41865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 41965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian EffectClient(AudioEffect *effect) : mEffect(effect){} 42065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 42165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // IEffectClient 42265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void controlStatusChanged(bool controlGranted) {mEffect->controlStatusChanged(controlGranted);} 42365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void enableStatusChanged(bool enabled) {mEffect->enableStatusChanged(enabled);} 42465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void commandExecuted(int cmdCode, int cmdSize, void *pCmdData, int replySize, void *pReplyData) { 42565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian mEffect->commandExecuted(cmdCode, cmdSize, pCmdData, replySize, pReplyData); 4267c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent } 4277c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4287c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent // IBinder::DeathRecipient 4297c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent virtual void binderDied(const wp<IBinder>& who) {mEffect->binderDied();} 4307c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4317c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent private: 4327c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent AudioEffect *mEffect; 4337c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent }; 4347c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4357c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4367c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent friend class EffectClient; 4377c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4383a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen // IEffectClient 4393a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen void controlStatusChanged(bool controlGranted); 4407c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent void enableStatusChanged(bool enabled); 4417c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent void commandExecuted(int cmdCode, int cmdSize, void *pCmdData, int replySize, void *pReplyData); 4427c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent void binderDied(); 4437c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4447c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4457c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent sp<IEffect> mIEffect; // IEffect binder interface 4467c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent sp<EffectClient> mIEffectClient; // IEffectClient implementation 4477c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent sp<IMemory> mCblkMemory; // shared memory for deferred parameter setting 4487c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent effect_param_cblk_t* mCblk; // control block for deferred parameter setting 4497c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent int32_t mPriority; // priority for effect control 4507c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent status_t mStatus; // effect status 4517c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent volatile int32_t mEnabled; // enable state 4527c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent effect_callback_t mCbf; // callback function for status, control, parameter changes notifications 4537c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent void* mUserData; // client context for callback function 4547c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent effect_descriptor_t mDescriptor; // effect descriptor 4557c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent int32_t mId; // system wide unique effect engine instance identifier 4567c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent int32_t mSessionId; // audio session ID 4577c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent}; 4587c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4597c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4607c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent}; // namespace android 4617c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent 4627c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent#endif // ANDROID_AUDIOEFFECT_H 4637c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745Eric Laurent