audio_effect.h revision a635449697a2df5de98e72cfc24e926b641d5544
1fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/*
2fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * Copyright (C) 2011 The Android Open Source Project
3fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent *
4fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
5fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * you may not use this file except in compliance with the License.
6fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * You may obtain a copy of the License at
7fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent *
8fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
9fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent *
10fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * Unless required by applicable law or agreed to in writing, software
11fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
12fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * See the License for the specific language governing permissions and
14fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent * limitations under the License.
15fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent */
16fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
17fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
18fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#ifndef ANDROID_AUDIO_EFFECT_H
19fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define ANDROID_AUDIO_EFFECT_H
20fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
21fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#include <errno.h>
22fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#include <stdint.h>
23fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#include <strings.h>
24fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#include <sys/cdefs.h>
25fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#include <sys/types.h>
26fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
27fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#include <cutils/bitops.h>
28fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
29fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#include <system/audio.h>
30fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
31fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
32fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent__BEGIN_DECLS
33fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
34fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
35fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
36fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      Common Definitions
37fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
38fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
39fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
40fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--- Effect descriptor structure effect_descriptor_t
41fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
42fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
43fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Unique effect ID (can be generated from the following site:
44fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  http://www.itu.int/ITU-T/asn1/uuid.html)
45fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// This format is used for both "type" and "uuid" fields of the effect descriptor structure.
46fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// - When used for effect type and the engine is implementing and effect corresponding to a standard
47fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// OpenSL ES interface, this ID must be the one defined in OpenSLES_IID.h for that interface.
48fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// - When used as uuid, it should be a unique UUID for this particular implementation.
49fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_uuid_s {
50fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t timeLow;
51fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t timeMid;
52fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t timeHiAndVersion;
53fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t clockSeq;
54fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint8_t node[6];
55fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_uuid_t;
56fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
57fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Maximum length of character strings in structures defines by this API.
58fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_STRING_LEN_MAX 64
59fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
60fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// NULL UUID definition (matches SL_IID_NULL_)
61fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_UUID_INITIALIZER { 0xec7178ec, 0xe5e1, 0x4432, 0xa3f4, \
62fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                                  { 0x46, 0x57, 0xe6, 0x79, 0x52, 0x10 } }
63fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentstatic const effect_uuid_t EFFECT_UUID_NULL_ = EFFECT_UUID_INITIALIZER;
64fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentconst effect_uuid_t * const EFFECT_UUID_NULL = &EFFECT_UUID_NULL_;
65fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentconst char * const EFFECT_UUID_NULL_STR = "ec7178ec-e5e1-4432-a3f4-4657e6795210";
66fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
67fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The effect descriptor contains necessary information to facilitate the enumeration of the effect
68fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// engines present in a library.
69fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_descriptor_s {
70fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    effect_uuid_t type;     // UUID of to the OpenSL ES interface implemented by this effect
71fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    effect_uuid_t uuid;     // UUID for this particular implementation
72fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t apiVersion;    // Version of the effect control API implemented
73fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t flags;         // effect engine capabilities/requirements flags (see below)
74fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t cpuLoad;       // CPU load indication (see below)
75fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t memoryUsage;   // Data Memory usage (see below)
76fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    char    name[EFFECT_STRING_LEN_MAX];   // human readable effect name
77fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    char    implementor[EFFECT_STRING_LEN_MAX];    // human readable effect implementor name
78fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_descriptor_t;
79fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
80fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// CPU load and memory usage indication: each effect implementation must provide an indication of
81fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// its CPU and memory usage for the audio effect framework to limit the number of effects
82fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// instantiated at a given time on a given platform.
83fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The CPU load is expressed in 0.1 MIPS units as estimated on an ARM9E core (ARMv5TE) with 0 WS.
84fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The memory usage is expressed in KB and includes only dynamically allocated memory
85fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
86fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Definitions for flags field of effect descriptor.
87fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
88fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | description               | bits      | values
89fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
90f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | connection mode           | 0..2      | 0 insert: after track process
91fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 auxiliary: connect to track auxiliary
92fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |  output and use send level
93fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2 replace: replaces track process function;
94fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   must implement SRC, volume and mono to stereo.
95f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 3 pre processing: applied below audio HAL on input
96f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 4 post processing: applied below audio HAL on output
97f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 5 - 7 reserved
98fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
99f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | insertion preference      | 3..5      | 0 none
100fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 first of the chain
101fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2 last of the chain
102fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 3 exclusive (only effect in the insert chain)
103fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 4..7 reserved
104fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
105f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | Volume management         | 6..8      | 0 none
106fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 implements volume control
107fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2 requires volume indication
108f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 4 reserved
109fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
110f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | Device indication         | 9..11     | 0 none
111fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 requires device updates
112f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 2, 4 reserved
113fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
114922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  | Sample input mode         | 12..13    | 1 direct: process() function or EFFECT_CMD_SET_CONFIG
115fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   command must specify a buffer descriptor
116f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 2 provider: process() function uses the
117fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   bufferProvider indicated by the
118922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  |                           |           |   EFFECT_CMD_SET_CONFIG command to request input.
119fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   buffers.
120f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 3 both: both input modes are supported
121fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
122922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  | Sample output mode        | 14..15    | 1 direct: process() function or EFFECT_CMD_SET_CONFIG
123fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   command must specify a buffer descriptor
124f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 2 provider: process() function uses the
125fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   bufferProvider indicated by the
126922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  |                           |           |   EFFECT_CMD_SET_CONFIG command to request output
127fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   buffers.
128f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 3 both: both output modes are supported
129fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
130f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | Hardware acceleration     | 16..17    | 0 No hardware acceleration
131fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 non tunneled hw acceleration: the process() function
132fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   reads the samples, send them to HW accelerated
133fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   effect processor, reads back the processed samples
134fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   and returns them to the output buffer.
135fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2 tunneled hw acceleration: the process() function is
136fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   transparent. The effect interface is only used to
137fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   control the effect engine. This mode is relevant for
138fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   global effects actually applied by the audio
139fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   hardware on the output stream.
140fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
141f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | Audio Mode indication     | 18..19    | 0 none
142fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 requires audio mode updates
143fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2..3 reserved
144fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
145fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
146fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Insert mode
147f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_SHIFT          0
148f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_SIZE           3
149f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_MASK           (((1 << EFFECT_FLAG_TYPE_SIZE) -1) \
150f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_TYPE_SHIFT)
151f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_INSERT         (0 << EFFECT_FLAG_TYPE_SHIFT)
152f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_AUXILIARY      (1 << EFFECT_FLAG_TYPE_SHIFT)
153f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_REPLACE        (2 << EFFECT_FLAG_TYPE_SHIFT)
154f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_PRE_PROC       (3 << EFFECT_FLAG_TYPE_SHIFT)
155f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_POST_PROC      (4 << EFFECT_FLAG_TYPE_SHIFT)
156fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
157fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Insert preference
158f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_SHIFT        (EFFECT_FLAG_TYPE_SHIFT + EFFECT_FLAG_TYPE_SIZE)
159f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_SIZE         3
160f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_MASK         (((1 << EFFECT_FLAG_INSERT_SIZE) -1) \
161f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_INSERT_SHIFT)
162f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_ANY          (0 << EFFECT_FLAG_INSERT_SHIFT)
163f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_FIRST        (1 << EFFECT_FLAG_INSERT_SHIFT)
164f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_LAST         (2 << EFFECT_FLAG_INSERT_SHIFT)
165f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_EXCLUSIVE    (3 << EFFECT_FLAG_INSERT_SHIFT)
166fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
167fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
168fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Volume control
169f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_SHIFT        (EFFECT_FLAG_INSERT_SHIFT + EFFECT_FLAG_INSERT_SIZE)
170f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_SIZE         3
171f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_MASK         (((1 << EFFECT_FLAG_VOLUME_SIZE) -1) \
172f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_VOLUME_SHIFT)
173f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_CTRL         (1 << EFFECT_FLAG_VOLUME_SHIFT)
174f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_IND          (2 << EFFECT_FLAG_VOLUME_SHIFT)
175f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_NONE         (0 << EFFECT_FLAG_VOLUME_SHIFT)
176fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
177fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Device indication
178f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_SHIFT        (EFFECT_FLAG_VOLUME_SHIFT + EFFECT_FLAG_VOLUME_SIZE)
179f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_SIZE         3
180f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_MASK         (((1 << EFFECT_FLAG_DEVICE_SIZE) -1) \
181f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_DEVICE_SHIFT)
182f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_IND          (1 << EFFECT_FLAG_DEVICE_SHIFT)
183f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_NONE         (0 << EFFECT_FLAG_DEVICE_SHIFT)
184fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
185fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Sample input modes
186f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_SHIFT         (EFFECT_FLAG_DEVICE_SHIFT + EFFECT_FLAG_DEVICE_SIZE)
187f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_SIZE          2
188f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_MASK          (((1 << EFFECT_FLAG_INPUT_SIZE) -1) \
189f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_INPUT_SHIFT)
190f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_DIRECT        (1 << EFFECT_FLAG_INPUT_SHIFT)
191f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_PROVIDER      (2 << EFFECT_FLAG_INPUT_SHIFT)
192f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_BOTH          (3 << EFFECT_FLAG_INPUT_SHIFT)
193fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
194fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Sample output modes
195f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_SHIFT        (EFFECT_FLAG_INPUT_SHIFT + EFFECT_FLAG_INPUT_SIZE)
196f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_SIZE         2
197f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_MASK         (((1 << EFFECT_FLAG_OUTPUT_SIZE) -1) \
198f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_OUTPUT_SHIFT)
199f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_DIRECT       (1 << EFFECT_FLAG_OUTPUT_SHIFT)
200f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_PROVIDER     (2 << EFFECT_FLAG_OUTPUT_SHIFT)
201f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_BOTH         (3 << EFFECT_FLAG_OUTPUT_SHIFT)
202fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
203fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Hardware acceleration mode
204f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SHIFT        (EFFECT_FLAG_OUTPUT_SHIFT + EFFECT_FLAG_OUTPUT_SIZE)
205f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SIZE         2
206f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_MASK         (((1 << EFFECT_FLAG_HW_ACC_SIZE) -1) \
207f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_HW_ACC_SHIFT)
208f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SIMPLE       (1 << EFFECT_FLAG_HW_ACC_SHIFT)
209f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_TUNNEL       (2 << EFFECT_FLAG_HW_ACC_SHIFT)
210fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
211fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Audio mode indication
212f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_SHIFT    (EFFECT_FLAG_HW_ACC_SHIFT + EFFECT_FLAG_HW_ACC_SIZE)
213f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_SIZE     2
214f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_MASK     (((1 << EFFECT_FLAG_AUDIO_MODE_SIZE) -1) \
215f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_AUDIO_MODE_SHIFT)
216f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_IND      (1 << EFFECT_FLAG_AUDIO_MODE_SHIFT)
217f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_NONE     (0 << EFFECT_FLAG_AUDIO_MODE_SHIFT)
218fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
219fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
220fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_MAKE_API_VERSION(M, m)  (((M)<<16) | ((m) & 0xFFFF))
221fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_API_VERSION_MAJOR(v)    ((v)>>16)
222fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_API_VERSION_MINOR(v)    ((m) & 0xFFFF)
223fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
224fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
225fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
226fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
227fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      Effect control interface
228fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
229fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
230fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Effect control interface version 2.0
231fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONTROL_API_VERSION EFFECT_MAKE_API_VERSION(2,0)
232fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
233f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// Effect control interface structure: effect_interface_s
234fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The effect control interface is exposed by each effect engine implementation. It consists of
235fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// a set of functions controlling the configuration, activation and process of the engine.
236f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// The functions are grouped in a structure of type effect_interface_s.
237f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//
238f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// Effect control interface handle: effect_handle_t
239fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The effect_handle_t serves two purposes regarding the implementation of the effect engine:
240fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// - 1 it is the address of a pointer to an effect_interface_s structure where the functions
241fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// of the effect control API for a particular effect are located.
242fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// - 2 it is the address of the context of a particular effect instance.
243fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// A typical implementation in the effect library would define a structure as follows:
244fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// struct effect_module_s {
245fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        const struct effect_interface_s *itfe;
246fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        effect_config_t config;
247fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        effect_context_t context;
248fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// }
249fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The implementation of EffectCreate() function would then allocate a structure of this
250fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// type and return its address as effect_handle_t
251fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_interface_s **effect_handle_t;
252fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
253fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
254fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Forward definition of type audio_buffer_t
255fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct audio_buffer_s audio_buffer_t;
256fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
257fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
258fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
259f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent
260f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent
261fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
262fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Effect control interface definition
263fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentstruct effect_interface_s {
264f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
265f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
266f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       process
267f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
268f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Effect process function. Takes input samples as specified
269f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          (count and location) in input buffer descriptor and output processed
270f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          samples as specified in output buffer descriptor. If the buffer descriptor
271f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          is not specified the function must use either the buffer or the
272922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //          buffer provider function installed by the EFFECT_CMD_SET_CONFIG command.
273f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          The effect framework will call the process() function after the EFFECT_CMD_ENABLE
274f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          command is received and until the EFFECT_CMD_DISABLE is received. When the engine
275f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          receives the EFFECT_CMD_DISABLE command it should turn off the effect gracefully
276f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          and when done indicate that it is OK to stop calling the process() function by
277f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          returning the -ENODATA status.
278f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
279f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    NOTE: the process() function implementation should be "real-time safe" that is
280f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //      it should not perform blocking calls: malloc/free, sleep, read/write/open/close,
281f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //      pthread_cond_wait/pthread_mutex_lock...
282f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
283f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
284f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
285f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
286f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          inBuffer:   buffer descriptor indicating where to read samples to process.
287922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG command.
288f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
289f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          outBuffer:   buffer descriptor indicating where to write processed samples.
290922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG command.
291f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
292f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
293f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0 successful operation
294f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -ENODATA the engine has finished the disable phase and the framework
295f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  can stop calling process()
296f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
297f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid input/output buffer description
298f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
299f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*process)(effect_handle_t self,
300f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       audio_buffer_t *inBuffer,
301f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       audio_buffer_t *outBuffer);
302f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
303f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
304f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       command
305f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
306f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Send a command and receive a response to/from effect engine.
307f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
308f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
309f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
310f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
311f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          cmdCode:    command code: the command can be a standardized command defined in
312f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              effect_command_e (see below) or a proprietary command.
313f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          cmdSize:    size of command in bytes
314f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pCmdData:   pointer to command data
315f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pReplyData: pointer to reply data
316f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
317f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input/Output:
318f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          replySize: maximum size of reply data as input
319f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                      actual size of reply data as output
320f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
321f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
322f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          returned value: 0       successful operation
323f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
324f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid command/reply size or format according to command code
325f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              The return code should be restricted to indicate problems related to the this
326f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              API specification. Status related to the execution of a particular command should be
327f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              indicated as part of the reply field.
328f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
329f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          *pReplyData updated with command response
330f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
331f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
332f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*command)(effect_handle_t self,
333f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t cmdCode,
334f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t cmdSize,
335f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       void *pCmdData,
336f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t *replySize,
337f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       void *pReplyData);
338f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
339f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
340f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:        get_descriptor
341f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
342f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Returns the effect descriptor
343f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
344f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
345f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
346f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
347f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
348f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input/Output:
349f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pDescriptor:    address where to return the effect descriptor.
350f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
351f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
352f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0          successful operation.
353f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL     invalid interface handle or invalid pDescriptor
354f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        *pDescriptor:     updated with the effect descriptor.
355f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
356f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
357f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*get_descriptor)(effect_handle_t self,
358f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                              effect_descriptor_t *pDescriptor);
359f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
360f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
361f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       process_reverse
362f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
363f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Process reverse stream function. This function is used to pass
364f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          a reference stream to the effect engine. If the engine does not need a reference
365f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          stream, this function pointer can be set to NULL.
366f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          This function would typically implemented by an Echo Canceler.
367f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
368f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
369f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
370f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
371f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          inBuffer:   buffer descriptor indicating where to read samples to process.
372922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG_REVERSE command.
373f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
374f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          outBuffer:   buffer descriptor indicating where to write processed samples.
375922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG_REVERSE command.
376f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              If the buffer and buffer provider in the configuration received by
377922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              EFFECT_CMD_SET_CONFIG_REVERSE are also NULL, do not return modified reverse
378f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              stream data
379f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
380f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
381f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0 successful operation
382f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -ENODATA the engine has finished the disable phase and the framework
383f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  can stop calling process_reverse()
384f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
385f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid input/output buffer description
386f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
387f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*process_reverse)(effect_handle_t self,
388f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                               audio_buffer_t *inBuffer,
389f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                               audio_buffer_t *outBuffer);
390fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
391fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
392fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
393fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
394fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--- Standardized command codes for command() function
395fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
396fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentenum effect_command_e {
397fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_INIT,                 // initialize effect engine
398922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_SET_CONFIG,           // configure effect engine (see effect_config_t)
399fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_RESET,                // reset effect engine
400fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_ENABLE,               // enable effect process
401fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_DISABLE,              // disable effect process
402fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM,            // set parameter immediately (see effect_param_t)
403fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM_DEFERRED,   // set parameter deferred
404fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM_COMMIT,     // commit previous set parameter deferred
405fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_GET_PARAM,            // get parameter
406fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_DEVICE,           // set audio device (see audio.h, audio_devices_t)
407fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_VOLUME,           // set volume
408fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_AUDIO_MODE,       // set the audio mode (normal, ring, ...)
409922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_SET_CONFIG_REVERSE,   // configure effect engine reverse stream(see effect_config_t)
410f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent   EFFECT_CMD_SET_INPUT_DEVICE,     // set capture device (see audio.h, audio_devices_t)
411922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_GET_CONFIG,           // read effect engine configuration
412922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_GET_CONFIG_REVERSE,   // read configure effect engine reverse stream configuration
41366861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS,// get all supported configurations for a feature.
41466861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_GET_FEATURE_CONFIG,   // get current feature configuration
41566861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_SET_FEATURE_CONFIG,   // set current feature configuration
416fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_FIRST_PROPRIETARY = 0x10000 // first proprietary command code
417fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
418fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
419fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
420fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_INIT
421fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
422fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
423fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Initialize effect engine: All configurations return to default
424fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
425fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
426fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
427fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
428fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
429fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
430fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
431fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
432fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
433922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_SET_CONFIG
434fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
435fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
436fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Apply new audio parameters configurations for input and output buffers
437fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
438fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
439fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_config_t)
440fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_config_t
441fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
442fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
443fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
444fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
445fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
446fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_RESET
447fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
448fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
449fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Reset the effect engine. Keep configuration but resets state and buffer content
450fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
451fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
452fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
453fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
454fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
455fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
456fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
457fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
458fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
459fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_ENABLE
460fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
461fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
462fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Enable the process. Called by the framework before the first call to process()
463fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
464fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
465fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
466fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
467fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
468fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
469fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
470fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
471fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
472fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_DISABLE
473fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
474fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
475fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Disable the process. Called by the framework after the last call to process()
476fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
477fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
478fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
479fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
480fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
481fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
482fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
483fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
484fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
485fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM
486fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
487fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
488fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set a parameter and apply it immediately
489fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
490fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
491fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
492fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
493fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
494fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
495fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
496fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
497fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
498fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM_DEFERRED
499fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
500fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
501fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set a parameter but apply it only when receiving EFFECT_CMD_SET_PARAM_COMMIT command
502fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
503fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
504fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
505fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
506fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
507fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
508fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
509fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
510fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
511fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM_COMMIT
512fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
513fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
514fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Apply all previously received EFFECT_CMD_SET_PARAM_DEFERRED commands
515fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
516fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
517fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
518fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
519fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
520fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
521fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
522fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
523fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
524fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_GET_PARAM
525fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
526fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
527fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Get a parameter value
528fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
529fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
530fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param
531fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param
532fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
533fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
534fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
535fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
536fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
537fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_DEVICE
538fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
539fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
540fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set the rendering device the audio output path is connected to. See audio.h, audio_devices_t
541fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  for device values.
542fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  The effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to receive this
543fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  command when the device changes
544fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
545fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
546fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(uint32_t)
547fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: uint32_t
548fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
549fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
550fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
551fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
552fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
553fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_VOLUME
554fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
555fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
556fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set and get volume. Used by audio framework to delegate volume control to effect engine.
557fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  The effect implementation must set EFFECT_FLAG_VOLUME_IND or EFFECT_FLAG_VOLUME_CTRL flag in
558fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  its descriptor to receive this command before every call to process() function
559fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  If EFFECT_FLAG_VOLUME_CTRL flag is set in the effect descriptor, the effect engine must return
560fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  the volume that should be applied before the effect is processed. The overall volume (the volume
561fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  actually applied by the effect engine multiplied by the returned value) should match the value
562fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  indicated in the command.
563fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
564fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
565fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: n * sizeof(uint32_t)
566fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: volume for each channel defined in effect_config_t for output buffer expressed in
567fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      8.24 fixed point format
568fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
569fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
570fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: n * sizeof(uint32_t) / 0
571fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: - if EFFECT_FLAG_VOLUME_CTRL is set in effect descriptor:
572fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              volume for each channel defined in effect_config_t for output buffer expressed in
573fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              8.24 fixed point format
574fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        - if EFFECT_FLAG_VOLUME_CTRL is not set in effect descriptor:
575fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              N/A
576fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  It is legal to receive a null pointer as pReplyData in which case the effect framework has
577fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  delegated volume control to another effect
578fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
579fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_AUDIO_MODE
580fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
581fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
582fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set the audio mode. The effect implementation must set EFFECT_FLAG_AUDIO_MODE_IND flag in its
583fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  descriptor to receive this command when the audio mode changes.
584fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
585fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
586fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(uint32_t)
58766861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: audio_mode_t
588fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
589fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
590fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
591fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
592fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
593922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_SET_CONFIG_REVERSE
594f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
595f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// description:
596922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Apply new audio parameters configurations for input and output buffers of reverse stream.
597922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  An example of reverse stream is the echo reference supplied to an Acoustic Echo Canceler.
598f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
599f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command format:
600f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(effect_config_t)
601f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: effect_config_t
602f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
603f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// reply format:
604f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(int)
605f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: status
606f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//==================================================================================================
607f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command: EFFECT_CMD_SET_INPUT_DEVICE
608f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
609f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// description:
610f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  Set the capture device the audio input path is connected to. See audio.h, audio_devices_t
611f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  for device values.
612f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  The effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to receive this
613f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  command when the device changes
614f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
615f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command format:
616f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(uint32_t)
617f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: uint32_t
618f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
619f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// reply format:
620f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: 0
621f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: N/A
622f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//==================================================================================================
623922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_GET_CONFIG
624922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
625922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// description:
626922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Read audio parameters configurations for input and output buffers
627922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
628922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command format:
629922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: 0
630922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: N/A
631922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
632922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// reply format:
633922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: sizeof(effect_config_t)
634922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: effect_config_t
635922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//==================================================================================================
636922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_GET_CONFIG_REVERSE
637922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
638922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// description:
639922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Read audio parameters configurations for input and output buffers of reverse stream
640922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
641922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command format:
642922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: 0
643922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: N/A
644922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
645922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// reply format:
646922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: sizeof(effect_config_t)
647922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: effect_config_t
648922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//==================================================================================================
64966861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
65066861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
65166861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
65266861e374070e50b11ae262e84854c16b297153dEric Laurent//  Queries for supported configurations for a particular feature (e.g. get the supported
65366861e374070e50b11ae262e84854c16b297153dEric Laurent// combinations of main and auxiliary channels for a noise suppressor).
65466861e374070e50b11ae262e84854c16b297153dEric Laurent// The command parameter is the feature identifier (See effect_feature_e for a list of defined
65566861e374070e50b11ae262e84854c16b297153dEric Laurent// features) followed by the maximum number of configuration descriptor to return.
65666861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply is composed of:
65766861e374070e50b11ae262e84854c16b297153dEric Laurent//  - status (uint32_t):
65866861e374070e50b11ae262e84854c16b297153dEric Laurent//          - 0 if feature is supported
65966861e374070e50b11ae262e84854c16b297153dEric Laurent//          - -ENOSYS if the feature is not supported,
66066861e374070e50b11ae262e84854c16b297153dEric Laurent//          - -ENOMEM if the feature is supported but the total number of supported configurations
66166861e374070e50b11ae262e84854c16b297153dEric Laurent//          exceeds the maximum number indicated by the caller.
66266861e374070e50b11ae262e84854c16b297153dEric Laurent//  - total number of supported configurations (uint32_t)
66366861e374070e50b11ae262e84854c16b297153dEric Laurent//  - an array of configuration descriptors.
66466861e374070e50b11ae262e84854c16b297153dEric Laurent// The actual number of descriptors returned must not exceed the maximum number indicated by
66566861e374070e50b11ae262e84854c16b297153dEric Laurent// the caller.
66666861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
66766861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
66866861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: 2 x sizeof(uint32_t)
66966861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e + maximum number of configurations to return
67066861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
67166861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
67266861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: 2 x sizeof(uint32_t) + n x sizeof (<config descriptor>)
67366861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status + total number of configurations supported + array of n config descriptors
67466861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
67566861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_GET_FEATURE_CONFIG
67666861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
67766861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
67866861e374070e50b11ae262e84854c16b297153dEric Laurent//  Retrieves current configuration for a given feature.
67966861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply status is:
68066861e374070e50b11ae262e84854c16b297153dEric Laurent//      - 0 if feature is supported
68166861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -ENOSYS if the feature is not supported,
68266861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
68366861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
68466861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t)
68566861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e
68666861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
68766861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
68866861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t) + sizeof (<config descriptor>)
68966861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status + config descriptor
69066861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
69166861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_SET_FEATURE_CONFIG
69266861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
69366861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
69466861e374070e50b11ae262e84854c16b297153dEric Laurent//  Sets current configuration for a given feature.
69566861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply status is:
69666861e374070e50b11ae262e84854c16b297153dEric Laurent//      - 0 if feature is supported
69766861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -ENOSYS if the feature is not supported,
69866861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -EINVAL if the configuration is invalid
69966861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
70066861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
70166861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t) + sizeof (<config descriptor>)
70266861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e + config descriptor
70366861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
70466861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
70566861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t)
70666861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status
70766861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
708fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_FIRST_PROPRIETARY
709fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
710fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
711fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  All proprietary effect commands must use command codes above this value. The size and format of
712fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  command and response fields is free in this case
713fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
714fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
715fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
716fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Audio buffer descriptor used by process(), bufferProvider() functions and buffer_config_t
717fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// structure. Multi-channel audio is always interleaved. The channel order is from LSB to MSB with
718a9a5f5d57fbcf0f953b940788625404dbcd2cc52Jean-Michel Trivi// regard to the channel mask definition in audio.h, audio_channel_mask_t e.g :
719fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Stereo: left, right
720fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// 5 point 1: front left, front right, front center, low frequency, back left, back right
721fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer size is expressed in frame count, a frame being composed of samples for all
722fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// channels at a given time. Frame size for unspecified format (AUDIO_FORMAT_OTHER) is 8 bit by
723fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// definition
724fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentstruct audio_buffer_s {
725fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    size_t   frameCount;        // number of frames in buffer
726fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    union {
727fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        void*       raw;        // raw pointer to start of buffer
728fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        int32_t*    s32;        // pointer to signed 32 bit data at start of buffer
729fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        int16_t*    s16;        // pointer to signed 16 bit data at start of buffer
730fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        uint8_t*    u8;         // pointer to unsigned 8 bit data at start of buffer
731fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    };
732fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
733fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
734fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer_provider_s structure contains functions that can be used
735fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// by the effect engine process() function to query and release input
736fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// or output audio buffer.
737fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The getBuffer() function is called to retrieve a buffer where data
738fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// should read from or written to by process() function.
739fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The releaseBuffer() function MUST be called when the buffer retrieved
740fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// with getBuffer() is not needed anymore.
741fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The process function should use the buffer provider mechanism to retrieve
742fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// input or output buffer if the inBuffer or outBuffer passed as argument is NULL
743922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// and the buffer configuration (buffer_config_t) given by the EFFECT_CMD_SET_CONFIG
744fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command did not specify an audio buffer.
745fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
746fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef int32_t (* buffer_function_t)(void *cookie, audio_buffer_t *buffer);
747fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
748fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct buffer_provider_s {
749fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_function_t getBuffer;       // retrieve next buffer
750fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_function_t releaseBuffer;   // release used buffer
751fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    void       *cookie;                // for use by client of buffer provider functions
752fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} buffer_provider_t;
753fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
754fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
755fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer_config_s structure specifies the input or output audio format
756fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// to be used by the effect engine. It is part of the effect_config_t
757fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// structure that defines both input and output buffer configurations and is
758922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// passed by the EFFECT_CMD_SET_CONFIG or EFFECT_CMD_SET_CONFIG_REVERSE command.
759fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct buffer_config_s {
760fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    audio_buffer_t  buffer;     // buffer for use by process() function if not passed explicitly
761fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t   samplingRate;    // sampling rate
762a9a5f5d57fbcf0f953b940788625404dbcd2cc52Jean-Michel Trivi    uint32_t   channels;        // channel mask (see audio_channel_mask_t in audio.h)
763fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_provider_t bufferProvider;   // buffer provider
764fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint8_t    format;          // Audio format  (see see audio_format_t in audio.h)
765fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint8_t    accessMode;      // read/write or accumulate in buffer (effect_buffer_access_e)
766fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t   mask;            // indicates which of the above fields is valid
767fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} buffer_config_t;
768fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
769fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Values for "accessMode" field of buffer_config_t:
770fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//   overwrite, read only, accumulate (read/modify/write)
771fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentenum effect_buffer_access_e {
772fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_WRITE,
773fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_READ,
774fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_ACCUMULATE
775fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
776fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
777fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
77866861e374070e50b11ae262e84854c16b297153dEric Laurent// feature identifiers for EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS command
77966861e374070e50b11ae262e84854c16b297153dEric Laurentenum effect_feature_e {
78066861e374070e50b11ae262e84854c16b297153dEric Laurent    EFFECT_FEATURE_AUX_CHANNELS, // supports auxiliary channels (e.g. dual mic noise suppressor)
78166861e374070e50b11ae262e84854c16b297153dEric Laurent    EFFECT_FEATURE_CNT
78266861e374070e50b11ae262e84854c16b297153dEric Laurent};
78366861e374070e50b11ae262e84854c16b297153dEric Laurent
78466861e374070e50b11ae262e84854c16b297153dEric Laurent// EFFECT_FEATURE_AUX_CHANNELS feature configuration descriptor. Describe a combination
78566861e374070e50b11ae262e84854c16b297153dEric Laurent// of main and auxiliary channels supported
78666861e374070e50b11ae262e84854c16b297153dEric Laurenttypedef struct channel_config_s {
787a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten    audio_channel_mask_t main_channels; // channel mask for main channels
788a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten    audio_channel_mask_t aux_channels;  // channel mask for auxiliary channels
78966861e374070e50b11ae262e84854c16b297153dEric Laurent} channel_config_t;
79066861e374070e50b11ae262e84854c16b297153dEric Laurent
79166861e374070e50b11ae262e84854c16b297153dEric Laurent
792fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Values for bit field "mask" in buffer_config_t. If a bit is set, the corresponding field
793922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// in buffer_config_t must be taken into account when executing the EFFECT_CMD_SET_CONFIG command
794fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_BUFFER    0x0001  // buffer field must be taken into account
795fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_SMP_RATE  0x0002  // samplingRate field must be taken into account
796fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_CHANNELS  0x0004  // channels field must be taken into account
797fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_FORMAT    0x0008  // format field must be taken into account
798fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_ACC_MODE  0x0010  // accessMode field must be taken into account
799fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_PROVIDER  0x0020  // bufferProvider field must be taken into account
800fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_ALL (EFFECT_CONFIG_BUFFER | EFFECT_CONFIG_SMP_RATE | \
801fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                           EFFECT_CONFIG_CHANNELS | EFFECT_CONFIG_FORMAT | \
802fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                           EFFECT_CONFIG_ACC_MODE | EFFECT_CONFIG_PROVIDER)
803fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
804fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
805922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// effect_config_s structure describes the format of the pCmdData argument of EFFECT_CMD_SET_CONFIG
806fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command to configure audio parameters and buffers for effect engine input and output.
807fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_config_s {
808fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_config_t   inputCfg;
809f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    buffer_config_t   outputCfg;
810fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_config_t;
811fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
812fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
813fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// effect_param_s structure describes the format of the pCmdData argument of EFFECT_CMD_SET_PARAM
814fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command and pCmdData and pReplyData of EFFECT_CMD_GET_PARAM command.
815fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// psize and vsize represent the actual size of parameter and value.
816fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
817fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// NOTE: the start of value field inside the data field is always on a 32 bit boundary:
818fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
819fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
820fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | status    | sizeof(int)
821fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
822fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | psize     | sizeof(int)
823fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
824fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | vsize     | sizeof(int)
825fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
826fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |           |
827fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  ~ parameter ~   > psize     |
828fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |           >  ((psize - 1)/sizeof(int) + 1) * sizeof(int)
829fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+               |
830fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | padding   |               |
831fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
832fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |
833fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  ~ value     ~   > vsize
834fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |
835fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
836fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
837fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_param_s {
838fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t     status;     // Transaction status (unused for command, used for reply)
839fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t    psize;      // Parameter size
840fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t    vsize;      // Value size
841fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    char        data[];     // Start of Parameter + Value data
842fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_param_t;
843fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
844fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
845fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
846fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
847fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      Effect library interface
848fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
849fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
850fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Effect library interface version 2.0
851fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_LIBRARY_API_VERSION EFFECT_MAKE_API_VERSION(2,0)
852fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
853fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_TAG ((('A') << 24) | (('E') << 16) | (('L') << 8) | ('T'))
854fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
855fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Every effect library must have a data structure named AUDIO_EFFECT_LIBRARY_INFO_SYM
856fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// and the fields of this data structure must begin with audio_effect_library_t
857fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
858fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct audio_effect_library_s {
859fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // tag must be initialized to AUDIO_EFFECT_LIBRARY_TAG
860fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t tag;
861fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Version of the effect library API : 0xMMMMmmmm MMMM: Major, mmmm: minor
862fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t version;
863fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Name of this library
864fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    const char *name;
865fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Author/owner/implementor of the library
866fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    const char *implementor;
867fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
868fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
869fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
870fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        query_num_effects
871fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
872fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Returns the number of different effects exposed by the
873fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          library. Each effect must have a unique effect uuid (see
874fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          effect_descriptor_t). This function together with EffectQueryEffect()
875fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          is used to enumerate all effects present in the library.
876fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
877fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
878fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pNumEffects:    address where the number of effects should be returned.
879fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
880fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
881fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
882fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
883fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pNumEffects
884fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pNumEffects:     updated with number of effects in library
885fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
886fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
887fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t (*query_num_effects)(uint32_t *pNumEffects);
888fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
889fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
890fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
891fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        query_effect
892fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
893fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Returns the descriptor of the effect engine which index is
894fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          given as argument.
895fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          See effect_descriptor_t for details on effect descriptors.
896fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          This function together with EffectQueryNumberEffects() is used to enumerate all
897fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          effects present in the library. The enumeration sequence is:
898fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              EffectQueryNumberEffects(&num_effects);
899fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              for (i = 0; i < num_effects; i++)
900fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                  EffectQueryEffect(i,...);
901fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
902fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
903fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          index:          index of the effect
904fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pDescriptor:    address where to return the effect descriptor.
905fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
906fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
907fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
908fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
909fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pDescriptor or index
910fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENOSYS     effect list has changed since last execution of
911fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                                      EffectQueryNumberEffects()
912fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENOENT     no more effect available
913fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pDescriptor:     updated with the effect descriptor.
914fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
915fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
916fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t (*query_effect)(uint32_t index,
917fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                            effect_descriptor_t *pDescriptor);
918fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
919fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
920fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
921fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        create_effect
922fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
923fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Creates an effect engine of the specified implementation uuid and
924fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          returns an effect control interface on this engine. The function will allocate the
925fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          resources for an instance of the requested effect engine and return
926fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          a handle on the effect control interface.
927fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
928fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input:
929fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          uuid:    pointer to the effect uuid.
930fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          sessionId:  audio session to which this effect instance will be attached. All effects
931fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              created with the same session ID are connected in series and process the same signal
932fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              stream. Knowing that two effects are part of the same effect chain can help the
933fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              library implement some kind of optimizations.
934fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          ioId:   identifies the output or input stream this effect is directed to at audio HAL.
935fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              For future use especially with tunneled HW accelerated effects
936fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
937fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
938fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pHandle:        address where to return the effect interface handle.
939fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
940fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
941fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
942fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
943fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pEffectUuid or pHandle
944fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENOENT     no effect with this uuid found
945fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pHandle:         updated with the effect interface handle.
946fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
947fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
94875a8b8f9492ab6746c7d4147a87d9e21c42b3a96Glenn Kasten    int32_t (*create_effect)(const effect_uuid_t *uuid,
949fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             int32_t sessionId,
950fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             int32_t ioId,
951fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             effect_handle_t *pHandle);
952fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
953fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
954fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
955fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        release_effect
956fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
957fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Releases the effect engine whose handle is given as argument.
958fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          All resources allocated to this particular instance of the effect are
959fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          released.
960fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
961fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input:
962fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          handle:         handle on the effect interface to be released.
963fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
964fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
965fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
966fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
967fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid interface handle
968fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
969fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
970fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t (*release_effect)(effect_handle_t handle);
971fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
972fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
973fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
974fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        get_descriptor
975fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
976fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Returns the descriptor of the effect engine which implementation UUID is
977fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          given as argument.
978fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
979fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
980fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          uuid:           pointer to the effect uuid.
981fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pDescriptor:    address where to return the effect descriptor.
982fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
983fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
984fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
985fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
986fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pDescriptor or uuid
987fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pDescriptor:     updated with the effect descriptor.
988fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
989fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
99075a8b8f9492ab6746c7d4147a87d9e21c42b3a96Glenn Kasten    int32_t (*get_descriptor)(const effect_uuid_t *uuid,
991fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                              effect_descriptor_t *pDescriptor);
992fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} audio_effect_library_t;
993fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
994fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Name of the hal_module_info
995fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_INFO_SYM         AELI
996fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
997fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Name of the hal_module_info as a string
998fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_INFO_SYM_AS_STR  "AELI"
999fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1000fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent__END_DECLS
1001fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1002fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#endif  // ANDROID_AUDIO_EFFECT_H
1003