Home | History | Annotate | Download | only in media
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ANDROID_EFFECTSFACTORYAPI_H_
     18 #define ANDROID_EFFECTSFACTORYAPI_H_
     19 
     20 #include <cutils/compiler.h>
     21 #include <errno.h>
     22 #include <stdint.h>
     23 #include <sys/types.h>
     24 #include <hardware/audio_effect.h>
     25 
     26 #if __cplusplus
     27 extern "C" {
     28 #endif
     29 
     30 /////////////////////////////////////////////////
     31 //      Effect factory interface
     32 /////////////////////////////////////////////////
     33 
     34 ////////////////////////////////////////////////////////////////////////////////
     35 //
     36 //    Function:       EffectQueryNumberEffects
     37 //
     38 //    Description:    Returns the number of different effects in all loaded libraries.
     39 //          Each effect must have a different effect uuid (see
     40 //          effect_descriptor_t). This function together with EffectQueryEffect()
     41 //          is used to enumerate all effects present in all loaded libraries.
     42 //          Each time EffectQueryNumberEffects() is called, the factory must
     43 //          reset the index of the effect descriptor returned by next call to
     44 //          EffectQueryEffect() to restart enumeration from the beginning.
     45 //
     46 //    Input/Output:
     47 //          pNumEffects:    address where the number of effects should be returned.
     48 //
     49 //    Output:
     50 //        returned value:    0          successful operation.
     51 //                          -ENODEV     factory failed to initialize
     52 //                          -EINVAL     invalid pNumEffects
     53 //        *pNumEffects:     updated with number of effects in factory
     54 //
     55 ////////////////////////////////////////////////////////////////////////////////
     56 ANDROID_API
     57 int EffectQueryNumberEffects(uint32_t *pNumEffects);
     58 
     59 ////////////////////////////////////////////////////////////////////////////////
     60 //
     61 //    Function:       EffectQueryEffect
     62 //
     63 //    Description:    Returns a descriptor of the next available effect.
     64 //          See effect_descriptor_t for a details on effect descriptor.
     65 //          This function together with EffectQueryNumberEffects() is used to enumerate all
     66 //          effects present in all loaded libraries. The enumeration sequence is:
     67 //              EffectQueryNumberEffects(&num_effects);
     68 //              for (i = 0; i < num_effects; i++)
     69 //                  EffectQueryEffect(i,...);
     70 //
     71 //    Input/Output:
     72 //          pDescriptor:    address where to return the effect descriptor.
     73 //
     74 //    Output:
     75 //        returned value:    0          successful operation.
     76 //                          -ENOENT     no more effect available
     77 //                          -ENODEV     factory failed to initialize
     78 //                          -EINVAL     invalid pDescriptor
     79 //                          -ENOSYS     effect list has changed since last execution of
     80 //                                      EffectQueryNumberEffects()
     81 //        *pDescriptor:     updated with the effect descriptor.
     82 //
     83 ////////////////////////////////////////////////////////////////////////////////
     84 ANDROID_API
     85 int EffectQueryEffect(uint32_t index, effect_descriptor_t *pDescriptor);
     86 
     87 ////////////////////////////////////////////////////////////////////////////////
     88 //
     89 //    Function:       EffectCreate
     90 //
     91 //    Description:    Creates an effect engine of the specified type and returns an
     92 //          effect control interface on this engine. The function will allocate the
     93 //          resources for an instance of the requested effect engine and return
     94 //          a handle on the effect control interface.
     95 //
     96 //    Input:
     97 //          pEffectUuid:    pointer to the effect uuid.
     98 //          sessionId:  audio session to which this effect instance will be attached. All effects
     99 //              created with the same session ID are connected in series and process the same signal
    100 //              stream.  Knowing that two effects are part of the same effect chain can help the
    101 //              library implement some kind of optimizations.
    102 //          ioId:   identifies the output or input stream this effect is directed to at audio HAL.
    103 //              For future use especially with tunneled HW accelerated effects
    104 //
    105 //    Input/Output:
    106 //          pHandle:        address where to return the effect handle.
    107 //
    108 //    Output:
    109 //        returned value:    0          successful operation.
    110 //                          -ENODEV     factory failed to initialize
    111 //                          -EINVAL     invalid pEffectUuid or pHandle
    112 //                          -ENOENT     no effect with this uuid found
    113 //        *pHandle:         updated with the effect handle.
    114 //
    115 ////////////////////////////////////////////////////////////////////////////////
    116 ANDROID_API
    117 int EffectCreate(const effect_uuid_t *pEffectUuid, int32_t sessionId, int32_t ioId,
    118         effect_handle_t *pHandle);
    119 
    120 ////////////////////////////////////////////////////////////////////////////////
    121 //
    122 //    Function:       EffectRelease
    123 //
    124 //    Description:    Releases the effect engine whose handle is given as argument.
    125 //          All resources allocated to this particular instance of the effect are
    126 //          released.
    127 //
    128 //    Input:
    129 //          handle:    handle on the effect interface to be released.
    130 //
    131 //    Output:
    132 //        returned value:    0          successful operation.
    133 //                          -ENODEV     factory failed to initialize
    134 //                          -EINVAL     invalid interface handle
    135 //
    136 ////////////////////////////////////////////////////////////////////////////////
    137 ANDROID_API
    138 int EffectRelease(effect_handle_t handle);
    139 
    140 ////////////////////////////////////////////////////////////////////////////////
    141 //
    142 //    Function:       EffectGetDescriptor
    143 //
    144 //    Description:    Returns the descriptor of the effect which uuid is pointed
    145 //          to by first argument.
    146 //
    147 //    Input:
    148 //          pEffectUuid:    pointer to the effect uuid.
    149 //
    150 //    Input/Output:
    151 //          pDescriptor:    address where to return the effect descriptor.
    152 //
    153 //    Output:
    154 //        returned value:    0          successful operation.
    155 //                          -ENODEV     factory failed to initialize
    156 //                          -EINVAL     invalid pEffectUuid or pDescriptor
    157 //                          -ENOENT     no effect with this uuid found
    158 //        *pDescriptor:     updated with the effect descriptor.
    159 //
    160 ////////////////////////////////////////////////////////////////////////////////
    161 ANDROID_API
    162 int EffectGetDescriptor(const effect_uuid_t *pEffectUuid, effect_descriptor_t *pDescriptor);
    163 
    164 ////////////////////////////////////////////////////////////////////////////////
    165 //
    166 //    Function:       EffectIsNullUuid
    167 //
    168 //    Description:    Helper function to compare effect uuid to EFFECT_UUID_NULL
    169 //
    170 //    Input:
    171 //          pEffectUuid: pointer to effect uuid to compare to EFFECT_UUID_NULL.
    172 //
    173 //    Output:
    174 //        returned value:    0 if uuid is different from EFFECT_UUID_NULL.
    175 //                           1 if uuid is equal to EFFECT_UUID_NULL.
    176 //
    177 ////////////////////////////////////////////////////////////////////////////////
    178 ANDROID_API
    179 int EffectIsNullUuid(const effect_uuid_t *pEffectUuid);
    180 
    181 ANDROID_API
    182 int EffectDumpEffects(int fd);
    183 
    184 #if __cplusplus
    185 }  // extern "C"
    186 #endif
    187 
    188 
    189 #endif /*ANDROID_EFFECTSFACTORYAPI_H_*/
    190