1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project 3*ec779b8eSAndroid Build Coastguard Worker * 4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*ec779b8eSAndroid Build Coastguard Worker * 8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*ec779b8eSAndroid Build Coastguard Worker * 10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License. 15*ec779b8eSAndroid Build Coastguard Worker */ 16*ec779b8eSAndroid Build Coastguard Worker 17*ec779b8eSAndroid Build Coastguard Worker #include <hardware/audio.h> 18*ec779b8eSAndroid Build Coastguard Worker #include <hardware/audio_effect.h> 19*ec779b8eSAndroid Build Coastguard Worker #include "EffectsFactory.h" 20*ec779b8eSAndroid Build Coastguard Worker 21*ec779b8eSAndroid Build Coastguard Worker namespace android { 22*ec779b8eSAndroid Build Coastguard Worker enum { 23*ec779b8eSAndroid Build Coastguard Worker SUB_FX_HOST, // Index of HOST in the descriptor and handle arrays 24*ec779b8eSAndroid Build Coastguard Worker // of the Proxy context 25*ec779b8eSAndroid Build Coastguard Worker SUB_FX_OFFLOAD, // Index of OFFLOAD in the descriptor and handle arrays 26*ec779b8eSAndroid Build Coastguard Worker // of the Proxy context 27*ec779b8eSAndroid Build Coastguard Worker SUB_FX_COUNT // The number of sub effects for a Proxy(1 HW, 1 SW) 28*ec779b8eSAndroid Build Coastguard Worker }; 29*ec779b8eSAndroid Build Coastguard Worker #if __cplusplus 30*ec779b8eSAndroid Build Coastguard Worker extern "C" { 31*ec779b8eSAndroid Build Coastguard Worker #endif 32*ec779b8eSAndroid Build Coastguard Worker 33*ec779b8eSAndroid Build Coastguard Worker int EffectProxyCreate(const effect_uuid_t *uuid, 34*ec779b8eSAndroid Build Coastguard Worker int32_t sessionId, 35*ec779b8eSAndroid Build Coastguard Worker int32_t ioId, 36*ec779b8eSAndroid Build Coastguard Worker effect_handle_t *pHandle); 37*ec779b8eSAndroid Build Coastguard Worker int EffectProxyRelease(effect_handle_t handle); 38*ec779b8eSAndroid Build Coastguard Worker int EffectProxyGetDescriptor(const effect_uuid_t *uuid, 39*ec779b8eSAndroid Build Coastguard Worker effect_descriptor_t *pDescriptor); 40*ec779b8eSAndroid Build Coastguard Worker /* Effect Control Interface Implementation: Process */ 41*ec779b8eSAndroid Build Coastguard Worker int Effect_process(effect_handle_t self, 42*ec779b8eSAndroid Build Coastguard Worker audio_buffer_t *inBuffer, 43*ec779b8eSAndroid Build Coastguard Worker audio_buffer_t *outBuffer); 44*ec779b8eSAndroid Build Coastguard Worker 45*ec779b8eSAndroid Build Coastguard Worker /* Effect Control Interface Implementation: Command */ 46*ec779b8eSAndroid Build Coastguard Worker int Effect_command(effect_handle_t self, 47*ec779b8eSAndroid Build Coastguard Worker uint32_t cmdCode, 48*ec779b8eSAndroid Build Coastguard Worker uint32_t cmdSize, 49*ec779b8eSAndroid Build Coastguard Worker void *pCmdData, 50*ec779b8eSAndroid Build Coastguard Worker uint32_t *replySize, 51*ec779b8eSAndroid Build Coastguard Worker void *pReplyData); 52*ec779b8eSAndroid Build Coastguard Worker int Effect_getDescriptor(effect_handle_t self, 53*ec779b8eSAndroid Build Coastguard Worker effect_descriptor_t *pDescriptor); 54*ec779b8eSAndroid Build Coastguard Worker 55*ec779b8eSAndroid Build Coastguard Worker const struct effect_interface_s gEffectInterface = { 56*ec779b8eSAndroid Build Coastguard Worker Effect_process, 57*ec779b8eSAndroid Build Coastguard Worker Effect_command, 58*ec779b8eSAndroid Build Coastguard Worker Effect_getDescriptor, 59*ec779b8eSAndroid Build Coastguard Worker NULL, 60*ec779b8eSAndroid Build Coastguard Worker }; 61*ec779b8eSAndroid Build Coastguard Worker 62*ec779b8eSAndroid Build Coastguard Worker #define PROXY_REPLY_SIZE_MAX (64 * 1024) // must be power of two 63*ec779b8eSAndroid Build Coastguard Worker #define PROXY_REPLY_SIZE_DEFAULT 32 // must be power of two 64*ec779b8eSAndroid Build Coastguard Worker 65*ec779b8eSAndroid Build Coastguard Worker struct EffectContext { 66*ec779b8eSAndroid Build Coastguard Worker const struct effect_interface_s *common_itfe; // Holds the itfe of the Proxy 67*ec779b8eSAndroid Build Coastguard Worker sub_effect_entry_t** sube; // Points to the sub effects 68*ec779b8eSAndroid Build Coastguard Worker effect_descriptor_t* desc; // Points to the sub effect descriptors 69*ec779b8eSAndroid Build Coastguard Worker audio_effect_library_t** aeli; // Points to the sub effect aeli 70*ec779b8eSAndroid Build Coastguard Worker effect_handle_t eHandle[SUB_FX_COUNT]; // The effect handles of the sub effects 71*ec779b8eSAndroid Build Coastguard Worker int index; // The index that is currently active - HOST or OFFLOAD 72*ec779b8eSAndroid Build Coastguard Worker int32_t sessionId; // The sessiond in which the effect is created. 73*ec779b8eSAndroid Build Coastguard Worker // Stored in context to pass on to sub effect creation 74*ec779b8eSAndroid Build Coastguard Worker int32_t ioId; // The ioId in which the effect is created. 75*ec779b8eSAndroid Build Coastguard Worker // Stored in context to pass on to sub effect creation 76*ec779b8eSAndroid Build Coastguard Worker effect_uuid_t uuid; // UUID of the Proxy 77*ec779b8eSAndroid Build Coastguard Worker char* replyData; // temporary buffer for non active sub effect command reply 78*ec779b8eSAndroid Build Coastguard Worker uint32_t replySize; // current size of temporary reply buffer 79*ec779b8eSAndroid Build Coastguard Worker }; 80*ec779b8eSAndroid Build Coastguard Worker 81*ec779b8eSAndroid Build Coastguard Worker #if __cplusplus 82*ec779b8eSAndroid Build Coastguard Worker } // extern "C" 83*ec779b8eSAndroid Build Coastguard Worker #endif 84*ec779b8eSAndroid Build Coastguard Worker } //namespace android 85