/* * Copyright 2022 Rockchip Electronics Co. LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef __SAMPLE_COMM_H__ #define __SAMPLE_COMM_H__ #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* End of #ifdef __cplusplus */ #include "loadbmp.h" #include "rk_debug.h" #include "rk_defines.h" #include "rk_mpi_adec.h" #include "rk_mpi_aenc.h" #include "rk_mpi_ai.h" #include "rk_mpi_ao.h" #include "rk_mpi_avs.h" #include "rk_mpi_cal.h" #include "rk_mpi_ivs.h" #include "rk_mpi_mb.h" #include "rk_mpi_rgn.h" #include "rk_mpi_sys.h" #include "rk_mpi_tde.h" #include "rk_mpi_vdec.h" #include "rk_mpi_venc.h" #include "rk_mpi_vi.h" #include "rk_mpi_vo.h" #include "rk_mpi_vpss.h" #ifdef ROCKIVA #include "rockiva/rockiva_ba_api.h" #include "rockiva/rockiva_common.h" #include "rockiva/rockiva_det_api.h" #include "rockiva/rockiva_face_api.h" #include "rockiva/rockiva_image.h" #endif #include "sample_comm_isp.h" /******************************************************* macro define *******************************************************/ #define RKAIQ #define RK_ALIGN(x, a) (((x) + (a)-1) & ~((a)-1)) #define RK_ALIGN_2(x) RK_ALIGN(x, 2) #define RK_ALIGN_16(x) RK_ALIGN(x, 16) #define RK_ALIGN_32(x) RK_ALIGN(x, 32) typedef void *(*Thread_Func)(void *param); /******************************************************* enum define *******************************************************/ typedef enum rk_CODEC_TYPE_E { RK_CODEC_TYPE_NONE = -1, // Audio RK_CODEC_TYPE_MP3, RK_CODEC_TYPE_MP2, RK_CODEC_TYPE_G711A, RK_CODEC_TYPE_G711U, RK_CODEC_TYPE_G726, // Video RK_CODEC_TYPE_H264, RK_CODEC_TYPE_H265, RK_CODEC_TYPE_JPEG, RK_CODEC_TYPE_MJPEG, RK_CODEC_TYPE_NB } CODEC_TYPE_E; typedef enum rk_GET_LDCH_MODE_E { RK_NONE_LDCH = 0, RK_GET_LDCH_BY_FILE, RK_GET_LDCH_BY_BUFF } GET_LDCH_MODE_E; /******************************************************* structure define *******************************************************/ typedef struct _rkMpiAICtx { RK_S32 s32loopCount; RK_CHAR *dstFilePath; AUDIO_DEV s32DevId; AI_CHN s32ChnId; RK_S32 s32ChnSampleRate; AIO_ATTR_S stAiAttr; AUDIO_FRAME_S stFrame; } SAMPLE_AI_CTX_S; typedef struct _rkMpiAOCtx { AUDIO_DEV s32DevId; AO_CHN s32ChnId; RK_S32 s32ChnSampleRate; AIO_ATTR_S stAoAttr; } SAMPLE_AO_CTX_S; typedef struct _rkMpiVICtx { RK_BOOL bWrapIfEnable; RK_BOOL bIfOpenEptz; RK_BOOL bIfIspGroupInit; RK_U32 u32BufferLine; RK_U32 u32Width; RK_U32 u32Height; RK_S32 s32loopCount; VI_DEV s32DevId; VI_PIPE u32PipeId; VI_CHN s32ChnId; VI_CROP_INFO_S stCropInfo; VI_DEV_ATTR_S stDevAttr; VI_DEV_BIND_PIPE_S stBindPipe; VI_CHN_ATTR_S stChnAttr; VI_SAVE_FILE_INFO_S stDebugFile; VIDEO_FRAME_INFO_S stViFrame; VI_CHN_STATUS_S stChnStatus; RK_CHAR *dstFilePath; } SAMPLE_VI_CTX_S; typedef struct _rkMpiVOCtx { RK_U32 u32DispBufLen; VO_CHN s32ChnId; VO_DEV s32DevId; VO_LAYER s32LayerId; VO_LAYER_MODE_E Volayer_mode; VO_PUB_ATTR_S stVoPubAttr; VO_VIDEO_LAYER_ATTR_S stLayerAttr; VO_CHN_ATTR_S stChnAttr; } SAMPLE_VO_CTX_S; typedef struct _rkMpiVENCCtx { RK_BOOL bSvcIfEnable; RK_BOOL bMotionDeblurIfEnable; RK_BOOL bWrapIfEnable; RK_BOOL bComboIfEnable; RK_U32 u32BufferLine; RK_U32 u32Width; RK_U32 u32Height; RK_U32 u32Fps; RK_U32 u32Gop; RK_U32 u32BitRate; RK_U32 u32Qfactor; RK_U32 u32ComboChnId; RK_U32 u32StreamBufCnt; RK_U32 u32BuffSize; RK_S32 s32loopCount; PIXEL_FORMAT_E enPixelFormat; CODEC_TYPE_E enCodecType; VENC_RC_MODE_E enRcMode; VENC_CHN s32ChnId; VENC_CHN_ATTR_S stChnAttr; VENC_STREAM_S stFrame; pthread_t getStreamThread; Thread_Func getStreamCbFunc; MB_POOL pool; RK_CHAR *srcFilePath; RK_CHAR *dstFilePath; RK_U32 enable_buf_share; } SAMPLE_VENC_CTX_S; typedef struct _rkMpiAENCCtx { RK_S32 s32loopCount; RK_CHAR *dstFilePath; AENC_CHN s32ChnId; AUDIO_STREAM_S stFrame; AENC_CHN_ATTR_S stChnAttr; } SAMPLE_AENC_CTX_S; typedef struct _rkMpiRGNCtx { const char *srcFileBmpName; RK_U32 u32BmpFormat; RK_U32 u32BgAlpha; RK_U32 u32FgAlpha; BITMAP_S stBitmap; MPP_CHN_S stMppChn; RECT_S stRegion; RK_U32 u32Color; RK_U32 u32Layer; RGN_HANDLE rgnHandle; RGN_ATTR_S stRgnAttr; RGN_CHN_ATTR_S stRgnChnAttr; } SAMPLE_RGN_CTX_S; typedef struct _rkMpiVPSSCtx { RK_S32 s32loopCount; VPSS_GRP s32GrpId; VPSS_CHN s32ChnId; RK_S32 s32RotationEx; RK_S32 s32GrpCropRatio; RK_S32 s32ChnCropRatio; VPSS_GRP_ATTR_S stGrpVpssAttr; VPSS_CROP_INFO_S stCropInfo; VIDEO_PROC_DEV_TYPE_E enVProcDevType; RK_S32 s32ChnRotation[VPSS_MAX_CHN_NUM]; VPSS_CROP_INFO_S stChnCropInfo[VPSS_MAX_CHN_NUM]; VPSS_ROTATION_EX_ATTR_S stRotationEx[VPSS_MAX_CHN_NUM]; VPSS_CHN_ATTR_S stVpssChnAttr[VPSS_MAX_CHN_NUM]; MB_POOL pool; RK_CHAR *srcFilePath; RK_CHAR *dstFilePath; VIDEO_FRAME_INFO_S stChnFrameInfos; } SAMPLE_VPSS_CTX_S; typedef struct _rkMpiAVSCtx { GET_LDCH_MODE_E eGetLdchMode; RK_S32 s32loopCount; RK_U32 u32SrcWidth; RK_U32 u32SrcHeight; RK_FLOAT fDistance; RK_U16 **pLdchMeshData; AVS_GRP s32GrpId; AVS_CHN s32ChnId; AVS_MOD_PARAM_S stAvsModParam; AVS_GRP_ATTR_S stAvsGrpAttr; AVS_OUTPUT_ATTR_S stAvsOutAttr; AVS_CHN_ATTR_S stAvsChnAttr[AVS_MAX_CHN_NUM]; VIDEO_FRAME_INFO_S stVideoFrame; RK_CHAR *dstFilePath; RK_CHAR *pInputYUVPath; } SAMPLE_AVS_CTX_S; typedef struct _rkMpiTDECtx { RK_U32 u32ChnId; RK_U32 u32TdeWidth; RK_U32 u32TdeHeight; RK_U32 u32SrcWidth; RK_U32 u32SrcHeight; PIXEL_FORMAT_E enSrcPixelFormat; COMPRESS_MODE_E enSrcCompMode; RK_U32 u32buffersize; RK_U32 u32BufferPoolCnt; TDE_HANDLE hHandle; TDE_SURFACE_S pstSrc; TDE_RECT_S pstSrcRect; TDE_SURFACE_S pstDst; TDE_RECT_S pstDstRect; MB_POOL tde_frame_pool; VIDEO_FRAME_INFO_S stVideoFrames; } SAMPLE_TDE_CTX_S; typedef struct _rkMpiIvsCtx { RK_S32 s32ChnId; IVS_CHN_ATTR_S stIvsAttr; } SAMPLE_IVS_CTX_S; #ifdef ROCKIVA typedef struct _rkMpiIvaCtx { RK_CHAR *pModelDataPath; RK_U32 u32ImageWidth; RK_U32 u32ImageHeight; RK_U32 u32DetectStartX; RK_U32 u32DetectStartY; RK_U32 u32DetectWidth; RK_U32 u32DetectHight; RK_U32 u32IvaDetectFrameRate; RockIvaHandle ivahandle; RockIvaImageTransform eImageTransform; RockIvaImageFormat eImageFormat; RockIvaDetModel eModeType; RockIvaBaTaskParams baParams; RockIvaFaceTaskParams faceParams; RockIvaInitParam commonParams; ROCKIVA_BA_ResultCallback resultCallback; ROCKIVA_FrameReleaseCallback releaseCallback; } SAMPLE_IVA_CTX_S; #endif /******************************************************* function announce *******************************************************/ void PrintStreamDetails(int chnId, int framesize); void SIGSEGV_handler(int signum, siginfo_t *sig_info, void *context); RK_S32 SAMPLE_COMM_VI_CreateChn(SAMPLE_VI_CTX_S *ctx); RK_S32 SAMPLE_COMM_VI_DestroyChn(SAMPLE_VI_CTX_S *ctx); RK_S32 SAMPLE_COMM_VI_GetChnFrame(SAMPLE_VI_CTX_S *ctx, void **pdata); RK_S32 SAMPLE_COMM_VI_ReleaseChnFrame(SAMPLE_VI_CTX_S *ctx); RK_S32 SAMPLE_COMM_AI_CreateChn(SAMPLE_AI_CTX_S *ctx); RK_S32 SAMPLE_COMM_AI_DestroyChn(SAMPLE_AI_CTX_S *ctx); RK_S32 SAMPLE_COMM_AI_GetFrame(SAMPLE_AI_CTX_S *ctx, void **pdata); RK_S32 SAMPLE_COMM_AI_ReleaseFrame(SAMPLE_AI_CTX_S *ctx); RK_S32 SAMPLE_COMM_VO_CreateChn(SAMPLE_VO_CTX_S *ctx); RK_S32 SAMPLE_COMM_VO_DestroyChn(SAMPLE_VO_CTX_S *ctx); RK_S32 SAMPLE_COMM_AO_CreateChn(SAMPLE_AO_CTX_S *ctx); RK_S32 SAMPLE_COMM_AO_DestroyChn(SAMPLE_AO_CTX_S *ctx); RK_S32 SAMPLE_COMM_VPSS_CreateChn(SAMPLE_VPSS_CTX_S *ctx); RK_S32 SAMPLE_COMM_VPSS_DestroyChn(SAMPLE_VPSS_CTX_S *ctx); RK_S32 SAMPLE_COMM_VPSS_GetChnFrame(SAMPLE_VPSS_CTX_S *ctx, void **pdata); RK_S32 SAMPLE_COMM_VPSS_ReleaseChnFrame(SAMPLE_VPSS_CTX_S *ctx); RK_S32 SAMPLE_COMM_AVS_CreateGrp(SAMPLE_AVS_CTX_S *ctx); RK_S32 SAMPLE_COMM_AVS_DestroyGrp(SAMPLE_AVS_CTX_S *ctx); RK_S32 SAMPLE_COMM_AVS_StartGrp(SAMPLE_AVS_CTX_S *ctx); RK_S32 SAMPLE_COMM_AVS_StopGrp(SAMPLE_AVS_CTX_S *ctx); RK_S32 SAMPLE_COMM_AVS_GetChnFrame(SAMPLE_AVS_CTX_S *ctx, void **pdata); RK_S32 SAMPLE_COMM_AVS_ReleaseChnFrame(SAMPLE_AVS_CTX_S *ctx); RK_S32 SAMPLE_COMM_VENC_CreateChn(SAMPLE_VENC_CTX_S *ctx); RK_S32 SAMPLE_COMM_VENC_GetStream(SAMPLE_VENC_CTX_S *ctx, void **pdata); RK_S32 SAMPLE_COMM_VENC_ReleaseStream(SAMPLE_VENC_CTX_S *ctx); RK_S32 SAMPLE_COMM_VENC_DestroyChn(SAMPLE_VENC_CTX_S *ctx); RK_S32 SAMPLE_COMM_AENC_CreateChn(SAMPLE_AENC_CTX_S *ctx); RK_S32 SAMPLE_COMM_AENC_GetStream(SAMPLE_AENC_CTX_S *ctx, void **pdata); RK_S32 SAMPLE_COMM_AENC_ReleaseStream(SAMPLE_AENC_CTX_S *ctx); RK_S32 SAMPLE_COMM_AENC_DestroyChn(SAMPLE_AENC_CTX_S *ctx); RK_S32 SAMPLE_COMM_RGN_CreateChn(SAMPLE_RGN_CTX_S *ctx); RK_S32 SAMPLE_COMM_RGN_DestroyChn(SAMPLE_RGN_CTX_S *ctx); RK_S32 SAMPLE_COMM_Bind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn); RK_S32 SAMPLE_COMM_UnBind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn); RK_S32 SAMPLE_COMM_GetBmpResolution(RK_CHAR *pBmpFile, RK_U32 *width, RK_U32 *height); #ifdef ROCKIVA RK_S32 SAMPLE_COMM_IVA_Create(SAMPLE_IVA_CTX_S *ctx); RK_S32 SAMPLE_COMM_IVA_Destroy(SAMPLE_IVA_CTX_S *ctx); #endif RK_S32 SAMPLE_COMM_IVS_Create(SAMPLE_IVS_CTX_S *ctx); RK_S32 SAMPLE_COMM_IVS_Destroy(RK_S32 s32IvsChnid); RK_S32 SAMPLE_COMM_TDE_Create(SAMPLE_TDE_CTX_S *ctx); RK_S32 SAMPLE_COMM_TDE_Handle(SAMPLE_TDE_CTX_S *ctx, VIDEO_FRAME_S *pStVFrame); RK_S32 SAMPLE_COMM_TDE_GetMB(SAMPLE_TDE_CTX_S *ctx); RK_S32 SAMPLE_COMM_TDE_ReleaseMB(SAMPLE_TDE_CTX_S *ctx); RK_S32 SAMPLE_COMM_TDE_Destroy(SAMPLE_TDE_CTX_S *ctx); RK_S32 SAMPLE_COMM_DumpMeminfo(RK_CHAR *callFunc, RK_S32 moduleTestType); RK_S32 SAMPLE_COMM_FillImage(RK_U8 *buf, RK_U32 width, RK_U32 height, RK_U32 hor_stride, RK_U32 ver_stride, PIXEL_FORMAT_E fmt, RK_U32 frame_count); RK_S32 SAMPLE_COMM_GetLdchMesh(RK_CHAR *cam0LdchPath, RK_CHAR *cam1LdchPath, RK_S32 s32MeshDataSize, RK_U16 **pLdchMesh); RK_VOID SAMPLE_COMM_CheckFd(RK_BOOL bStart); #ifdef __cplusplus #if __cplusplus } #endif #endif /* End of #ifdef __cplusplus */ #endif /* End of #ifndef __SAMPLE_COMMON_H__ */