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

243 lines
8.3 KiB
C
Raw Normal View History

2024-05-07 10:09:20 +00:00
/******************************************************************************
Copyright (C), 2001-2016, Allwinner Tech. Co., Ltd.
******************************************************************************
File Name : AudioDec_Component.h
Version : Initial Draft
Author : Allwinner BU3-PD2 Team
Created : 2016/09/10
Last Modified :
Description : mpp component implement
Function List :
History :
******************************************************************************/
#ifndef __IPCLINUX_AUDIODEC_COMPONENT_H__
#define __IPCLINUX_AUDIODEC_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_adec.h"
//media internal common headers.
#include "media_common.h"
#include "mm_component.h"
#include "ComponentCommon.h"
#include "tmessage.h"
#include "tsemaphore.h"
#include "adecoder.h"
//------------------------------------------------------------------------------------
#define MAX_ADECODER_PORTS (2)
#define ADEC_FRAME_COUNT (64)
//#define DEBUG_SAVE_PCMDATA
typedef enum ADEC_PORT_INDEX_DEFINITION{
ADEC_PORT_INDEX_DEMUX = 0x0,
ADEC_OUT_PORT_INDEX_VRENDER = 0x1,
ADEC_PORT_INDEX_CLOCK = 0x2,
}ADEC_PORT_INDEX_DEFINITION;
struct AUDIODEC_INPUT_DATA
{
COMP_STATETYPE state;
pthread_mutex_t mStateLock;
pthread_cond_t mStateCond;
char mThreadName[32];
volatile BOOL mWaitAbsValidFlag;
int nRequestLen; //Set when not enough buffer for component A
struct list_head mIdleAbsList; //DMXPKT_NODE_T
struct list_head mReadyAbsList;
struct list_head mUsingAbsList;
int mNodeNum;
BOOL mbWaitAbsFullFlag;
pthread_mutex_t mAbsListLock;
pthread_cond_t mAbsFullCond;
struct AUDIODECDATATYPE *pAudioDecData;
message_queue_t cmd_queue;
pthread_t thread_id;
};
struct AUDIODECDATATYPE {
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_PARAM_PORTEXTRADEFINITIONTYPE sInPortExtraDef;
COMP_PARAM_PORTEXTRADEFINITIONTYPE sOutPortExtraDef;
COMP_INTERNAL_TUNNELINFOTYPE sInPortTunnelInfo;
COMP_INTERNAL_TUNNELINFOTYPE sOutPortTunnelInfo;
COMP_PARAM_BUFFERSUPPLIERTYPE sPortBufSupplier[MAX_ADECODER_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;
ADEC_CHN_ATTR_S mADecChnAttr;
//int mOutputFrameNotifyPipeFds[2];
int demux_type;
int mAudioInfoVersion;
AudioStreamInfo mAudioStreamInfo; //for inport non-tunnel, config steamInfo by hand!
int decode_mode;
//int codec_type;
int priv_flag; //CDX_COMP_PRIV_FLAGS_REINIT
BOOL mbEof;
int is_raw_music_mode;
int get_audio_info_flag; //if get audio info, after first decode, we get audio info, then set it to 0.
int audio_channel; //CEDARX_AUDIO_CHANNEL_STEREO
int volumegain;
int mute;
int enable_resample;
int mNoBitstreamCounter;
AudioDecoder* pDecoder;
BsInFor ad_cedar_info;
int force_exit;
int mFrameId;
struct list_head mIdleOutFrameList; //ADecCompOutputFrame
struct list_head mReadyOutFrameList; //for non-tunnel mode. when mOutputPortTunnelFlag == FALSE, use it to store decoded frames.
struct list_head mUsedOutFrameList; //for tunnel-mode; also for non-tunnel mode. when mOutputPortTunnelFlag == FALSE, use it to store user occupied frames.
int mFrameNodeNum; //ADecCompOutputFrame counter
volatile BOOL mWaitAbsInputFlag;
volatile BOOL mWaitPcmBufFlag;
volatile BOOL mWaitOutFrameFullFlag;
//volatile BOOL mWaitOutFrameFlag; //wait outFrame coming! same meaning with mWaitPcmBufFlag
volatile BOOL mWaitReadyFrameFlag; //for non-tunnel mode, wait frame ready, so can get it.
pthread_cond_t mReadyFrameCondition;
pthread_mutex_t mAbsInputMutex;
volatile BOOL mWaitEmptyAbsFlag; // for non-tunnel mode, wait enough space for one new bs when Abs buffer full or almost full
int mRequestAbsLen; // coming bitstream size
pthread_cond_t mEmptyAbsCondition;
pthread_mutex_t mOutFrameListMutex;
pthread_cond_t mOutFrameFullCondition;
pthread_cond_t mOutFrameCondition; //for non-tunnel mode, wait outFrame coming!
struct AUDIODEC_INPUT_DATA* pInputData;
#ifdef DEBUG_SAVE_PCMDATA
FILE* mPcmSaveFp;
int mPcmSize;
#endif
};
typedef struct AUDIODECDATATYPE AUDIODECDATATYPE;
typedef struct AUDIODEC_INPUT_DATA AUDIODEC_INPUT_DATA;
// below 3 put here tmp
//typedef enum CEDARX_AUDIO_CHANNEL_TYPE
//{
// CEDARX_AUDIO_CHANNEL_STEREO = 0,
// CEDARX_AUDIO_CHANNEL_LEFT ,
// CEDARX_AUDIO_CHANNEL_RIGHT,
//}CEDARX_AUDIO_CHANNEL_TYPE;
//enum CEDARXAUDIOFLAGSENUM
//{
// ADEC_DISABLE_AAC_PACKING = (1<<0),
//};
//typedef enum CDX_DECODE_MODE {
// CDX_DECODER_MODE_NORMAL = 0,
// CDX_DECODER_MODE_RAWMUSIC,
//}CDX_DECODE_MODE;
//private interface
ERRORTYPE AudioDecGetPortDefinition(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_INOUT COMP_PARAM_PORTDEFINITIONTYPE *pPortDef);
ERRORTYPE AudioDecSetPortDefinition(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_PARAM_PORTDEFINITIONTYPE *pPortDef);
ERRORTYPE AudioDecGetCompBufferSupplier(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_INOUT COMP_PARAM_BUFFERSUPPLIERTYPE *pPortBufSupplier);
ERRORTYPE AudioDecSetCompBufferSupplier(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_PARAM_BUFFERSUPPLIERTYPE *pPortBufSupplier);
ERRORTYPE AudioDecGetMPPChannelInfo(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT MPP_CHN_S *pChn);
ERRORTYPE AudioDecSetMPPChannelInfo(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN MPP_CHN_S *pChn);
//ERRORTYPE AudioDecGetChannelFd(
// PARAM_IN COMP_HANDLETYPE hComponent,
// PARAM_OUT int *pChnFd);
ERRORTYPE AudioDecGetTunnelInfo(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_INOUT COMP_INTERNAL_TUNNELINFOTYPE *pTunnelInfo);
ERRORTYPE AudioDecGetChnAttr(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT ADEC_CHN_ATTR_S *pChnAttr);
ERRORTYPE AudioDecSetChnAttr(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT ADEC_CHN_ATTR_S *pChnAttr);
//public interface
ERRORTYPE AudioDecSendCommand(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_COMMANDTYPE Cmd,
PARAM_IN unsigned int nParam1,
PARAM_IN void* pCmdData);
ERRORTYPE AudioDecGetState(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_OUT COMP_STATETYPE* pState);
ERRORTYPE AudioDecSetCallbacks(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_CALLBACKTYPE* pCallbacks,
PARAM_IN void* pAppData) ;
ERRORTYPE AudioDecGetConfig(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_INDEXTYPE nIndex,
PARAM_IN void* pComponentConfigStructure);
ERRORTYPE AudioDecSetConfig(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_INDEXTYPE nIndex,
PARAM_IN void* pComponentConfigStructure);
ERRORTYPE AudioDecComponentTunnelRequest(
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 AudioDecEmptyThisBuffer(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_BUFFERHEADERTYPE* pBuffer);
ERRORTYPE AudioDecFillThisBuffer(
PARAM_IN COMP_HANDLETYPE hComponent,
PARAM_IN COMP_BUFFERHEADERTYPE* pBuffer);
ERRORTYPE AudioDecComponentDeInit(PARAM_IN COMP_HANDLETYPE hComponent);
ERRORTYPE AudioDecComponentInit(PARAM_IN COMP_HANDLETYPE hComponent);
#endif /* __IPCLINUX_AUDIODEC_COMPONENT_H__ */