/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <hardware/audio.h> #include <hardware/audio_effect.h> #include "EffectsFactory.h" namespace android { enum { SUB_FX_HOST, // Index of HOST in the descriptor and handle arrays // of the Proxy context SUB_FX_OFFLOAD, // Index of OFFLOAD in the descriptor and handle arrays // of the Proxy context SUB_FX_COUNT // The number of sub effects for a Proxy(1 HW, 1 SW) }; #if __cplusplus extern "C" { #endif int EffectProxyCreate(const effect_uuid_t *uuid, int32_t sessionId, int32_t ioId, effect_handle_t *pHandle); int EffectProxyRelease(effect_handle_t handle); int EffectProxyGetDescriptor(const effect_uuid_t *uuid, effect_descriptor_t *pDescriptor); /* Effect Control Interface Implementation: Process */ int Effect_process(effect_handle_t self, audio_buffer_t *inBuffer, audio_buffer_t *outBuffer); /* Effect Control Interface Implementation: Command */ int Effect_command(effect_handle_t self, uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t *replySize, void *pReplyData); int Effect_getDescriptor(effect_handle_t self, effect_descriptor_t *pDescriptor); const struct effect_interface_s gEffectInterface = { Effect_process, Effect_command, Effect_getDescriptor, NULL, }; #define PROXY_REPLY_SIZE_MAX (64 * 1024) // must be power of two #define PROXY_REPLY_SIZE_DEFAULT 32 // must be power of two struct EffectContext { const struct effect_interface_s *common_itfe; // Holds the itfe of the Proxy sub_effect_entry_t** sube; // Points to the sub effects effect_descriptor_t* desc; // Points to the sub effect descriptors audio_effect_library_t** aeli; // Points to the sub effect aeli effect_handle_t eHandle[SUB_FX_COUNT]; // The effect handles of the sub effects int index; // The index that is currently active - HOST or OFFLOAD int32_t sessionId; // The sessiond in which the effect is created. // Stored in context to pass on to sub effect creation int32_t ioId; // The ioId in which the effect is created. // Stored in context to pass on to sub effect creation effect_uuid_t uuid; // UUID of the Proxy char* replyData; // temporary buffer for non active sub effect command reply uint32_t replySize; // current size of temporary reply buffer }; #if __cplusplus } // extern "C" #endif } //namespace android