1dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov/*
2dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * Copyright (C) 2016 The Android Open Source Project
3dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov *
4dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License");
5dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * you may not use this file except in compliance with the License.
6dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * You may obtain a copy of the License at
7dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov *
8dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov *      http://www.apache.org/licenses/LICENSE-2.0
9dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov *
10dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * Unless required by applicable law or agreed to in writing, software
11dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS,
12dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * See the License for the specific language governing permissions and
14dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov * limitations under the License.
15dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov */
16dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
17dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
18dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov#ifndef ANDROID_AUDIO_EFFECT_CORE_H
19dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov#define ANDROID_AUDIO_EFFECT_CORE_H
20dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
21dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov#include "audio.h"
22dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov#include "audio_effect-base.h"
23dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
24dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov__BEGIN_DECLS
25dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
26dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov/////////////////////////////////////////////////
27dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//      Common Definitions
28dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov/////////////////////////////////////////////////
29dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
30dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//
31dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--- Effect descriptor structure effect_descriptor_t
32dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//
33dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
34dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// This format is used for both "type" and "uuid" fields of the effect descriptor structure.
35dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// - When used for effect type and the engine is implementing and effect corresponding to a standard
36dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// OpenSL ES interface, this ID must be the one defined in OpenSLES_IID.h for that interface.
37dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// - When used as uuid, it should be a unique UUID for this particular implementation.
38dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef audio_uuid_t effect_uuid_t;
39dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
40dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// Maximum length of character strings in structures defines by this API.
41dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov#define EFFECT_STRING_LEN_MAX 64
42dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
43dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// NULL UUID definition (matches SL_IID_NULL_)
44dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov#define EFFECT_UUID_INITIALIZER { 0xec7178ec, 0xe5e1, 0x4432, 0xa3f4, \
45dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov                                  { 0x46, 0x57, 0xe6, 0x79, 0x52, 0x10 } }
46dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovstatic const effect_uuid_t EFFECT_UUID_NULL_ = EFFECT_UUID_INITIALIZER;
47dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovstatic const effect_uuid_t * const EFFECT_UUID_NULL = &EFFECT_UUID_NULL_;
48dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovstatic const char * const EFFECT_UUID_NULL_STR = "ec7178ec-e5e1-4432-a3f4-4657e6795210";
49dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
50dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The effect descriptor contains necessary information to facilitate the enumeration of the effect
51dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// engines present in a library.
52dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef struct effect_descriptor_s {
53dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    effect_uuid_t type;     // UUID of to the OpenSL ES interface implemented by this effect
54dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    effect_uuid_t uuid;     // UUID for this particular implementation
55dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint32_t apiVersion;    // Version of the effect control API implemented
56dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint32_t flags;         // effect engine capabilities/requirements flags (see below)
57dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint16_t cpuLoad;       // CPU load indication (see below)
58dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint16_t memoryUsage;   // Data Memory usage (see below)
59dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    char    name[EFFECT_STRING_LEN_MAX];   // human readable effect name
60dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    char    implementor[EFFECT_STRING_LEN_MAX];    // human readable effect implementor name
61dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov} effect_descriptor_t;
62dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
63dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov/////////////////////////////////////////////////
64dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//      Effect control interface
65dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov/////////////////////////////////////////////////
66dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
67dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//
68dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--- Standardized command codes for command() function
69dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//
70dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovenum effect_command_e {
71dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_INIT,                 // initialize effect engine
72dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_CONFIG,           // configure effect engine (see effect_config_t)
73dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_RESET,                // reset effect engine
74dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_ENABLE,               // enable effect process
75dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_DISABLE,              // disable effect process
76dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_PARAM,            // set parameter immediately (see effect_param_t)
77dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_PARAM_DEFERRED,   // set parameter deferred
78dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_PARAM_COMMIT,     // commit previous set parameter deferred
79dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_GET_PARAM,            // get parameter
80dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_DEVICE,           // set audio device (see audio.h, audio_devices_t)
81dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_VOLUME,           // set volume
82dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_AUDIO_MODE,       // set the audio mode (normal, ring, ...)
83dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_CONFIG_REVERSE,   // configure effect engine reverse stream(see effect_config_t)
84dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_INPUT_DEVICE,     // set capture device (see audio.h, audio_devices_t)
85dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_GET_CONFIG,           // read effect engine configuration
86dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_GET_CONFIG_REVERSE,   // read configure effect engine reverse stream configuration
87dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS,// get all supported configurations for a feature.
88dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_GET_FEATURE_CONFIG,   // get current feature configuration
89dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_FEATURE_CONFIG,   // set current feature configuration
90dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_SET_AUDIO_SOURCE,     // set the audio source (see audio.h, audio_source_t)
91dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_OFFLOAD,              // set if effect thread is an offload one,
92dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov                                    // send the ioHandle of the effect thread
93dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov   EFFECT_CMD_FIRST_PROPRIETARY = 0x10000 // first proprietary command code
94dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov};
95dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
96dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
97dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_INIT
98dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
99dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
100dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Initialize effect engine: All configurations return to default
101dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
102dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
103dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
104dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
105dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
106dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
107dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(int)
108dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status
109dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
110dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_CONFIG
111dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
112dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
113dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Apply new audio parameters configurations for input and output buffers
114dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
115dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
116dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_config_t)
117dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_config_t
118dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
119dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
120dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(int)
121dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status
122dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
123dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_RESET
124dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
125dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
126dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Reset the effect engine. Keep configuration but resets state and buffer content
127dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
128dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
129dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
130dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
131dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
132dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
133dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
134dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
135dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
136dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_ENABLE
137dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
138dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
139dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Enable the process. Called by the framework before the first call to process()
140dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
141dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
142dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
143dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
144dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
145dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
146dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(int)
147dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status
148dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
149dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_DISABLE
150dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
151dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
152dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Disable the process. Called by the framework after the last call to process()
153dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
154dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
155dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
156dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
157dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
158dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
159dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(int)
160dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status
161dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
162dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_PARAM
163dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
164dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
165dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Set a parameter and apply it immediately
166dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
167dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
168dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_param_t) + size of param and value
169dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
170dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
171dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
172dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(int)
173dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status
174dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
175dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_PARAM_DEFERRED
176dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
177dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
178dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Set a parameter but apply it only when receiving EFFECT_CMD_SET_PARAM_COMMIT command
179dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
180dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
181dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_param_t) + size of param and value
182dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
183dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
184dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
185dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
186dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
187dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
188dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_PARAM_COMMIT
189dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
190dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
191dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Apply all previously received EFFECT_CMD_SET_PARAM_DEFERRED commands
192dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
193dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
194dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
195dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
196dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
197dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
198dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(int)
199dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status
200dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
201dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_GET_PARAM
202dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
203dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
204dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Get a parameter value
205dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
206dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
207dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_param_t) + size of param
208dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_param_t + param
209dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
210dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
211dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_param_t) + size of param and value
212dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_param_t + param + value. See effect_param_t definition below for value offset
213dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
214dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_DEVICE
215dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
216dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
217dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Set the rendering device the audio output path is connected to. See audio.h, audio_devices_t
218dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  for device values.
219dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  The effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to receive this
220dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  command when the device changes
221dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
222dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
223dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t)
224dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: uint32_t
225dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
226dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
227dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
228dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
229dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
230dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_VOLUME
231dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
232dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
233dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Set and get volume. Used by audio framework to delegate volume control to effect engine.
234dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  The effect implementation must set EFFECT_FLAG_VOLUME_IND or EFFECT_FLAG_VOLUME_CTRL flag in
235dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  its descriptor to receive this command before every call to process() function
236dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  If EFFECT_FLAG_VOLUME_CTRL flag is set in the effect descriptor, the effect engine must return
237dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  the volume that should be applied before the effect is processed. The overall volume (the volume
238dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  actually applied by the effect engine multiplied by the returned value) should match the value
239dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  indicated in the command.
240dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
241dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
242dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: n * sizeof(uint32_t)
243dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: volume for each channel defined in effect_config_t for output buffer expressed in
244dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//      8.24 fixed point format
245dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
246dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
247dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: n * sizeof(uint32_t) / 0
248dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: - if EFFECT_FLAG_VOLUME_CTRL is set in effect descriptor:
249dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//              volume for each channel defined in effect_config_t for output buffer expressed in
250dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//              8.24 fixed point format
251dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//        - if EFFECT_FLAG_VOLUME_CTRL is not set in effect descriptor:
252dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//              N/A
253dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  It is legal to receive a null pointer as pReplyData in which case the effect framework has
254dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  delegated volume control to another effect
255dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
256dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_AUDIO_MODE
257dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
258dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
259dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Set the audio mode. The effect implementation must set EFFECT_FLAG_AUDIO_MODE_IND flag in its
260dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  descriptor to receive this command when the audio mode changes.
261dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
262dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
263dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t)
264dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: audio_mode_t
265dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
266dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
267dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
268dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
269dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
270dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_CONFIG_REVERSE
271dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
272dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
273dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Apply new audio parameters configurations for input and output buffers of reverse stream.
274dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  An example of reverse stream is the echo reference supplied to an Acoustic Echo Canceler.
275dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
276dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
277dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_config_t)
278dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_config_t
279dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
280dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
281dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(int)
282dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status
283dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
284dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_INPUT_DEVICE
285dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
286dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
287dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Set the capture device the audio input path is connected to. See audio.h, audio_devices_t
288dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  for device values.
289dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  The effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to receive this
290dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  command when the device changes
291dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
292dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
293dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t)
294dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: uint32_t
295dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
296dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
297dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
298dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
299dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
300dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_GET_CONFIG
301dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
302dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
303dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Read audio parameters configurations for input and output buffers
304dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
305dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
306dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
307dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
308dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
309dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
310dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_config_t)
311dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_config_t
312dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
313dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_GET_CONFIG_REVERSE
314dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
315dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
316dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Read audio parameters configurations for input and output buffers of reverse stream
317dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
318dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
319dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
320dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
321dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
322dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
323dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_config_t)
324dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_config_t
325dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
326dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
327dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
328dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
329dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Queries for supported configurations for a particular feature (e.g. get the supported
330dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// combinations of main and auxiliary channels for a noise suppressor).
331dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The command parameter is the feature identifier (See effect_feature_e for a list of defined
332dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// features) followed by the maximum number of configuration descriptor to return.
333dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The reply is composed of:
334dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  - status (uint32_t):
335dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//          - 0 if feature is supported
336dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//          - -ENOSYS if the feature is not supported,
337dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//          - -ENOMEM if the feature is supported but the total number of supported configurations
338dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//          exceeds the maximum number indicated by the caller.
339dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  - total number of supported configurations (uint32_t)
340dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  - an array of configuration descriptors.
341dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The actual number of descriptors returned must not exceed the maximum number indicated by
342dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// the caller.
343dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
344dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
345dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 2 x sizeof(uint32_t)
346dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_feature_e + maximum number of configurations to return
347dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
348dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
349dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 2 x sizeof(uint32_t) + n x sizeof (<config descriptor>)
350dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status + total number of configurations supported + array of n config descriptors
351dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
352dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_GET_FEATURE_CONFIG
353dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
354dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
355dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Retrieves current configuration for a given feature.
356dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The reply status is:
357dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//      - 0 if feature is supported
358dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//      - -ENOSYS if the feature is not supported,
359dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
360dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
361dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t)
362dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_feature_e
363dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
364dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
365dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t) + sizeof (<config descriptor>)
366dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status + config descriptor
367dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
368dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_FEATURE_CONFIG
369dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
370dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
371dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Sets current configuration for a given feature.
372dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The reply status is:
373dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//      - 0 if feature is supported
374dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//      - -ENOSYS if the feature is not supported,
375dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//      - -EINVAL if the configuration is invalid
376dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
377dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
378dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t) + sizeof (<config descriptor>)
379dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_feature_e + config descriptor
380dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
381dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
382dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t)
383dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: status
384dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
385dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_SET_AUDIO_SOURCE
386dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
387dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
388dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  Set the audio source the capture path is configured for (Camcorder, voice recognition...).
389dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  See audio.h, audio_source_t for values.
390dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
391dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
392dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t)
393dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: uint32_t
394dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
395dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
396dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: 0
397dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: N/A
398dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
399dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_OFFLOAD
400dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
401dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
402dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  1.indicate if the playback thread the effect is attached to is offloaded or not
403dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  2.update the io handle of the playback thread the effect is attached to
404dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
405dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command format:
406dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(effect_offload_param_t)
407dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: effect_offload_param_t
408dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
409dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// reply format:
410dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  size: sizeof(uint32_t)
411dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  data: uint32_t
412dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
413dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command: EFFECT_CMD_FIRST_PROPRIETARY
414dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//--------------------------------------------------------------------------------------------------
415dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// description:
416dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  All proprietary effect commands must use command codes above this value. The size and format of
417dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  command and response fields is free in this case
418dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//==================================================================================================
419dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
420dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// Audio buffer descriptor used by process(), bufferProvider() functions and buffer_config_t
421dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// structure. Multi-channel audio is always interleaved. The channel order is from LSB to MSB with
422dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// regard to the channel mask definition in audio.h, audio_channel_mask_t e.g :
423dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// Stereo: left, right
424dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// 5 point 1: front left, front right, front center, low frequency, back left, back right
425dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The buffer size is expressed in frame count, a frame being composed of samples for all
426dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// channels at a given time. Frame size for unspecified format (AUDIO_FORMAT_OTHER) is 8 bit by
427dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// definition
428dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef struct audio_buffer_s {
429dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    size_t   frameCount;        // number of frames in buffer
430dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    union {
431dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov        void*       raw;        // raw pointer to start of buffer
432dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov        int32_t*    s32;        // pointer to signed 32 bit data at start of buffer
433dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov        int16_t*    s16;        // pointer to signed 16 bit data at start of buffer
434dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov        uint8_t*    u8;         // pointer to unsigned 8 bit data at start of buffer
435dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    };
436dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov} audio_buffer_t;
437dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
438dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The buffer_provider_s structure contains functions that can be used
439dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// by the effect engine process() function to query and release input
440dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// or output audio buffer.
441dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The getBuffer() function is called to retrieve a buffer where data
442dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// should read from or written to by process() function.
443dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The releaseBuffer() function MUST be called when the buffer retrieved
444dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// with getBuffer() is not needed anymore.
445dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The process function should use the buffer provider mechanism to retrieve
446dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// input or output buffer if the inBuffer or outBuffer passed as argument is NULL
447dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// and the buffer configuration (buffer_config_t) given by the EFFECT_CMD_SET_CONFIG
448dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command did not specify an audio buffer.
449dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
450dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef int32_t (* buffer_function_t)(void *cookie, audio_buffer_t *buffer);
451dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
452dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef struct buffer_provider_s {
453dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    buffer_function_t getBuffer;       // retrieve next buffer
454dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    buffer_function_t releaseBuffer;   // release used buffer
455dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    void       *cookie;                // for use by client of buffer provider functions
456dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov} buffer_provider_t;
457dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
458dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// The buffer_config_s structure specifies the input or output audio format
459dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// to be used by the effect engine.
460dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef struct buffer_config_s {
461dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    audio_buffer_t  buffer;     // buffer for use by process() function if not passed explicitly
462dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint32_t   samplingRate;    // sampling rate
463dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint32_t   channels;        // channel mask (see audio_channel_mask_t in audio.h)
464dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    buffer_provider_t bufferProvider;   // buffer provider
465dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint8_t    format;          // Audio format (see audio_format_t in audio.h)
466dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint8_t    accessMode;      // read/write or accumulate in buffer (effect_buffer_access_e)
467dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint16_t   mask;            // indicates which of the above fields is valid
468dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov} buffer_config_t;
469dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
470dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// EFFECT_FEATURE_AUX_CHANNELS feature configuration descriptor. Describe a combination
471dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// of main and auxiliary channels supported
472dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef struct channel_config_s {
473dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    audio_channel_mask_t main_channels; // channel mask for main channels
474dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    audio_channel_mask_t aux_channels;  // channel mask for auxiliary channels
475dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov} channel_config_t;
476dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
477dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
478dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// effect_config_s structure is used to configure audio parameters and buffers for effect engine
479dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// input and output.
480dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef struct effect_config_s {
481dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    buffer_config_t   inputCfg;
482dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    buffer_config_t   outputCfg;
483dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov} effect_config_t;
484dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
485dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
486dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// effect_param_s structure describes the format of the pCmdData argument of EFFECT_CMD_SET_PARAM
487dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// command and pCmdData and pReplyData of EFFECT_CMD_GET_PARAM command.
488dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// psize and vsize represent the actual size of parameter and value.
489dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//
490dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// NOTE: the start of value field inside the data field is always on a 32 bit boundary:
491dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//
492dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  +-----------+
493dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  | status    | sizeof(int)
494dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  +-----------+
495dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  | psize     | sizeof(int)
496dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  +-----------+
497dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  | vsize     | sizeof(int)
498dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  +-----------+
499dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  |           |   |           |
500dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  ~ parameter ~   > psize     |
501dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  |           |   |           >  ((psize - 1)/sizeof(int) + 1) * sizeof(int)
502dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  +-----------+               |
503dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  | padding   |               |
504dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  +-----------+
505dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  |           |   |
506dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  ~ value     ~   > vsize
507dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  |           |   |
508dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov//  +-----------+
509dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
510dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef struct effect_param_s {
511dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    int32_t     status;     // Transaction status (unused for command, used for reply)
512dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint32_t    psize;      // Parameter size
513dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    uint32_t    vsize;      // Value size
514dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    char        data[];     // Start of Parameter + Value data
515dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov} effect_param_t;
516dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
5171c11cf1f220a4eb8abe39cb4e1862c8d1752614crago// Maximum effect_param_t size
5181c11cf1f220a4eb8abe39cb4e1862c8d1752614crago#define EFFECT_PARAM_SIZE_MAX       65536
5191c11cf1f220a4eb8abe39cb4e1862c8d1752614crago
520dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov// structure used by EFFECT_CMD_OFFLOAD command
521dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganovtypedef struct effect_offload_param_s {
522dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    bool isOffload;         // true if the playback thread the effect is attached to is offloaded
523dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov    int ioHandle;           // io handle of the playback thread the effect is attached to
524dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov} effect_offload_param_t;
525dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
526dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
527dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov__END_DECLS
528dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov
529dde56cbece88e4c6d973787043c8d8adbcb337d3Mikhail Naganov#endif  // ANDROID_AUDIO_EFFECT_CORE_H
530