141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George/* 241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Copyright (C) 2014 The Android Open Source Project 341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * 441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Licensed under the Apache License, Version 2.0 (the "License"); 541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * you may not use this file except in compliance with the License. 641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * You may obtain a copy of the License at 741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * 841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * http://www.apache.org/licenses/LICENSE-2.0 941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * 1041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Unless required by applicable law or agreed to in writing, software 1141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * distributed under the License is distributed on an "AS IS" BASIS, 1241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * See the License for the specific language governing permissions and 1441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * limitations under the License. 1541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George */ 1641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 1741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#ifndef OFFLOAD_EFFECT_BUNDLE_H 1841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define OFFLOAD_EFFECT_BUNDLE_H 1941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 2041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <tinyalsa/asoundlib.h> 2141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <sound/audio_effects.h> 2241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include "effect_api.h" 2341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 2441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George/* Retry for delay for mixer open */ 2541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define RETRY_NUMBER 10 2641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define RETRY_US 500000 2741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 2841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define MIXER_CARD 0 2941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define SOUND_CARD 0 3041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 3141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeextern const struct effect_interface_s effect_interface; 3241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 3341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgetypedef struct output_context_s output_context_t; 3441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgetypedef struct effect_ops_s effect_ops_t; 3541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgetypedef struct effect_context_s effect_context_t; 3641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 3741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgestruct output_context_s { 3841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George /* node in active_outputs_list */ 3941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct listnode outputs_list_node; 4041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George /* io handle */ 4141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George audio_io_handle_t handle; 4241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George /* list of effects attached to this output */ 4341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct listnode effects_list; 4441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George /* pcm device id */ 4541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int pcm_device_id; 4641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct mixer *mixer; 4741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct mixer_ctl *ctl; 4841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 4941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 5041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George/* effect specific operations. 5141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Only the init() and process() operations must be defined. 5241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Others are optional. 5341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George */ 5441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgestruct effect_ops_s { 5541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*init)(effect_context_t *context); 5641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*release)(effect_context_t *context); 5741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*reset)(effect_context_t *context); 5841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*enable)(effect_context_t *context); 5941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*start)(effect_context_t *context, output_context_t *output); 6041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*stop)(effect_context_t *context, output_context_t *output); 6141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*disable)(effect_context_t *context); 6241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*process)(effect_context_t *context, audio_buffer_t *in, audio_buffer_t *out); 6341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*set_parameter)(effect_context_t *context, effect_param_t *param, uint32_t size); 6441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*get_parameter)(effect_context_t *context, effect_param_t *param, uint32_t *size); 6541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*set_device)(effect_context_t *context, uint32_t device); 6641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*command)(effect_context_t *context, uint32_t cmdCode, uint32_t cmdSize, 6741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George void *pCmdData, uint32_t *replySize, void *pReplyData); 6841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 6941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 7041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgestruct effect_context_s { 7141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George const struct effect_interface_s *itfe; 7241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George /* node in created_effects_list */ 7341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct listnode effects_list_node; 7441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George /* node in output_context_t.effects_list */ 7541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct listnode output_node; 7641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George effect_config_t config; 7741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George const effect_descriptor_t *desc; 7841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George /* io handle of the output the effect is attached to */ 7941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George audio_io_handle_t out_handle; 8041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George uint32_t state; 8141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George bool offload_enabled; 8241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George effect_ops_t ops; 8341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 8441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 8541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint set_config(effect_context_t *context, effect_config_t *config); 8641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 8741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgebool effect_is_active(effect_context_t *context); 8841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 8941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#endif /* OFFLOAD_EFFECT_BUNDLE_H */ 90