/****************************************************************************** Copyright (C), 2001-2016, Allwinner Tech. Co., Ltd. ****************************************************************************** File Name : audio_hw.h Version : Initial Draft Author : Allwinner BU3-PD2 Team Created : 2016/05/26 Last Modified : Description : mpi functions implement Function List : History : ******************************************************************************/ #ifndef __AUDIO_HW_H__ #define __AUDIO_HW_H__ //ref platform headers #include #include #include #include //media api headers to app #include #include #include #include #include #include #include #define AO_AUDIO_FRAME_ID_INVALID (0xFFFF8000) //#define ANS_LIBRARY_LSTM 0 // support two ans library: lstm and webrtc #if (MPPCFG_AEC == OPTION_AEC_ENABLE) #define AIO_DEV_MAX_NUM (2) #else #define AIO_DEV_MAX_NUM (1) #endif #define MAX_AO_CHLS 6 // the maximum number of ao channels that open alsa in the same time (mainly for mixer) typedef enum AI_CHANNEL_PORT_DEFINE_E { AI_CHN_PORT_INDEX_CAP_IN = 0, AI_CHN_PORT_INDEX_AO_IN, AI_CHN_PORT_INDEX_OUT_AENC, AI_CHN_PORT_INDEX_OUT_AO, AI_CHN_MAX_PORTS, } AI_CHANNEL_PORT_DEFINE_E; typedef enum AO_CHANNEL_PORT_DEFINE_E { AO_CHN_PORT_INDEX_IN_CLK = 0, AO_CHN_PORT_INDEX_IN_PCM, AO_CHN_PORT_INDEX_OUT_PLAY, AO_CHN_PORT_INDEX_OUT_AI, AO_CHN_MAX_PORTS, } AO_CHANNEL_PORT_DEFINE_E; #define CHECK_AI_DEV_ID(id) \ do { \ if (id < 0 || id > (AIO_DEV_MAX_NUM - 1)) { \ aloge("Invalid AudioDevId %d!", id); \ return ERR_AI_INVALID_DEVID; \ } \ } while (0) #define CHECK_AI_CHN_ID(id) \ do { \ if (id < 0 || id > (AIO_MAX_CHN_NUM - 1)) { \ aloge("Invalid AI channel ID %d!", id); \ return ERR_AI_INVALID_CHNID; \ } \ } while (0) #define CHECK_AO_DEV_ID(id) \ do { \ if (id < 0 || id > (AIO_DEV_MAX_NUM - 1)) { \ aloge("Invalid AudioDevId %d!", id); \ return ERR_AO_INVALID_DEVID; \ } \ } while (0) #define CHECK_AO_CHN_ID(id) \ do { \ if (id < 0 || id > (AIO_MAX_CHN_NUM - 1)) { \ aloge("Invalid AI channel ID %d!", id); \ return ERR_AO_INVALID_CHNID; \ } \ } while (0) typedef struct AI_CHANNEL_S { AUDIO_DEV mDevId; AI_CHN mId; MM_COMPONENTTYPE *mpComp; cdx_sem_t mSemCompCmd; MPPCallbackInfo mCallbackInfo; struct list_head mList; } AI_CHANNEL_S; typedef struct AO_CHANNEL_S { AO_CHN mId; MM_COMPONENTTYPE *mpComp; cdx_sem_t mSemCompCmd; MPPCallbackInfo mCallbackInfo; struct list_head mList; cdx_sem_t mSemWaitAudioBufRelease; } AO_CHANNEL_S; #ifdef __cplusplus extern "C" { #endif ERRORTYPE audioHw_Construct(void); ERRORTYPE audioHw_Destruct(void); ERRORTYPE audioHw_AI_Dev_lock(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_Dev_unlock(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_searchChannel_l(AUDIO_DEV AudioDevId, AI_CHN AiChn, AI_CHANNEL_S **pChn); ERRORTYPE audioHw_AI_searchChannel(AUDIO_DEV AudioDevId, AI_CHN AiChn, AI_CHANNEL_S **pChn); ERRORTYPE audioHw_AI_AddChannel_l(AUDIO_DEV AudioDevId, AI_CHANNEL_S *pChn); ERRORTYPE audioHw_AI_AddChannel(AUDIO_DEV AudioDevId, AI_CHANNEL_S *pChn); ERRORTYPE audioHw_AI_RemoveChannel(AUDIO_DEV AudioDevId, AI_CHANNEL_S *pChn); MM_COMPONENTTYPE *audioHw_AI_GetChnComp(PARAM_IN MPP_CHN_S *pMppChn); ERRORTYPE audioHw_AI_SetPubAttr(AUDIO_DEV AudioDevId, const AIO_ATTR_S *pstAttr); ERRORTYPE audioHw_AI_GetPubAttr(AUDIO_DEV AudioDevId, AIO_ATTR_S *pstAttr); ERRORTYPE audioHw_AI_ClrPubAttr(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_Enable(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_Disable(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_SetTrackMode(AUDIO_DEV AudioDevId, AUDIO_TRACK_MODE_E enTrackMode); ERRORTYPE audioHw_AI_GetTrackMode(AUDIO_DEV AudioDevId, AUDIO_TRACK_MODE_E *penTrackMode); ERRORTYPE audioHw_AI_GetPcmConfig(AUDIO_DEV AudioDevId, PCM_CONFIG_S **ppCfg); ERRORTYPE audioHw_AI_GetAIOAttr(AUDIO_DEV AudioDevId, AIO_ATTR_S **ppAttr); ERRORTYPE audioHw_AI_SetAdcDrc(AUDIO_DEV AudioDevId, int enable); ERRORTYPE audioHw_AI_SetAdcHpf(AUDIO_DEV AudioDevId, int enable); ERRORTYPE audioHw_AI_SetVolume(AUDIO_DEV AudioDevId, int s32VolumeDb); ERRORTYPE audioHw_AI_GetVolume(AUDIO_DEV AudioDevId, int *ps32VolumeDb); ERRORTYPE audioHw_AI_SetMute(AUDIO_DEV AudioDevId, int bEnable); ERRORTYPE audioHw_AI_GetMute(AUDIO_DEV AudioDevId, int *pbEnable); BOOL audioHw_AI_IsDevStarted(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_SetCallback(AUDIO_DEV AudioDevId, void *cookie, AudioDevCallbackFuncType pAudioDevCallback); ERRORTYPE audioHw_AO_Dev_lock(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AO_Dev_unlock(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AO_searchChannel_l(AUDIO_DEV AudioDevId, AO_CHN AoChn, AO_CHANNEL_S **pChn); ERRORTYPE audioHw_AO_searchChannel(AUDIO_DEV AudioDevId, AO_CHN AoChn, AO_CHANNEL_S **pChn); ERRORTYPE audioHw_AO_AddChannel_l(AUDIO_DEV AudioDevId, AO_CHANNEL_S *pChn); ERRORTYPE audioHw_AO_AddChannel(AUDIO_DEV AudioDevId, AO_CHANNEL_S *pChn); ERRORTYPE audioHw_AO_RemoveChannel(AUDIO_DEV AudioDevId, AO_CHANNEL_S *pChn); MM_COMPONENTTYPE *audioHw_AO_GetChnComp(PARAM_IN MPP_CHN_S *pMppChn); //ERRORTYPE AudioHw_AO_SetPubAttr(AUDIO_DEV AudioDevId, const AIO_ATTR_S *pstAttr); //ERRORTYPE AudioHw_AO_GetPubAttr(AUDIO_DEV AudioDevId, AIO_ATTR_S *pstAttr); //ERRORTYPE audioHw_AO_ClrPubAttr(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AO_SetChnPubAttr(AUDIO_DEV AudioDevId,AO_CHN AoChn, const AIO_ATTR_S *pstAttr); ERRORTYPE audioHw_AO_GetChnPubAttr(AUDIO_DEV AudioDevId, AO_CHN AoChn,AIO_ATTR_S *pstAttr); ERRORTYPE audioHw_AO_ClrChnPubAttr(AUDIO_DEV AudioDevId, AO_CHN AoChn); ERRORTYPE audioHw_AO_SetTrackMode(AUDIO_DEV AudioDevId,AO_CHN AoChn ,AUDIO_TRACK_MODE_E enTrackMode); ERRORTYPE audioHw_AO_GetTrackMode(AUDIO_DEV AudioDevId,AO_CHN AoChn, AUDIO_TRACK_MODE_E *penTrackMode); ERRORTYPE audioHw_AO_EnableChn(AUDIO_DEV AudioDevId,AO_CHN AoChn); ERRORTYPE audioHw_AO_DisableChn(AUDIO_DEV AudioDevId,AO_CHN AoChn); ERRORTYPE audioHw_AO_SetDacDrc(AUDIO_DEV AudioDevId, int enable); ERRORTYPE audioHw_AO_SetDacHpf(AUDIO_DEV AudioDevId, int enable); ERRORTYPE audioHw_AO_SetVolume(AUDIO_DEV AudioDevId, int s32VolumeDb); ERRORTYPE audioHw_AO_GetVolume(AUDIO_DEV AudioDevId, int *ps32VolumeDb); ERRORTYPE audioHw_AO_SetSoftVolume(AUDIO_DEV AudioDevId, int s32Volume); ERRORTYPE audioHw_AO_GetSoftVolume(AUDIO_DEV AudioDevId, int *ps32Volume); ERRORTYPE audioHw_AO_SetMute(AUDIO_DEV AudioDevId, BOOL bEnable, AUDIO_FADE_S *pstFade); ERRORTYPE audioHw_AO_GetMute(AUDIO_DEV AudioDevId, BOOL *pbEnable, AUDIO_FADE_S *pstFade); ERRORTYPE audioHw_AO_SetPA(AUDIO_DEV AudioDevId, BOOL bHighLevel); ERRORTYPE audioHw_AO_GetPA(AUDIO_DEV AudioDevId, BOOL *pbHighLevel); ERRORTYPE audioHw_AO_FillPcmRingBuf(AUDIO_DEV AudioDevId,AO_CHN AoChn, void* pData, int Len); ERRORTYPE audioHw_AO_DrainPcmRingBuf(AUDIO_DEV AudioDevId,AO_CHN AoChn); ERRORTYPE audioHw_AO_FeedPcmData(AUDIO_DEV AudioDevId,AO_CHN AoChn, AUDIO_FRAME_S *pFrm); ERRORTYPE audioHw_AO_GetPcmConfig(AUDIO_DEV AudioDevId,AO_CHN AoChn,PCM_CONFIG_S **ppCfg); ERRORTYPE audioHw_AO_GetAIOAttr(AUDIO_DEV AudioDevId,AO_CHN AoChn, AIO_ATTR_S **ppAttr); BOOL audioHw_AO_IsDevConfigured(AUDIO_DEV AudioDevId,AO_CHN AoChn); BOOL audioHw_AO_IsDevStarted(AUDIO_DEV AudioDevId,AO_CHN AoChn); ERRORTYPE audioHw_AI_SuspendAns(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_ResumeAns(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_SuspendAec(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_ResumeAec(AUDIO_DEV AudioDevId); ERRORTYPE audioHw_AI_SetAgcDb(AUDIO_DEV AudioDevId, float fDbGain); ERRORTYPE audioHw_AI_GetAgcDb(AUDIO_DEV AudioDevId, float *pfVolumeDb); #ifdef __cplusplus } #endif #endif /* __AUDIO_HW_H__ */