/* * Copyright (c) XMEDIA. All rights reserved. */ #ifndef __XMEDIA_API_AO_H__ #define __XMEDIA_API_AO_H__ #include "common.h" #include "xmedia_type.h" #include "xmedia_audio_common.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* __cplusplus */ #define XMEDIA_AO_CHN_MAX 3 #define XMEDIA_AO_SYSCHN_CHNID (XMEDIA_AO_CHN_MAX - 1) typedef enum { XMEDIA_AO_DEV_DAC0, XMEDIA_AO_DEV_I2S0, XMEDIA_AO_DEV_MAX, } ao_dev; typedef struct { xmedia_u32 reserved; } ao_dac_attr; typedef struct { xmedia_bool master; audio_i2s_mode i2s_mode; audio_i2s_mclk_sel mclk_sel; audio_i2s_bclk_sel bclk_sel; xmedia_bool pcm_sample_rise_edge; audio_i2s_pcm_delay pcm_delay_cycle; } ao_i2s_attr; typedef struct { audio_dev_work_mode mode; audio_sample_rate sample_rate; audio_channel channels; audio_bit_depth bit_depth; xmedia_u32 pcm_frame_max_num; xmedia_u32 pcm_samples_per_frame; union { ao_dac_attr dac_attr; ao_i2s_attr i2s_attr; } un_attr; } ao_dev_attr; typedef enum { AO_VQE_ENHANCE_ATTR_VERSION_1 = 0x1, AO_VQE_ENHANCE_ATTR_VERSION_2 = 0x2, AO_VQE_ATTR_VERSION_MAX, } ao_vqe_attr_version; typedef struct { ao_vqe_attr_version version; xmedia_void* attr; /* refer to ao_vqe_attr_v1 or ao_vqe_attr_v2 */ } ao_vqe_attr; typedef struct { xmedia_s32 threshold; /* support -31 ~ 0db */ xmedia_s32 step; /* support 0 ~ 5 */ } dac_drc_attr; typedef struct ao_chn_state_s { xmedia_u32 total_num; xmedia_u32 free_num; xmedia_u32 busy_num; } ao_chn_state_s; typedef enum { AO_PARAM_CODEC_SET_MUTE = 0x3000000, /* refer to xmedia_bool */ AO_PARAM_CODEC_GET_MUTE, /* refer to xmedia_bool */ AO_PARAM_CODEC_SET_DAC_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */ AO_PARAM_CODEC_GET_DAC_GAIN, /* refer to xmedia_s32 */ AO_PARAM_CODEC_SET_DAC_DRC_ATTR, /* not support, refer to dac_drc_attr */ AO_PARAM_CODEC_GET_DAC_DRC_ATTR, /* not support, refer to dac_drc_attr */ AO_PARAM_CODEC_CLEAR_DAC_DRC_ATTR, /* not support, refer to dac_drc_attr */ AO_PARAM_CODEC_SET_DAC_LEFT_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */ AO_PARAM_CODEC_GET_DAC_LEFT_GAIN, /* refer to xmedia_s32 */ AO_PARAM_CODEC_SET_DAC_RIGHT_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */ AO_PARAM_CODEC_GET_DAC_RIGHT_GAIN, /* refer to xmedia_s32 */ AO_PARAM_CODEC_SET_DAC_LEFT_MUTE, /* refer to xmedia_bool */ AO_PARAM_CODEC_GET_DAC_LEFT_MUTE, /* refer to xmedia_bool */ AO_PARAM_CODEC_SET_DAC_RIGHT_MUTE, /* refer to xmedia_bool */ AO_PARAM_CODEC_GET_DAC_RIGHT_MUTE, /* refer to xmedia_bool */ AO_PARAM_SET_OUTPORT_VOLUME, /* not support, refer to xmedia_s32, range[-81,6], by step of 1 dB */ AO_PARAM_GET_OUTPORT_VOLUME, /* not support, refer to xmedia_s32 */ AO_PARAM_SET_OUTPORT_MUTE, /* not support, refer to xmedia_bool */ AO_PARAM_GET_OUTPORT_MUTE, /* not support, refer to xmedia_bool */ AO_PARAM_CODEC_SET_DAC_ANALOG_GAIN, /* refer to xmedia_s32, range[-21,0], by step of 3 dB */ AO_PARAM_CODEC_GET_DAC_ANALOG_GAIN, /* refer to xmedia_s32 */ } ao_dev_param_cmd; /* * 函数功能: 初始化音频输出模块 * 函数参数: * 无 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_NOT_READY - AO节点打开失败 */ xmedia_s32 xmedia_ao_init(xmedia_void); /* * 函数功能: 去初始化音频输出模块 * 函数参数: * 无 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 XMEDIA_ERRCODE_BUSY - 设备未禁用 */ xmedia_s32 xmedia_ao_exit(xmedia_void); /* * 函数功能: 获取音频输出设备默认设置参数 * 函数参数: * dev - 输入参数,设备ID * attr - 输出参数,设备属性 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_NULL_PTR - 传入参数为空 * XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误 */ xmedia_s32 xmedia_ao_get_default_attr(ao_dev dev, ao_dev_attr *attr); /* * 函数功能: 设置音频输出设备参数 * 函数参数: * dev - 输入参数,设备ID * attr - 输入参数,设备属性 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_NULL_PTR - 传入参数为空 * XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误 * XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误 * XMEDIA_ERRCODE_INVALID_PARAM - 参数校验失败 */ xmedia_s32 xmedia_ao_set_dev_attr(ao_dev dev, const ao_dev_attr *attr); /* * 函数功能: 获取音频输出设备用户设置的属性 * 函数参数: * dev - 输入参数,设备ID * attr - 输出参数,设备属性 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_NULL_PTR - 传入参数为空 * XMEDIA_ERRCODE_NOT_CONFIG - 用户没有配置参数 */ xmedia_s32 xmedia_ao_get_dev_attr(ao_dev dev, ao_dev_attr *attr); /* * 函数功能: 使能音频输出设备 * 函数参数: * dev - 输入参数,设备ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误 * XMEDIA_ERRCODE_NOT_CONFIG - 设备没有配置参数 * XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 设备分配内存失败 * XMEDIA_ERRCODE_INVALID_PARAM - 函数内部位宽错误 */ xmedia_s32 xmedia_ao_enable_dev(ao_dev dev); /* * 函数功能: 禁用音频输出设备 * 函数参数: * dev - 输入参数,设备ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误 * XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许,通道未销毁 */ xmedia_s32 xmedia_ao_disable_dev(ao_dev dev); /* * 函数功能: 设置音频输出设备各种参数 * 函数参数: * dev - 输入参数,设备ID * cmd - 输入参数,设置的命令 * param - 输入参数,需要参考的参数 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NULL_PTR - param为空指针 * XMEDIA_ERRCODE_INVALID_PARAM - 参数校验失败 */ xmedia_s32 xmedia_ao_set_dev_param(ao_dev dev, ao_dev_param_cmd cmd, xmedia_void* param); /* * 函数功能: 设置音频输出设备声道模式 * 函数参数: * dev - 输入参数,设备ID * mode - 输入参数,通道模式 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_PARAM - 无效mode参数 */ xmedia_s32 xmedia_ao_set_trackmode(ao_dev dev, audio_track_mode mode); /* * 函数功能: 获取音频输出设备声道模式 * 函数参数: * dev - 输入参数,设备ID * mode - 输出参数,获取的模式 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_NULL_PTR - mode空指针 */ xmedia_s32 xmedia_ao_get_trackmode(ao_dev dev, audio_track_mode* mode); /* * 函数功能: 创建音频输出设备通道 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NULL_PTR - 内部参数为空 * XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存分配失败 * XMEDIA_ERRCODE_NOT_ENABLE - 设备使能状态错误 */ xmedia_s32 xmedia_ao_create_chn(ao_dev dev, ao_chn chn); /* * 函数功能: 销毁音频输出设备通道 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_DISABLE - 通道使能状态错误 */ xmedia_s32 xmedia_ao_destroy_chn(ao_dev dev, ao_chn chn); /* * 函数功能: 使能音频输出设备通道 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误 */ xmedia_s32 xmedia_ao_enable_chn(ao_dev dev, ao_chn chn); /* * 函数功能: 禁用音频输出设备通道 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误 */ xmedia_s32 xmedia_ao_disable_chn(ao_dev dev, ao_chn chn); /* * 函数功能: 擦除音频输出通道buf缓存 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_EXIST - 通道不存在 */ xmedia_s32 xmedia_ao_flush_chn(ao_dev dev, ao_chn chn); /* * 函数功能: 暂停音频输出通道播放 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_EXIST - 通道不存在 */ xmedia_s32 xmedia_ao_pause_chn(ao_dev dev, ao_chn chn); /* * 函数功能: 恢复音频输出通道播放 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_EXIST - 通道不存在 */ xmedia_s32 xmedia_ao_resume_chn(ao_dev dev, ao_chn chn); /* * 函数功能: 查询通道播放状态 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * state - 输出参数,通道播放状态 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NULL_PTR - 参数为空 * XMEDIA_ERRCODE_NOT_EXIST - 通道不存在 * XMEDIA_ERRCODE_NOT_ENABLE - 通道未使能 */ xmedia_s32 xmedia_ao_query_chn_state(ao_dev dev, ao_chn chn, ao_chn_state_s* state); /* * 函数功能: 往音频输出设备通道送入音频帧 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * frame - 输入参数,音频帧信息 * time_out - 输入参数,超时时间 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_BUFFER_FULL - 音频输出设备通道buf已满 */ xmedia_s32 xmedia_ao_send_frame(ao_dev dev, ao_chn chn, const audio_frame* frame, xmedia_s32 time_out); /* * 函数功能: 设置音频输出设备通道算法的属性 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * attr - 输入参数,算法的属性 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效设备通道ID * XMEDIA_ERRCODE_NULL_PTR - 参数为空 * XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误 * XMEDIA_ERRCODE_INVALID_PARAM - 参数校验失败 */ xmedia_s32 xmedia_ao_set_vqe_attr(ao_dev dev, ao_chn chn, const ao_vqe_attr* attr); /* * 函数功能: 获取音频输出设备通道算法的属性 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,需要的设置算法的通道ID * attr - 输出参数,算法的属性 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效设备通道ID * XMEDIA_ERRCODE_NULL_PTR - 参数为空 * XMEDIA_ERRCODE_NOT_CONFIG - 用户没有配置参数 * XMEDIA_ERRCODE_INVALID_PARAM - 参数校验失败 */ xmedia_s32 xmedia_ao_get_vqe_attr(ao_dev dev, ao_chn chn, ao_vqe_attr* attr); /* * 函数功能: 使能音频输出通道语音算法功能 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,需要的使能算法的通道ID * enable - 输入参数,使能状态 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_CONFIG - 没有设置算法参数 */ xmedia_s32 xmedia_ao_enable_vqe(ao_dev dev, ao_chn chn); /* * 函数功能: 禁用音频输出通道语音算法功能 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,需要的使能算法的通道ID * enable - 输出参数,使能状态 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_CONFIG - 没有设置算法参数 */ xmedia_s32 xmedia_ao_disable_vqe(ao_dev dev, ao_chn chn); /* * 函数功能: 设置音频输出设备通道的音量 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,需要设置的通道ID * volume - 输入参数,需要设置的音量 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NOT_ENABLE - 设备通道或者算法未使能 */ xmedia_s32 xmedia_ao_set_volume(ao_dev dev, ao_chn chn, xmedia_s32 volume); /* * 函数功能: 获取音频输出设备通道的音量 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,需要设置的通道ID * volume - 输出参数,获取的音量 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NULL_PTR - volume为空指针 * XMEDIA_ERRCODE_NOT_ENABLE - 设备通道或者算法未使能 */ xmedia_s32 xmedia_ao_get_volume(ao_dev dev, ao_chn chn, xmedia_s32* volume); /* * 函数功能: 设置音频输出设备通道绑定状态 * 函数参数: * dev - 输入参数,设备ID * dst_chn - 输入参数,ao的通道ID * module - 输入参数,绑定到ao的模块ID * src_chn - 输入参数,绑定到ao的模块通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID */ xmedia_s32 xmedia_ao_bind(ao_dev dev, ao_chn chn, xmedia_mod_id src_module, xmedia_u32 src_chn); /* * 函数功能: 设置音频输出设备通道解绑 * 函数参数: * dev - 输入参数,设备ID * dst_chn - 输入参数,ao的通道ID * module - 输入参数,绑定到ao的模块ID * src_chn - 输入参数,绑定到ao的模块通道ID * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID */ xmedia_s32 xmedia_ao_unbind(ao_dev dev, ao_chn chn, xmedia_mod_id src_module, xmedia_u32 src_chn); /* * 函数功能: 设置音频输出设备通道dump信息以及使能状态 * 函数参数: * dev - 输入参数,设备ID * chn - 输入参数,通道ID * dump - 输入参数,dump数据的存储路径以及size大小 * enable - 输入参数,dump功能使能状态 * 返回值: * XMEDIA_SUCCESS - 函数执行成功 * XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID * XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID * XMEDIA_ERRCODE_NULL_PTR - dump为空指针 */ xmedia_s32 xmedia_ao_dump(ao_dev dev, ao_chn chn, const audio_dump* dump, xmedia_bool enable); #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif