304 lines
13 KiB
C
Executable File
304 lines
13 KiB
C
Executable File
#ifndef __VIDEOINPUT_HW__
|
|
#define __VIDEOINPUT_HW__
|
|
|
|
//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_common.h>
|
|
#include <mm_component.h>
|
|
#include <tmessage.h>
|
|
#include <tsemaphore.h>
|
|
|
|
#include "mm_comm_vi.h"
|
|
#include <mm_comm_region.h>
|
|
|
|
//#include <OsdGroups.h>
|
|
#include <isp_comm.h>
|
|
#include "mpi_isp.h"
|
|
|
|
#define VI_CSI_NUM_MAX 3
|
|
#define VI_ISP_NUM_MAX 5
|
|
#define VI_VIPP_NUM_MAX 16 //must == HW_VIDEO_DEVICE_NUM.
|
|
#define VI_VIRCHN_NUM_MAX 4
|
|
|
|
#define VI_HIGH_FRAMERATE_STANDARD (60) //>60 is high frame rate.
|
|
#define MEDIA_DEVICE "/dev/media0"
|
|
|
|
//typedef enum VI_CHANNEL_PORT_DEFINE_E {
|
|
// VI_CHN_PORT_INDEX_CAP_IN = 0,
|
|
// VI_CHN_PORT_INDEX_FILE_IN, /* FILE_IN : Decode H26x,mpeg data, or yuv file input*/
|
|
// VI_CHN_PORT_INDEX_OUT,
|
|
// VI_CHN_MAX_PORTS,
|
|
//} VI_CHANNEL_PORT_DEFINE_E;
|
|
|
|
typedef struct VI_DMA_LBC_CMP_S {
|
|
unsigned char is_lossy;
|
|
unsigned char bit_depth;
|
|
unsigned char glb_enable;
|
|
unsigned char dts_enable;
|
|
unsigned char ots_enable;
|
|
unsigned char msq_enable;
|
|
unsigned int cmp_ratio_even;
|
|
unsigned int cmp_ratio_odd;
|
|
unsigned int mb_mi_bits[2];
|
|
unsigned char rc_adv[4];
|
|
unsigned char lmtqp_en;
|
|
unsigned char lmtqp_min;
|
|
unsigned char updata_adv_en;
|
|
unsigned char updata_adv_ratio;
|
|
unsigned int line_tar_bits[2];
|
|
} VI_DMA_LBC_CMP_S;
|
|
|
|
typedef struct VI_DMA_LBC_PARAM_S {
|
|
unsigned int frm_wth;
|
|
unsigned int frm_hgt;
|
|
unsigned int frm_x;
|
|
unsigned int frm_y;
|
|
unsigned int line_tar_bits[2];
|
|
unsigned int line_bits;
|
|
unsigned int frm_bits;
|
|
unsigned int mb_wth;
|
|
} VI_DMA_LBC_PARAM_S;
|
|
|
|
typedef struct VI_DMA_LBC_BS_S {
|
|
unsigned char *cur_buf_ptr;
|
|
unsigned int left_bits;
|
|
unsigned int cnt;
|
|
unsigned int sum;
|
|
} VI_DMA_LBC_BS_S;
|
|
|
|
typedef struct VI_DMA_LBC_CFG_S {
|
|
unsigned int frm_wth;
|
|
unsigned int frm_hgt;
|
|
unsigned int is_lossy;
|
|
unsigned int bit_depth;
|
|
unsigned int glb_enable;
|
|
unsigned int dts_enable;
|
|
unsigned int ots_enable;
|
|
unsigned int msq_enable;
|
|
unsigned int line_tar_bits[2];
|
|
unsigned int mb_min_bits[2];
|
|
unsigned int rc_adv[4];
|
|
unsigned int lmtqp_en;
|
|
unsigned int lmtqp_min;
|
|
unsigned int updataadv_en;
|
|
unsigned int updataadv_ratio;
|
|
} VI_DMA_LBC_CFG_S;
|
|
|
|
typedef struct VI_DMA_LBC_STM_S {
|
|
unsigned char *bs;
|
|
} VI_DMA_LBC_STM_S;
|
|
|
|
typedef struct VI_CHN_MAP_S {
|
|
int mThdRunning;
|
|
// VI_DEV mViDev;
|
|
/* DevX = SensorX; // X = 0,1,2,3 */
|
|
/* ChnX = ScaleX; // X = 0,1,2...16 */
|
|
VI_CHN mViChn; //vipp<<16 | virChn
|
|
MM_COMPONENTTYPE *mViComp; /* video vi component instance */
|
|
cdx_sem_t mSemCompCmd;
|
|
MPPCallbackInfo mCallbackInfo;
|
|
struct list_head mList;
|
|
} VI_CHN_MAP_S;
|
|
|
|
typedef struct
|
|
{
|
|
VI_DEV mVipp;
|
|
unsigned int mFrameBufId;
|
|
struct list_head mList;
|
|
}VippFrame;
|
|
typedef struct {
|
|
//pthread_t threadid;
|
|
//pthread_t threadid_gyro;
|
|
//pthread_t threadid_videoPorcess;
|
|
char mThreadName[32];
|
|
VI_DEV vipp_dev_id; /* vipp id num */
|
|
int vipp_enable; /* 1:enable; 0:disable. default=0. */
|
|
struct list_head mChnList; //element type: VI_CHN_MAP_S
|
|
pthread_mutex_t mLock;
|
|
|
|
MPPCallbackFuncType mMppCallback;
|
|
void *pAppData;
|
|
|
|
//int mVippTimeoutCnt;
|
|
int iDropFrameNum; //left frames to drop.
|
|
int64_t mLastGetFrameTm; //unit:ms
|
|
|
|
int refs[32];
|
|
VIDEO_FRAME_INFO_S VideoFrameInfo[32]; //store frame info from vipp.
|
|
pthread_mutex_t mRefsLock;
|
|
|
|
//for debug video frame occupy
|
|
struct list_head mIdleFrameList; //VippFrame
|
|
struct list_head mReadyFrameList;
|
|
pthread_mutex_t mFrameListLock;
|
|
|
|
//osd manage
|
|
pthread_mutex_t mRegionLock;
|
|
struct list_head mOverlayList; //ChannelRegionInfo
|
|
struct list_head mCoverList; //ChannelRegionInfo
|
|
struct list_head mOrlList; //ChannelRegionInfo, rectangle line.
|
|
|
|
//for osd reconstruct
|
|
//OsdGroups *mpOsdGroups;
|
|
|
|
|
|
int bTakeLongExpPic;
|
|
int iTakeLongExpRef;
|
|
pthread_mutex_t mLongExpLock;
|
|
|
|
long long last_v_frm_pts;
|
|
|
|
VI_ATTR_S mstAttr;
|
|
VI_DMA_LBC_CMP_S mLbcCmp;
|
|
unsigned char *mLbcFillDataAddr;
|
|
unsigned int mLbcFillDataLen;
|
|
} viChnManager;
|
|
|
|
typedef struct VIDevManager
|
|
{
|
|
pthread_mutex_t mManagerLock;
|
|
viChnManager *gpVippManager[VI_VIPP_NUM_MAX];
|
|
struct hw_isp_media_dev *media;
|
|
BOOL mSetFrequency; //TRUE:had set . FALSE: ready to set.
|
|
unsigned int mClockFrequency; //
|
|
pthread_t mCapThreadId; //use select() to traverse all isp_video_device.
|
|
message_queue_t mCmdQueue;
|
|
}VIDevManager;
|
|
|
|
//extern struct hw_isp_media_dev *media;
|
|
|
|
ERRORTYPE videoInputHw_Construct(int vipp_id);
|
|
ERRORTYPE videoInputHw_Destruct(int vipp_id);
|
|
ERRORTYPE videoInputHw_searchExistDev(VI_DEV vipp_id, viChnManager **ppViDev);
|
|
ERRORTYPE videoInputHw_RegisterCallback(int vipp_id, void *pAppData, MPPCallbackFuncType pMppCallBack);
|
|
ERRORTYPE videoInputHw_addChannel(int vipp_id, VI_CHN_MAP_S *pChn);
|
|
ERRORTYPE videoInputHw_removeChannel(int vipp_id, VI_CHN_MAP_S *pChn);
|
|
ERRORTYPE videoInputHw_searchExistDevVirChn(VI_DEV vipp_id,VI_CHN ViChn, VI_CHN_MAP_S **ppChn);
|
|
MM_COMPONENTTYPE *videoInputHw_GetChnComp(VI_DEV ViDev, VI_CHN ViChn);
|
|
VI_CHN_MAP_S *videoInputHw_CHN_MAP_S_Construct();
|
|
void videoInputHw_CHN_MAP_S_Destruct(VI_CHN_MAP_S *pChannel);
|
|
|
|
//ERRORTYPE videoInputHw_initVipp(VI_DEV Vipp_id);
|
|
ERRORTYPE videoInputHw_setVippEnable(VI_DEV Vipp_id);
|
|
ERRORTYPE videoInputHw_setVippDisable(VI_DEV Vipp_id);
|
|
ERRORTYPE videoInputHw_SetVippShutterTime(VI_DEV Vipp_id, VI_SHUTTIME_CFG_S *pShutTime);
|
|
int videoInputHw_IsLongShutterBusy(VI_DEV Vipp_id);
|
|
ERRORTYPE videoInputHw_IncreaseLongShutterRef(VI_DEV Vipp_id);
|
|
ERRORTYPE videoInputHw_DecreaseLongShutterRef(VI_DEV Vipp_id);
|
|
ERRORTYPE videoInputHw_searchVippStatus(VI_DEV Vipp_id, int *pStatus);
|
|
|
|
ERRORTYPE videoInputHw_Open_Media(); /*Open Media+ISP+CSI Device*/
|
|
ERRORTYPE videoInputHw_Close_Media(); /*Close Media+ISP+CSI Device*/
|
|
ERRORTYPE videoInputHw_ChnInit(int vipp_id); /*Open /dev/video[0~3] node*/
|
|
ERRORTYPE videoInputHw_ChnExit(int vipp_id); /*Close /dev/video[0~3] node*/
|
|
ERRORTYPE videoInputHw_SetChnAttr(VI_DEV vipp_id, VI_ATTR_S *pstAttr); /*Set /dev/video[0~3] node attr*/
|
|
ERRORTYPE videoInputHw_GetChnAttr(VI_DEV vipp_id, VI_ATTR_S *pstAttr); /*Get /dev/video[0~3] node attr*/
|
|
ERRORTYPE videoInputHw_SetVIFreq(VI_DEV ViDev, int nFreq);
|
|
ERRORTYPE videoInputHw_ChnEnable(int vipp_id); /*Enable /dev/video[0~3] node*/
|
|
ERRORTYPE videoInputHw_ChnDisable(int vipp_id); /*Disable /dev/video[0~3] node*/
|
|
ERRORTYPE videoInputHw_GetIspDev(VI_DEV Vipp_id, ISP_DEV *pIspDev);
|
|
ERRORTYPE videoInputHw_SetCrop(VI_DEV Vipp_id, const VI_CROP_CFG_S *pCropCfg);
|
|
ERRORTYPE videoInputHw_GetCrop(VI_DEV Vipp_id, VI_CROP_CFG_S *pCropCfg);
|
|
ERRORTYPE videoInputHw_SetSyncCtrl(VI_DEV Vipp_id, const struct csi_sync_ctrl *sync);
|
|
//ERRORTYPE videoInputHw_SetOsdMaskRegion(int *pvipp_id, VI_OsdMaskRegion *pstOsdMaskRegion);
|
|
//ERRORTYPE videoInputHw_UpdateOsdMaskRegion(int *pvipp_id, int onoff);
|
|
ERRORTYPE videoInputHw_SetRegions(VI_DEV vipp_id, RgnChnAttachDetailPack *pPack);
|
|
ERRORTYPE videoInputHw_DeleteRegions(VI_DEV vipp_id, RgnChnAttachDetailPack *pPack);
|
|
ERRORTYPE videoInputHw_UpdateOverlayBitmap(VI_DEV vipp_id, RGN_HANDLE RgnHandle, BITMAP_S *pBitmap);
|
|
ERRORTYPE videoInputHw_UpdateRegionChnAttr(VI_DEV ViDev, RGN_HANDLE RgnHandle, const RGN_CHN_ATTR_S *pRgnChnAttr);
|
|
ERRORTYPE videoInputHw_RefsReduceAndRleaseData(int vipp_id, VIDEO_FRAME_INFO_S *pstFrameInfo);
|
|
|
|
ERRORTYPE videoInputHw_GetFrameSyncStart(int *pvipp_id, int *pExpTime, unsigned int *pFrameid, int nMilliSec);
|
|
|
|
ERRORTYPE videoInputHw_IspAe_SetMode(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAe_SetExposureBias(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAe_SetExposure(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAe_SetISOSensitiveMode(int *pIspId, int mode);
|
|
ERRORTYPE videoInputHw_IspAe_SetISOSensitive(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAe_SetMetering(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAe_SetGain(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAe_SetEvIdx(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAe_SetLock(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAe_SetTable(int *pIspId, struct ae_table_info *ae_table);
|
|
ERRORTYPE videoInputHw_IspAe_RoiArea(int *pIspId, SIZE_S Res, RECT_S RoiRgn, AW_U16 ForceAeTarget, AW_U16 Enable);
|
|
ERRORTYPE videoInputHw_IspAe_RoiMeteringArea(int *pIspId, SIZE_S Res, RECT_S RoiRgn);
|
|
ERRORTYPE videoInputHw_IspAe_SetFaceAeCfg(int *pIspId, struct isp_face_ae_attr_info face_ae_info, SIZE_S Res);
|
|
ERRORTYPE videoInputHw_IspAe_GetFaceAeCfg(int *pIspId, struct isp_face_ae_attr_info *face_ae_info);
|
|
ERRORTYPE videoInputHw_Isp_ReadIspBin(int *pIspId, ISP_CFG_BIN_MODE ModeFlag, char *IspCfgBinPath);
|
|
ERRORTYPE videoInputHw_Isp_SetAiIsp(int *pIspId, isp_ai_isp_info *ai_isp_info_entity);
|
|
|
|
ERRORTYPE videoInputHw_IspAwb_SetMode(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAwb_SetColorTemp(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_IspAwb_SetStatsSyncMode(int *pIspId, ISP_AWB_STATS_MODE IspAwbStatsMode);
|
|
ERRORTYPE videoInputHw_Isp_SetFlicker(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetMirror(int *pvipp_id, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetFlip(int *pvipp_id, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetBrightness(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetContrast(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetSaturation(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetSharpness(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetHue(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetScene(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_SetIrStatus(int *pIspId, ISP_CFG_MODE ModeFlag);
|
|
ERRORTYPE videoInputHw_Isp_SetD3dLbcRatio(int *pIspId, unsigned int value);
|
|
ERRORTYPE videoInputHw_Isp_SetStitchMode(int *pIspId, enum stitch_mode_t stitch_mode);
|
|
ERRORTYPE videoInputHw_Isp_SetSensorFps(int *pIspId, int value);
|
|
//add by jaosn
|
|
ERRORTYPE videoInputHw_IspAe_GetExposureLine(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_IspAe_GetEvIdx(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAe_GetMaxEvIdx(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAe_GetAeLock(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAe_GetISOLumIdx(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAe_GetEvLv(int *pvipp_id, int *value);
|
|
ERRORTYPE videoInputHw_IspAe_GetEvLvAdj(int *pvipp_id, int *value);
|
|
ERRORTYPE videoInputHw_Isp_GetIrStatus(int *pvipp_id, int *value);
|
|
ERRORTYPE videoInputHw_Isp_GetIrAwbGain(int *pvipp_id, int *rgain_ir, int *bgain_ir);
|
|
ERRORTYPE videoInputHw_IspAwb_GetCurColorT(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAe_GetWeightLum(int *pvipp_id, int *value);
|
|
|
|
ERRORTYPE videoInputHw_IspAe_GetMode(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_IspAe_GetExposureBias(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_IspAe_GetExposure(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_IspAe_GetISOSensitiveMode(int *pIspId, int *mode);
|
|
ERRORTYPE videoInputHw_IspAe_GetISOSensitive(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAe_GetMetering(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_IspAe_GetGain(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_IspAwb_GetMode(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_IspAwb_GetColorTemp(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetFlicker(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetMirror(int *pvipp_id, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetFlip(int *pvipp_id, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetBrightness(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetContrast(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetSaturation(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetSharpness(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetHue(int *pIspId, int *pvalue);
|
|
ERRORTYPE videoInputHw_Isp_GetScene(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAwb_SetRGain(int *pIspId, int value); /*value: [256, 256 * 64]*/
|
|
ERRORTYPE videoInputHw_IspAwb_GetRGain(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAwb_SetBGain(int *pIspId, int value); /*value: [256, 256 * 64]*/
|
|
ERRORTYPE videoInputHw_IspAwb_GetBGain(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAwb_SetGrGain(int *pIspId, int value); /*value: [256, 256 * 64]*/
|
|
ERRORTYPE videoInputHw_IspAwb_GetGrGain(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_IspAwb_SetGbGain(int *pIspId, int value); /*value: [256, 256 * 64]*/
|
|
ERRORTYPE videoInputHw_IspAwb_GetGbGain(int *pIspId, int *value);
|
|
|
|
ERRORTYPE videoInputHw_Isp_SetWDR(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_GetWDR(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_Isp_SetNR(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_GetNR(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_Isp_Set3DNR(int *pIspId, int value);
|
|
ERRORTYPE videoInputHw_Isp_Get3DNR(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_Isp_GetPltmNextStren(int *pIspId, int *value);
|
|
ERRORTYPE videoInputHw_Isp_SetVe2IspParam(int *pIspId, struct enc_VencVe2IspParam *pVe2IspParam);
|
|
ERRORTYPE videoInputHw_Isp_GetIsp2VeParam(int *pIspId, struct enc_VencIsp2VeParam *pIsp2VeParam);
|
|
ERRORTYPE videoInputHw_Isp_SetSensorMipiSwitch(int *pIspId, struct sensor_mipi_switch_entity *switch_entity);
|
|
ERRORTYPE videoInputHw_Isp_GetSensorMipiSwitch(int *pIspId, struct sensor_mipi_switch_entity *switch_entity);
|
|
|
|
#endif
|