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;
64099e61508eaaf2c5999e601f953f392f1aa37b70Eric Laurentstatic const effect_uuid_t * const EFFECT_UUID_NULL = &EFFECT_UUID_NULL_;
65099e61508eaaf2c5999e601f953f392f1aa37b70Eric Laurentstatic const char * const EFFECT_UUID_NULL_STR = "ec7178ec-e5e1-4432-a3f4-4657e6795210";
66099e61508eaaf2c5999e601f953f392f1aa37b70Eric Laurent
67fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
68fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The effect descriptor contains necessary information to facilitate the enumeration of the effect
69fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// engines present in a library.
70fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_descriptor_s {
71fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    effect_uuid_t type;     // UUID of to the OpenSL ES interface implemented by this effect
72fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    effect_uuid_t uuid;     // UUID for this particular implementation
73fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t apiVersion;    // Version of the effect control API implemented
74fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t flags;         // effect engine capabilities/requirements flags (see below)
75fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t cpuLoad;       // CPU load indication (see below)
76fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t memoryUsage;   // Data Memory usage (see below)
77fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    char    name[EFFECT_STRING_LEN_MAX];   // human readable effect name
78fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    char    implementor[EFFECT_STRING_LEN_MAX];    // human readable effect implementor name
79fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_descriptor_t;
80fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
81fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// CPU load and memory usage indication: each effect implementation must provide an indication of
82fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// its CPU and memory usage for the audio effect framework to limit the number of effects
83fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// instantiated at a given time on a given platform.
84fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The CPU load is expressed in 0.1 MIPS units as estimated on an ARM9E core (ARMv5TE) with 0 WS.
85fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The memory usage is expressed in KB and includes only dynamically allocated memory
86fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
87fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Definitions for flags field of effect descriptor.
88fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
89fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | description               | bits      | values
90fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
91f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | connection mode           | 0..2      | 0 insert: after track process
92fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 auxiliary: connect to track auxiliary
93fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |  output and use send level
94fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2 replace: replaces track process function;
95fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   must implement SRC, volume and mono to stereo.
96f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 3 pre processing: applied below audio HAL on input
97f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 4 post processing: applied below audio HAL on output
98f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 5 - 7 reserved
99fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
100f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | insertion preference      | 3..5      | 0 none
101fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 first of the chain
102fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2 last of the chain
103fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 3 exclusive (only effect in the insert chain)
104fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 4..7 reserved
105fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
106f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | Volume management         | 6..8      | 0 none
107fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 implements volume control
108fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2 requires volume indication
109f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 4 reserved
110fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
111f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | Device indication         | 9..11     | 0 none
112fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 requires device updates
113f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 2, 4 reserved
114fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
115922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  | Sample input mode         | 12..13    | 1 direct: process() function or EFFECT_CMD_SET_CONFIG
116fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   command must specify a buffer descriptor
117f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 2 provider: process() function uses the
118fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   bufferProvider indicated by the
119922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  |                           |           |   EFFECT_CMD_SET_CONFIG command to request input.
120fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   buffers.
121f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 3 both: both input modes are supported
122fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
123922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  | Sample output mode        | 14..15    | 1 direct: process() function or EFFECT_CMD_SET_CONFIG
124fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   command must specify a buffer descriptor
125f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 2 provider: process() function uses the
126fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   bufferProvider indicated by the
127922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  |                           |           |   EFFECT_CMD_SET_CONFIG command to request output
128fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   buffers.
129f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  |                           |           | 3 both: both output modes are supported
130fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
131f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | Hardware acceleration     | 16..17    | 0 No hardware acceleration
132fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 non tunneled hw acceleration: the process() function
133fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   reads the samples, send them to HW accelerated
134fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   effect processor, reads back the processed samples
135fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   and returns them to the output buffer.
136fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2 tunneled hw acceleration: the process() function is
137fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   transparent. The effect interface is only used to
138fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   control the effect engine. This mode is relevant for
139fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   global effects actually applied by the audio
140fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           |   hardware on the output stream.
141fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
142f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  | Audio Mode indication     | 18..19    | 0 none
143fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 1 requires audio mode updates
144fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |                           |           | 2..3 reserved
145fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +---------------------------+-----------+-----------------------------------
146a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  | Audio source indication   | 20..21    | 0 none
147a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  |                           |           | 1 requires audio source updates
148a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  |                           |           | 2..3 reserved
149a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  +---------------------------+-----------+-----------------------------------
150935799d63f0d654f350a640001077616572a4b63jpadmana//  | Effect offload supported  | 22        | 0 The effect cannot be offloaded to an audio DSP
151935799d63f0d654f350a640001077616572a4b63jpadmana//  |                           |           | 1 The effect can be offloaded to an audio DSP
152935799d63f0d654f350a640001077616572a4b63jpadmana//  +---------------------------+-----------+-----------------------------------
153fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
154fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Insert mode
155f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_SHIFT          0
156f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_SIZE           3
157f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_MASK           (((1 << EFFECT_FLAG_TYPE_SIZE) -1) \
158f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_TYPE_SHIFT)
159f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_INSERT         (0 << EFFECT_FLAG_TYPE_SHIFT)
160f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_AUXILIARY      (1 << EFFECT_FLAG_TYPE_SHIFT)
161f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_REPLACE        (2 << EFFECT_FLAG_TYPE_SHIFT)
162f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_PRE_PROC       (3 << EFFECT_FLAG_TYPE_SHIFT)
163f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_TYPE_POST_PROC      (4 << EFFECT_FLAG_TYPE_SHIFT)
164fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
165fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Insert preference
166f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_SHIFT        (EFFECT_FLAG_TYPE_SHIFT + EFFECT_FLAG_TYPE_SIZE)
167f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_SIZE         3
168f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_MASK         (((1 << EFFECT_FLAG_INSERT_SIZE) -1) \
169f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_INSERT_SHIFT)
170f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_ANY          (0 << EFFECT_FLAG_INSERT_SHIFT)
171f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_FIRST        (1 << EFFECT_FLAG_INSERT_SHIFT)
172f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_LAST         (2 << EFFECT_FLAG_INSERT_SHIFT)
173f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INSERT_EXCLUSIVE    (3 << EFFECT_FLAG_INSERT_SHIFT)
174fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
175fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
176fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Volume control
177f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_SHIFT        (EFFECT_FLAG_INSERT_SHIFT + EFFECT_FLAG_INSERT_SIZE)
178f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_SIZE         3
179f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_MASK         (((1 << EFFECT_FLAG_VOLUME_SIZE) -1) \
180f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_VOLUME_SHIFT)
181f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_CTRL         (1 << EFFECT_FLAG_VOLUME_SHIFT)
182f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_IND          (2 << EFFECT_FLAG_VOLUME_SHIFT)
183f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_VOLUME_NONE         (0 << EFFECT_FLAG_VOLUME_SHIFT)
184fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
185fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Device indication
186f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_SHIFT        (EFFECT_FLAG_VOLUME_SHIFT + EFFECT_FLAG_VOLUME_SIZE)
187f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_SIZE         3
188f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_MASK         (((1 << EFFECT_FLAG_DEVICE_SIZE) -1) \
189f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_DEVICE_SHIFT)
190f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_IND          (1 << EFFECT_FLAG_DEVICE_SHIFT)
191f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_DEVICE_NONE         (0 << EFFECT_FLAG_DEVICE_SHIFT)
192fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
193fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Sample input modes
194f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_SHIFT         (EFFECT_FLAG_DEVICE_SHIFT + EFFECT_FLAG_DEVICE_SIZE)
195f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_SIZE          2
196f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_MASK          (((1 << EFFECT_FLAG_INPUT_SIZE) -1) \
197f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_INPUT_SHIFT)
198f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_DIRECT        (1 << EFFECT_FLAG_INPUT_SHIFT)
199f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_PROVIDER      (2 << EFFECT_FLAG_INPUT_SHIFT)
200f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_INPUT_BOTH          (3 << EFFECT_FLAG_INPUT_SHIFT)
201fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
202fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Sample output modes
203f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_SHIFT        (EFFECT_FLAG_INPUT_SHIFT + EFFECT_FLAG_INPUT_SIZE)
204f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_SIZE         2
205f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_MASK         (((1 << EFFECT_FLAG_OUTPUT_SIZE) -1) \
206f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_OUTPUT_SHIFT)
207f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_DIRECT       (1 << EFFECT_FLAG_OUTPUT_SHIFT)
208f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_PROVIDER     (2 << EFFECT_FLAG_OUTPUT_SHIFT)
209f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_OUTPUT_BOTH         (3 << EFFECT_FLAG_OUTPUT_SHIFT)
210fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
211fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Hardware acceleration mode
212f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SHIFT        (EFFECT_FLAG_OUTPUT_SHIFT + EFFECT_FLAG_OUTPUT_SIZE)
213f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SIZE         2
214f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_MASK         (((1 << EFFECT_FLAG_HW_ACC_SIZE) -1) \
215f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_HW_ACC_SHIFT)
216f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_SIMPLE       (1 << EFFECT_FLAG_HW_ACC_SHIFT)
217f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_HW_ACC_TUNNEL       (2 << EFFECT_FLAG_HW_ACC_SHIFT)
218fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
219fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Audio mode indication
220f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_SHIFT    (EFFECT_FLAG_HW_ACC_SHIFT + EFFECT_FLAG_HW_ACC_SIZE)
221f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_SIZE     2
222f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_MASK     (((1 << EFFECT_FLAG_AUDIO_MODE_SIZE) -1) \
223f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                                            << EFFECT_FLAG_AUDIO_MODE_SHIFT)
224f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_IND      (1 << EFFECT_FLAG_AUDIO_MODE_SHIFT)
225f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent#define EFFECT_FLAG_AUDIO_MODE_NONE     (0 << EFFECT_FLAG_AUDIO_MODE_SHIFT)
226fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
227a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// Audio source indication
228a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_SHIFT  (EFFECT_FLAG_AUDIO_MODE_SHIFT + EFFECT_FLAG_AUDIO_MODE_SIZE)
229a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_SIZE   2
230a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_MASK   (((1 << EFFECT_FLAG_AUDIO_SOURCE_SIZE) -1) \
231a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent                                          << EFFECT_FLAG_AUDIO_SOURCE_SHIFT)
232a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_IND    (1 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT)
233a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent#define EFFECT_FLAG_AUDIO_SOURCE_NONE   (0 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT)
234fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
235935799d63f0d654f350a640001077616572a4b63jpadmana// Effect offload indication
236935799d63f0d654f350a640001077616572a4b63jpadmana#define EFFECT_FLAG_OFFLOAD_SHIFT       (EFFECT_FLAG_AUDIO_SOURCE_SHIFT + \
237935799d63f0d654f350a640001077616572a4b63jpadmana                                                    EFFECT_FLAG_AUDIO_SOURCE_SIZE)
238935799d63f0d654f350a640001077616572a4b63jpadmana#define EFFECT_FLAG_OFFLOAD_SIZE        1
239935799d63f0d654f350a640001077616572a4b63jpadmana#define EFFECT_FLAG_OFFLOAD_MASK        (((1 << EFFECT_FLAG_OFFLOAD_SIZE) -1) \
240935799d63f0d654f350a640001077616572a4b63jpadmana                                          << EFFECT_FLAG_OFFLOAD_SHIFT)
241935799d63f0d654f350a640001077616572a4b63jpadmana#define EFFECT_FLAG_OFFLOAD_SUPPORTED   (1 << EFFECT_FLAG_OFFLOAD_SHIFT)
242935799d63f0d654f350a640001077616572a4b63jpadmana
243fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_MAKE_API_VERSION(M, m)  (((M)<<16) | ((m) & 0xFFFF))
244fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_API_VERSION_MAJOR(v)    ((v)>>16)
245fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_API_VERSION_MINOR(v)    ((m) & 0xFFFF)
246fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
247fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
248fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
249fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
250fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      Effect control interface
251fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
252fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
253fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Effect control interface version 2.0
254fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONTROL_API_VERSION EFFECT_MAKE_API_VERSION(2,0)
255fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
256f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// Effect control interface structure: effect_interface_s
257fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The effect control interface is exposed by each effect engine implementation. It consists of
258fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// a set of functions controlling the configuration, activation and process of the engine.
259f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// The functions are grouped in a structure of type effect_interface_s.
260f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//
261f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// Effect control interface handle: effect_handle_t
262fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The effect_handle_t serves two purposes regarding the implementation of the effect engine:
263fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// - 1 it is the address of a pointer to an effect_interface_s structure where the functions
264fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// of the effect control API for a particular effect are located.
265fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// - 2 it is the address of the context of a particular effect instance.
266fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// A typical implementation in the effect library would define a structure as follows:
267fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// struct effect_module_s {
268fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        const struct effect_interface_s *itfe;
269fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        effect_config_t config;
270fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        effect_context_t context;
271fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// }
272fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The implementation of EffectCreate() function would then allocate a structure of this
273fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// type and return its address as effect_handle_t
274fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_interface_s **effect_handle_t;
275fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
276fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
277fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Forward definition of type audio_buffer_t
278fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct audio_buffer_s audio_buffer_t;
279fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
280fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
281fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
282f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent
283f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent
284fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
285fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Effect control interface definition
286fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentstruct effect_interface_s {
287f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
288f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
289f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       process
290f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
291f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Effect process function. Takes input samples as specified
292f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          (count and location) in input buffer descriptor and output processed
293f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          samples as specified in output buffer descriptor. If the buffer descriptor
294f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          is not specified the function must use either the buffer or the
295922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //          buffer provider function installed by the EFFECT_CMD_SET_CONFIG command.
296f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          The effect framework will call the process() function after the EFFECT_CMD_ENABLE
297f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          command is received and until the EFFECT_CMD_DISABLE is received. When the engine
298f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          receives the EFFECT_CMD_DISABLE command it should turn off the effect gracefully
299f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          and when done indicate that it is OK to stop calling the process() function by
300f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          returning the -ENODATA status.
301f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
302f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    NOTE: the process() function implementation should be "real-time safe" that is
303f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //      it should not perform blocking calls: malloc/free, sleep, read/write/open/close,
304f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //      pthread_cond_wait/pthread_mutex_lock...
305f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
306f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
307f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
308f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
309f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          inBuffer:   buffer descriptor indicating where to read samples to process.
310922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG command.
311f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
312f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          outBuffer:   buffer descriptor indicating where to write processed samples.
313922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG command.
314f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
315f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
316f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0 successful operation
317f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -ENODATA the engine has finished the disable phase and the framework
318f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  can stop calling process()
319f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
320f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid input/output buffer description
321f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
322f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*process)(effect_handle_t self,
323f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       audio_buffer_t *inBuffer,
324f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       audio_buffer_t *outBuffer);
325f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
326f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
327f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       command
328f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
329f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Send a command and receive a response to/from effect engine.
330f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
331f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
332f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
333f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
334f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          cmdCode:    command code: the command can be a standardized command defined in
335f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              effect_command_e (see below) or a proprietary command.
336f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          cmdSize:    size of command in bytes
337f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pCmdData:   pointer to command data
338f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pReplyData: pointer to reply data
339f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
340f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input/Output:
341f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          replySize: maximum size of reply data as input
342f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                      actual size of reply data as output
343f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
344f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
345f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          returned value: 0       successful operation
346f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
347f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid command/reply size or format according to command code
348f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              The return code should be restricted to indicate problems related to the this
349f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              API specification. Status related to the execution of a particular command should be
350f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              indicated as part of the reply field.
351f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
352f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          *pReplyData updated with command response
353f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
354f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
355f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*command)(effect_handle_t self,
356f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t cmdCode,
357f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t cmdSize,
358f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       void *pCmdData,
359f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       uint32_t *replySize,
360f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                       void *pReplyData);
361f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
362f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
363f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:        get_descriptor
364f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
365f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Returns the effect descriptor
366f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
367f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
368f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
369f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
370f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
371f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input/Output:
372f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          pDescriptor:    address where to return the effect descriptor.
373f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
374f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
375f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0          successful operation.
376f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL     invalid interface handle or invalid pDescriptor
377f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        *pDescriptor:     updated with the effect descriptor.
378f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
379f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
380f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*get_descriptor)(effect_handle_t self,
381f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                              effect_descriptor_t *pDescriptor);
382f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
383f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
384f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Function:       process_reverse
385f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
386f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Description:    Process reverse stream function. This function is used to pass
387f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          a reference stream to the effect engine. If the engine does not need a reference
388f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          stream, this function pointer can be set to NULL.
389f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          This function would typically implemented by an Echo Canceler.
390f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
391f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Input:
392f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          self:       handle to the effect interface this function
393f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              is called on.
394f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          inBuffer:   buffer descriptor indicating where to read samples to process.
395922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG_REVERSE command.
396f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
397f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //          outBuffer:   buffer descriptor indicating where to write processed samples.
398922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG_REVERSE command.
399f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              If the buffer and buffer provider in the configuration received by
400922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent    //              EFFECT_CMD_SET_CONFIG_REVERSE are also NULL, do not return modified reverse
401f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //              stream data
402f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //
403f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //    Output:
404f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //        returned value:    0 successful operation
405f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -ENODATA the engine has finished the disable phase and the framework
406f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  can stop calling process_reverse()
407f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                          -EINVAL invalid interface handle or
408f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    //                                  invalid input/output buffer description
409f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    ////////////////////////////////////////////////////////////////////////////////
410f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    int32_t (*process_reverse)(effect_handle_t self,
411f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                               audio_buffer_t *inBuffer,
412f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent                               audio_buffer_t *outBuffer);
413fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
414fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
415fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
416fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
417fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--- Standardized command codes for command() function
418fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
419fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentenum effect_command_e {
420fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_INIT,                 // initialize effect engine
421922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_SET_CONFIG,           // configure effect engine (see effect_config_t)
422fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_RESET,                // reset effect engine
423fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_ENABLE,               // enable effect process
424fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_DISABLE,              // disable effect process
425fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM,            // set parameter immediately (see effect_param_t)
426fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM_DEFERRED,   // set parameter deferred
427fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_PARAM_COMMIT,     // commit previous set parameter deferred
428fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_GET_PARAM,            // get parameter
429fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_DEVICE,           // set audio device (see audio.h, audio_devices_t)
430fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_VOLUME,           // set volume
431fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_SET_AUDIO_MODE,       // set the audio mode (normal, ring, ...)
432922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_SET_CONFIG_REVERSE,   // configure effect engine reverse stream(see effect_config_t)
433f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent   EFFECT_CMD_SET_INPUT_DEVICE,     // set capture device (see audio.h, audio_devices_t)
434922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_GET_CONFIG,           // read effect engine configuration
435922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent   EFFECT_CMD_GET_CONFIG_REVERSE,   // read configure effect engine reverse stream configuration
43666861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS,// get all supported configurations for a feature.
43766861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_GET_FEATURE_CONFIG,   // get current feature configuration
43866861e374070e50b11ae262e84854c16b297153dEric Laurent   EFFECT_CMD_SET_FEATURE_CONFIG,   // set current feature configuration
439a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent   EFFECT_CMD_SET_AUDIO_SOURCE,     // set the audio source (see audio.h, audio_source_t)
440935799d63f0d654f350a640001077616572a4b63jpadmana   EFFECT_CMD_OFFLOAD,              // set if effect thread is an offload one,
441935799d63f0d654f350a640001077616572a4b63jpadmana                                    // send the ioHandle of the effect thread
442fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent   EFFECT_CMD_FIRST_PROPRIETARY = 0x10000 // first proprietary command code
443fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
444fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
445fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
446fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_INIT
447fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
448fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
449fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Initialize effect engine: All configurations return to default
450fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
451fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
452fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
453fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
454fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
455fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
456fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
457fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
458fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
459922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_SET_CONFIG
460fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
461fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
462fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Apply new audio parameters configurations for input and output buffers
463fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
464fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
465fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_config_t)
466fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_config_t
467fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
468fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
469fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
470fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
471fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
472fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_RESET
473fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
474fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
475fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Reset the effect engine. Keep configuration but resets state and buffer content
476fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
477fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
478fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
479fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
480fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
481fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
482fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
483fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
484fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
485fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_ENABLE
486fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
487fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
488fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Enable the process. Called by the framework before the first call to process()
489fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
490fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
491fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
492fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
493fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
494fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
495fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
496fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
497fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
498fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_DISABLE
499fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
500fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
501fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Disable the process. Called by the framework after the last call to process()
502fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
503fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
504fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
505fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
506fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
507fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
508fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
509fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
510fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
511fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM
512fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
513fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
514fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set a parameter and apply it immediately
515fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
516fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
517fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
518fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
519fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
520fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
521fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
522fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
523fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
524fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM_DEFERRED
525fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
526fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
527fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set a parameter but apply it only when receiving EFFECT_CMD_SET_PARAM_COMMIT command
528fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
529fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
530fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
531fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
532fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
533fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
534fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
535fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
536fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
537fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_PARAM_COMMIT
538fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
539fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
540fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Apply all previously received EFFECT_CMD_SET_PARAM_DEFERRED commands
541fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
542fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
543fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
544fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
545fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
546fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
547fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(int)
548fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: status
549fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
550fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_GET_PARAM
551fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
552fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
553fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Get a parameter value
554fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
555fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
556fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param
557fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param
558fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
559fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
560fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(effect_param_t) + size of param and value
561fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
562fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
563fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_DEVICE
564fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
565fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
566fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set the rendering device the audio output path is connected to. See audio.h, audio_devices_t
567fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  for device values.
568fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  The effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to receive this
569fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  command when the device changes
570fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
571fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
572fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(uint32_t)
573fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: uint32_t
574fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
575fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
576fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
577fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
578fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
579fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_VOLUME
580fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
581fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
582fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set and get volume. Used by audio framework to delegate volume control to effect engine.
583fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  The effect implementation must set EFFECT_FLAG_VOLUME_IND or EFFECT_FLAG_VOLUME_CTRL flag in
584fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  its descriptor to receive this command before every call to process() function
585fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  If EFFECT_FLAG_VOLUME_CTRL flag is set in the effect descriptor, the effect engine must return
586fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  the volume that should be applied before the effect is processed. The overall volume (the volume
587fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  actually applied by the effect engine multiplied by the returned value) should match the value
588fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  indicated in the command.
589fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
590fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
591fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: n * sizeof(uint32_t)
592fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: volume for each channel defined in effect_config_t for output buffer expressed in
593fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      8.24 fixed point format
594fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
595fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
596fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: n * sizeof(uint32_t) / 0
597fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: - if EFFECT_FLAG_VOLUME_CTRL is set in effect descriptor:
598fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              volume for each channel defined in effect_config_t for output buffer expressed in
599fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              8.24 fixed point format
600fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//        - if EFFECT_FLAG_VOLUME_CTRL is not set in effect descriptor:
601fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//              N/A
602fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  It is legal to receive a null pointer as pReplyData in which case the effect framework has
603fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  delegated volume control to another effect
604fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
605fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_SET_AUDIO_MODE
606fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
607fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
608fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  Set the audio mode. The effect implementation must set EFFECT_FLAG_AUDIO_MODE_IND flag in its
609fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  descriptor to receive this command when the audio mode changes.
610fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
611fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command format:
612fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: sizeof(uint32_t)
61366861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: audio_mode_t
614fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
615fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// reply format:
616fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  size: 0
617fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  data: N/A
618fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
619922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_SET_CONFIG_REVERSE
620f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
621f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// description:
622922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Apply new audio parameters configurations for input and output buffers of reverse stream.
623922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  An example of reverse stream is the echo reference supplied to an Acoustic Echo Canceler.
624f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
625f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command format:
626f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(effect_config_t)
627f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: effect_config_t
628f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
629f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// reply format:
630f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(int)
631f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: status
632f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//==================================================================================================
633f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command: EFFECT_CMD_SET_INPUT_DEVICE
634f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
635f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// description:
636f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  Set the capture device the audio input path is connected to. See audio.h, audio_devices_t
637f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  for device values.
638f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  The effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to receive this
639f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  command when the device changes
640f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
641f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// command format:
642f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: sizeof(uint32_t)
643f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: uint32_t
644f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//--------------------------------------------------------------------------------------------------
645f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent// reply format:
646f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  size: 0
647f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//  data: N/A
648f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent//==================================================================================================
649922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_GET_CONFIG
650922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
651922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// description:
652922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Read audio parameters configurations for input and output buffers
653922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
654922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command format:
655922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: 0
656922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: N/A
657922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
658922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// reply format:
659922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: sizeof(effect_config_t)
660922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: effect_config_t
661922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//==================================================================================================
662922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command: EFFECT_CMD_GET_CONFIG_REVERSE
663922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
664922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// description:
665922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  Read audio parameters configurations for input and output buffers of reverse stream
666922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
667922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// command format:
668922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: 0
669922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: N/A
670922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//--------------------------------------------------------------------------------------------------
671922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// reply format:
672922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  size: sizeof(effect_config_t)
673922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//  data: effect_config_t
674922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent//==================================================================================================
67566861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
67666861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
67766861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
67866861e374070e50b11ae262e84854c16b297153dEric Laurent//  Queries for supported configurations for a particular feature (e.g. get the supported
67966861e374070e50b11ae262e84854c16b297153dEric Laurent// combinations of main and auxiliary channels for a noise suppressor).
68066861e374070e50b11ae262e84854c16b297153dEric Laurent// The command parameter is the feature identifier (See effect_feature_e for a list of defined
68166861e374070e50b11ae262e84854c16b297153dEric Laurent// features) followed by the maximum number of configuration descriptor to return.
68266861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply is composed of:
68366861e374070e50b11ae262e84854c16b297153dEric Laurent//  - status (uint32_t):
68466861e374070e50b11ae262e84854c16b297153dEric Laurent//          - 0 if feature is supported
68566861e374070e50b11ae262e84854c16b297153dEric Laurent//          - -ENOSYS if the feature is not supported,
68666861e374070e50b11ae262e84854c16b297153dEric Laurent//          - -ENOMEM if the feature is supported but the total number of supported configurations
68766861e374070e50b11ae262e84854c16b297153dEric Laurent//          exceeds the maximum number indicated by the caller.
68866861e374070e50b11ae262e84854c16b297153dEric Laurent//  - total number of supported configurations (uint32_t)
68966861e374070e50b11ae262e84854c16b297153dEric Laurent//  - an array of configuration descriptors.
69066861e374070e50b11ae262e84854c16b297153dEric Laurent// The actual number of descriptors returned must not exceed the maximum number indicated by
69166861e374070e50b11ae262e84854c16b297153dEric Laurent// the caller.
69266861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
69366861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
69466861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: 2 x sizeof(uint32_t)
69566861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e + maximum number of configurations to return
69666861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
69766861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
69866861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: 2 x sizeof(uint32_t) + n x sizeof (<config descriptor>)
69966861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status + total number of configurations supported + array of n config descriptors
70066861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
70166861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_GET_FEATURE_CONFIG
70266861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
70366861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
70466861e374070e50b11ae262e84854c16b297153dEric Laurent//  Retrieves current configuration for a given feature.
70566861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply status is:
70666861e374070e50b11ae262e84854c16b297153dEric Laurent//      - 0 if feature is supported
70766861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -ENOSYS if the feature is not supported,
70866861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
70966861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
71066861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t)
71166861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e
71266861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
71366861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
71466861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t) + sizeof (<config descriptor>)
71566861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status + config descriptor
71666861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
71766861e374070e50b11ae262e84854c16b297153dEric Laurent// command: EFFECT_CMD_SET_FEATURE_CONFIG
71866861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
71966861e374070e50b11ae262e84854c16b297153dEric Laurent// description:
72066861e374070e50b11ae262e84854c16b297153dEric Laurent//  Sets current configuration for a given feature.
72166861e374070e50b11ae262e84854c16b297153dEric Laurent// The reply status is:
72266861e374070e50b11ae262e84854c16b297153dEric Laurent//      - 0 if feature is supported
72366861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -ENOSYS if the feature is not supported,
72466861e374070e50b11ae262e84854c16b297153dEric Laurent//      - -EINVAL if the configuration is invalid
72566861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
72666861e374070e50b11ae262e84854c16b297153dEric Laurent// command format:
72766861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t) + sizeof (<config descriptor>)
72866861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: effect_feature_e + config descriptor
72966861e374070e50b11ae262e84854c16b297153dEric Laurent//--------------------------------------------------------------------------------------------------
73066861e374070e50b11ae262e84854c16b297153dEric Laurent// reply format:
73166861e374070e50b11ae262e84854c16b297153dEric Laurent//  size: sizeof(uint32_t)
73266861e374070e50b11ae262e84854c16b297153dEric Laurent//  data: status
73366861e374070e50b11ae262e84854c16b297153dEric Laurent//==================================================================================================
734a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// command: EFFECT_CMD_SET_AUDIO_SOURCE
735a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//--------------------------------------------------------------------------------------------------
736a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// description:
737a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  Set the audio source the capture path is configured for (Camcorder, voice recognition...).
738a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  See audio.h, audio_source_t for values.
739a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//--------------------------------------------------------------------------------------------------
740a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// command format:
741a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  size: sizeof(uint32_t)
742a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  data: uint32_t
743a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//--------------------------------------------------------------------------------------------------
744a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent// reply format:
745a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  size: 0
746a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//  data: N/A
747a07ef69482e28199bb34ac94e1e621f7afaf842eEric Laurent//==================================================================================================
748935799d63f0d654f350a640001077616572a4b63jpadmana// command: EFFECT_CMD_OFFLOAD
749935799d63f0d654f350a640001077616572a4b63jpadmana//--------------------------------------------------------------------------------------------------
750935799d63f0d654f350a640001077616572a4b63jpadmana// description:
751935799d63f0d654f350a640001077616572a4b63jpadmana//  1.indicate if the playback thread the effect is attached to is offloaded or not
752935799d63f0d654f350a640001077616572a4b63jpadmana//  2.update the io handle of the playback thread the effect is attached to
753935799d63f0d654f350a640001077616572a4b63jpadmana//--------------------------------------------------------------------------------------------------
754935799d63f0d654f350a640001077616572a4b63jpadmana// command format:
755935799d63f0d654f350a640001077616572a4b63jpadmana//  size: sizeof(effect_offload_param_t)
756935799d63f0d654f350a640001077616572a4b63jpadmana//  data: effect_offload_param_t
757935799d63f0d654f350a640001077616572a4b63jpadmana//--------------------------------------------------------------------------------------------------
758935799d63f0d654f350a640001077616572a4b63jpadmana// reply format:
759935799d63f0d654f350a640001077616572a4b63jpadmana//  size: sizeof(uint32_t)
760935799d63f0d654f350a640001077616572a4b63jpadmana//  data: uint32_t
761935799d63f0d654f350a640001077616572a4b63jpadmana//--------------------------------------------------------------------------------------------------
762fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command: EFFECT_CMD_FIRST_PROPRIETARY
763fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//--------------------------------------------------------------------------------------------------
764fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// description:
765fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  All proprietary effect commands must use command codes above this value. The size and format of
766fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  command and response fields is free in this case
767fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//==================================================================================================
768fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
769fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
770fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Audio buffer descriptor used by process(), bufferProvider() functions and buffer_config_t
771fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// structure. Multi-channel audio is always interleaved. The channel order is from LSB to MSB with
772a9a5f5d57fbcf0f953b940788625404dbcd2cc52Jean-Michel Trivi// regard to the channel mask definition in audio.h, audio_channel_mask_t e.g :
773fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Stereo: left, right
774fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// 5 point 1: front left, front right, front center, low frequency, back left, back right
775fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer size is expressed in frame count, a frame being composed of samples for all
776fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// channels at a given time. Frame size for unspecified format (AUDIO_FORMAT_OTHER) is 8 bit by
777fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// definition
778fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentstruct audio_buffer_s {
779fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    size_t   frameCount;        // number of frames in buffer
780fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    union {
781fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        void*       raw;        // raw pointer to start of buffer
782fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        int32_t*    s32;        // pointer to signed 32 bit data at start of buffer
783fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        int16_t*    s16;        // pointer to signed 16 bit data at start of buffer
784fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent        uint8_t*    u8;         // pointer to unsigned 8 bit data at start of buffer
785fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    };
786fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
787fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
788fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer_provider_s structure contains functions that can be used
789fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// by the effect engine process() function to query and release input
790fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// or output audio buffer.
791fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The getBuffer() function is called to retrieve a buffer where data
792fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// should read from or written to by process() function.
793fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The releaseBuffer() function MUST be called when the buffer retrieved
794fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// with getBuffer() is not needed anymore.
795fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The process function should use the buffer provider mechanism to retrieve
796fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// input or output buffer if the inBuffer or outBuffer passed as argument is NULL
797922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// and the buffer configuration (buffer_config_t) given by the EFFECT_CMD_SET_CONFIG
798fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command did not specify an audio buffer.
799fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
800fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef int32_t (* buffer_function_t)(void *cookie, audio_buffer_t *buffer);
801fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
802fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct buffer_provider_s {
803fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_function_t getBuffer;       // retrieve next buffer
804fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_function_t releaseBuffer;   // release used buffer
805fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    void       *cookie;                // for use by client of buffer provider functions
806fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} buffer_provider_t;
807fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
808fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
809fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// The buffer_config_s structure specifies the input or output audio format
810fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// to be used by the effect engine. It is part of the effect_config_t
811fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// structure that defines both input and output buffer configurations and is
812922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// passed by the EFFECT_CMD_SET_CONFIG or EFFECT_CMD_SET_CONFIG_REVERSE command.
813fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct buffer_config_s {
814fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    audio_buffer_t  buffer;     // buffer for use by process() function if not passed explicitly
815fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t   samplingRate;    // sampling rate
816a9a5f5d57fbcf0f953b940788625404dbcd2cc52Jean-Michel Trivi    uint32_t   channels;        // channel mask (see audio_channel_mask_t in audio.h)
817fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_provider_t bufferProvider;   // buffer provider
8186367c2ca3ee685055744f55c1afebecafafffa33Glenn Kasten    uint8_t    format;          // Audio format (see audio_format_t in audio.h)
819fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint8_t    accessMode;      // read/write or accumulate in buffer (effect_buffer_access_e)
820fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint16_t   mask;            // indicates which of the above fields is valid
821fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} buffer_config_t;
822fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
823fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Values for "accessMode" field of buffer_config_t:
824fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//   overwrite, read only, accumulate (read/modify/write)
825fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurentenum effect_buffer_access_e {
826fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_WRITE,
827fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_READ,
828fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    EFFECT_BUFFER_ACCESS_ACCUMULATE
829fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
830fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent};
831fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
83266861e374070e50b11ae262e84854c16b297153dEric Laurent// feature identifiers for EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS command
83366861e374070e50b11ae262e84854c16b297153dEric Laurentenum effect_feature_e {
83466861e374070e50b11ae262e84854c16b297153dEric Laurent    EFFECT_FEATURE_AUX_CHANNELS, // supports auxiliary channels (e.g. dual mic noise suppressor)
83566861e374070e50b11ae262e84854c16b297153dEric Laurent    EFFECT_FEATURE_CNT
83666861e374070e50b11ae262e84854c16b297153dEric Laurent};
83766861e374070e50b11ae262e84854c16b297153dEric Laurent
83866861e374070e50b11ae262e84854c16b297153dEric Laurent// EFFECT_FEATURE_AUX_CHANNELS feature configuration descriptor. Describe a combination
83966861e374070e50b11ae262e84854c16b297153dEric Laurent// of main and auxiliary channels supported
84066861e374070e50b11ae262e84854c16b297153dEric Laurenttypedef struct channel_config_s {
841a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten    audio_channel_mask_t main_channels; // channel mask for main channels
842a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten    audio_channel_mask_t aux_channels;  // channel mask for auxiliary channels
84366861e374070e50b11ae262e84854c16b297153dEric Laurent} channel_config_t;
84466861e374070e50b11ae262e84854c16b297153dEric Laurent
84566861e374070e50b11ae262e84854c16b297153dEric Laurent
846fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Values for bit field "mask" in buffer_config_t. If a bit is set, the corresponding field
847922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// in buffer_config_t must be taken into account when executing the EFFECT_CMD_SET_CONFIG command
848fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_BUFFER    0x0001  // buffer field must be taken into account
849fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_SMP_RATE  0x0002  // samplingRate field must be taken into account
850fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_CHANNELS  0x0004  // channels field must be taken into account
851fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_FORMAT    0x0008  // format field must be taken into account
852fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_ACC_MODE  0x0010  // accessMode field must be taken into account
853fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_PROVIDER  0x0020  // bufferProvider field must be taken into account
854fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define EFFECT_CONFIG_ALL (EFFECT_CONFIG_BUFFER | EFFECT_CONFIG_SMP_RATE | \
855fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                           EFFECT_CONFIG_CHANNELS | EFFECT_CONFIG_FORMAT | \
856fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                           EFFECT_CONFIG_ACC_MODE | EFFECT_CONFIG_PROVIDER)
857fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
858fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
859922f9e6e5f11faba43bc06b018cd66a0935bf9fbEric Laurent// effect_config_s structure describes the format of the pCmdData argument of EFFECT_CMD_SET_CONFIG
860fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command to configure audio parameters and buffers for effect engine input and output.
861fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_config_s {
862fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    buffer_config_t   inputCfg;
863f3008aa707c1c302e8c8f9c8b759f170d972ddceEric Laurent    buffer_config_t   outputCfg;
864fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_config_t;
865fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
866fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
867fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// effect_param_s structure describes the format of the pCmdData argument of EFFECT_CMD_SET_PARAM
868fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// command and pCmdData and pReplyData of EFFECT_CMD_GET_PARAM command.
869fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// psize and vsize represent the actual size of parameter and value.
870fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
871fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// NOTE: the start of value field inside the data field is always on a 32 bit boundary:
872fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//
873fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
874fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | status    | sizeof(int)
875fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
876fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | psize     | sizeof(int)
877fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
878fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | vsize     | sizeof(int)
879fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
880fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |           |
881fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  ~ parameter ~   > psize     |
882fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |           >  ((psize - 1)/sizeof(int) + 1) * sizeof(int)
883fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+               |
884fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  | padding   |               |
885fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
886fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |
887fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  ~ value     ~   > vsize
888fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  |           |   |
889fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//  +-----------+
890fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
891fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct effect_param_s {
892fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t     status;     // Transaction status (unused for command, used for reply)
893fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t    psize;      // Parameter size
894fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t    vsize;      // Value size
895fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    char        data[];     // Start of Parameter + Value data
896fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} effect_param_t;
897fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
898935799d63f0d654f350a640001077616572a4b63jpadmana// structure used by EFFECT_CMD_OFFLOAD command
899935799d63f0d654f350a640001077616572a4b63jpadmanatypedef struct effect_offload_param_s {
900935799d63f0d654f350a640001077616572a4b63jpadmana    bool isOffload;         // true if the playback thread the effect is attached to is offloaded
901935799d63f0d654f350a640001077616572a4b63jpadmana    int ioHandle;           // io handle of the playback thread the effect is attached to
902935799d63f0d654f350a640001077616572a4b63jpadmana} effect_offload_param_t;
903fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
904fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
905fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
906fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent//      Effect library interface
907fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent/////////////////////////////////////////////////
908fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
909b0acad33a7891d38100aa84c673280bbd8c1a90dMarco Nelissen// Effect library interface version 3.0
910b0acad33a7891d38100aa84c673280bbd8c1a90dMarco Nelissen// Note that EffectsFactory.c only checks the major version component, so changes to the minor
911b0acad33a7891d38100aa84c673280bbd8c1a90dMarco Nelissen// number can only be used for fully backwards compatible changes
912b0acad33a7891d38100aa84c673280bbd8c1a90dMarco Nelissen#define EFFECT_LIBRARY_API_VERSION EFFECT_MAKE_API_VERSION(3,0)
913fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
914fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_TAG ((('A') << 24) | (('E') << 16) | (('L') << 8) | ('T'))
915fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
916fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Every effect library must have a data structure named AUDIO_EFFECT_LIBRARY_INFO_SYM
917fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// and the fields of this data structure must begin with audio_effect_library_t
918fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
919fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurenttypedef struct audio_effect_library_s {
920fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // tag must be initialized to AUDIO_EFFECT_LIBRARY_TAG
921fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t tag;
922fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Version of the effect library API : 0xMMMMmmmm MMMM: Major, mmmm: minor
923fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    uint32_t version;
924fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Name of this library
925fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    const char *name;
926fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    // Author/owner/implementor of the library
927fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    const char *implementor;
928fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
929fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
930fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
931fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        create_effect
932fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
933fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Creates an effect engine of the specified implementation uuid and
934fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          returns an effect control interface on this engine. The function will allocate the
935fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          resources for an instance of the requested effect engine and return
936fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          a handle on the effect control interface.
937fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
938fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input:
939fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          uuid:    pointer to the effect uuid.
940fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          sessionId:  audio session to which this effect instance will be attached. All effects
941fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              created with the same session ID are connected in series and process the same signal
942fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              stream. Knowing that two effects are part of the same effect chain can help the
943fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              library implement some kind of optimizations.
944fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          ioId:   identifies the output or input stream this effect is directed to at audio HAL.
945fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //              For future use especially with tunneled HW accelerated effects
946fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
947fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
948fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pHandle:        address where to return the effect interface handle.
949fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
950fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
951fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
952fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
953fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pEffectUuid or pHandle
954fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENOENT     no effect with this uuid found
955fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pHandle:         updated with the effect interface handle.
956fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
957fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
95875a8b8f9492ab6746c7d4147a87d9e21c42b3a96Glenn Kasten    int32_t (*create_effect)(const effect_uuid_t *uuid,
959fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             int32_t sessionId,
960fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             int32_t ioId,
961fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                             effect_handle_t *pHandle);
962fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
963fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
964fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
965fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        release_effect
966fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
967fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Releases the effect engine whose handle is given as argument.
968fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          All resources allocated to this particular instance of the effect are
969fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          released.
970fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
971fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input:
972fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          handle:         handle on the effect interface to be released.
973fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
974fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
975fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
976fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
977fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid interface handle
978fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
979fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
980fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    int32_t (*release_effect)(effect_handle_t handle);
981fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
982fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
983fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
984fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Function:        get_descriptor
985fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
986fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Description:    Returns the descriptor of the effect engine which implementation UUID is
987fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          given as argument.
988fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
989fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Input/Output:
990fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          uuid:           pointer to the effect uuid.
991fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //          pDescriptor:    address where to return the effect descriptor.
992fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
993fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //    Output:
994fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        returned value:    0          successful operation.
995fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -ENODEV     library failed to initialize
996fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //                          -EINVAL     invalid pDescriptor or uuid
997fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //        *pDescriptor:     updated with the effect descriptor.
998fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    //
999fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent    ////////////////////////////////////////////////////////////////////////////////
100075a8b8f9492ab6746c7d4147a87d9e21c42b3a96Glenn Kasten    int32_t (*get_descriptor)(const effect_uuid_t *uuid,
1001fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent                              effect_descriptor_t *pDescriptor);
1002fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent} audio_effect_library_t;
1003fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1004fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Name of the hal_module_info
1005fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_INFO_SYM         AELI
1006fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1007fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent// Name of the hal_module_info as a string
1008fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#define AUDIO_EFFECT_LIBRARY_INFO_SYM_AS_STR  "AELI"
1009fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1010fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent__END_DECLS
1011fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent
1012fcc446f42ca5aa8bf81b55319cbd351614558a53Eric Laurent#endif  // ANDROID_AUDIO_EFFECT_H
1013