196 lines
5.9 KiB
C
196 lines
5.9 KiB
C
#ifndef VMF_FEC_LAYOUT_H
|
|
#define VMF_FEC_LAYOUT_H
|
|
|
|
#include <stdint.h>
|
|
#include <vmf/video_source.h>
|
|
|
|
/* Opaque FEC handle */
|
|
typedef struct VMF_FEC_HANDLE_S VMF_FEC_HANDLE_T;
|
|
typedef struct VMF_FEC_INFO_S VMF_FEC_INFO_T;
|
|
|
|
/* FEC processing method */
|
|
typedef enum {
|
|
VMF_FEC_METHOD_GTR = 0,
|
|
VMF_FEC_METHOD_CGE,
|
|
VMF_FEC_METHOD_MAX
|
|
} VMF_FEC_METHOD;
|
|
|
|
/* FEC grid size (real values match SDK: 4/8/16/32) */
|
|
typedef enum {
|
|
VMF_FEC_GRID_4X4 = 4,
|
|
VMF_FEC_GRID_8X8 = 8,
|
|
VMF_FEC_GRID_16X16 = 16,
|
|
VMF_FEC_GRID_32X32 = 32,
|
|
VMF_FEC_GRID_64X64 = 64,
|
|
VMF_FEC_GRID_128X128= 128,
|
|
} VMF_FEC_GRID_SIZE_TYPE;
|
|
typedef VMF_FEC_GRID_SIZE_TYPE VMF_FEC_GRID_SIZE_E;
|
|
|
|
/* FEC coefficient mode */
|
|
typedef enum {
|
|
VMF_FEC_COEF_MODE_ORIG = 0,
|
|
VMF_FEC_COEF_MODE_AREA,
|
|
VMF_FEC_COEF_MODE_PTZ,
|
|
VMF_FEC_COEF_MODE_P360,
|
|
VMF_FEC_COEF_MODE_P180,
|
|
VMF_FEC_COEF_MODE_VR,
|
|
VMF_FEC_COEF_MODE_OBJ,
|
|
VMF_FEC_COEF_MODE_DUAL,
|
|
VMF_FEC_COEF_MODE_PT,
|
|
VMF_FEC_COEF_MODE_NULL,
|
|
VMF_FEC_COEF_MODE_NUM
|
|
} VMF_FEC_COEF_MODE;
|
|
|
|
/* FEC mode type (used by P180 / PTZ config structs) */
|
|
typedef enum {
|
|
VMF_FEC_MODE_AREA = 0,
|
|
VMF_FEC_MODE_PTZ_MODE,
|
|
VMF_FEC_MODE_PANO_180_ALL_DIRECTION,
|
|
VMF_FEC_MODE_PANO_180_ONE_DIRECTION,
|
|
VMF_FEC_MODE_PANO_180_TWO_DIRECTION,
|
|
VMF_FEC_MODE_PANO_360_FULL,
|
|
VMF_FEC_MODE_PANO_360_SEPE,
|
|
VMF_FEC_MODE_PANO_360_HALF,
|
|
VMF_FEC_MODE_LDC,
|
|
VMF_FEC_MODE_ORI,
|
|
VMF_FEC_MODE_VR_SPHERE,
|
|
VMF_FEC_MODE_VR_CYLINDER,
|
|
VMF_FEC_MODE_OBJECT,
|
|
VMF_FEC_MODE_PT = 14
|
|
} VMF_FEC_MODE_TYPE;
|
|
|
|
/* FEC app type */
|
|
typedef enum {
|
|
VMF_FEC_APP_CEILING = 0,
|
|
VMF_FEC_APP_TABLE = 1,
|
|
VMF_FEC_APP_WALL = 2,
|
|
VMF_FEC_APP_LDC,
|
|
VMF_FEC_APP_P720,
|
|
VMF_FEC_APP_DVS,
|
|
VMF_FEC_APP_CGE
|
|
} VMF_FEC_APP_TYPE;
|
|
typedef VMF_FEC_APP_TYPE VMF_FEC_APP_TYPE_E;
|
|
|
|
/* FEC lens type */
|
|
typedef enum {
|
|
VMF_FEC_LENS_STEREOGRAPHIC = 0,
|
|
VMF_FEC_LENS_EQUISOLIDANGLE,
|
|
VMF_FEC_LENS_EQUIDISTANT,
|
|
VMF_FEC_LENS_ORTHOGRAPHIC,
|
|
VMF_FEC_LENS_LDC,
|
|
VMF_FEC_LENS_NODISTORT,
|
|
VMF_FEC_LENS_USER_DEF
|
|
} VMF_FEC_LENS_TYPE;
|
|
|
|
/* Extra perspective-transform points (mirrors Extra_PT in fec_api.h) */
|
|
typedef struct {
|
|
unsigned int bExtraPtEn;
|
|
unsigned int dwX[4];
|
|
unsigned int dwY[4];
|
|
} VMF_FEC_EXTRA_PT_T;
|
|
|
|
/* Encoder specification */
|
|
typedef struct {
|
|
unsigned int bEncH264;
|
|
unsigned int bEncH265;
|
|
unsigned int bEncJPEG;
|
|
unsigned int bOthers;
|
|
} VMF_ENC_SPEC_T;
|
|
|
|
/* FEC layout config — full field layout from SDK fec_layout.h */
|
|
typedef struct {
|
|
unsigned int dwOutputId;
|
|
VMF_LAYOUT_T tLayout;
|
|
unsigned int bCoeffOnly;
|
|
VMF_FEC_GRID_SIZE_E eGridSize;
|
|
unsigned int dwClearBackColor;
|
|
VMF_FEC_METHOD eLayoutMethod;
|
|
VMF_ENC_SPEC_T tEncSpec;
|
|
unsigned int bDuplexMode;
|
|
unsigned int bEisMode;
|
|
} VMF_FEC_LYT_CONFIG_T;
|
|
|
|
/* FEC cell config — full field layout from SDK fec_layout.h */
|
|
typedef struct {
|
|
VMF_FEC_COEF_MODE eFecMode;
|
|
void *pFecConfig;
|
|
unsigned int dwFlag;
|
|
unsigned int dwIspLinePixels;
|
|
unsigned int bEisMode;
|
|
} VMF_FEC_CELL_CONFIG_T;
|
|
|
|
/* FEC original (passthrough) config */
|
|
typedef struct {
|
|
float fZoom;
|
|
float fDstOffsetX;
|
|
float fDstOffsetY;
|
|
float fDstXYRatio;
|
|
VMF_FEC_APP_TYPE eAppType;
|
|
void *ptRoi;
|
|
unsigned int dwOutRadius;
|
|
unsigned int eFECRotateType;
|
|
VMF_FEC_EXTRA_PT_T tExtraPt;
|
|
unsigned int dwSrcRadius;
|
|
} VMF_FEC_ORIG_CONFIG_T;
|
|
|
|
/* FEC PTZ (pan-tilt-zoom) config */
|
|
typedef struct {
|
|
float fPan;
|
|
float fTilt;
|
|
float fZoom;
|
|
float fFocalLength;
|
|
VMF_FEC_APP_TYPE eAppType;
|
|
VMF_FEC_MODE_TYPE eModeType;
|
|
VMF_FEC_LENS_TYPE eLensType;
|
|
void *ptRoi;
|
|
unsigned int dwOutRadius;
|
|
float fDstOffsetX;
|
|
float fDstOffsetY;
|
|
VMF_FEC_EXTRA_PT_T tExtraPt;
|
|
float fDstRotate;
|
|
unsigned int eFECRotateType;
|
|
} VMF_FEC_PTZ_CONFIG_T;
|
|
|
|
/* FEC panorama-180 config */
|
|
typedef struct {
|
|
float fTilt;
|
|
float fZoom;
|
|
float fSpin;
|
|
float fFocalLength;
|
|
float fRectCurvature;
|
|
float fRectSlope;
|
|
float fDstOffsetX;
|
|
float fDstOffsetY;
|
|
float fDstXYRatio;
|
|
unsigned int eFECRotateType;
|
|
VMF_FEC_MODE_TYPE eModeType;
|
|
VMF_FEC_LENS_TYPE eLensType;
|
|
void *ptRoi;
|
|
unsigned int dwOutRadius;
|
|
unsigned int dwOptionFlags;
|
|
VMF_FEC_EXTRA_PT_T tExtraPt;
|
|
} VMF_FEC_P180_CONFIG_T;
|
|
|
|
/* FEC projection-transform (PT) config */
|
|
typedef struct {
|
|
void *pCoeffData;
|
|
unsigned int dwCoeffDataSize;
|
|
void *pComplexCoeffData;
|
|
unsigned int dwComplexCoeffDataSize;
|
|
void *pMrfCoeffData;
|
|
unsigned int dwMrfCoeffDataSize;
|
|
} VMF_FEC_PT_CONFIG_T;
|
|
|
|
/* FEC APIs (real implementations are in libvmf.so on device) */
|
|
int VMF_FEC_Open(VMF_FEC_HANDLE_T **handle, const char *cal_path, const char *conf_path);
|
|
int VMF_FEC_Close(VMF_FEC_HANDLE_T *handle);
|
|
int VMF_FEC_SetMode(VMF_FEC_HANDLE_T *handle, unsigned int mode, unsigned int app_type);
|
|
int VMF_FEC_LYT_Single(VMF_VSRC_HANDLE_T *vsrc, VMF_FEC_LYT_CONFIG_T *lyt, VMF_FEC_CELL_CONFIG_T *cell);
|
|
int VMF_FEC_LYT_Single_Ext(VMF_VSRC_HANDLE_T *vsrc, VMF_FEC_LYT_CONFIG_T *lyt, VMF_FEC_CELL_CONFIG_T *cell,
|
|
unsigned int adwRectangles[2], unsigned int adwOffsets[2]);
|
|
|
|
VMF_FEC_INFO_T *VMF_LYT_FEC_Info_Init(VMF_VSRC_HANDLE_T *vsrc, VMF_FEC_LYT_CONFIG_T *lyt, VMF_FEC_CELL_CONFIG_T *cell);
|
|
int VMF_LYT_FEC_Info_Release(VMF_FEC_INFO_T *info);
|
|
|
|
#endif /* VMF_FEC_LAYOUT_H */
|