229 lines
8.1 KiB
C
Executable File
229 lines
8.1 KiB
C
Executable File
/******************************************************************************
|
|
Copyright (C), 2001-2016, Allwinner Tech. Co., Ltd.
|
|
******************************************************************************
|
|
File Name : VideoISE_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_VIDEOISE_COMPONENT_H__
|
|
#define __IPCLINUX_VIDEOISE_COMPONENT_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 "mm_comm_video.h"
|
|
#include <mm_comm_venc.h>
|
|
#include <mm_comm_ise.h>
|
|
#include <mm_common.h>
|
|
// #include "mpi_venc.h"
|
|
|
|
// media internal common headers.
|
|
#include "ComponentCommon.h"
|
|
// #include "ISE_lib.h"
|
|
#include "media_common.h"
|
|
#include "mm_component.h"
|
|
#include "tmessage.h"
|
|
#include "tsemaphore.h"
|
|
// #include "vencoder.h"
|
|
|
|
//#include "ISE_common.h"
|
|
#include "IEGcommon.h"
|
|
//#include "ISE_lib_bi.h"
|
|
#include "ISE_lib_mo.h"
|
|
//#include "ISE_lib_sti.h"
|
|
#include "ISE_lib_gdc.h"
|
|
|
|
//------------------------------------------------------------------------------------
|
|
|
|
//#define VIDEO_ENC_TIME_DEBUG
|
|
|
|
// #define MAX_ISE_PORTS (2)
|
|
|
|
#define ISE_FIFO_LEVEL 20
|
|
|
|
#ifndef YUV420
|
|
#define YUV420 0
|
|
#endif
|
|
#ifndef YUV422
|
|
#define YUV422 1
|
|
#endif
|
|
|
|
// input yuv item
|
|
typedef struct {
|
|
VIDEO_FRAME_INFO_S mInYuv;
|
|
int mInYuvPort;
|
|
struct list_head mList;
|
|
} VideoInYuv;
|
|
|
|
// input yuv item manage
|
|
typedef struct bufIseMrgQ_t {
|
|
// Chn0
|
|
struct list_head mIdleFrameList; // VideoFrameInfoNode
|
|
struct list_head mReadyFrameList;
|
|
int buf_unused; // ISE_FIFO_LEVEL
|
|
int mYUVTatolNum; // get yuv num
|
|
int mYUVProcessTatolNum; // process yuv num
|
|
int mYUVLossTatolNum;
|
|
|
|
// Chn1
|
|
struct list_head mIdleFrameList1; // VideoFrameInfoNode
|
|
struct list_head mReadyFrameList1;
|
|
int buf_unused1; // ENC_FIFO_LEVEL
|
|
int mYUVTatolNum1; // get yuv num
|
|
int mYUVProcessTatolNum1; // process yuv num
|
|
int mYUVLossTatolNum1;
|
|
} bufIseMrgQ_t;
|
|
|
|
// output yuv item
|
|
typedef struct {
|
|
AW_U32 mhResult;
|
|
int mIseOutId;
|
|
ISE_PROCOUT_PARA_MO mIseMoOut;
|
|
ISE_PROCOUT_PARA_GDC mIseGdcOut;
|
|
//ISE_PROCOUT_PARA_BI mIseBiOut;
|
|
//ISE_PROCOUT_PARA_STI mIseStiOut;
|
|
VIDEO_FRAME_INFO_S VFrame;
|
|
|
|
struct list_head mList;
|
|
} ISEOutBuf_t;
|
|
|
|
// output yuv item manage
|
|
typedef struct {
|
|
ISE_GRP mIseGrp;
|
|
ISE_CHN mIseChn;
|
|
int mBgfgmode_enbale;
|
|
|
|
// ISEOutBuf_t mIseOutBuf;
|
|
ISEOutBuf_t *mpOutBuf;
|
|
int mIseOutBufNum; // default num = 5
|
|
struct list_head mIdleOutYUVList; //ISEOutBuf_t
|
|
struct list_head mReadyOutYUVList; //
|
|
struct list_head mUsedOutYUVList; //
|
|
pthread_mutex_t mOutYUVListLock;
|
|
|
|
struct list_head mList;
|
|
} ISEChnNode_t;
|
|
|
|
typedef enum ISE_CHANNEL_PORT_DEFINE_E {
|
|
ISE_PORT_INDEX_CAP0_IN = 0,
|
|
ISE_PORT_INDEX_CAP1_IN,
|
|
ISE_PORT_INDEX_OUT0,
|
|
ISE_PORT_INDEX_OUT1,
|
|
ISE_PORT_INDEX_OUT2,
|
|
ISE_PORT_INDEX_OUT3,
|
|
ISE_MAX_PORT,
|
|
} ISE_CHANNEL_PORT_DEFINE_E;
|
|
|
|
typedef struct VIDEOISEDATATYPE {
|
|
COMP_STATETYPE state;
|
|
pthread_mutex_t mStateLock;
|
|
COMP_CALLBACKTYPE *pCallbacks;
|
|
void *pAppData;
|
|
COMP_HANDLETYPE hSelf;
|
|
|
|
COMP_PORT_PARAM_TYPE sPortParam;
|
|
COMP_PARAM_PORTDEFINITIONTYPE sInPortDef[ISE_MAX_PORT];
|
|
COMP_PARAM_PORTDEFINITIONTYPE sOutPortDef[ISE_MAX_PORT];
|
|
COMP_INTERNAL_TUNNELINFOTYPE sInPortTunnelInfo[ISE_MAX_PORT];
|
|
COMP_INTERNAL_TUNNELINFOTYPE sOutPortTunnelInfo[ISE_MAX_PORT];
|
|
COMP_PARAM_BUFFERSUPPLIERTYPE sPortBufSupplier[ISE_MAX_PORT];
|
|
BOOL mInputPortTunnelFlag;
|
|
BOOL mOutputPortTunnelFlag; // TRUE: tunnel mode; FALSE: non-tunnel mode.
|
|
int mOutputPortTunnelEnable[ISE_MAX_PORT];
|
|
int mInputPortTunnelEnable[ISE_MAX_PORT];
|
|
|
|
MPP_CHN_S mMppChnInfo;
|
|
pthread_t thread_id;
|
|
CompInternalMsgType eTCmd;
|
|
message_queue_t cmd_queue;
|
|
|
|
// ISE Handle
|
|
ISE_HANDLE_MO fish_handle;
|
|
ISE_HANDLE_BI dfish_handle_by_hardware;
|
|
//ISE_HANDLE_BI_SOFT dfish_handle_by_soft;
|
|
ISE_HANDLE_STI ise_handle;
|
|
ISE_HANDLE_GDC gdc_handle;
|
|
|
|
//ISE handle default config
|
|
ISE_CFG_PARA_MO fish_default_config;
|
|
ISE_CFG_PARA_GDC fish_gdc_default_config;
|
|
//ISE_CFG_PARA_BI dfish_default_config;
|
|
ISE ise_default_config;
|
|
|
|
// yuv data input
|
|
volatile int mNoInputFrameFlag; // 1: no input frame to be encoded.
|
|
bufIseMrgQ_t mBufQ; // used for managing camera frame, for uncompressed video frame.
|
|
pthread_mutex_t mutex_fifo_ops_lock;
|
|
|
|
int iseMode;
|
|
DFISH_HANDLE_MODE dfish_handle_mode;
|
|
ISE_GROUP_ATTR_S mIseGrpAttr;
|
|
ISE_CHN_ATTR_S mIseChnAttr;
|
|
int mChangeChnAttr;
|
|
int mISEFreq;
|
|
|
|
ISEChnNode_t mIseChnNode;
|
|
struct list_head mIdleChnAttrList; // Add, ISEChnNode_t*
|
|
struct list_head mValidChnAttrList; // Run, ISEChnNode_t*
|
|
int mIdleChnNodeNum; // Max = 32
|
|
int mValidChnNodeNum; // Max = 32
|
|
pthread_mutex_t mMutexChnListLock;
|
|
|
|
pthread_condattr_t condAttr[4];
|
|
BOOL mWaitOutFrameFlag[4];
|
|
pthread_cond_t mOutFrameFullCond[4];
|
|
pthread_mutex_t mOutDataMutex[4];
|
|
|
|
BOOL mWaitSetMoConfigFlag;
|
|
pthread_mutex_t mWaitSetMoConfigLock;
|
|
BOOL mWaitSetGdcConfigFlag;
|
|
pthread_mutex_t mWaitSetGdcConfigLock;
|
|
|
|
// struct ScMemOpsS *mMemOps;
|
|
} VIDEOISEDATATYPE;
|
|
|
|
// private interface
|
|
ERRORTYPE
|
|
VideoIseGetPortDefinition(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_INOUT COMP_PARAM_PORTDEFINITIONTYPE *pPortDef);
|
|
ERRORTYPE
|
|
VideoIseSetPortDefinition(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_IN COMP_PARAM_PORTDEFINITIONTYPE *pPortDef);
|
|
ERRORTYPE VideoIseGetCompBufferSupplier(PARAM_IN COMP_HANDLETYPE hComponent,
|
|
PARAM_INOUT COMP_PARAM_BUFFERSUPPLIERTYPE *pPortBufSupplier);
|
|
ERRORTYPE VideoIseSetCompBufferSupplier(PARAM_IN COMP_HANDLETYPE hComponent,
|
|
PARAM_IN COMP_PARAM_BUFFERSUPPLIERTYPE *pPortBufSupplier);
|
|
ERRORTYPE VideoIseGetMPPChannelInfo(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_OUT MPP_CHN_S *pChn);
|
|
ERRORTYPE VideoIseSetMPPChannelInfo(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_IN MPP_CHN_S *pChn);
|
|
ERRORTYPE VideoIseGetChnAttr(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_OUT ISE_CHN_ATTR_S *pChnAttr);
|
|
ERRORTYPE VideoIseSetChnAttr(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_OUT ISE_CHN_ATTR_S *pChnAttr);
|
|
ERRORTYPE
|
|
VideoIseGetStreamBufInfo(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_OUT VENC_STREAM_BUF_INFO_S *pStreamBufInfo);
|
|
// public interface
|
|
ERRORTYPE VideoIseSendCommand(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_IN COMP_COMMANDTYPE Cmd,
|
|
PARAM_IN unsigned int nParam1, PARAM_IN void *pCmdData);
|
|
ERRORTYPE VideoIseGetState(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_OUT COMP_STATETYPE *pState);
|
|
ERRORTYPE VideoIseSetCallbacks(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_IN COMP_CALLBACKTYPE *pCallbacks,
|
|
PARAM_IN void *pAppData);
|
|
ERRORTYPE VideoIseGetConfig(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_IN COMP_INDEXTYPE nIndex,
|
|
PARAM_IN void *pComponentConfigStructure);
|
|
ERRORTYPE VideoIseSetConfig(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_IN COMP_INDEXTYPE nIndex,
|
|
PARAM_IN void *pComponentConfigStructure);
|
|
ERRORTYPE VideoIseComponentTunnelRequest(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 VideoIseEmptyThisBuffer(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_IN COMP_BUFFERHEADERTYPE *pBuffer);
|
|
ERRORTYPE VideoIseFillThisBuffer(PARAM_IN COMP_HANDLETYPE hComponent, PARAM_IN COMP_BUFFERHEADERTYPE *pBuffer);
|
|
ERRORTYPE VideoIseComponentDeInit(PARAM_IN COMP_HANDLETYPE hComponent);
|
|
ERRORTYPE VideoIseComponentInit(PARAM_IN COMP_HANDLETYPE hComponent);
|
|
|
|
#endif /* __IPCLINUX_VIDEOENC_COMPONENT_H__ */
|