178 lines
6.5 KiB
C
Executable File
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__ */
|
|
|