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