EffectsFactory.h revision f90c7e0bb8d83d8b7f733bdf430d331ea3f221e8
1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/*
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Copyright (C) 2010 The Android Open Source Project
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * you may not use this file except in compliance with the License.
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * You may obtain a copy of the License at
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * See the License for the specific language governing permissions and
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * limitations under the License.
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ANDROID_EFFECTSFACTORY_H_
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ANDROID_EFFECTSFACTORY_H_
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <cutils/log.h>
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <pthread.h>
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <dirent.h>
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <hardware/audio_effect.h>
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if __cplusplus
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern "C" {
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)typedef struct list_elem_s {
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    void *object;
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    struct list_elem_s *next;
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} list_elem_t;
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Structure used for storing effects with their sub effects.
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Used in creating gSubEffectList. Here,
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// object holds the effect desc and the list sub_elem holds the sub effects
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)typedef struct list_sub_elem_s {
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    void *object;
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    list_elem_t *sub_elem;
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    struct list_sub_elem_s *next;
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} list_sub_elem_t;
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)typedef struct lib_entry_s {
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    audio_effect_library_t *desc;
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    char *name;
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    char *path;
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    void *handle;
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    list_elem_t *effects; //list of effect_descriptor_t
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    pthread_mutex_t lock;
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} lib_entry_t;
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)typedef struct effect_entry_s {
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    struct effect_interface_s *itfe;
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    effect_handle_t subItfe;
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    lib_entry_t *lib;
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} effect_entry_t;
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Structure used to store the lib entry
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// and the descriptor of the sub effects.
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// The library entry is to be stored in case of
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// sub effects as the sub effects are not linked
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// to the library list - gLibraryList.
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)typedef struct sub_effect_entry_s {
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    lib_entry_t *lib;
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    void *object;
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} sub_effect_entry_t;
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch//    Function:       EffectGetSubEffects
73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//
74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//    Description:    Returns the descriptors of the sub effects of the effect
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//                    whose uuid is pointed to by first argument.
76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//    Input:
78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//          pEffectUuid:    pointer to the effect uuid.
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//          size:           max number of sub_effect_entry_t * in pSube.
80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//    Input/Output:
82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//          pSube:          address where to return the sub effect structures.
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//    Output:
84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)//        returned value:    0          successful operation.
85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//                          -ENODEV     factory failed to initialize
86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//                          -EINVAL     invalid pEffectUuid or pDescriptor
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//                          -ENOENT     no effect with this uuid found
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//        *pDescriptor:     updated with the sub effect descriptors.
89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//
90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)int EffectGetSubEffects(const effect_uuid_t *pEffectUuid,
92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                        sub_effect_entry_t **pSube,
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                        size_t size);
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if __cplusplus
96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // extern "C"
976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif
980de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif /*ANDROID_EFFECTSFACTORY_H_*/
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)