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//  +---------------------------+-----------+-----------------------------------
145a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  | Audio source indication   | 20..21    | 0 none
146a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  |                           |           | 1 requires audio source updates
147a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  |                           |           | 2..3 reserved
148a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  +---------------------------+-----------+-----------------------------------
149fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
150fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Insert mode
151f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_SHIFT          0
152f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_SIZE           3
153f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_MASK           (((1 << EFFECT_FLAG_TYPE_SIZE) -1) \
154f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_TYPE_SHIFT)
155f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_INSERT         (0 << EFFECT_FLAG_TYPE_SHIFT)
156f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_AUXILIARY      (1 << EFFECT_FLAG_TYPE_SHIFT)
157f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_REPLACE        (2 << EFFECT_FLAG_TYPE_SHIFT)
158f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_PRE_PROC       (3 << EFFECT_FLAG_TYPE_SHIFT)
159f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_POST_PROC      (4 << EFFECT_FLAG_TYPE_SHIFT)
160fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
161fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Insert preference
162f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_SHIFT        (EFFECT_FLAG_TYPE_SHIFT + EFFECT_FLAG_TYPE_SIZE)
163f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_SIZE         3
164f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_MASK         (((1 << EFFECT_FLAG_INSERT_SIZE) -1) \
165f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_INSERT_SHIFT)
166f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_ANY          (0 << EFFECT_FLAG_INSERT_SHIFT)
167f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_FIRST        (1 << EFFECT_FLAG_INSERT_SHIFT)
168f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_LAST         (2 << EFFECT_FLAG_INSERT_SHIFT)
169f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_EXCLUSIVE    (3 << EFFECT_FLAG_INSERT_SHIFT)
170fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
171fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
172fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Volume control
173f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_SHIFT        (EFFECT_FLAG_INSERT_SHIFT + EFFECT_FLAG_INSERT_SIZE)
174f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_SIZE         3
175f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_MASK         (((1 << EFFECT_FLAG_VOLUME_SIZE) -1) \
176f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_VOLUME_SHIFT)
177f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_CTRL         (1 << EFFECT_FLAG_VOLUME_SHIFT)
178f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_IND          (2 << EFFECT_FLAG_VOLUME_SHIFT)
179f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_NONE         (0 << EFFECT_FLAG_VOLUME_SHIFT)
180fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
181fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Device indication
182f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_SHIFT        (EFFECT_FLAG_VOLUME_SHIFT + EFFECT_FLAG_VOLUME_SIZE)
183f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_SIZE         3
184f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_MASK         (((1 << EFFECT_FLAG_DEVICE_SIZE) -1) \
185f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_DEVICE_SHIFT)
186f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_IND          (1 << EFFECT_FLAG_DEVICE_SHIFT)
187f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_NONE         (0 << EFFECT_FLAG_DEVICE_SHIFT)
188fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
189fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Sample input modes
190f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_SHIFT         (EFFECT_FLAG_DEVICE_SHIFT + EFFECT_FLAG_DEVICE_SIZE)
191f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_SIZE          2
192f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_MASK          (((1 << EFFECT_FLAG_INPUT_SIZE) -1) \
193f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_INPUT_SHIFT)
194f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_DIRECT        (1 << EFFECT_FLAG_INPUT_SHIFT)
195f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_PROVIDER      (2 << EFFECT_FLAG_INPUT_SHIFT)
196f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_BOTH          (3 << EFFECT_FLAG_INPUT_SHIFT)
197fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
198fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Sample output modes
199f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_SHIFT        (EFFECT_FLAG_INPUT_SHIFT + EFFECT_FLAG_INPUT_SIZE)
200f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_SIZE         2
201f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_MASK         (((1 << EFFECT_FLAG_OUTPUT_SIZE) -1) \
202f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_OUTPUT_SHIFT)
203f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_DIRECT       (1 << EFFECT_FLAG_OUTPUT_SHIFT)
204f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_PROVIDER     (2 << EFFECT_FLAG_OUTPUT_SHIFT)
205f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_BOTH         (3 << EFFECT_FLAG_OUTPUT_SHIFT)
206fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
207fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Hardware acceleration mode
208f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SHIFT        (EFFECT_FLAG_OUTPUT_SHIFT + EFFECT_FLAG_OUTPUT_SIZE)
209f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SIZE         2
210f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_MASK         (((1 << EFFECT_FLAG_HW_ACC_SIZE) -1) \
211f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_HW_ACC_SHIFT)
212f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SIMPLE       (1 << EFFECT_FLAG_HW_ACC_SHIFT)
213f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_TUNNEL       (2 << EFFECT_FLAG_HW_ACC_SHIFT)
214fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
215fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Audio mode indication
216f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_SHIFT    (EFFECT_FLAG_HW_ACC_SHIFT + EFFECT_FLAG_HW_ACC_SIZE)
217f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_SIZE     2
218f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_MASK     (((1 << EFFECT_FLAG_AUDIO_MODE_SIZE) -1) \
219f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_AUDIO_MODE_SHIFT)
220f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_IND      (1 << EFFECT_FLAG_AUDIO_MODE_SHIFT)
221f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_NONE     (0 << EFFECT_FLAG_AUDIO_MODE_SHIFT)
222fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
223a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// Audio source indication
224a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_SHIFT  (EFFECT_FLAG_AUDIO_MODE_SHIFT + EFFECT_FLAG_AUDIO_MODE_SIZE)
225a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_SIZE   2
226a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_MASK   (((1 << EFFECT_FLAG_AUDIO_SOURCE_SIZE) -1) \
227a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent                                          << EFFECT_FLAG_AUDIO_SOURCE_SHIFT)
228a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_IND    (1 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT)
229a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_NONE   (0 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT)
230fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
231fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_MAKE_API_VERSION(M, m)  (((M)<<16) | ((m) & 0xFFFF))
232fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_API_VERSION_MAJOR(v)    ((v)>>16)
233fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_API_VERSION_MINOR(v)    ((m) & 0xFFFF)
234fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
235fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
236fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
237fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
238fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      Effect control interface
239fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
240fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
241fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Effect control interface version 2.0
242fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONTROL_API_VERSION EFFECT_MAKE_API_VERSION(2,0)
243fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
244f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// Effect control interface structure: effect_interface_s
245fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The effect control interface is exposed by each effect engine implementation. It consists of
246fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// a set of functions controlling the configuration, activation and process of the engine.
247f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// The functions are grouped in a structure of type effect_interface_s.
248f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//
249f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// Effect control interface handle: effect_handle_t
250fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The effect_handle_t serves two purposes regarding the implementation of the effect engine:
251fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// - 1 it is the address of a pointer to an effect_interface_s structure where the functions
252fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// of the effect control API for a particular effect are located.
253fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// - 2 it is the address of the context of a particular effect instance.
254fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// A typical implementation in the effect library would define a structure as follows:
255fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// struct effect_module_s {
256fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        const struct effect_interface_s *itfe;
257fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        effect_config_t config;
258fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        effect_context_t context;
259fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// }
260fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The implementation of EffectCreate() function would then allocate a structure of this
261fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// type and return its address as effect_handle_t
262fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_interface_s **effect_handle_t;
263fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
264fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
265fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Forward definition of type audio_buffer_t
266fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct audio_buffer_s audio_buffer_t;
267fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
268fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
269fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
270f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent
271f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent
272fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
273fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Effect control interface definition
274fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentstruct effect_interface_s {
275f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
276f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
277f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       process
278f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
279f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Effect process function. Takes input samples as specified
280f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          (count and location) in input buffer descriptor and output processed
281f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          samples as specified in output buffer descriptor. If the buffer descriptor
282f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          is not specified the function must use either the buffer or the
283922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //          buffer provider function installed by the EFFECT_CMD_SET_CONFIG command.
284f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          The effect framework will call the process() function after the EFFECT_CMD_ENABLE
285f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          command is received and until the EFFECT_CMD_DISABLE is received. When the engine
286f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          receives the EFFECT_CMD_DISABLE command it should turn off the effect gracefully
287f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          and when done indicate that it is OK to stop calling the process() function by
288f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          returning the -ENODATA status.
289f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
290f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    NOTE: the process() function implementation should be "real-time safe" that is
291f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //      it should not perform blocking calls: malloc/free, sleep, read/write/open/close,
292f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //      pthread_cond_wait/pthread_mutex_lock...
293f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
294f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
295f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
296f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
297f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          inBuffer:   buffer descriptor indicating where to read samples to process.
298922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG command.
299f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
300f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          outBuffer:   buffer descriptor indicating where to write processed samples.
301922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG command.
302f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
303f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
304f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0 successful operation
305f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -ENODATA the engine has finished the disable phase and the framework
306f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  can stop calling process()
307f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
308f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid input/output buffer description
309f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
310f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*process)(effect_handle_t self,
311f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       audio_buffer_t *inBuffer,
312f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       audio_buffer_t *outBuffer);
313f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
314f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
315f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       command
316f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
317f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Send a command and receive a response to/from effect engine.
318f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
319f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
320f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
321f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
322f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          cmdCode:    command code: the command can be a standardized command defined in
323f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              effect_command_e (see below) or a proprietary command.
324f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          cmdSize:    size of command in bytes
325f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pCmdData:   pointer to command data
326f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pReplyData: pointer to reply data
327f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
328f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input/Output:
329f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          replySize: maximum size of reply data as input
330f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                      actual size of reply data as output
331f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
332f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
333f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          returned value: 0       successful operation
334f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
335f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid command/reply size or format according to command code
336f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              The return code should be restricted to indicate problems related to the this
337f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              API specification. Status related to the execution of a particular command should be
338f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              indicated as part of the reply field.
339f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
340f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          *pReplyData updated with command response
341f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
342f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
343f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*command)(effect_handle_t self,
344f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t cmdCode,
345f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t cmdSize,
346f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       void *pCmdData,
347f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t *replySize,
348f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       void *pReplyData);
349f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
350f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
351f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:        get_descriptor
352f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
353f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Returns the effect descriptor
354f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
355f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
356f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
357f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
358f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
359f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input/Output:
360f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pDescriptor:    address where to return the effect descriptor.
361f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
362f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
363f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0          successful operation.
364f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL     invalid interface handle or invalid pDescriptor
365f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        *pDescriptor:     updated with the effect descriptor.
366f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
367f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
368f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*get_descriptor)(effect_handle_t self,
369f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                              effect_descriptor_t *pDescriptor);
370f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
371f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
372f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       process_reverse
373f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
374f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Process reverse stream function. This function is used to pass
375f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          a reference stream to the effect engine. If the engine does not need a reference
376f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          stream, this function pointer can be set to NULL.
377f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          This function would typically implemented by an Echo Canceler.
378f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
379f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
380f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
381f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
382f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          inBuffer:   buffer descriptor indicating where to read samples to process.
383922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG_REVERSE command.
384f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
385f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          outBuffer:   buffer descriptor indicating where to write processed samples.
386922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG_REVERSE command.
387f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              If the buffer and buffer provider in the configuration received by
388922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              EFFECT_CMD_SET_CONFIG_REVERSE are also NULL, do not return modified reverse
389f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              stream data
390f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
391f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
392f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0 successful operation
393f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -ENODATA the engine has finished the disable phase and the framework
394f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  can stop calling process_reverse()
395f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
396f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid input/output buffer description
397f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
398f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*process_reverse)(effect_handle_t self,
399f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                               audio_buffer_t *inBuffer,
400f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                               audio_buffer_t *outBuffer);
401fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
402fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
403fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
404fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
405fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--- Standardized command codes for command() function
406fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
407fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentenum effect_command_e {
408fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_INIT,                 // initialize effect engine
409922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_SET_CONFIG,           // configure effect engine (see effect_config_t)
410fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_RESET,                // reset effect engine
411fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_ENABLE,               // enable effect process
412fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_DISABLE,              // disable effect process
413fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM,            // set parameter immediately (see effect_param_t)
414fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM_DEFERRED,   // set parameter deferred
415fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM_COMMIT,     // commit previous set parameter deferred
416fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_GET_PARAM,            // get parameter
417fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_DEVICE,           // set audio device (see audio.h, audio_devices_t)
418fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_VOLUME,           // set volume
419fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_AUDIO_MODE,       // set the audio mode (normal, ring, ...)
420922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_SET_CONFIG_REVERSE,   // configure effect engine reverse stream(see effect_config_t)
421f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent   EFFECT_CMD_SET_INPUT_DEVICE,     // set capture device (see audio.h, audio_devices_t)
422922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_GET_CONFIG,           // read effect engine configuration
423922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_GET_CONFIG_REVERSE,   // read configure effect engine reverse stream configuration
42466861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS,// get all supported configurations for a feature.
42566861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_GET_FEATURE_CONFIG,   // get current feature configuration
42666861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_SET_FEATURE_CONFIG,   // set current feature configuration
427a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent   EFFECT_CMD_SET_AUDIO_SOURCE,     // set the audio source (see audio.h, audio_source_t)
428fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_FIRST_PROPRIETARY = 0x10000 // first proprietary command code
429fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
430fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
431fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
432fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_INIT
433fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
434fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
435fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Initialize effect engine: All configurations return to default
436fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
437fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
438fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
439fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
440fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
441fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
442fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
443fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
444fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
445922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_SET_CONFIG
446fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
447fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
448fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Apply new audio parameters configurations for input and output buffers
449fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
450fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
451fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_config_t)
452fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_config_t
453fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
454fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
455fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
456fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
457fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
458fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_RESET
459fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
460fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
461fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Reset the effect engine. Keep configuration but resets state and buffer content
462fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
463fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
464fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
465fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
466fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
467fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
468fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
469fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
470fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
471fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_ENABLE
472fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
473fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
474fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Enable the process. Called by the framework before the first call to process()
475fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
476fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
477fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
478fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
479fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
480fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
481fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
482fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
483fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
484fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_DISABLE
485fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
486fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
487fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Disable the process. Called by the framework after the last call to process()
488fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
489fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
490fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
491fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
492fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
493fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
494fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
495fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
496fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
497fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM
498fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
499fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
500fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set a parameter and apply it immediately
501fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
502fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
503fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
504fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
505fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
506fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
507fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
508fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
509fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
510fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM_DEFERRED
511fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
512fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
513fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set a parameter but apply it only when receiving EFFECT_CMD_SET_PARAM_COMMIT command
514fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
515fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
516fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
517fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
518fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
519fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
520fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
521fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
522fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
523fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM_COMMIT
524fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
525fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
526fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Apply all previously received EFFECT_CMD_SET_PARAM_DEFERRED commands
527fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
528fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
529fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
530fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
531fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
532fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
533fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
534fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
535fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
536fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_GET_PARAM
537fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
538fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
539fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Get a parameter value
540fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
541fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
542fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param
543fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param
544fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
545fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
546fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
547fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
548fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
549fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_DEVICE
550fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
551fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
552fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set the rendering device the audio output path is connected to. See audio.h, audio_devices_t
553fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  for device values.
554fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  The effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to receive this
555fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  command when the device changes
556fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
557fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
558fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(uint32_t)
559fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: uint32_t
560fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
561fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
562fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
563fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
564fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
565fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_VOLUME
566fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
567fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
568fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set and get volume. Used by audio framework to delegate volume control to effect engine.
569fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  The effect implementation must set EFFECT_FLAG_VOLUME_IND or EFFECT_FLAG_VOLUME_CTRL flag in
570fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  its descriptor to receive this command before every call to process() function
571fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  If EFFECT_FLAG_VOLUME_CTRL flag is set in the effect descriptor, the effect engine must return
572fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  the volume that should be applied before the effect is processed. The overall volume (the volume
573fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  actually applied by the effect engine multiplied by the returned value) should match the value
574fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  indicated in the command.
575fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
576fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
577fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: n * sizeof(uint32_t)
578fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: volume for each channel defined in effect_config_t for output buffer expressed in
579fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      8.24 fixed point format
580fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
581fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
582fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: n * sizeof(uint32_t) / 0
583fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: - if EFFECT_FLAG_VOLUME_CTRL is set in effect descriptor:
584fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              volume for each channel defined in effect_config_t for output buffer expressed in
585fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              8.24 fixed point format
586fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        - if EFFECT_FLAG_VOLUME_CTRL is not set in effect descriptor:
587fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              N/A
588fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  It is legal to receive a null pointer as pReplyData in which case the effect framework has
589fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  delegated volume control to another effect
590fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
591fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_AUDIO_MODE
592fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
593fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
594fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set the audio mode. The effect implementation must set EFFECT_FLAG_AUDIO_MODE_IND flag in its
595fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  descriptor to receive this command when the audio mode changes.
596fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
597fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
598fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(uint32_t)
59966861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: audio_mode_t
600fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
601fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
602fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
603fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
604fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
605922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_SET_CONFIG_REVERSE
606f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
607f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// description:
608922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Apply new audio parameters configurations for input and output buffers of reverse stream.
609922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  An example of reverse stream is the echo reference supplied to an Acoustic Echo Canceler.
610f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
611f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command format:
612f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(effect_config_t)
613f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: effect_config_t
614f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
615f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// reply format:
616f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(int)
617f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: status
618f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//==================================================================================================
619f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command: EFFECT_CMD_SET_INPUT_DEVICE
620f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
621f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// description:
622f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  Set the capture device the audio input path is connected to. See audio.h, audio_devices_t
623f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  for device values.
624f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  The effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to receive this
625f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  command when the device changes
626f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
627f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command format:
628f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(uint32_t)
629f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: uint32_t
630f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
631f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// reply format:
632f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: 0
633f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: N/A
634f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//==================================================================================================
635922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_GET_CONFIG
636922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
637922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// description:
638922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Read audio parameters configurations for input and output buffers
639922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
640922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command format:
641922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: 0
642922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: N/A
643922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
644922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// reply format:
645922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: sizeof(effect_config_t)
646922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: effect_config_t
647922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//==================================================================================================
648922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_GET_CONFIG_REVERSE
649922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
650922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// description:
651922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Read audio parameters configurations for input and output buffers of reverse stream
652922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
653922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command format:
654922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: 0
655922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: N/A
656922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
657922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// reply format:
658922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: sizeof(effect_config_t)
659922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: effect_config_t
660922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//==================================================================================================
66166861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
66266861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
66366861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
66466861e374070e50b11ae262e84854c16b297153dEric Laurent//  Queries for supported configurations for a particular feature (e.g. get the supported
66566861e374070e50b11ae262e84854c16b297153dEric Laurent// combinations of main and auxiliary channels for a noise suppressor).
66666861e374070e50b11ae262e84854c16b297153dEric Laurent// The command parameter is the feature identifier (See effect_feature_e for a list of defined
66766861e374070e50b11ae262e84854c16b297153dEric Laurent// features) followed by the maximum number of configuration descriptor to return.
66866861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply is composed of:
66966861e374070e50b11ae262e84854c16b297153dEric Laurent//  - status (uint32_t):
67066861e374070e50b11ae262e84854c16b297153dEric Laurent//          - 0 if feature is supported
67166861e374070e50b11ae262e84854c16b297153dEric Laurent//          - -ENOSYS if the feature is not supported,
67266861e374070e50b11ae262e84854c16b297153dEric Laurent//          - -ENOMEM if the feature is supported but the total number of supported configurations
67366861e374070e50b11ae262e84854c16b297153dEric Laurent//          exceeds the maximum number indicated by the caller.
67466861e374070e50b11ae262e84854c16b297153dEric Laurent//  - total number of supported configurations (uint32_t)
67566861e374070e50b11ae262e84854c16b297153dEric Laurent//  - an array of configuration descriptors.
67666861e374070e50b11ae262e84854c16b297153dEric Laurent// The actual number of descriptors returned must not exceed the maximum number indicated by
67766861e374070e50b11ae262e84854c16b297153dEric Laurent// the caller.
67866861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
67966861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
68066861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: 2 x sizeof(uint32_t)
68166861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e + maximum number of configurations to return
68266861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
68366861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
68466861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: 2 x sizeof(uint32_t) + n x sizeof (<config descriptor>)
68566861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status + total number of configurations supported + array of n config descriptors
68666861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
68766861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_GET_FEATURE_CONFIG
68866861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
68966861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
69066861e374070e50b11ae262e84854c16b297153dEric Laurent//  Retrieves current configuration for a given feature.
69166861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply status is:
69266861e374070e50b11ae262e84854c16b297153dEric Laurent//      - 0 if feature is supported
69366861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -ENOSYS if the feature is not supported,
69466861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
69566861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
69666861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t)
69766861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e
69866861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
69966861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
70066861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t) + sizeof (<config descriptor>)
70166861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status + config descriptor
70266861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
70366861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_SET_FEATURE_CONFIG
70466861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
70566861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
70666861e374070e50b11ae262e84854c16b297153dEric Laurent//  Sets current configuration for a given feature.
70766861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply status is:
70866861e374070e50b11ae262e84854c16b297153dEric Laurent//      - 0 if feature is supported
70966861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -ENOSYS if the feature is not supported,
71066861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -EINVAL if the configuration is invalid
71166861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
71266861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
71366861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t) + sizeof (<config descriptor>)
71466861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e + config descriptor
71566861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
71666861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
71766861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t)
71866861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status
71966861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
720a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// command: EFFECT_CMD_SET_AUDIO_SOURCE
721a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//--------------------------------------------------------------------------------------------------
722a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// description:
723a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  Set the audio source the capture path is configured for (Camcorder, voice recognition...).
724a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  See audio.h, audio_source_t for values.
725a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//--------------------------------------------------------------------------------------------------
726a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// command format:
727a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  size: sizeof(uint32_t)
728a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  data: uint32_t
729a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//--------------------------------------------------------------------------------------------------
730a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// reply format:
731a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  size: 0
732a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  data: N/A
733a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//==================================================================================================
734fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_FIRST_PROPRIETARY
735fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
736fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
737fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  All proprietary effect commands must use command codes above this value. The size and format of
738fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  command and response fields is free in this case
739fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
740fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
741fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
742fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Audio buffer descriptor used by process(), bufferProvider() functions and buffer_config_t
743fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// structure. Multi-channel audio is always interleaved. The channel order is from LSB to MSB with
744a9a5f5d57fbcf0f953b940788625404dbcd2cc52Jean-Michel Trivi// regard to the channel mask definition in audio.h, audio_channel_mask_t e.g :
745fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Stereo: left, right
746fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// 5 point 1: front left, front right, front center, low frequency, back left, back right
747fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer size is expressed in frame count, a frame being composed of samples for all
748fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// channels at a given time. Frame size for unspecified format (AUDIO_FORMAT_OTHER) is 8 bit by
749fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// definition
750fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentstruct audio_buffer_s {
751fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    size_t   frameCount;        // number of frames in buffer
752fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    union {
753fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        void*       raw;        // raw pointer to start of buffer
754fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        int32_t*    s32;        // pointer to signed 32 bit data at start of buffer
755fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        int16_t*    s16;        // pointer to signed 16 bit data at start of buffer
756fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        uint8_t*    u8;         // pointer to unsigned 8 bit data at start of buffer
757fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    };
758fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
759fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
760fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer_provider_s structure contains functions that can be used
761fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// by the effect engine process() function to query and release input
762fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// or output audio buffer.
763fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The getBuffer() function is called to retrieve a buffer where data
764fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// should read from or written to by process() function.
765fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The releaseBuffer() function MUST be called when the buffer retrieved
766fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// with getBuffer() is not needed anymore.
767fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The process function should use the buffer provider mechanism to retrieve
768fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// input or output buffer if the inBuffer or outBuffer passed as argument is NULL
769922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// and the buffer configuration (buffer_config_t) given by the EFFECT_CMD_SET_CONFIG
770fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command did not specify an audio buffer.
771fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
772fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef int32_t (* buffer_function_t)(void *cookie, audio_buffer_t *buffer);
773fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
774fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct buffer_provider_s {
775fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_function_t getBuffer;       // retrieve next buffer
776fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_function_t releaseBuffer;   // release used buffer
777fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    void       *cookie;                // for use by client of buffer provider functions
778fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} buffer_provider_t;
779fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
780fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
781fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer_config_s structure specifies the input or output audio format
782fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// to be used by the effect engine. It is part of the effect_config_t
783fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// structure that defines both input and output buffer configurations and is
784922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// passed by the EFFECT_CMD_SET_CONFIG or EFFECT_CMD_SET_CONFIG_REVERSE command.
785fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct buffer_config_s {
786fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    audio_buffer_t  buffer;     // buffer for use by process() function if not passed explicitly
787fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t   samplingRate;    // sampling rate
788a9a5f5d57fbcf0f953b940788625404dbcd2cc52Jean-Michel Trivi    uint32_t   channels;        // channel mask (see audio_channel_mask_t in audio.h)
789fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_provider_t bufferProvider;   // buffer provider
790fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint8_t    format;          // Audio format  (see see audio_format_t in audio.h)
791fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint8_t    accessMode;      // read/write or accumulate in buffer (effect_buffer_access_e)
792fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t   mask;            // indicates which of the above fields is valid
793fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} buffer_config_t;
794fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
795fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Values for "accessMode" field of buffer_config_t:
796fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//   overwrite, read only, accumulate (read/modify/write)
797fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentenum effect_buffer_access_e {
798fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_WRITE,
799fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_READ,
800fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_ACCUMULATE
801fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
802fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
803fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
80466861e374070e50b11ae262e84854c16b297153dEric Laurent// feature identifiers for EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS command
80566861e374070e50b11ae262e84854c16b297153dEric Laurentenum effect_feature_e {
80666861e374070e50b11ae262e84854c16b297153dEric Laurent    EFFECT_FEATURE_AUX_CHANNELS, // supports auxiliary channels (e.g. dual mic noise suppressor)
80766861e374070e50b11ae262e84854c16b297153dEric Laurent    EFFECT_FEATURE_CNT
80866861e374070e50b11ae262e84854c16b297153dEric Laurent};
80966861e374070e50b11ae262e84854c16b297153dEric Laurent
81066861e374070e50b11ae262e84854c16b297153dEric Laurent// EFFECT_FEATURE_AUX_CHANNELS feature configuration descriptor. Describe a combination
81166861e374070e50b11ae262e84854c16b297153dEric Laurent// of main and auxiliary channels supported
81266861e374070e50b11ae262e84854c16b297153dEric Laurenttypedef struct channel_config_s {
813a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten    audio_channel_mask_t main_channels; // channel mask for main channels
814a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten    audio_channel_mask_t aux_channels;  // channel mask for auxiliary channels
81566861e374070e50b11ae262e84854c16b297153dEric Laurent} channel_config_t;
81666861e374070e50b11ae262e84854c16b297153dEric Laurent
81766861e374070e50b11ae262e84854c16b297153dEric Laurent
818fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Values for bit field "mask" in buffer_config_t. If a bit is set, the corresponding field
819922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// in buffer_config_t must be taken into account when executing the EFFECT_CMD_SET_CONFIG command
820fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_BUFFER    0x0001  // buffer field must be taken into account
821fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_SMP_RATE  0x0002  // samplingRate field must be taken into account
822fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_CHANNELS  0x0004  // channels field must be taken into account
823fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_FORMAT    0x0008  // format field must be taken into account
824fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_ACC_MODE  0x0010  // accessMode field must be taken into account
825fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_PROVIDER  0x0020  // bufferProvider field must be taken into account
826fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_ALL (EFFECT_CONFIG_BUFFER | EFFECT_CONFIG_SMP_RATE | \
827fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                           EFFECT_CONFIG_CHANNELS | EFFECT_CONFIG_FORMAT | \
828fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                           EFFECT_CONFIG_ACC_MODE | EFFECT_CONFIG_PROVIDER)
829fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
830fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
831922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// effect_config_s structure describes the format of the pCmdData argument of EFFECT_CMD_SET_CONFIG
832fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command to configure audio parameters and buffers for effect engine input and output.
833fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_config_s {
834fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_config_t   inputCfg;
835f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    buffer_config_t   outputCfg;
836fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_config_t;
837fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
838fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
839fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// effect_param_s structure describes the format of the pCmdData argument of EFFECT_CMD_SET_PARAM
840fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command and pCmdData and pReplyData of EFFECT_CMD_GET_PARAM command.
841fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// psize and vsize represent the actual size of parameter and value.
842fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
843fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// NOTE: the start of value field inside the data field is always on a 32 bit boundary:
844fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
845fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
846fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | status    | sizeof(int)
847fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
848fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | psize     | sizeof(int)
849fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
850fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | vsize     | sizeof(int)
851fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
852fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |           |
853fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  ~ parameter ~   > psize     |
854fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |           >  ((psize - 1)/sizeof(int) + 1) * sizeof(int)
855fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+               |
856fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | padding   |               |
857fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
858fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |
859fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  ~ value     ~   > vsize
860fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |
861fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
862fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
863fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_param_s {
864fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t     status;     // Transaction status (unused for command, used for reply)
865fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t    psize;      // Parameter size
866fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t    vsize;      // Value size
867fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    char        data[];     // Start of Parameter + Value data
868fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_param_t;
869fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
870fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
871fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
872fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
873fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      Effect library interface
874fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
875fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
876fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Effect library interface version 2.0
877fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_LIBRARY_API_VERSION EFFECT_MAKE_API_VERSION(2,0)
878fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
879fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_TAG ((('A') << 24) | (('E') << 16) | (('L') << 8) | ('T'))
880fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
881fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Every effect library must have a data structure named AUDIO_EFFECT_LIBRARY_INFO_SYM
882fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// and the fields of this data structure must begin with audio_effect_library_t
883fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
884fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct audio_effect_library_s {
885fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // tag must be initialized to AUDIO_EFFECT_LIBRARY_TAG
886fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t tag;
887fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Version of the effect library API : 0xMMMMmmmm MMMM: Major, mmmm: minor
888fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t version;
889fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Name of this library
890fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    const char *name;
891fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Author/owner/implementor of the library
892fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    const char *implementor;
893fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
894fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
895fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
896fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        query_num_effects
897fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
898fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Returns the number of different effects exposed by the
899fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          library. Each effect must have a unique effect uuid (see
900fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          effect_descriptor_t). This function together with EffectQueryEffect()
901fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          is used to enumerate all effects present in the library.
902fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
903fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
904fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pNumEffects:    address where the number of effects should be returned.
905fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
906fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
907fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
908fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
909fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pNumEffects
910fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pNumEffects:     updated with number of effects in library
911fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
912fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
913fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t (*query_num_effects)(uint32_t *pNumEffects);
914fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
915fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
916fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
917fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        query_effect
918fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
919fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Returns the descriptor of the effect engine which index is
920fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          given as argument.
921fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          See effect_descriptor_t for details on effect descriptors.
922fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          This function together with EffectQueryNumberEffects() is used to enumerate all
923fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          effects present in the library. The enumeration sequence is:
924fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              EffectQueryNumberEffects(&num_effects);
925fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              for (i = 0; i < num_effects; i++)
926fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                  EffectQueryEffect(i,...);
927fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
928fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
929fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          index:          index of the effect
930fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pDescriptor:    address where to return the effect descriptor.
931fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
932fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
933fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
934fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
935fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pDescriptor or index
936fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENOSYS     effect list has changed since last execution of
937fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                                      EffectQueryNumberEffects()
938fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENOENT     no more effect available
939fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pDescriptor:     updated with the effect descriptor.
940fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
941fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
942fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t (*query_effect)(uint32_t index,
943fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                            effect_descriptor_t *pDescriptor);
944fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
945fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
946fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
947fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        create_effect
948fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
949fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Creates an effect engine of the specified implementation uuid and
950fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          returns an effect control interface on this engine. The function will allocate the
951fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          resources for an instance of the requested effect engine and return
952fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          a handle on the effect control interface.
953fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
954fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input:
955fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          uuid:    pointer to the effect uuid.
956fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          sessionId:  audio session to which this effect instance will be attached. All effects
957fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              created with the same session ID are connected in series and process the same signal
958fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              stream. Knowing that two effects are part of the same effect chain can help the
959fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              library implement some kind of optimizations.
960fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          ioId:   identifies the output or input stream this effect is directed to at audio HAL.
961fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              For future use especially with tunneled HW accelerated effects
962fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
963fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
964fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pHandle:        address where to return the effect interface handle.
965fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
966fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
967fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
968fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
969fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pEffectUuid or pHandle
970fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENOENT     no effect with this uuid found
971fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pHandle:         updated with the effect interface handle.
972fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
973fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
97475a8b8f9492ab6746c7d4147a87d9e21c42b3a96Glenn Kasten    int32_t (*create_effect)(const effect_uuid_t *uuid,
975fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             int32_t sessionId,
976fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             int32_t ioId,
977fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             effect_handle_t *pHandle);
978fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
979fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
980fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
981fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        release_effect
982fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
983fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Releases the effect engine whose handle is given as argument.
984fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          All resources allocated to this particular instance of the effect are
985fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          released.
986fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
987fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input:
988fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          handle:         handle on the effect interface to be released.
989fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
990fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
991fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
992fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
993fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid interface handle
994fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
995fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
996fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t (*release_effect)(effect_handle_t handle);
997fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
998fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
999fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
1000fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        get_descriptor
1001fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
1002fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Returns the descriptor of the effect engine which implementation UUID is
1003fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          given as argument.
1004fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
1005fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
1006fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          uuid:           pointer to the effect uuid.
1007fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pDescriptor:    address where to return the effect descriptor.
1008fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
1009fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
1010fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
1011fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
1012fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pDescriptor or uuid
1013fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pDescriptor:     updated with the effect descriptor.
1014fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
1015fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
101675a8b8f9492ab6746c7d4147a87d9e21c42b3a96Glenn Kasten    int32_t (*get_descriptor)(const effect_uuid_t *uuid,
1017fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                              effect_descriptor_t *pDescriptor);
1018fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} audio_effect_library_t;
1019fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1020fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Name of the hal_module_info
1021fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_INFO_SYM         AELI
1022fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1023fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Name of the hal_module_info as a string
1024fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_INFO_SYM_AS_STR  "AELI"
1025fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1026fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent__END_DECLS
1027fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1028fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#endif  // ANDROID_AUDIO_EFFECT_H
1029