sdk-hwV1.3/external/eyesee-mpp/middleware/sun8iw21/media/include/component/AudioEnc_Component.h

178 lines
6.5 KiB
C
Executable File

/******************************************************************************
Copyright (C), 2001-2016, Allwinner Tech. Co., Ltd.
******************************************************************************
File Name : AudioEnc_Component.h
Version : Initial Draft
Author : Allwinner BU3-PD2 Team
Created : 2016/05/09
Last Modified :
Description : mpp component implement
Function List :
History :
******************************************************************************/
#ifndef __IPCLINUX_AUDIOENC_COMPONENT_H__
#define __IPCLINUX_AUDIOENC_COMPONENT_H__
//ref platform headers
#include "plat_type.h"
#include "plat_errno.h"
#include "plat_defines.h"
#include "plat_math.h"
//media api headers to app
#include "mm_common.h"
//#include "mm_comm_audio.h"
#include "mm_comm_aenc.h"
#include "mpi_aenc.h"
//media internal common headers.
#include "media_common.h"
#include "mm_component.h"
#include "ComponentCommon.h"
#include "tmessage.h"
#include "tsemaphore.h"
#include <aencoder.h>
//------------------------------------------------------------------------------------
//#define AUDIO_ENC_TIME_DEBUG
#define MAX_AENCODER_PORTS (2)
#define WAIT_PCMBUF_READY (200*1000) //us
#define AENC_FIFO_LEVEL (FIFO_LEVEL+1)
#define MAX_AUDIOPCMFRAME_NODE_NUM (16)
typedef struct AudioFrameManager
{
struct list_head mIdleList; //AEncCompInputFrameNode
struct list_head mReadyList;
}AudioFrameManager;
typedef struct AUDIOENCDATATYPE {
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 sInPortDef;
COMP_PARAM_PORTDEFINITIONTYPE sOutPortDef;
COMP_INTERNAL_TUNNELINFOTYPE sInPortTunnelInfo;
COMP_INTERNAL_TUNNELINFOTYPE sOutPortTunnelInfo;
COMP_PARAM_BUFFERSUPPLIERTYPE sPortBufSupplier[MAX_AENCODER_PORTS];
BOOL mInputPortTunnelFlag;
BOOL mOutputPortTunnelFlag; //TRUE: tunnel mode; FALSE: non-tunnel mode.
MPP_CHN_S mMppChnInfo;
pthread_t thread_id;
CompInternalMsgType eTCmd;
message_queue_t cmd_queue;
volatile int mNoInputPcmFlag; //1: aenclib:no input pcm data to be encoded.
volatile int mNoOutFrameFlag; //1: aenclib:no out frame to store encoded audio data.
AudioEncoder *pCedarA; //AUDIOENCCONTENT_t* pCedarA
//int mAudioEncodeType; //AUDIO_ENCODER_AAC_TYPE
AudioEncConfig mAudioInfo; //__audio_enc_inf_t
FILE *bs_fp;
int bs_sz;
FILE *pcm_fp;
int pcm_sz;
int64_t mSendPcmFailCnt; // for update pts
int64_t mFailPcmLen;
AENC_CHN_ATTR_S mEncChnAttr;
int mOutputFrameNotifyPipeFds[2];
AudioFrameManager mBufQ; //used for managing input pcm data.
struct list_head mIdleOutFrameList; //ENCODER_NODE_T, AEncCompOutputBuffer
struct list_head mReadyOutFrameList; //ENCODER_NODE_T, AEncCompOutputBuffer, for non-tunnel mode. when mOutputPortTunnelFlag == FALSE, use it to store encoded frames.
struct list_head mUsedOutFrameList; //ENCODER_NODE_T, AEncCompOutputBuffer, for non-tunnel mode. when mOutputPortTunnelFlag == FALSE, use it to store user occupied frames.
int mFrameNodeNum;
BOOL mWaitOutFrameFullFlag;
BOOL mWaitOutFrameFlag; //for non-tunnel mode, wait outFrame coming!
pthread_mutex_t mInputPcmMutex;
pthread_mutex_t mOutFrameListMutex;
pthread_cond_t mOutFrameFullCondition;
pthread_cond_t mOutFrameCondition; //for non-tunnel mode, wait outFrame coming!
long long first_audio_pts; //unit:us
long long last_chk_time;
} AUDIOENCDATATYPE;
//private interface
ERRORTYPE AudioEncGetPortDefinition(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_INOUT COMP_PARAM_PORTDEFINITIONTYPE *pPortDef);
ERRORTYPE AudioEncSetPortDefinition(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_PARAM_PORTDEFINITIONTYPE *pPortDef);
ERRORTYPE AudioEncGetCompBufferSupplier(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_INOUT COMP_PARAM_BUFFERSUPPLIERTYPE *pPortBufSupplier);
ERRORTYPE AudioEncSetCompBufferSupplier(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_PARAM_BUFFERSUPPLIERTYPE *pPortBufSupplier);
ERRORTYPE AudioEncGetMPPChannelInfo(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT MPP_CHN_S *pChn);
ERRORTYPE AudioEncSetMPPChannelInfo(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN MPP_CHN_S *pChn);
ERRORTYPE AudioEncGetChannelFd(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT int *pChnFd);
ERRORTYPE AudioEncGetTunnelInfo(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_INOUT COMP_INTERNAL_TUNNELINFOTYPE *pTunnelInfo);
ERRORTYPE AudioEncGetChnAttr(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT AENC_CHN_ATTR_S *pChnAttr);
ERRORTYPE AudioEncSetChnAttr(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT AENC_CHN_ATTR_S *pChnAttr);
//public interface
ERRORTYPE AudioEncSendCommand(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_COMMANDTYPE Cmd,
PARAM_IN unsigned int nParam1,
PARAM_IN void* pCmdData);
ERRORTYPE AudioEncGetState(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT COMP_STATETYPE* pState);
ERRORTYPE AudioEncSetCallbacks(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_CALLBACKTYPE* pCallbacks,
PARAM_IN void* pAppData) ;
ERRORTYPE AudioEncGetConfig(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_INDEXTYPE nIndex,
PARAM_IN void* pComponentConfigStructure);
ERRORTYPE AudioEncSetConfig(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_INDEXTYPE nIndex,
PARAM_IN void* pComponentConfigStructure);
ERRORTYPE AudioEncComponentTunnelRequest(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN unsigned int nPort,
PARAM_IN COMP_HANDLETYPE hTunneledComp,
PARAM_IN unsigned int nTunneledPort,
PARAM_INOUT COMP_TUNNELSETUPTYPE* pTunnelSetup);
ERRORTYPE AudioEncEmptyThisBuffer(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_BUFFERHEADERTYPE* pBuffer);
ERRORTYPE AudioEncFillThisBuffer(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_BUFFERHEADERTYPE* pBuffer);
ERRORTYPE AudioEncComponentDeInit(PARAM_IN COMP_HANDLETYPE hComponent);
ERRORTYPE AudioEncComponentInit(PARAM_IN COMP_HANDLETYPE hComponent);
#endif /* __IPCLINUX_AUDIOENC_COMPONENT_H__ */