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_EFFECTSFACTORY_H_ 18#define ANDROID_EFFECTSFACTORY_H_ 19 20#include <dirent.h> 21#include <pthread.h> 22 23#include <android/log.h> 24#include <hardware/audio_effect.h> 25 26#if __cplusplus 27extern "C" { 28#endif 29 30#define PROPERTY_IGNORE_EFFECTS "ro.audio.ignore_effects" 31 32typedef struct list_elem_s { 33 void *object; 34 struct list_elem_s *next; 35} list_elem_t; 36 37// Structure used for storing effects with their sub effects. 38// Used in creating gSubEffectList. Here, 39// object holds the effect desc and the list sub_elem holds the sub effects 40typedef struct list_sub_elem_s { 41 void *object; 42 list_elem_t *sub_elem; 43 struct list_sub_elem_s *next; 44} list_sub_elem_t; 45 46typedef struct lib_entry_s { 47 audio_effect_library_t *desc; 48 char *name; 49 char *path; 50 void *handle; 51 list_elem_t *effects; //list of effect_descriptor_t 52 pthread_mutex_t lock; 53} lib_entry_t; 54 55typedef struct effect_entry_s { 56 struct effect_interface_s *itfe; 57 effect_handle_t subItfe; 58 lib_entry_t *lib; 59} effect_entry_t; 60 61typedef struct lib_failed_entry_s { 62 char *name; 63 char *path; 64} lib_failed_entry_t; 65 66// Structure used to store the lib entry 67// and the descriptor of the sub effects. 68// The library entry is to be stored in case of 69// sub effects as the sub effects are not linked 70// to the library list - gLibraryList. 71typedef struct sub_effect_entry_s { 72 lib_entry_t *lib; 73 void *object; 74} sub_effect_entry_t; 75 76 77 78//////////////////////////////////////////////////////////////////////////////// 79// 80// Function: EffectGetSubEffects 81// 82// Description: Returns the descriptors of the sub effects of the effect 83// whose uuid is pointed to by first argument. 84// 85// Input: 86// pEffectUuid: pointer to the effect uuid. 87// size: max number of sub_effect_entry_t * in pSube. 88// 89// Input/Output: 90// pSube: address where to return the sub effect structures. 91// Output: 92// returned value: 0 successful operation. 93// -ENODEV factory failed to initialize 94// -EINVAL invalid pEffectUuid or pDescriptor 95// -ENOENT no effect with this uuid found 96// *pDescriptor: updated with the sub effect descriptors. 97// 98//////////////////////////////////////////////////////////////////////////////// 99int EffectGetSubEffects(const effect_uuid_t *pEffectUuid, 100 sub_effect_entry_t **pSube, 101 size_t size); 102 103#if __cplusplus 104} // extern "C" 105#endif 106 107 108#endif /*ANDROID_EFFECTSFACTORY_H_*/ 109