195 lines
8.4 KiB
C
195 lines
8.4 KiB
C
/******************************************************************************
|
|
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 <plat_defines.h>
|
|
#include <plat_errno.h>
|
|
#include <plat_math.h>
|
|
#include <plat_type.h>
|
|
|
|
//media api headers to app
|
|
#include <alsa_interface.h>
|
|
#include <mm_comm_aio.h>
|
|
#include <mm_common.h>
|
|
#include <mm_component.h>
|
|
#include <tmessage.h>
|
|
#include <tsemaphore.h>
|
|
#include <ConfigOption.h>
|
|
|
|
#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__ */
|