linuxOS_AP06/app/rkadk/include/rkadk_media_comm.h
2025-06-03 12:28:32 +08:00

228 lines
8.6 KiB
C

/*
* Copyright (c) 2021 Rockchip, Inc. All Rights Reserved.
*
* 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 __RKADK_MEDIA_COMM_H__
#define __RKADK_MEDIA_COMM_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "rk_comm_video.h"
#include "rk_comm_aiisp.h"
#include "rk_mpi_aenc.h"
#include "rk_mpi_adec.h"
#include "rk_mpi_ai.h"
#include "rk_mpi_mb.h"
#include "rk_mpi_sys.h"
#include "rk_mpi_venc.h"
#include "rk_mpi_vi.h"
#include "rk_mpi_vpss.h"
#include "rk_mpi_rgn.h"
#include "rk_mpi_cal.h"
#include "rk_mpi_mmz.h"
#include "rk_mpi_vo.h"
#include "rk_mpi_vdec.h"
#include "rk_mpi_avs.h"
#if defined(RV1106_1103) || defined(RV1103B)
#include "rk_mpi_amix.h"
#endif
#include "rkadk_common.h"
#include <stdbool.h>
#define RKADK_ENCODE_SENSE_IPC SCENE_0
#define RKADK_ENCODE_SENSE_CVR SCENE_2
/* audio capture maximum count */
#define RKADK_MEDIA_AI_MAX_CNT (1)
/* audio encoder maximum count */
#define RKADK_MEDIA_AENC_MAX_CNT (3 * RKADK_MAX_SENSOR_CNT)
/* video capture maximum count */
#define RKADK_MEDIA_VI_MAX_CNT (4 * RKADK_MAX_SENSOR_CNT)
/* video encoder maximum count */
#define RKADK_MEDIA_VENC_MAX_CNT (7 * RKADK_MAX_SENSOR_CNT)
/* vpss maximum count */
#define RKADK_MEDIA_VPSS_MAX_CNT (6 * RKADK_MAX_SENSOR_CNT)
/* vo maximum count */
#define RKADK_MEDIA_VO_MAX_CNT (6 * RKADK_MAX_SENSOR_CNT)
/* ai aenc maximum bind count */
#define RKADK_AI_AENC_MAX_BIND_CNT RKADK_MEDIA_AENC_MAX_CNT
/* vi venc maximum bind count */
#define RKADK_VI_VENC_MAX_BIND_CNT RKADK_MEDIA_VENC_MAX_CNT
/* vi vpss maximum bind count */
#define RKADK_VI_VPSS_MAX_BIND_CNT RKADK_MEDIA_VPSS_MAX_CNT
/* vpss venc maximum bind count */
#define RKADK_VPSS_VENC_MAX_BIND_CNT RKADK_MEDIA_VPSS_MAX_CNT
typedef struct {
RKADK_U32 u32ChnId;
VENC_STREAM_S stFrame;
} RKADK_MEDIA_VENC_DATA_S;
typedef void (*RKADK_MEDIA_VENC_DATA_PROC_FUNC)(RKADK_MEDIA_VENC_DATA_S stData,
RKADK_VOID *pHandle);
typedef void (*RKADK_MEDIA_AENC_DATA_PROC_FUNC)(AUDIO_STREAM_S stFrame,
RKADK_VOID *pHandle);
typedef struct {
AIISP_CALLBACK_FUNC_S stAiIspCallback; /* post isp callback function */
const RK_CHAR *pModelFilePath; /* post isp model file path */
RK_U32 u32FrameBufCnt; /* RW; frame buffer cnt */
} RKADK_POST_ISP_ATTR_S;
#define RKADK_BUFINFO(fmt, ...) RKADK_MEDIA_DumpBufinfo(fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__)
RKADK_S32 RKADK_MPI_SYS_Init();
RKADK_S32 RKADK_MPI_SYS_Exit();
bool RKADK_MPI_SYS_CHECK();
AUDIO_SOUND_MODE_E RKADK_AI_GetSoundMode(RKADK_U32 ch);
RKADK_S32 RKADK_MPI_AI_Init(AUDIO_DEV aiDevId, RKADK_S32 s32AiChnId,
AIO_ATTR_S *pstAiAttr, RKADK_VQE_MODE_E enMode,
const char *pVqeCfgPath, RKADK_U32 micType);
RKADK_S32 RKADK_MPI_AI_DeInit(AUDIO_DEV aiDevId, RKADK_S32 s32AiChnId,
RKADK_VQE_MODE_E enMode);
RKADK_S32 RKADK_MPI_AENC_Init(RKADK_S32 s32AencChnId,
AENC_CHN_ATTR_S *pstAencChnAttr);
RKADK_S32 RKADK_MPI_AENC_DeInit(RKADK_S32 s32AencChnId);
RKADK_S32 RKADK_MPI_VI_Init(RKADK_U32 u32CamId, RKADK_S32 s32ChnId,
VI_CHN_ATTR_S *pstViChnAttr);
RKADK_S32 RKADK_MPI_VI_DeInit(RKADK_U32 u32CamId, RKADK_S32 s32ChnId);
RKADK_S32 RKADK_MPI_VI_QueryCameraStatus(RKADK_U32 u32CamId);
RKADK_S32 RKADK_MPI_VENC_Init(RKADK_U32 u32CamId, RKADK_S32 s32ChnId,
VENC_CHN_ATTR_S *pstVencChnAttr);
RKADK_S32 RKADK_MPI_VENC_DeInit(RKADK_S32 s32ChnId);
RKADK_S32 RKADK_MPI_VPSS_Init(RKADK_S32 s32VpssGrp, RKADK_S32 s32VpssChn,
VPSS_GRP_ATTR_S *pstVpssGrpAttr, VPSS_CHN_ATTR_S *pstVpssChnAttr);
RKADK_S32 RKADK_MPI_VPSS_DeInit(RKADK_S32 s32VpssGrp, RKADK_S32 s32VpssChn);
RKADK_S32 RKADK_MPI_VO_Init(RKADK_S32 s32VoLay, RKADK_S32 s32VoDev, RKADK_S32 s32VoChn,
VO_PUB_ATTR_S *pstVoPubAttr, VO_VIDEO_LAYER_ATTR_S *pstLayerAttr,
VO_CHN_ATTR_S *pstChnAttr, RKADK_VO_SPLICE_MODE_E enSpliceMode,
RKADK_U32 u32DispBufLen);
RKADK_S32 RKADK_MPI_VO_DeInit(RKADK_S32 s32VoLay, RKADK_S32 s32VoDev, RKADK_S32 s32VoChn);
RKADK_S32 RKADK_MPI_SYS_Bind(const MPP_CHN_S *pstSrcChn,
const MPP_CHN_S *pstDestChn);
RKADK_S32 RKADK_MPI_SYS_UnBind(const MPP_CHN_S *pstSrcChn,
const MPP_CHN_S *pstDestChn);
PIXEL_FORMAT_E RKADK_MEDIA_GetRkPixelFormat(RKADK_FORMAT_E Format);
VO_INTF_TYPE_E RKADK_MEDIA_GetRkVoIntfTpye(RKADK_VO_INTF_TYPE_E enIntfType);
RKADK_CODEC_TYPE_E RKADK_MEDIA_GetCodecType(RK_CODEC_ID_E enType);
RK_CODEC_ID_E RKADK_MEDIA_GetRkCodecType(RKADK_CODEC_TYPE_E enType);
RKADK_S32 RKADK_MEDIA_SetRcAttr(VENC_RC_ATTR_S *pstRcAttr, RKADK_U32 u32Gop,
RKADK_U32 u32BitRate, RKADK_U32 u32SrcFrameRate,
RKADK_U32 u32DstFrameRate);
bool RKADK_MEDIA_CompareResolution(VENC_CHN_ATTR_S *pstRecAttr,
RKADK_U32 u32Width, RKADK_U32 u32Height);
bool RKADK_MEDIA_VencAttrCmp(VENC_CHN_ATTR_S *pstRecAttr,
RKADK_U32 u32Gop, RKADK_U32 u32DstFrameRate,
RKADK_U32 u32Bitrate);
RKADK_S32 RKADK_MEDIA_GetAencBuffer(MPP_CHN_S *pstChn,
RKADK_MEDIA_AENC_DATA_PROC_FUNC pfnDataCB,
RKADK_VOID *pHandle);
RKADK_S32
RKADK_MEDIA_StopGetAencBuffer(MPP_CHN_S *pstChn,
RKADK_MEDIA_AENC_DATA_PROC_FUNC pfnDataCB,
RKADK_VOID *pHandle);
RKADK_S32 RKADK_MEDIA_GetVencBuffer(MPP_CHN_S *pstChn,
RKADK_MEDIA_VENC_DATA_PROC_FUNC pfnDataCB,
RKADK_VOID *pHandle);
RKADK_S32
RKADK_MEDIA_StopGetVencBuffer(RKADK_U32 u32CamId, MPP_CHN_S *pstChn, bool bIsAovMode,
RKADK_MEDIA_VENC_DATA_PROC_FUNC pfnDataCB,
RKADK_VOID *pHandle);
RKADK_S32 RKADK_MEDIA_FrameBufMalloc(RKADK_FRAME_ATTR_S *pstFrameAttr);
RKADK_S32 RKADK_MEDIA_FrameFree(RKADK_FRAME_ATTR_S *pstFrameAttr);
bool RKADK_MEDIA_CheckFrameAttr(RKADK_FRAME_ATTR_S *pstFrameAttr);
bool RKADK_MEDIA_CheckIdrFrame(RKADK_CODEC_TYPE_E enCodecType,
VENC_DATA_TYPE_U uDataType);
RKADK_U16 RKADK_MEDIA_GetAudioBitWidth(AUDIO_BIT_WIDTH_E enBitWidth);
int RKADK_MEDIA_GetPixelFormat(PIXEL_FORMAT_E enPixelFormat, RKADK_CHAR *cPixFmt);
bool RKADK_MEDIA_EnableAencRegister(RKADK_CODEC_TYPE_E eCodecType);
RKADK_S32 RKADK_MEDIA_SetVencRotation(RKADK_U32 u32CamId,
ROTATION_E enRotation, RKADK_STREAM_TYPE_E enStreamType);
RKADK_S32 RKADK_MEDIA_QueryVencStatus(RKADK_U32 u32CamId, RKADK_STREAM_TYPE_E enStreamType);
RKADK_S32 RKADK_MEDIA_ToggleVencMirror(RKADK_U32 u32CamId,
RKADK_STREAM_TYPE_E enStrmType,
bool mirror);
RKADK_S32 RKADK_MEDIA_ToggleVencFlip(RKADK_U32 u32CamId,
RKADK_STREAM_TYPE_E enStrmType,
bool flip);
void RKADK_MEDIA_DumpBufinfo(const char *fmt, const char *fname, const int row, ...);
RKADK_S32 RKADK_MEDIA_EnablePostIsp(RKADK_U32 u32CamId, RKADK_STREAM_TYPE_E enStrmType,
RKADK_POST_ISP_ATTR_S *pstPostIspAttr);
RKADK_S32 RKADK_MEDIA_SetPostIspAttr(RKADK_U32 u32CamId,
RKADK_STREAM_TYPE_E enStrmType, bool bEnable,
RKADK_POST_ISP_ATTR_S *pstPostIspAttr);
RKADK_S32 RKADK_MEDIA_SetVencState(RKADK_U32 u32CamId, RKADK_S32 s32ChnId, bool state);
bool RKADK_MEDIA_VideoIsUseVpss(RKADK_U32 u32CamId, bool bEnableAvs, RKADK_U32 *u32VpssBufCnt,
RKADK_PRAAM_VI_ATTR_S vi_attr, RKADK_PARAM_VENC_ATTR_S attribute);
int RKADK_MEDIA_VencResetCheck(RKADK_U32 u32CamId, RKADK_PARAM_VENC_ATTR_S attribute);
int RKADK_MEDIA_VideoReset(RKADK_U32 u32CamId, RKADK_PRAAM_VI_ATTR_S vi_attr, RKADK_PARAM_VENC_ATTR_S attribute);
#ifdef __cplusplus
}
#endif
#endif