/****************************************************************************** Copyright (C), 2001-2016, Allwinner Tech. Co., Ltd. ****************************************************************************** File Name : AOChannel_Component.h Version : Initial Draft Author : Allwinner BU3-PD2 Team Created : 2016/05/26 Last Modified : Description : mpi functions implement Function List : History : ******************************************************************************/ #ifndef __AO_CHANNEL_COMPONENT_H__ #define __AO_CHANNEL_COMPONENT_H__ //ref platform headers #include #include #include #include //media api headers to app #include #include #include //#include #include #include #include #include #include "ComponentCommon.h" #if (MPPCFG_SOFTDRC == OPTION_SOFTDRC_ENABLE) #include #endif //#if (MPPCFG_AGC == OPTION_AGC_ENABLE) //#include //#endif #ifdef CFG_AUDIO_EFFECT_RESAMPLE #include "aumixcom.h" #include "doResample.h" #endif #ifdef CFG_AUDIO_EFFECT_GAIN #include "auGaincom.h" #endif #ifdef CFG_AUDIO_EFFECT_EQ #include "eq.h" #endif #define AO_CHN_MAX_CACHE_FRAME (64) // keep same with ADEC_FRAME_COUNT #define MAX_AO_INPORTS 2 typedef enum AO_INPORT_SUFFIX_DEFINITION{ AO_INPORT_SUFFIX_CLOCK = 0, AO_INPORT_SUFFIX_AUDIO = 1, }AO_INPORT_SUFFIX_DEFINITION; typedef struct AOCompInputFrame { AUDIO_FRAME_S mAFrame; struct list_head mList; }AOCompInputFrame; typedef struct AO_CHN_DATA_S { COMP_STATETYPE state; pthread_mutex_t mStateLock; COMP_CALLBACKTYPE *pCallbacks; void *pAppData; COMP_HANDLETYPE hSelf; char mThreadName[32]; COMP_PORT_PARAM_TYPE sPortParam; COMP_PARAM_PORTDEFINITIONTYPE sPortDef[AO_CHN_MAX_PORTS]; COMP_INTERNAL_TUNNELINFOTYPE sPortTunnelInfo[AO_CHN_MAX_PORTS]; COMP_PARAM_BUFFERSUPPLIERTYPE sPortBufSupplier[AO_CHN_MAX_PORTS]; BOOL mInputPortTunnelFlag[MAX_AO_INPORTS]; BOOL mOutputPortTunnelFlag; //TRUE: tunnel mode; FALSE: non-tunnel mode. AO -> AI MPP_CHN_S mMppChnInfo; CompInternalMsgType eTCmd; pthread_t mThreadId; message_queue_t mCmdQueue; volatile BOOL start_to_play; volatile int priv_flag; int audio_rend_flag; PCM_CARD_TYPE_E card_id; int wait_time_out; BOOL is_ref_clock; BOOL av_sync; volatile int seek_flag; BOOL mbEof; AIO_ATTR_S mAioAttr; struct list_head mAudioInputFrameIdleList; // AOCompInputFrame struct list_head mAudioInputFrameReadyList; struct list_head mAudioInputFrameUsedList; int mFrameNodeNum; AOCompInputFrame *mpCurrentInputFrame; int mCurrentFrameUsedSize; BOOL mWaitInputFrameFlag; //1: no input frame from ADec, wait! pthread_mutex_t mInputFrameListMutex; BOOL mWaitOutputBufFlag; //1: no space in sound-card's RingBuf, wait! pthread_mutex_t mOutputBufMutex; BOOL mbEnableReSmp; char *mpReSmpOutBuf; int mReSmpOutBufSize; int mReSmpOutValidLen; void *mpResampler; //SpeexResamplerState* AUDIO_SAMPLE_RATE_E mReSmpInSampleRate; //input pcm data sampleRate, config to Resampler. BOOL mUseVqeLib; BOOL mUseDrcLib; BOOL mUseAgcLib; AO_VQE_CONFIG_S mVqeCfg; PCM_CONFIG_S *mpPcmCfg; //AIO_ATTR_S *mpAioAttr; //PcmBufferManager *mpPcmMgr; int mWaitingPlayDataFlag; cdx_sem_t mAllFrameRelSem; int mWaitAllFrameReleaseFlag; cdx_sem_t mWaitDrainPcmSem; BOOL mWaitDrainPcmSemFlag; #ifdef CFG_AUDIO_EFFECT_RESAMPLE Resampler *res; #endif #ifdef CFG_AUDIO_EFFECT_EQ void* equalizer; #endif volatile BOOL mSaveFileFlag; char *mpSaveFileFullPath; FILE *mFpSaveFile; unsigned int mSaveFileSize; void* mDrc; AO_DRC_CONFIG_S mDrcCfg; void *mpAgcHandle; //agc_handle AGC_FLOAT_CONFIG_S mAgcCfg; pthread_mutex_t mAgcLock; short *mpAgcTmpBuff; unsigned int mnAgcTmpBuffLen; BOOL mbMute; char *pMuteBuf; int nMuteBufSize; float mfVps; //[0.5, 4] char *mpVpsOutBuf; int mVpsOutBufSize; int mVpsOutValidLen; void *mpVpsSampleConverter; //sonicStream } AO_CHN_DATA_S; ERRORTYPE AOChannel_ComponentInit(PARAM_IN COMP_HANDLETYPE hComponent); #endif /* __AO_CHANNEL_COMPONENT_H__ */