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