161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti/* 261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * Copyright (c) 2013, The Linux Foundation. All rights reserved. 361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * Not a contribution. 461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * 561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * Copyright (C) 2013 The Android Open Source Project 661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * 761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * Licensed under the Apache License, Version 2.0 (the "License"); 861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * you may not use this file except in compliance with the License. 961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * You may obtain a copy of the License at 1061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * 1161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * http://www.apache.org/licenses/LICENSE-2.0 1261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * 1361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * Unless required by applicable law or agreed to in writing, software 1461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * distributed under the License is distributed on an "AS IS" BASIS, 1561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * See the License for the specific language governing permissions and 1761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * limitations under the License. 1861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti */ 1961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 2061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#ifndef OFFLOAD_EFFECT_BUNDLE_H 2161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#define OFFLOAD_EFFECT_BUNDLE_H 2261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 2361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#include <tinyalsa/asoundlib.h> 2461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#include <sound/audio_effects.h> 2561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#include "effect_api.h" 2661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 2761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti/* Retry for delay for mixer open */ 2861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#define RETRY_NUMBER 10 2961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#define RETRY_US 500000 3061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 3161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#define MIXER_CARD 0 3261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#define SOUND_CARD 0 3361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 3461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletiextern const struct effect_interface_s effect_interface; 3561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 3661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletitypedef struct output_context_s output_context_t; 3761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletitypedef struct effect_ops_s effect_ops_t; 3861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletitypedef struct effect_context_s effect_context_t; 3961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 4061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletistruct output_context_s { 4161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti /* node in active_outputs_list */ 4261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti struct listnode outputs_list_node; 4361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti /* io handle */ 4461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti audio_io_handle_t handle; 4561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti /* list of effects attached to this output */ 4661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti struct listnode effects_list; 4761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti /* pcm device id */ 4861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int pcm_device_id; 4961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti struct mixer *mixer; 5061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti struct mixer_ctl *ctl; 5161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti}; 5261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 5361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti/* effect specific operations. 5461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * Only the init() and process() operations must be defined. 5561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti * Others are optional. 5661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti */ 5761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletistruct effect_ops_s { 5861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*init)(effect_context_t *context); 5961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*release)(effect_context_t *context); 6061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*reset)(effect_context_t *context); 6161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*enable)(effect_context_t *context); 6261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*start)(effect_context_t *context, output_context_t *output); 6361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*stop)(effect_context_t *context, output_context_t *output); 6461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*disable)(effect_context_t *context); 6561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*process)(effect_context_t *context, audio_buffer_t *in, audio_buffer_t *out); 6661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*set_parameter)(effect_context_t *context, effect_param_t *param, uint32_t size); 6761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*get_parameter)(effect_context_t *context, effect_param_t *param, uint32_t *size); 6861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*set_device)(effect_context_t *context, uint32_t device); 6961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti int (*command)(effect_context_t *context, uint32_t cmdCode, uint32_t cmdSize, 7061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti void *pCmdData, uint32_t *replySize, void *pReplyData); 7161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti}; 7261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 7361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletistruct effect_context_s { 7461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti const struct effect_interface_s *itfe; 7561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti /* node in created_effects_list */ 7661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti struct listnode effects_list_node; 7761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti /* node in output_context_t.effects_list */ 7861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti struct listnode output_node; 7961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti effect_config_t config; 8061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti const effect_descriptor_t *desc; 8161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti /* io handle of the output the effect is attached to */ 8261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti audio_io_handle_t out_handle; 8361e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti uint32_t state; 8461e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti bool offload_enabled; 8561e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti effect_ops_t ops; 8661e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti}; 8761e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 8861e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletiint set_config(effect_context_t *context, effect_config_t *config); 8961e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 9061e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuletibool effect_is_active(effect_context_t *context); 9161e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti 9261e21a4fe27118141afc13323807f83b733cf426Uday Kishore Pasupuleti#endif /* OFFLOAD_EFFECT_BUNDLE_H */ 93