GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef COMM_LOG_H
|
||||
#define COMM_LOG_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* 函数功能:用户态日志管理初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 usr_log_init(xmedia_void);
|
||||
|
||||
|
||||
/*
|
||||
* 函数功能:用户态日志管理去初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 无
|
||||
*/
|
||||
xmedia_void usr_log_exit(xmedia_void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* COMM_LOG_H */
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef COMM_SYS_H
|
||||
#define COMM_SYS_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_errcode.h"
|
||||
#include "xmedia_debug.h"
|
||||
#include "common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#define MODULE_TRACE_SYS(level, fmt, ...) do { \
|
||||
MODULE_TRACE(level, MOD_ID_SYS, "[Func]:%s [Line]:%d [Info]:" fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* COMM_SYS_H */
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef COMM_VB_H
|
||||
#define COMM_VB_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "common.h"
|
||||
#include "xmedia_debug.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define VB_MAX_POOLS 512 // 每个进程中pool最大个数
|
||||
#define VB_MAX_POOL_ID 0xffff // pool_id最大值
|
||||
|
||||
#define MODULE_TRACE_VB(level, fmt, ...) do { \
|
||||
MODULE_TRACE(level, MOD_ID_VB, "[Func]:%s [Line]:%d [Info]:" fmt, \
|
||||
__FUNCTION__, __LINE__, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define VB_SUPPLEMENT_ISPINFO_MASK 0x1
|
||||
#define VB_SUPPLEMENT_VDEC_INFO_MASK (1 << 1)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* COMM_VB_H */
|
||||
|
||||
Executable
+235
@@ -0,0 +1,235 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef COMMON_H
|
||||
#define COMMON_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "defines.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ATTRIBUTE __attribute__((aligned (ALIGN_NUM)))
|
||||
|
||||
#define COMPAT_POINTER(ptr, type)\
|
||||
do {\
|
||||
xmedia_ulong ulAddr = (xmedia_ulong)ptr;\
|
||||
xmedia_u32 u32Addr = (xmedia_u32)ulAddr;\
|
||||
ptr = (type)(xmedia_ulong)u32Addr;\
|
||||
} while(0)
|
||||
|
||||
#define XMEDIA_INVALID_CHN (-1)
|
||||
#define XMEDIA_INVALID_WAY (-1)
|
||||
#define XMEDIA_INVALID_LAYER (-1)
|
||||
#define XMEDIA_INVALID_DEV (-1)
|
||||
#define XMEDIA_INVALID_VALUE (-1)
|
||||
#define XMEDIA_INVALID_TYPE (-1)
|
||||
|
||||
#define CCM_MATRIX_SIZE (9)
|
||||
#define CCM_MATRIX_NUM (7)
|
||||
|
||||
#define CLUT_R_NUM (17)
|
||||
#define CLUT_B_NUM (17)
|
||||
#define CLUT_G_NUM (17)
|
||||
#define ISP_CLUT_COEFACMCNT (4850)
|
||||
#define CUBIC_POINT_MAX (5)
|
||||
|
||||
typedef enum {
|
||||
MOD_ID_VB = 0,
|
||||
MOD_ID_SYS = 1,
|
||||
MOD_ID_LOG = 2,
|
||||
|
||||
MOD_ID_RGN = 3,
|
||||
MOD_ID_CHNL = 4,
|
||||
MOD_ID_VI = 5,
|
||||
MOD_ID_VO = 6,
|
||||
MOD_ID_DIS = 7,
|
||||
MOD_ID_AVS = 8,
|
||||
MOD_ID_VPSS = 9,
|
||||
MOD_ID_ISP = 10,
|
||||
MOD_ID_FB = 11,
|
||||
MOD_ID_GDC = 12,
|
||||
MOD_ID_TDE = 13,
|
||||
MOD_ID_VGS = 14,
|
||||
MOD_ID_MCF = 15,
|
||||
MOD_ID_HDMI = 16,
|
||||
|
||||
MOD_ID_VDEC = 17,
|
||||
MOD_ID_VENC = 18,
|
||||
MOD_ID_VPU = 19,
|
||||
MOD_ID_VALG = 20,
|
||||
MOD_ID_RC = 21,
|
||||
MOD_ID_JPEGE = 22,
|
||||
MOD_ID_JPEGD = 23,
|
||||
MOD_ID_H264E = 24,
|
||||
MOD_ID_H264D = 25,
|
||||
MOD_ID_H265E = 26,
|
||||
|
||||
MOD_ID_AIO = 29,
|
||||
MOD_ID_AI = 30,
|
||||
MOD_ID_AO = 31,
|
||||
MOD_ID_AENC = 32,
|
||||
MOD_ID_ADEC = 33,
|
||||
MOD_ID_ACOMM = 34,
|
||||
|
||||
MOD_ID_NPU = 35,
|
||||
MOD_ID_IVE = 36,
|
||||
MOD_ID_USER = 37,
|
||||
MOD_ID_PM = 38,
|
||||
MOD_ID_GYRODIS = 39,
|
||||
MOD_ID_IR = 40,
|
||||
MOD_ID_NPU_SVP = 41,
|
||||
MOD_ID_DDR_OST_QOS = 42,
|
||||
MOD_ID_CIPHER = 43,
|
||||
MOD_ID_AE = 45,
|
||||
MOD_ID_AWB = 46,
|
||||
MOD_ID_AF = 47,
|
||||
MOD_ID_MISC = 48,
|
||||
|
||||
MOD_ID_MAX
|
||||
} xmedia_mod_id;
|
||||
|
||||
#define MPP_MOD_VB "vb"
|
||||
#define MPP_MOD_SYS "sys"
|
||||
#define MPP_MOD_LOG "logmpp"
|
||||
|
||||
#define MPP_MOD_RGN "rgn"
|
||||
#define MPP_MOD_CHNL "chnl"
|
||||
#define MPP_MOD_VI "vi"
|
||||
#define MPP_MOD_VO "vo"
|
||||
#define MPP_MOD_DIS "dis"
|
||||
#define MPP_MOD_AVS "avs"
|
||||
#define MPP_MOD_VPSS "vpss"
|
||||
#define MPP_MOD_ISP "isp"
|
||||
#define MPP_MOD_FB "fb"
|
||||
#define MPP_MOD_GDC "gdc"
|
||||
#define MPP_MOD_TDE "tde"
|
||||
#define MPP_MOD_VGS "vgs"
|
||||
#define MPP_MOD_MCF "mcf"
|
||||
#define MPP_MOD_HDMI "hdmi"
|
||||
|
||||
#define MPP_MOD_VENC "venc"
|
||||
#define MPP_MOD_VDEC "vdec"
|
||||
#define MPP_MOD_VPU "vpu"
|
||||
#define MPP_MOD_VALG "valg"
|
||||
#define MPP_MOD_RC "rc"
|
||||
#define MPP_MOD_JPEGE "jpege"
|
||||
#define MPP_MOD_JPEGD "jpegd"
|
||||
#define MPP_MOD_H264E "h264e"
|
||||
#define MPP_MOD_H264D "h264d"
|
||||
#define MPP_MOD_H265E "h265e"
|
||||
|
||||
#define MPP_MOD_AIO "aio"
|
||||
#define MPP_MOD_AI "ai"
|
||||
#define MPP_MOD_AO "ao"
|
||||
#define MPP_MOD_AENC "aenc"
|
||||
#define MPP_MOD_ADEC "adec"
|
||||
#define MPP_MOD_ACOMM "acomm"
|
||||
|
||||
#define MPP_MOD_NPU "npu"
|
||||
#define MPP_MOD_IVE "ive"
|
||||
#define MPP_MOD_MD "md"
|
||||
|
||||
#define MPP_MOD_USR "usr"
|
||||
#define MPP_MOD_PM "pm"
|
||||
#define MPP_MOD_GYRODIS "gyrodis"
|
||||
#define MPP_MOD_IR "ir"
|
||||
#define MPP_MOD_NPU_SVP "svp"
|
||||
#define MPP_MOD_DDR_OST_QOS "ddr_ost_qos"
|
||||
#define MPP_MOD_CIPHER "cipher"
|
||||
#define MPP_MOD_OTP "otp"
|
||||
#define MPP_MOD_AE "ae"
|
||||
#define MPP_MOD_AWB "awb"
|
||||
#define MPP_MOD_AF "af"
|
||||
#define MPP_MOD_MISC "misc"
|
||||
|
||||
typedef enum {
|
||||
PT_PCMU = 0,
|
||||
PT_1016 = 1,
|
||||
PT_G721 = 2,
|
||||
PT_GSM = 3,
|
||||
PT_G723 = 4,
|
||||
PT_DVI4_8K = 5,
|
||||
PT_DVI4_16K = 6,
|
||||
PT_LPC = 7,
|
||||
PT_PCMA = 8,
|
||||
PT_G722 = 9,
|
||||
PT_S16BE_STEREO = 10,
|
||||
PT_S16BE_MONO = 11,
|
||||
PT_QCELP = 12,
|
||||
PT_CN = 13,
|
||||
PT_MPEGAUDIO = 14,
|
||||
PT_G728 = 15,
|
||||
PT_DVI4_3 = 16,
|
||||
PT_DVI4_4 = 17,
|
||||
PT_G729 = 18,
|
||||
PT_G711A = 19,
|
||||
PT_G711U = 20,
|
||||
PT_G726 = 21,
|
||||
PT_G729A = 22,
|
||||
PT_LPCM = 23,
|
||||
PT_CelB = 25,
|
||||
PT_JPEG = 26,
|
||||
PT_CUSM = 27,
|
||||
PT_NV = 28,
|
||||
PT_PICW = 29,
|
||||
PT_CPV = 30,
|
||||
PT_H261 = 31,
|
||||
PT_MPEGVIDEO = 32,
|
||||
PT_MPEG2TS = 33,
|
||||
PT_H263 = 34,
|
||||
PT_SPEG = 35,
|
||||
PT_MPEG2VIDEO = 36,
|
||||
PT_AAC = 37,
|
||||
PT_WMA9STD = 38,
|
||||
PT_HEAAC = 39,
|
||||
PT_PCM_VOICE = 40,
|
||||
PT_PCM_AUDIO = 41,
|
||||
PT_MP3 = 43,
|
||||
PT_ADPCMA = 49,
|
||||
PT_AEC = 50,
|
||||
PT_X_LD = 95,
|
||||
PT_H264 = 96,
|
||||
PT_D_GSM_HR = 200,
|
||||
PT_D_GSM_EFR = 201,
|
||||
PT_D_L8 = 202,
|
||||
PT_D_RED = 203,
|
||||
PT_D_VDVI = 204,
|
||||
PT_D_BT656 = 220,
|
||||
PT_D_H263_1998 = 221,
|
||||
PT_D_MP1S = 222,
|
||||
PT_D_MP2P = 223,
|
||||
PT_D_BMPEG = 224,
|
||||
PT_MP4VIDEO = 230,
|
||||
PT_MP4AUDIO = 237,
|
||||
PT_VC1 = 238,
|
||||
PT_JVC_ASF = 255,
|
||||
PT_D_AVI = 256,
|
||||
PT_DIVX3 = 257,
|
||||
PT_AVS = 258,
|
||||
PT_REAL8 = 259,
|
||||
PT_REAL9 = 260,
|
||||
PT_VP6 = 261,
|
||||
PT_VP6F = 262,
|
||||
PT_VP6A = 263,
|
||||
PT_SORENSON = 264,
|
||||
PT_H265 = 265,
|
||||
PT_VP8 = 266,
|
||||
PT_MVC = 267,
|
||||
PT_PNG = 268,
|
||||
PT_MJPEG = 270,
|
||||
PT_AMR = 1001,
|
||||
PT_AMRWB = 1003,
|
||||
PT_PRORES = 1006,
|
||||
PT_OPUS = 1007,
|
||||
PT_MAX
|
||||
} xmedia_payload_type;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
Executable
+466
@@ -0,0 +1,466 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef DEFINES_H
|
||||
#define DEFINES_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define CHIP_NAME_TEST 0x0
|
||||
|
||||
#define MPP_VER_PRIX "MPP_V"
|
||||
|
||||
#define ALIGN_NUM 4
|
||||
|
||||
#define LUMA_PHY_ALIGN 16
|
||||
|
||||
#define DEFAULT_ALIGN 16
|
||||
#define MAX_ALIGN 1024
|
||||
#define SEG_CMP_LENGTH 128
|
||||
|
||||
#define QUAD_POINT_NUM 4
|
||||
|
||||
#define MAX_MMZ_NAME_LEN 32
|
||||
|
||||
#define VO_MAX_NODE_NUM 16
|
||||
|
||||
#define VENC_MAX_NAME_LEN 16
|
||||
#define VENC_MAX_CHN_NUM 16
|
||||
#define VDEC_MAX_CHN_NUM 4
|
||||
#define VDEC_MAX_WIDTH 5376
|
||||
#define VDEC_MAX_HEIGHT 5376
|
||||
#define VDEC_MIN_WIDTH 128
|
||||
#define VDEC_MIN_HEIGHT 128
|
||||
#define VDEC_MAX_PIC_AREA (VDEC_MAX_WIDTH * VDEC_MAX_HEIGHT)
|
||||
#define VEDU_IP_NUM 1
|
||||
#define H264E_MAX_WIDTH 3840
|
||||
#define H264E_MAX_HEIGHT 3840
|
||||
#define H264E_MIN_WIDTH 128
|
||||
#define H264E_MIN_HEIGHT 128
|
||||
#define H265E_MAX_WIDTH 3840
|
||||
#define H265E_MAX_HEIGHT 3840
|
||||
#define H265E_MIN_WIDTH 128
|
||||
#define H265E_MIN_HEIGHT 128
|
||||
#define JPEGE_MAX_WIDTH 8192
|
||||
#define JPEGE_MAX_HEIGHT 8192
|
||||
#define JPEGE_MIN_WIDTH 120
|
||||
#define JPEGE_MIN_HEIGHT 120
|
||||
#define JPGE_MAX_NUM 1
|
||||
#define VENC_MAX_ROI_NUM 8
|
||||
#define H264E_MIN_HW_INDEX 0
|
||||
#define H264E_MAX_HW_INDEX 11
|
||||
#define H264E_MIN_VW_INDEX 0
|
||||
#define H264E_MAX_VW_INDEX 3
|
||||
#define VENC_QP_HISGRM_NUM 52
|
||||
#define MAX_TILE_NUM 1
|
||||
#define H265E_ADAPTIVE_FRAME_TYPE 4
|
||||
#define H265E_ADAPTIVE_QP_TYPE 5
|
||||
#define H265E_LCU_SIZE 32
|
||||
#define VENC_RGN_MAX_X 3838
|
||||
#define VENC_RGN_MAX_Y 2158
|
||||
#define VENC_RGN_MAX_WIDTH 3840
|
||||
#define VENC_RGN_MAX_HEIGHT 2160
|
||||
#define VECN_RGN_COVER_MIN_X 0
|
||||
#define VECN_RGN_COVER_MIN_Y 0
|
||||
|
||||
#define VENC_MIN_INPUT_FRAME_RATE 1
|
||||
#define VENC_MAX_INPUT_FRAME_RATE 240
|
||||
|
||||
#define VENC_MAX_RECEIVE_SOURCE 4
|
||||
|
||||
#define VENC_PIC_RECEIVE_SOURCE0 0
|
||||
#define VENC_PIC_RECEIVE_SOURCE1 1
|
||||
#define VENC_PIC_RECEIVE_SOURCE2 2
|
||||
#define VENC_PIC_RECEIVE_SOURCE3 3
|
||||
|
||||
#define RC_AQ_DQP_SIZE 16
|
||||
#define RC_BG_THR_SIZE 8
|
||||
#define RC_SKIN_THR_SIZE 8
|
||||
#define RC_COND_CNT 11
|
||||
#define MIN_BITRATE 2
|
||||
#define MAX_BITRATE 80 * 1024
|
||||
#define MAX_EXTRA_BITRATE 1000 * 1024
|
||||
|
||||
#define RGN_MIN_WIDTH 2
|
||||
#define RGN_MIN_HEIGHT 2
|
||||
|
||||
#define RGN_COVER_RECT_MIN_X 0
|
||||
#define RGN_COVER_RECT_MIN_Y 0
|
||||
#define RGN_COVER_RECT_MAX_X 8190
|
||||
#define RGN_COVER_RECT_MAX_Y 8190
|
||||
#define RGN_COVER_QUAD_MIN_X 0
|
||||
#define RGN_COVER_QUAD_MIN_Y 0
|
||||
#define RGN_COVER_QUAD_MAX_X 8192
|
||||
#define RGN_COVER_QUAD_MAX_Y 8192
|
||||
#define RGN_COVER_MAX_WIDTH 8192
|
||||
#define RGN_COVER_MAX_HEIGHT 8192
|
||||
|
||||
#define RGN_COVEREX_RECT_MIN_X 0
|
||||
#define RGN_COVEREX_RECT_MIN_Y 0
|
||||
#define RGN_COVEREX_RECT_MAX_X 3838
|
||||
#define RGN_COVEREX_RECT_MAX_Y 3838
|
||||
#define RGN_COVEREX_QUAD_MIN_X 0
|
||||
#define RGN_COVEREX_QUAD_MIN_Y 0
|
||||
#define RGN_COVEREX_QUAD_MAX_X 3840
|
||||
#define RGN_COVEREX_QUAD_MAX_Y 3840
|
||||
#define RGN_COVEREX_MAX_WIDTH 3840
|
||||
#define RGN_COVEREX_MAX_HEIGHT 3840
|
||||
#define RGN_COVEREX_MIN_THICK 2
|
||||
#define RGN_COVEREX_MAX_THICK 14
|
||||
|
||||
#define RGN_OVERLAY_MIN_X 0
|
||||
#define RGN_OVERLAY_MIN_Y 0
|
||||
#define RGN_OVERLAY_MAX_X 8190
|
||||
#define RGN_OVERLAY_MAX_Y 8190
|
||||
#define RGN_OVERLAY_MAX_WIDTH 8192
|
||||
#define RGN_OVERLAY_MAX_HEIGHT 8192
|
||||
|
||||
#define RGN_OVERLAYEX_MIN_X 0
|
||||
#define RGN_OVERLAYEX_MIN_Y 0
|
||||
#define RGN_OVERLAYEX_MAX_X 3838
|
||||
#define RGN_OVERLAYEX_MAX_Y 3838
|
||||
#define RGN_OVERLAYEX_MAX_WIDTH 3840
|
||||
#define RGN_OVERLAYEX_MAX_HEIGHT 3840
|
||||
|
||||
#define RGN_MOSAIC_MIN_X 0
|
||||
#define RGN_MOSAIC_MIN_Y 0
|
||||
#define RGN_MOSAIC_MAX_X 8184
|
||||
#define RGN_MOSAIC_MAX_Y 8184
|
||||
#define RGN_MOSAIC_MIN_WIDTH 8
|
||||
#define RGN_MOSAIC_MIN_HEIGHT 8
|
||||
#define RGN_MOSAIC_MAX_WIDTH 8192
|
||||
#define RGN_MOSAIC_MAX_HEIGHT 8192
|
||||
|
||||
#define RGN_MOSAICEX_MIN_X 0
|
||||
#define RGN_MOSAICEX_MIN_Y 0
|
||||
#define RGN_MOSAICEX_MAX_X 3832
|
||||
#define RGN_MOSAICEX_MAX_Y 3832
|
||||
#define RGN_MOSAICEX_MIN_WIDTH 8
|
||||
#define RGN_MOSAICEX_MIN_HEIGHT 8
|
||||
#define RGN_MOSAICEX_MAX_WIDTH 3840
|
||||
#define RGN_MOSAICEX_MAX_HEIGHT 3840
|
||||
|
||||
#define RGN_CORNER_RECT_MIN_X 0
|
||||
#define RGN_CORNER_RECT_MIN_Y 0
|
||||
#define RGN_CORNER_RECT_MAX_X 8190
|
||||
#define RGN_CORNER_RECT_MAX_Y 8190
|
||||
#define RGN_CORNER_RECT_MIN_WIDTH 2
|
||||
#define RGN_CORNER_RECT_MIN_HEIGHT 2
|
||||
#define RGN_CORNER_RECT_MAX_WIDTH 8192
|
||||
#define RGN_CORNER_RECT_MAX_HEIGHT 8192
|
||||
#define RGN_CORNER_RECT_MIN_THICK 2
|
||||
#define RGN_CORNER_RECT_MAX_THICK 16
|
||||
#define RGN_CORNER_RECT_MIN_HOR_LEN 2
|
||||
#define RGN_CORNER_RECT_MAX_HOR_LEN 4096
|
||||
#define RGN_CORNER_RECT_MIN_VER_LEN 2
|
||||
#define RGN_CORNER_RECT_MAX_VER_LEN 4096
|
||||
|
||||
#define RGN_CORNER_RECTEX_MIN_X 0
|
||||
#define RGN_CORNER_RECTEX_MIN_Y 0
|
||||
#define RGN_CORNER_RECTEX_MAX_X 3838
|
||||
#define RGN_CORNER_RECTEX_MAX_Y 3838
|
||||
#define RGN_CORNER_RECTEX_MIN_WIDTH 2
|
||||
#define RGN_CORNER_RECTEX_MIN_HEIGHT 2
|
||||
#define RGN_CORNER_RECTEX_MAX_WIDTH 3840
|
||||
#define RGN_CORNER_RECTEX_MAX_HEIGHT 3840
|
||||
#define RGN_CORNER_RECTEX_MIN_THICK 2
|
||||
#define RGN_CORNER_RECTEX_MAX_THICK 16
|
||||
#define RGN_CORNER_RECTEX_MIN_HOR_LEN 2
|
||||
#define RGN_CORNER_RECTEX_MAX_HOR_LEN 1920
|
||||
#define RGN_CORNER_RECTEX_MIN_VER_LEN 2
|
||||
#define RGN_CORNER_RECTEX_MAX_VER_LEN 1920
|
||||
|
||||
#define RGN_ALIGN 2
|
||||
|
||||
#define RGN_HANDLE_MAX 128
|
||||
#define RGN_MAX_BUF_NUM 6
|
||||
|
||||
#define RGN_MOSAIC_MAX_NUM_VPSS 0
|
||||
#define RGN_MOSAICEX_MAX_NUM_VPSS 4
|
||||
#define RGN_COVER_MAX_NUM_VPSS 0
|
||||
#define RGN_COVEREX_MAX_NUM_VPSS 8
|
||||
#define RGN_COVEREX_MAX_NUM_VO 1
|
||||
#define RGN_OVERLAY_MAX_NUM_VENC 8
|
||||
#define RGN_MOSAIC_MAX_NUM_VENC 8
|
||||
#define RGN_COVER_MAX_NUM_VENC 8
|
||||
#define RGN_CORNER_MAX_NUM_VENC 8
|
||||
#define RGN_OVERLAYEX_MAX_NUM_VPSS 8
|
||||
#define RGN_OVERLAYEX_MAX_NUM_VO 1
|
||||
#define RGN_CORNER_RECT_MAX_NUM_VPSS 0
|
||||
#define RGN_CORNER_RECTEX_MAX_NUM_VPSS 32
|
||||
#define RGN_CORNER_RECTEX_MAX_NUM_VO 32
|
||||
|
||||
|
||||
#define VENC_MAX_SSE_NUM 8
|
||||
#define SVP_MAX_SENSOR_NUM 2
|
||||
|
||||
#define VI_MAX_DEV_NUM 3
|
||||
#define VI_MAX_PHY_PIPE_NUM 4
|
||||
#define VI_MAX_VIR_PIPE_NUM 2
|
||||
#define VI_MAX_PIPE_NUM (VI_MAX_PHY_PIPE_NUM + VI_MAX_VIR_PIPE_NUM)
|
||||
|
||||
#define VI_MAX_STITCH_GRP_NUM 1
|
||||
#define VI_MAX_WDR_NUM 2
|
||||
|
||||
#define VI_MAX_PHY_CHN_NUM 1
|
||||
|
||||
#define VI_MAX_STITCH_NUM 1
|
||||
#define VI_MIPI_RX_NUM 2
|
||||
#define VI_MAX_GRP_NUM 2
|
||||
|
||||
#define VI_MAX_EXT_CHN_NUM 4
|
||||
#define VI_EXT_CHN_START VI_MAX_PHY_CHN_NUM
|
||||
#define VI_MAX_CHN_NUM (VI_MAX_PHY_CHN_NUM + VI_MAX_EXT_CHN_NUM)
|
||||
#define VI_MAX_EXTCHN_BIND_PER_CHN 8
|
||||
|
||||
#define VIPROC_IRQ_NUM 1
|
||||
#define VI_MAX_WDR_FRAME_NUM 2
|
||||
#define VI_MAX_NODE_NUM 2
|
||||
#define VIPROC_IP_NUM 1
|
||||
#define VICAP_IP_NUM 1
|
||||
|
||||
#define VI_MAX_SPLIT_NODE_NUM 2
|
||||
|
||||
#define VI_DEV_MIN_WIDTH 32
|
||||
#define VI_DEV_MIN_HEIGHT 32
|
||||
#define VI_DEV_MAX_WIDTH 3840
|
||||
#define VI_DEV_MAX_HEIGHT 3840
|
||||
#define VI_FPN_MAX_WIDTH 3840
|
||||
#define VI_FPN_MAX_HEIGHT VI_DEV_MAX_HEIGHT
|
||||
|
||||
#define VI_PIPE_OFFLINE_MIN_WIDTH 32
|
||||
#define VI_PIPE_OFFLINE_MIN_HEIGHT 32
|
||||
#define VI_PIPE_OFFLINE_MAX_WIDTH 3840
|
||||
#define VI_PIPE_OFFLINE_MAX_HEIGHT 3840
|
||||
|
||||
#define VI_PIPE_ONLINE_MIN_WIDTH 32
|
||||
#define VI_PIPE_ONLINE_MIN_HEIGHT 32
|
||||
|
||||
#define VI_PIPE_ONLINE_MAX_WIDTH 3200
|
||||
|
||||
#define VI_PIPE_ONLINE_MAX_HEIGHT 3840
|
||||
|
||||
#define VI_PHYCHN_OFFLINE_MIN_WIDTH 32
|
||||
#define VI_PHYCHN_OFFLINE_MIN_HEIGHT 32
|
||||
#define VI_PHYCHN_OFFLINE_MAX_WIDTH 3840
|
||||
#define VI_PHYCHN_OFFLINE_MAX_HEIGHT 3840
|
||||
|
||||
#define VI_PHYCHN_ONLINE_MIN_WIDTH 32
|
||||
#define VI_PHYCHN_ONLINE_MIN_HEIGHT 32
|
||||
|
||||
#define VI_PHYCHN_ONLINE_MAX_WIDTH 3200
|
||||
|
||||
#define VI_PHYCHN_ONLINE_MAX_HEIGHT 3840
|
||||
|
||||
#define VI_EXTCHN_MIN_WIDTH 32
|
||||
#define VI_EXTCHN_MIN_HEIGHT 32
|
||||
#define VI_EXTCHN_MAX_WIDTH 3840
|
||||
#define VI_EXTCHN_MAX_HEIGHT 3840
|
||||
|
||||
#define VI_PHY_CHN1_MAX_ZOOMIN 1
|
||||
#define VI_PHY_CHN1_MAX_ZOOMOUT 30
|
||||
#define VI_EXT_CHN_MAX_ZOOMIN 16
|
||||
#define VI_EXT_CHN_MAX_ZOOMOUT 30
|
||||
|
||||
#define VI_CMP_PARAM_SIZE 144
|
||||
|
||||
#define VI_VPSS_DEFAULT_EARLINE 128
|
||||
|
||||
#define DIS_PYRAMID_LAYER_NUM 5
|
||||
#define DIS_MAX_CHN_NUM 2
|
||||
#define DIS_MAX_IMAGE_WIDTH (3840)
|
||||
#define DIS_MIN_IMAGE_WIDTH (1280)
|
||||
#define DIS_MAX_IMAGE_HEIGHT (2160)
|
||||
#define DIS_MIN_IMAGE_HEIGHT (720)
|
||||
|
||||
#define VO_MIN_CHN_WIDTH 32
|
||||
#define VO_MIN_CHN_HEIGHT 32
|
||||
#define VO_MAX_ZOOM_RATIO 1000
|
||||
#define VO_MAX_DEV_NUM 4
|
||||
#define VO_MAX_LAYER_NUM 4
|
||||
#define VO_MAX_CHN_NUM 4
|
||||
#define VO_MULTI_MODE_MAX_CHN_NUM 2
|
||||
#define VO_MIN_TOLERATE 1
|
||||
#define VO_MAX_TOLERATE 100000
|
||||
#define VO_GAMMA_MAP_SIZE 256
|
||||
#define FB_MAX_LAYER_NUM 1
|
||||
|
||||
#define AVS_MAX_GRP_NUM 32
|
||||
#define AVS_PIPE_NUM 4
|
||||
#define AVS_MAX_CHN_NUM 2
|
||||
#define AVS_SPLIT_NUM 2
|
||||
#define AVS_SPLIT_PIPE_NUM 6
|
||||
#define AVS_CUBE_MAP_SURFACE_NUM 6
|
||||
|
||||
#define AVS_MAX_IN_WIDTH 8192
|
||||
#define AVS_MAX_IN_HEIGHT 8192
|
||||
#define AVS_MIN_IN_WIDTH 1280
|
||||
#define AVS_MIN_IN_HEIGHT 720
|
||||
|
||||
#define AVS_MAX_OUT_WIDTH 8192
|
||||
#define AVS_MAX_OUT_HEIGHT 8192
|
||||
#define AVS_MIN_OUT_WIDTH 256
|
||||
#define AVS_MIN_OUT_HEIGHT 256
|
||||
|
||||
#define AI_DEV_MAX_NUM 1
|
||||
#define AO_DEV_MIN_NUM 0
|
||||
#define AO_DEV_MAX_NUM 1
|
||||
#define AIO_MAX_NUM 1
|
||||
#define AENC_MAX_CHN_NUM 32
|
||||
#define ADEC_MAX_CHN_NUM 32
|
||||
|
||||
#define AI_MAX_CHN_NUM 2
|
||||
#define AO_MAX_CHN_NUM 3
|
||||
#define AO_SYSCHN_CHNID (AO_MAX_CHN_NUM - 1)
|
||||
|
||||
#define AIO_MAX_CHN_NUM ((AO_MAX_CHN_NUM > AI_MAX_CHN_NUM) ? AO_MAX_CHN_NUM : AI_MAX_CHN_NUM)
|
||||
|
||||
#define VPSS_IP_NUM 1
|
||||
#define VPSS_LINE_BUFFER 3200
|
||||
|
||||
#define VPSS_MAX_STITCH_NUM 4
|
||||
#define VPSS_MIN_STITCH_IN_WIDTH 640
|
||||
#define VPSS_MIN_STITCH_IN_HEIGHT 360
|
||||
|
||||
#define VPSS_MAX_2_STITCH_IN_WIDTH 2688
|
||||
#define VPSS_MAX_2_STITCH_IN_HEIGHT 2688
|
||||
#define VPSS_MAX_2_STITCH_OUT_WIDTH 5374
|
||||
#define VPSS_MAX_2_STITCH_OUT_HEIGHT 2688
|
||||
|
||||
#define VPSS_MAX_3_STITCH_IN_WIDTH 1920
|
||||
#define VPSS_MAX_3_STITCH_IN_HEIGHT 1920
|
||||
#define VPSS_MAX_3_STITCH_OUT_WIDTH 5756
|
||||
#define VPSS_MAX_3_STITCH_OUT_HEIGHT 1920
|
||||
|
||||
#define VPSS_MAX_4_STITCH_IN_WIDTH 1920
|
||||
#define VPSS_MAX_4_STITCH_IN_HEIGHT 1920
|
||||
#define VPSS_MAX_4_STITCH_OUT_WIDTH 7674
|
||||
#define VPSS_MAX_4_STITCH_OUT_HEIGHT 1920
|
||||
|
||||
#define VPSS_MIN_STITCH_OVERLAP_WIDTH 2
|
||||
#define VPSS_MIN_STITCH_OVERLAP_WIDTH_CURVE 16
|
||||
#define VPSS_MAX_STITCH_OVERLAP_WIDTH 1022
|
||||
#define VPSS_MAX_PIPE_NUM 8
|
||||
#define VPSS_MAX_ICHN_NUM 1
|
||||
#define VPSS_MAX_PHY_OCHN_NUM 3
|
||||
#define VPSS_MAX_EXT_OCHN_NUM 4
|
||||
#define VPSS_MAX_OCHN_NUM (VPSS_MAX_PHY_OCHN_NUM + VPSS_MAX_EXT_OCHN_NUM)
|
||||
|
||||
#define VPSS_WIDTH_ALIGN 2
|
||||
#define VPSS_HEIGHT_ALIGN 2
|
||||
|
||||
#define VPSS_MIN_ICHN_WIDTH 32
|
||||
#define VPSS_MIN_ICHN_HEIGHT 32
|
||||
#define VPSS_MAX_ICHN_WIDTH 3840
|
||||
#define VPSS_MAX_ICHN_HEIGHT 3840
|
||||
|
||||
#define VPSS_MIN_PHY_OCHN_WIDTH 32
|
||||
#define VPSS_MIN_PHY_OCHN_HEIGHT 32
|
||||
#define VPSS_MAX_PHY_OCHN_WIDTH 4032
|
||||
#define VPSS_MAX_PHY_OCHN_HEIGHT 3120
|
||||
|
||||
#define VPSS_MIN_EXT_OCHN_WIDTH 32
|
||||
#define VPSS_MIN_EXT_OCHN_HEIGHT 32
|
||||
#define VPSS_MAX_EXT_OCHN_WIDTH 3840
|
||||
#define VPSS_MAX_EXT_OCHN_HEIGHT 3840
|
||||
|
||||
#define VPSS_MAX_ONLINE_PHY_OCHN_ZOOMIN 2
|
||||
#define VPSS_MAX_PHY_OCHN_ZOOMIN 16
|
||||
#define VPSS_MAX_PHY_OCHN_ZOOMOUT 15
|
||||
#define VPSS_MAX_EXT_OCHN_ZOOMIN 16
|
||||
#define VPSS_MAX_EXT_OCHN_ZOOMOUT 15
|
||||
|
||||
#define VPSS_MAX_RGN_LUMA_NUM 8
|
||||
#define VPSS_MAX_RGN_LUMA_WIDTH 3840
|
||||
#define VPSS_MAX_RGN_LUMA_HEIGHT 2160
|
||||
#define VPSS_MAX_RGN_LUMA_EX_NUM 32
|
||||
#define VPSS_MAX_RGN_LUMA_EX_WIDTH 3840
|
||||
#define VPSS_MAX_RGN_LUMA_EX_HEIGHT 3840
|
||||
|
||||
#define VPSS_MAX_SPLICING_GRP_NUM 2
|
||||
|
||||
#define PCIV_MAX_CHN_NUM 16
|
||||
|
||||
#define MD_MAX_CHN 64
|
||||
#define MD_MAX_WIDTH 1920
|
||||
#define MD_MAX_HEIGHT 1080
|
||||
#define MD_MIN_WIDTH 64
|
||||
#define MD_MIN_HEIGHT 64
|
||||
|
||||
#define DPU_RECT_MAX_GRP_NUM 8
|
||||
#define DPU_RECT_MAX_PIPE_NUM 2
|
||||
#define DPU_RECT_MAX_CHN_NUM 2
|
||||
|
||||
#define DPU_RECT_IN_IMAGE_MAX_WIDTH 2048
|
||||
#define DPU_RECT_IN_IMAGE_MAX_HEIGHT 2048
|
||||
#define DPU_RECT_IN_IMAGE_MIN_WIDTH 128
|
||||
#define DPU_RECT_IN_IMAGE_MIN_HEIGHT 64
|
||||
#define DPU_RECT_OUT_IMAGE_MAX_WIDTH 1920
|
||||
#define DPU_RECT_OUT_IMAGE_MAX_HEIGHT 1080
|
||||
#define DPU_RECT_OUT_IMAGE_MIN_WIDTH 128
|
||||
#define DPU_RECT_OUT_IMAGE_MIN_HEIGHT 64
|
||||
|
||||
#define DPU_MATCH_MAX_GRP_NUM 8
|
||||
#define DPU_MATCH_MAX_PIPE_NUM 2
|
||||
#define DPU_MATCH_MAX_CHN_NUM 1
|
||||
|
||||
#define DPU_MATCH_IN_IMAGE_MAX_WIDTH 1920
|
||||
#define DPU_MATCH_IN_IMAGE_MAX_HEIGHT 1080
|
||||
#define DPU_MATCH_IN_IMAGE_MIN_WIDTH 128
|
||||
#define DPU_MATCH_IN_IMAGE_MIN_HEIGHT 64
|
||||
#define DPU_MATCH_OUT_IMAGE_MAX_WIDTH 1920
|
||||
#define DPU_MATCH_OUT_IMAGE_MAX_HEIGHT 1080
|
||||
#define DPU_MATCH_OUT_IMAGE_MIN_WIDTH 128
|
||||
#define DPU_MATCH_OUT_IMAGE_MIN_HEIGHT 64
|
||||
|
||||
#define FISHEYE_MIN_IN_IMAGE_WIDTH 1920
|
||||
#define FISHEYE_MIN_IN_IMAGE_HEIGHT 1080
|
||||
#define FISHEYE_MIN_OUT_IMAGE_WIDTH 640
|
||||
#define FISHEYE_MIN_OUT_IMAGE_HEIGHT 360
|
||||
|
||||
#define LDC_MIN_IMAGE_WIDTH 640
|
||||
#define LDC_MIN_IMAGE_HEIGHT 480
|
||||
|
||||
#define SPREAD_MIN_IMAGE_WIDTH 640
|
||||
#define SPREAD_MIN_IMAGE_HEIGHT 480
|
||||
|
||||
#define PMF_MIN_IMAGE_WIDTH 480
|
||||
#define PMF_MIN_IMAGE_HEIGHT 360
|
||||
|
||||
#define ROTATION_EX_MIN_IMAGE_WIDTH 640
|
||||
#define ROTATION_EX_MIN_IMAGE_HEIGHT 480
|
||||
|
||||
#define GDC_MAX_IMAGE_WIDTH 4608
|
||||
#define GDC_MAX_IMAGE_HEIGHT 4608
|
||||
#define GDC_IP_NUM 1
|
||||
#define GDC_FUSION_NUM 9
|
||||
|
||||
#define VGS_IP_NUM 1
|
||||
#define VGS0 0
|
||||
#define VGS1 1
|
||||
|
||||
#define TDE_IP_NUM 1
|
||||
|
||||
#define MCF_MAX_PIPE_NUM 2
|
||||
#define MCF_MAX_ICHN_NUM 2
|
||||
#define MCF_MAX_OCHN_NUM 1
|
||||
|
||||
#define MCF_MIN_IN_WIDTH 128
|
||||
#define MCF_MIN_IN_HEIGHT 128
|
||||
#define MCF_MAX_IN_WIDTH 4096
|
||||
#define MCF_MAX_IN_HEIGHT 2160
|
||||
|
||||
#define ISP_ISO_MODEL_MAX_NUM 1
|
||||
#define ISP_WDR_MAX_EXP_RATIO 32
|
||||
#define ISP_TRIG_DEV_MAX_NUM 1
|
||||
|
||||
#define AINR_MODEL_MAX_NUM ISP_ISO_MODEL_MAX_NUM
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,136 @@
|
||||
#ifndef __GFBG_IOCTL_H__
|
||||
#define __GFBG_IOCTL_H__
|
||||
|
||||
|
||||
#include <linux/fb.h>
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_errcode.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
GFBG_DRV_FMT_RGB565 = 0,
|
||||
GFBG_DRV_FMT_RGB888,
|
||||
GFBG_DRV_FMT_KRGB444,
|
||||
GFBG_DRV_FMT_KRGB555,
|
||||
|
||||
GFBG_DRV_FMT_KRGB888,
|
||||
GFBG_DRV_FMT_ARGB4444,
|
||||
GFBG_DRV_FMT_ARGB1555,
|
||||
GFBG_DRV_FMT_ARGB8888,
|
||||
|
||||
GFBG_DRV_FMT_ARGB8565,
|
||||
GFBG_DRV_FMT_RGBA4444,
|
||||
GFBG_DRV_FMT_RGBA5551,
|
||||
GFBG_DRV_FMT_RGBA5658,
|
||||
|
||||
GFBG_DRV_FMT_RGBA8888,
|
||||
GFBG_DRV_FMT_BGR565,
|
||||
GFBG_DRV_FMT_BGR888,
|
||||
GFBG_DRV_FMT_ABGR4444,
|
||||
|
||||
GFBG_DRV_FMT_ABGR1555,
|
||||
GFBG_DRV_FMT_ABGR8888,
|
||||
GFBG_DRV_FMT_ABGR8565,
|
||||
GFBG_DRV_FMT_KBGR444,
|
||||
|
||||
GFBG_DRV_FMT_KBGR555,
|
||||
GFBG_DRV_FMT_KBGR888,
|
||||
GFBG_DRV_FMT_1BPP,
|
||||
GFBG_DRV_FMT_2BPP,
|
||||
|
||||
GFBG_DRV_FMT_4BPP,
|
||||
GFBG_DRV_FMT_8BPP,
|
||||
GFBG_DRV_FMT_ACLUT44,
|
||||
GFBG_DRV_FMT_ACLUT88,
|
||||
|
||||
GFBG_DRV_FMT_PUYVY,
|
||||
GFBG_DRV_FMT_PYUYV,
|
||||
GFBG_DRV_FMT_PYVYU,
|
||||
GFBG_DRV_FMT_YUV888,
|
||||
|
||||
GFBG_DRV_FMT_AYUV8888,
|
||||
GFBG_DRV_FMT_YUVA8888,
|
||||
|
||||
GFBG_DRV_FMT_ARGB2101010,
|
||||
GFBG_DRV_FMT_ARGB10101010,
|
||||
GFBG_DRV_FMT_FP16,
|
||||
|
||||
GFBG_DRV_FMT_MAX
|
||||
} gfbg_drv_fmt;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GFBG_LAYER_ID_G0 = 0x0,
|
||||
GFBG_LAYER_ID_G1,
|
||||
GFBG_LAYER_ID_MAX
|
||||
} gfbg_layer_id;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool key_enable;
|
||||
xmedia_u32 key;
|
||||
} gfbg_drv_colorkey;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 x;
|
||||
xmedia_s32 y;
|
||||
} gfbg_drv_point;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool pixel_alpha;
|
||||
xmedia_bool global_alpha;
|
||||
xmedia_u8 alpha0;
|
||||
xmedia_u8 alpha1;
|
||||
xmedia_u8 global_alpha_value;
|
||||
xmedia_u8 reserved;
|
||||
} gfbg_drv_alpha;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u64 tv_sec;
|
||||
xmedia_u64 tv_msec;
|
||||
xmedia_u64 tv_usec;
|
||||
xmedia_u64 tv_nsec;
|
||||
} gfbg_drv_time_val;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 refresh_rate;
|
||||
gfbg_drv_time_val time_val;
|
||||
} gfbg_drv_vblank_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool key_rgb;
|
||||
xmedia_bool key_alpha;
|
||||
xmedia_bool global_alpha;
|
||||
xmedia_bool cmap;
|
||||
xmedia_bool has_cmap_reg;
|
||||
xmedia_bool col_fmt[GFBG_DRV_FMT_MAX];
|
||||
xmedia_bool pre_mul;
|
||||
xmedia_u32 max_width;
|
||||
xmedia_u32 max_height;
|
||||
xmedia_u32 min_width;
|
||||
xmedia_u32 min_height;
|
||||
} gfbg_drv_capability;
|
||||
|
||||
#define IOC_TYPE_GFBG 'F'
|
||||
|
||||
#define GFBG_GET_COLORKEY _IOR(IOC_TYPE_GFBG, 90, gfbg_drv_colorkey)
|
||||
#define GFBG_PUT_COLORKEY _IOW(IOC_TYPE_GFBG, 91, gfbg_drv_colorkey)
|
||||
#define GFBG_GET_ALPHA _IOR(IOC_TYPE_GFBG, 92, gfbg_drv_alpha)
|
||||
#define GFBG_PUT_ALPHA _IOW(IOC_TYPE_GFBG, 93, gfbg_drv_alpha)
|
||||
#define GFBG_GET_PRE_MULTIPLY _IOR(IOC_TYPE_GFBG, 94, xmedia_bool)
|
||||
#define GFBG_PUT_PRE_MULTIPLY _IOW(IOC_TYPE_GFBG, 95, xmedia_bool)
|
||||
#define GFBG_GET_SCREEN_POS _IOR(IOC_TYPE_GFBG, 96, gfbg_drv_point)
|
||||
#define GFBG_PUT_SCREEN_POS _IOW(IOC_TYPE_GFBG, 97, gfbg_drv_point)
|
||||
#define GFBG_GET_VBLANK _IOR(IOC_TYPE_GFBG, 98 ,gfbg_drv_vblank_info)
|
||||
#define GFBG_PUT_SHOW _IOW(IOC_TYPE_GFBG, 99, xmedia_bool)
|
||||
#define GFBG_GET_SHOW _IOR(IOC_TYPE_GFBG, 100, xmedia_bool)
|
||||
#define GFBG_GET_CAPABILITY _IOR(IOC_TYPE_GFBG, 101, gfbg_drv_capability)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef __LIST_H__
|
||||
#define __LIST_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef _LINUX_LIST_H
|
||||
|
||||
#define INIT_LIST_HEAD(ptr) \
|
||||
do { \
|
||||
(ptr)->next = (ptr); \
|
||||
(ptr)->prev = (ptr); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_HEAD_INIT(name) { &(name), &(name) }
|
||||
|
||||
struct list_head {
|
||||
struct list_head *next, *prev;
|
||||
};
|
||||
|
||||
static inline void __list_add(struct list_head * _new, struct list_head * prev, struct list_head * next)
|
||||
{
|
||||
next->prev = _new;
|
||||
_new->next = next;
|
||||
_new->prev = prev;
|
||||
prev->next = _new;
|
||||
}
|
||||
|
||||
static inline void list_add(struct list_head *_new, struct list_head *head)
|
||||
{
|
||||
__list_add(_new, head, head->next);
|
||||
}
|
||||
|
||||
static inline void list_add_tail(struct list_head *_new, struct list_head *head)
|
||||
{
|
||||
__list_add(_new, head->prev, head);
|
||||
}
|
||||
|
||||
static inline void __list_del(struct list_head * prev, struct list_head * next)
|
||||
{
|
||||
next->prev = prev;
|
||||
prev->next = next;
|
||||
}
|
||||
|
||||
static inline void list_del(struct list_head *entry)
|
||||
{
|
||||
__list_del(entry->prev, entry->next);
|
||||
}
|
||||
|
||||
static inline void list_del_init(struct list_head *entry)
|
||||
{
|
||||
__list_del(entry->prev, entry->next);
|
||||
INIT_LIST_HEAD(entry);
|
||||
}
|
||||
|
||||
static inline void list_move(struct list_head *list, struct list_head *head)
|
||||
{
|
||||
__list_del(list->prev, list->next);
|
||||
list_add(list, head);
|
||||
}
|
||||
|
||||
static inline void list_move_tail(struct list_head *list,
|
||||
struct list_head *head)
|
||||
{
|
||||
__list_del(list->prev, list->next);
|
||||
list_add_tail(list, head);
|
||||
}
|
||||
|
||||
static inline int list_empty(struct list_head *head)
|
||||
{
|
||||
return head->next == head;
|
||||
}
|
||||
|
||||
static inline void __list_splice(struct list_head *list,
|
||||
struct list_head *head)
|
||||
{
|
||||
struct list_head *first = list->next;
|
||||
struct list_head *last = list->prev;
|
||||
struct list_head *at = head->next;
|
||||
|
||||
first->prev = head;
|
||||
head->next = first;
|
||||
|
||||
last->next = at;
|
||||
at->prev = last;
|
||||
}
|
||||
|
||||
static inline void list_splice(struct list_head *list, struct list_head *head)
|
||||
{
|
||||
if (!list_empty(list))
|
||||
{
|
||||
__list_splice(list, head);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void list_splice_init(struct list_head *list, struct list_head *head)
|
||||
{
|
||||
if (!list_empty(list))
|
||||
{
|
||||
__list_splice(list, head);
|
||||
INIT_LIST_HEAD(list);
|
||||
}
|
||||
}
|
||||
|
||||
#define list_entry(ptr, type, member) \
|
||||
((type *)((uintptr_t)(ptr)-((unsigned long)(&((type *)1)->member) - 1)))
|
||||
|
||||
#define list_for_each(pos, head) \
|
||||
for (pos = (head)->next; pos != (head); pos = pos->next)
|
||||
|
||||
#define list_for_each_safe(pos, n, head) \
|
||||
for (pos = (head)->next, n = pos->next; pos != (head); \
|
||||
pos = n, n = pos->next)
|
||||
|
||||
#define get_first_item(attached, type, member) \
|
||||
((type *)((char *)((attached)->next)-(unsigned long)(&((type *)0)->member)))
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef MATH_FUN_H
|
||||
#define MATH_FUN_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
#define ABS(x) ((x) >= 0 ? (x) : (-(x)))
|
||||
#define _SIGN(x) ((x) >= 0 ? 1 : -1)
|
||||
#define CMP(x, y) (((x) == (y)) ? 0 : (((x) > (y)) ? 1 : -1))
|
||||
|
||||
#define MAX2(x, y) ((x) > (y) ? (x) : (y))
|
||||
#define MIN2(x, y) ((x) < (y) ? (x) : (y))
|
||||
#define MAX3(x, y, z) ((x) > (y) ? MAX2(x, z) : MAX2(y, z))
|
||||
#define MIN3(x, y, z) ((x) < (y) ? MIN2(x, z) : MIN2(y, z))
|
||||
#define MEDIAN(x, y, z) (((x) + (y) + (z) - MAX3(x, y, z)) - MIN3(x, y, z))
|
||||
#define MEAN2(x, y) (((x) + (y)) >> 1)
|
||||
|
||||
#define CLIP_MIN(x, min) (((x) >= (min)) ? (x) : (min))
|
||||
#define CLIP3(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
|
||||
#define CLIP_MAX(x, max) ((x) > (max) ? (max) : (x))
|
||||
#define WRAP_MAX(x, max, min) ((x) >= (max) ? (min) : (x))
|
||||
#define WRAP_MIN(x, min, max) ((x) <= (min) ? (max) : (x))
|
||||
#define VALUE_BETWEEN(x, min, max) (((x) >= (min)) && ((x) <= (max)))
|
||||
|
||||
#define MULTI_OF_2_POWER(x, a) (!((x) & ((a) - 1)))
|
||||
#define CEILING(x, a) (((x) + (a) - 1) / (a))
|
||||
|
||||
#define ALIGN_UP(x, a) ((((x) + ((a) - 1)) / (a)) * (a))
|
||||
#define XM_ALIGN_DOWN(x, a) (((x) / (a)) * (a))
|
||||
|
||||
#define DIV_UP(x, a) (((x) + ((a) - 1) ) / (a))
|
||||
|
||||
#define MPP_ALIGN_UP(x, a) ALIGN_UP(x, a)
|
||||
#define MPP_ALIGN_DOWN(x, a) XM_ALIGN_DOWN(x, a)
|
||||
|
||||
/******************************************************************************
|
||||
** Get the span between two unsinged number, such as
|
||||
** SPAN(xmedia_u32, 100, 200) is 200 - 100 = 100
|
||||
** SPAN(xmedia_u32, 200, 100) is 0xFFFFFFFF - 200 + 100
|
||||
** SPAN(xmedia_u64, 200, 100) is 0xFFFFFFFFFFFFFFFF - 200 + 100
|
||||
******************************************************************************/
|
||||
#define SPAN(type, begin, end) \
|
||||
({ \
|
||||
type b = (begin); \
|
||||
type e = (end); \
|
||||
(type)((b >= e) ? (b - e) : (b + ((~((type)0)) - e))); \
|
||||
})
|
||||
|
||||
#define ENDIAN32(x) \
|
||||
(((x) << 24) | \
|
||||
(((x) & 0x0000ff00) << 8) | \
|
||||
(((x) & 0x00ff0000) >> 8) | \
|
||||
(((x) >> 24) & 0x000000ff))
|
||||
|
||||
#define ENDIAN16(x) ((((x) << 8) & 0xff00) | (((x) >> 8) & 255))
|
||||
|
||||
__inline static xmedia_bool is_little_end(void)
|
||||
{
|
||||
union {
|
||||
xmedia_char test[4];
|
||||
xmedia_u32 u32Test;
|
||||
} end_test;
|
||||
|
||||
end_test.test[0] = 0x01;
|
||||
end_test.test[1] = 0x02;
|
||||
end_test.test[2] = 0x03;
|
||||
end_test.test[3] = 0x04;
|
||||
|
||||
return (end_test.u32Test > 0x01020304) ? (XMEDIA_TRUE) : (XMEDIA_FALSE);
|
||||
}
|
||||
|
||||
#define FRACTION32(de, nu) (((de) << 16) | (nu))
|
||||
#define NUMERATOR32(x) ((x) & 0xffff)
|
||||
#define DENOMINATOR32(x) ((x) >> 16)
|
||||
|
||||
#define RGB(r, g, b) ((((r) & 0xff) << 16) | (((g) & 0xff) << 8) | ((b) & 0xff))
|
||||
#define RGB_R(c) (((c) & 0xff0000) >> 16)
|
||||
#define RGB_G(c) (((c) & 0xff00) >> 8)
|
||||
#define RGB_B(c) ((c) & 0xff)
|
||||
|
||||
#define YUV(y, u, v) ((((y) & 0x03ff) << 20) | (((u) & 0x03ff) << 10) | ((v) & 0x03ff))
|
||||
#define YUV_Y(c) (((c) & 0x3ff00000) >> 20)
|
||||
#define YUV_U(c) (((c) & 0x000ffc00) >> 10)
|
||||
#define YUV_V(c) ((c) & 0x000003ff)
|
||||
|
||||
#define YUV_8BIT(y, u, v) ((((y) & 0xff) << 16) | (((u) & 0xff) << 8) | ((v) & 0xff))
|
||||
#define YUV_8BIT_Y(c) (((c) & 0xff0000) >> 16)
|
||||
#define YUV_8BIT_U(c) (((c) & 0xff00) >> 8)
|
||||
#define YUV_8BIT_V(c) ((c) & 0xff)
|
||||
|
||||
__inline static xmedia_void rgb_to_yc(xmedia_u16 r, xmedia_u16 g, xmedia_u16 b, xmedia_u16 * py, xmedia_u16 * pcb, xmedia_u16 * pcr)
|
||||
{
|
||||
*py = (xmedia_u16)((((r * 66 + g * 129 + b * 25) >> 8) + 16) << 2);
|
||||
|
||||
*pcb = (xmedia_u16)(((((b * 112 - r * 38) - g * 74) >> 8) + 128) << 2);
|
||||
|
||||
*pcr = (xmedia_u16)(((((r * 112 - g * 94) - b * 18) >> 8) + 128) << 2);
|
||||
}
|
||||
|
||||
__inline static xmedia_u32 rgb_to_yuv(xmedia_u32 rgb)
|
||||
{
|
||||
xmedia_u16 y,u,v;
|
||||
|
||||
rgb_to_yc(RGB_R(rgb), RGB_G(rgb), RGB_B(rgb), &y, &u, &v);
|
||||
|
||||
return YUV(y,u,v);
|
||||
}
|
||||
|
||||
__inline static xmedia_void rgb_to_yc_full(xmedia_u16 r, xmedia_u16 g, xmedia_u16 b, xmedia_u16 *py, xmedia_u16 *pcb, xmedia_u16 *pcr)
|
||||
{
|
||||
xmedia_u16 py_temp, pcb_temp, pcr_temp;
|
||||
|
||||
py_temp = (xmedia_u16)(((r * 76 + g * 150 + b * 29) >> 8) * 4);
|
||||
pcb_temp = (xmedia_u16)(CLIP_MIN(((((b * 130 - r * 44 ) - g * 86) >> 8) + 128),0) * 4);
|
||||
pcr_temp = (xmedia_u16)(CLIP_MIN(((((r * 130 - g * 109) - b * 21) >> 8) + 128),0) * 4);
|
||||
|
||||
*py = MAX2(MIN2(py_temp, 1023), 0);
|
||||
*pcb = MAX2(MIN2(pcb_temp, 1023), 0);
|
||||
*pcr = MAX2(MIN2(pcr_temp, 1023), 0);
|
||||
}
|
||||
|
||||
__inline static xmedia_u32 rgb_to_yuv_full(xmedia_u32 rgb)
|
||||
{
|
||||
xmedia_u16 y,u,v;
|
||||
|
||||
rgb_to_yc_full(RGB_R(rgb), RGB_G(rgb), RGB_B(rgb), &y, &u, &v);
|
||||
|
||||
return YUV(y,u,v);
|
||||
}
|
||||
|
||||
__inline static xmedia_void rgb_to_yc_8bit(xmedia_u8 r, xmedia_u8 g, xmedia_u8 b, xmedia_u8 *py, xmedia_u8 *pcb, xmedia_u8 *pcr)
|
||||
{
|
||||
*py = (xmedia_u8)(((r * 66 + g * 129 + b * 25) >> 8) + 16);
|
||||
|
||||
*pcb = (xmedia_u8)((((b * 112 - r * 38) - g * 74) >> 8) + 128);
|
||||
|
||||
*pcr = (xmedia_u8)((((r * 112 - g * 94) - b * 18) >> 8) + 128);
|
||||
}
|
||||
|
||||
__inline static xmedia_u32 rgb_to_yuv_8bit(xmedia_u32 rgb)
|
||||
{
|
||||
xmedia_u8 y,u,v;
|
||||
|
||||
rgb_to_yc_8bit(RGB_R(rgb), RGB_G(rgb), RGB_B(rgb), &y, &u, &v);
|
||||
|
||||
return YUV_8BIT(y,u,v);
|
||||
}
|
||||
|
||||
__inline static xmedia_void rgb_to_yc_full_8bit(xmedia_u8 r, xmedia_u8 g, xmedia_u8 b, xmedia_u8 *py, xmedia_u8 *pcb, xmedia_u8 *pcr)
|
||||
{
|
||||
xmedia_s16 py_temp, pcb_temp, pcr_temp;
|
||||
|
||||
py_temp = (r * 76 + g * 150 + b * 29) >> 8;
|
||||
pcb_temp = (((b * 130 - r * 44) - g * 86) >> 8) + 128;
|
||||
pcr_temp = (((r * 130 - g * 109) - b * 21) >> 8) + 128;
|
||||
|
||||
*py = MAX2(MIN2(py_temp, 255), 0);
|
||||
*pcb = MAX2(MIN2(pcb_temp, 255), 0);
|
||||
*pcr = MAX2(MIN2(pcr_temp, 255), 0);
|
||||
}
|
||||
|
||||
__inline static xmedia_u32 rgb_to_yuv_full_8bit(xmedia_u32 rgb)
|
||||
{
|
||||
xmedia_u8 y,u,v;
|
||||
|
||||
rgb_to_yc_full_8bit(RGB_R(rgb), RGB_G(rgb), RGB_B(rgb), &y, &u, &v);
|
||||
|
||||
return YUV_8BIT(y,u,v);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 full_fps;
|
||||
xmedia_u32 tag_fps;
|
||||
xmedia_u32 frm_key;
|
||||
} fps_ctrl;
|
||||
|
||||
__inline static xmedia_void init_fps(fps_ctrl *frm_ctrl, xmedia_u32 full_fps, xmedia_u32 tag_fps)
|
||||
{
|
||||
frm_ctrl->full_fps = full_fps;
|
||||
frm_ctrl->tag_fps = tag_fps;
|
||||
frm_ctrl->frm_key = 0;
|
||||
}
|
||||
|
||||
__inline static xmedia_bool fps_control(fps_ctrl *frm_ctrl)
|
||||
{
|
||||
xmedia_bool ret = XMEDIA_FALSE;
|
||||
|
||||
frm_ctrl->frm_key += frm_ctrl->tag_fps;
|
||||
if (frm_ctrl->frm_key >= frm_ctrl->full_fps) {
|
||||
frm_ctrl->frm_key -= frm_ctrl->full_fps;
|
||||
ret = XMEDIA_TRUE;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
__inline static xmedia_u32 get_low_addr(xmedia_u64 phy_addr)
|
||||
{
|
||||
return (xmedia_u32)phy_addr;
|
||||
}
|
||||
|
||||
__inline static xmedia_u32 get_high_addr(xmedia_u64 phy_addr)
|
||||
{
|
||||
return (xmedia_u32)(phy_addr>>32);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
#ifndef MPI_CL_H
|
||||
#define MPI_CL_H
|
||||
|
||||
#include "xmedia_cl.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
xmedia_cl_s32 mpi_cl_init();
|
||||
xmedia_cl_s32 mpi_cl_uninit();
|
||||
|
||||
// get the device list
|
||||
xmedia_cl_s32 mpi_cl_get_device_ids(xmedia_cl_device_type_e device_type,
|
||||
xmedia_cl_device_id *devices,
|
||||
xmedia_cl_u32 *num_devices);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_release_device_ids(xmedia_cl_device_id *devices,
|
||||
xmedia_cl_u32 *num_devices);
|
||||
|
||||
xmedia_cl_context mpi_cl_create_context(xmedia_cl_u32 num_devices,
|
||||
xmedia_cl_device_id *devices,
|
||||
xmedia_cl_s32 *err_code);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_release_context(xmedia_cl_context context);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_querysize_from_file(const char *model,
|
||||
xmedia_cl_u32 *worksize,
|
||||
xmedia_cl_u32 *weightsize);
|
||||
xmedia_cl_s32 mpi_cl_graph_querysize_from_buff(const char *model,
|
||||
xmedia_cl_u32 *worksize,
|
||||
xmedia_cl_u32 *weightsize);
|
||||
xmedia_cl_s32 mpi_cl_graph_loadmodel_from_file(xmedia_cl_context *context,
|
||||
const char *model,
|
||||
xmedia_cl_graph *graph);
|
||||
xmedia_cl_s32 mpi_cl_graph_loadmodel_from_buff(xmedia_cl_context *context,
|
||||
const char *model,
|
||||
xmedia_cl_graph *graph);
|
||||
xmedia_cl_s32 mpi_cl_graph_loadmodel_from_file_withmem(
|
||||
xmedia_cl_context *context, const char *model, void *workspace,
|
||||
xmedia_cl_u32 worksize, void *weight, xmedia_cl_u32 weightsize,
|
||||
xmedia_cl_graph *graph);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_loadmodel_from_buff_withmem(
|
||||
xmedia_cl_context *context, const char *model, void *workspace,
|
||||
xmedia_cl_u32 worksize, void *weight, xmedia_cl_u32 weightsize,
|
||||
xmedia_cl_graph *graph);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_unload(xmedia_cl_graph graph);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_communicate(xmedia_cl_graph graph,
|
||||
xmedia_cl_u32 *model_id);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_decommunicate(xmedia_cl_graph graph,
|
||||
xmedia_cl_u32 model_id);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_set_workspace_addr(xmedia_cl_context context,
|
||||
void *workspace_addr,
|
||||
xmedia_cl_u32 worksize);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_get_workspace_addr(xmedia_cl_context context,
|
||||
void **workspace_addr,
|
||||
xmedia_cl_u32 *worksize);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_get_private_data(xmedia_cl_graph graph,
|
||||
void **private_data,
|
||||
xmedia_cl_u32 *data_size);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_get_header_crc_from_buff(const char *model,
|
||||
xmedia_cl_u32 *crc);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_get_header_crc_from_file(const char *model,
|
||||
xmedia_cl_u32 *crc);
|
||||
|
||||
xmedia_cl_s32 mpi_cl_graph_get_private_data_from_file(const char *model,
|
||||
void *private_data,
|
||||
xmedia_cl_u32 data_size);
|
||||
xmedia_cl_s32 mpi_cl_graph_get_private_data_from_buff(const char *model,
|
||||
void *private_data,
|
||||
xmedia_cl_u32 data_size);
|
||||
xmedia_cl_s32
|
||||
mpi_cl_graph_query_model_info_from_file(const char *model, void *model_info,
|
||||
xmedia_cl_model_info_type info_type);
|
||||
|
||||
xmedia_cl_s32
|
||||
mpi_cl_graph_query_model_info_from_buff(const char *model, void *model_info,
|
||||
xmedia_cl_model_info_type info_type);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __MPI_ISP_H__
|
||||
#define __MPI_ISP_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_video_common.h"
|
||||
|
||||
#define ISP_OVERLAP_AREA_PRECISION 32
|
||||
#define ISP_OVERLAP_REGION 2
|
||||
|
||||
typedef enum {
|
||||
MPI_ISP_EVENT_SET_BNR_REF_STATE = 0,
|
||||
MPI_ISP_EVENT_SET_STNR_REF_STATE,
|
||||
MPI_ISP_EVENT_SET_LOWDELAY_STATE,
|
||||
MPI_ISP_EVENT_GET_AINR_STATE,
|
||||
MPI_ISP_EVENT_MAX
|
||||
} mpi_isp_event;
|
||||
|
||||
/*
|
||||
* 函数功能: 设置mlsc拼接亮度同步属性
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,ISP 设备号
|
||||
* src_position - 输入参数,左右图源图像坐标组
|
||||
* overlap_width - 输入参数,重叠区域宽度
|
||||
* sync_attr - 输入参数,拼接亮度同步属性
|
||||
* area_flag - 输入参数,重叠区域标志
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 mpi_isp_set_mlsc_stitch_luma_attr(
|
||||
xmedia_u32 pipe, const xmedia_video_point src_position[ISP_OVERLAP_REGION][ISP_OVERLAP_AREA_PRECISION],
|
||||
xmedia_u32 overlap_width, const xmedia_video_stitch_luma_sync_attr *sync_attr, xmedia_u8 area_flag);
|
||||
|
||||
/*
|
||||
* 函数功能: 模块间的事件通知
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,ISP 设备号
|
||||
* event - 输入参数,事件类型
|
||||
* param - 输入参数,事件参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 输入pipe无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 mpi_isp_event_notifier(xmedia_u32 pipe, mpi_isp_event event, xmedia_void *param);
|
||||
|
||||
#endif // __MPI_ISP_H__
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef MPI_SYS_H
|
||||
#define MPI_SYS_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
typedef enum {
|
||||
MPI_SYS_SENSOR_CLK_EN = 0,
|
||||
MPI_SYS_SENSOR_RST_SEL,
|
||||
MPI_SYS_SENSOR_CLK_SET,
|
||||
MPI_SYS_SENSOR_CLK_GET,
|
||||
MPI_SYS_MAX,
|
||||
} mpi_sys_func_id;
|
||||
|
||||
/*
|
||||
* 函数功能:配置模块时钟或复位
|
||||
* 函数参数:
|
||||
* chn_id - 输入参数,需配置模块的目标通道,不支持多通道则配置为0
|
||||
* func_id - 输入参数,操作类型
|
||||
* param - 输入参数
|
||||
* 时钟开关/复位场景:0表示时钟关闭/复位撤销;1表示时钟打开/复位使能
|
||||
* 时钟配置场景:需要配置的时钟频率,单位为Hz
|
||||
* func_id为MPI_SYS_SENSOR_CLK_GET时,param为输出参数,获取当前时钟频率,单位为Hz
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 mpi_sys_mod_ctrl(xmedia_u32 chn_id, mpi_sys_func_id func_id, xmedia_u32 *param);
|
||||
|
||||
/*
|
||||
* 函数功能:创建内核态proc节点,以及调试信息缓存buffer,用于保存用户态调试信息
|
||||
* 函数参数:
|
||||
* name - 输入参数,创建的目标节点名称,用于区分不同节点,需要以‘\0’结束
|
||||
* buffer_len - 输入参数,需申请的调试信息缓存buffer的长度
|
||||
* handle - 输出参数,创建的proc节点操作句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 没有初始化sys模块
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_CREATE_FAILED - 创建proc节点失败
|
||||
* XMEDIA_ERRCODE_BUFFER_FULL - 已创建的节点达到最大值
|
||||
*/
|
||||
xmedia_s32 mpi_sys_create_proc_entry(xmedia_char *name, xmedia_u32 buffer_len, xmedia_handle *handle);
|
||||
|
||||
/*
|
||||
* 函数功能:销毁内核态proc节点,以及释放调试信息缓存buffer
|
||||
* 函数参数:
|
||||
* handle - 输入参数,目标节点操作句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 没有初始化sys模块
|
||||
* XMEDIA_ERRCODE_DESTROY_FAILED - 销毁proc节点失败
|
||||
* 注意:只能销毁用户态mpi_sys_create_proc_entry接口创建的proc节点
|
||||
*/
|
||||
xmedia_s32 mpi_sys_destory_proc(xmedia_handle handle);
|
||||
|
||||
/*
|
||||
* 函数功能:往proc节点buffer写入调试信息
|
||||
* 函数参数:
|
||||
* handle - 输入参数,目标节点操作句柄
|
||||
* buffer_addr_va - 输入参数,用户态保存调试信息的缓存地址(虚拟地址)
|
||||
* buffer_len - 输入参数,需要写入的数据长度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 没有初始化sys模块
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_NULL_PTR - buffer地址为空指针
|
||||
* XMEDIA_ERRCODE_BUFFER_FULL - 待写入数据长度大于内核缓存空间的最大长度
|
||||
* XMEDIA_ERRCODE_BAD_ADDRESS - buffer地址异常,不支持拷贝到内核态
|
||||
* XMEDIA_ERRCODE_COPY_DATA_ERROR - 从用户态拷贝数据到内核态出错
|
||||
* 注意:只支持一次性将调试信息写入内核态的buffer中,不支持分段写入
|
||||
*/
|
||||
xmedia_s32 mpi_sys_write_proc(xmedia_handle handle, xmedia_u64 buffer_addr_va, xmedia_u32 buffer_len);
|
||||
|
||||
#endif
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __MPI_VI_H__
|
||||
#define __MPI_VI_H__
|
||||
|
||||
#include "xmedia_video_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
xmedia_s32 mpi_vi_start_stitch_luma_sync(xmedia_video_stitch_luma_sync_attr *sync_luma_param,
|
||||
xmedia_video_point over_lap_point[][4]);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __MPI_VI_H__ */
|
||||
Executable
+168
@@ -0,0 +1,168 @@
|
||||
#ifndef __SNS_COMM_H__
|
||||
#define __SNS_COMM_H__
|
||||
|
||||
#ifdef __linux__
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include "xmedia_isp.h"
|
||||
#include "xmedia_errcode.h"
|
||||
#ifdef __linux__
|
||||
#include "xmedia_debug.h"
|
||||
#else
|
||||
#include "compile.h"
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
#define SENSOR_PRINT(fmt, ...) \
|
||||
XMEDIA_PRINT("[SENSOR][Func]:%s [Line]:%d [Info]:" fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#define SENSOR_TRACE(level, fmt, ...) \
|
||||
do { \
|
||||
MODULE_TRACE(level, MOD_ID_ISP, "[Func]:%s [Line]:%d [Info]:" fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define SENSOR_PRIORITY_FUNC
|
||||
#define SENSOR_PRIORITY_DATA
|
||||
#define SENSOR_PRIORITY_RODATA
|
||||
|
||||
#define sleep_us(x) usleep(x)
|
||||
#else
|
||||
#define SENSOR_PRINT(fmt, ...)
|
||||
#define SENSOR_TRACE(level, fmt, ...)
|
||||
|
||||
#define SENSOR_PRIORITY_FUNC STAGE1_FUNC
|
||||
#define SENSOR_PRIORITY_DATA STAGE1_GLOBAL
|
||||
#define SENSOR_PRIORITY_RODATA STAGE1_CONST_GLOBAL
|
||||
|
||||
#define sleep_us(x) \
|
||||
do { \
|
||||
for(xmedia_s32 i=x; i>0; i--){ \
|
||||
asm("nop"); \
|
||||
asm("nop"); \
|
||||
asm("nop"); \
|
||||
asm("nop"); \
|
||||
asm("nop"); \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#define SENSOR_DIV_0_TO_1(a) (((a) == 0) ? 1 : (a))
|
||||
#define SENSOR_DIV_0_TO_1_FLOAT(a) ((((a) < 1E-10) && ((a) > -1E-10)) ? 1 : (a))
|
||||
|
||||
#define SENSOR_HIGH_8BITS(x) (((x)&0xFF00) >> 8) // BIT[7:0]
|
||||
#define SENSOR_LOW_8BITS(x) ((x)&0x00FF) // BIT[7:0]
|
||||
|
||||
#define SENSOR_HIGHER_4BITS(x) (((x)&0xF000) >> 12) // BIT[3:0]
|
||||
#define SENSOR_MIDDLE_8BITS(x) (((x)&0x0FF0) >> 4) // BIT[7:0]
|
||||
#define SENSOR_LOWER_4BITS(x) (((x)&0x000F) << 4) // BIT[7:4]
|
||||
|
||||
#define SENSOR_ALIGN_UP(x, a) ((((x) + ((a)-1)) / a) * a)
|
||||
#define SENSOR_ALIGN_DOWN(x, a) (((x) / a) * a)
|
||||
|
||||
#define SENSOR_MAX(x, y) ((x) > (y) ? (x) : (y))
|
||||
#define SENSOR_MIN(x, y) ((x) < (y) ? (x) : (y))
|
||||
|
||||
#define SENSOR_CLIP3(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
|
||||
|
||||
#define SENSOR_DEV_INVALID (-1)
|
||||
#define SENSOR_I2C_INVALID (-1)
|
||||
|
||||
#define SENSOR_AWB_CHN_GIAN_MAX_NUM 3
|
||||
#define SENSOR_AWB_CHN_GIAN_R 0
|
||||
#define SENSOR_AWB_CHN_GIAN_G 1
|
||||
#define SENSOR_AWB_CHN_GIAN_B 2
|
||||
|
||||
#define SENSOR_CUR_FRAME 0
|
||||
#define SENSOR_PRE_FRAME 1
|
||||
#define SENSOR_FRAME_MAX_NUM 2
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool init;
|
||||
xmedia_u8 img_mode;
|
||||
xmedia_video_wdr_mode wdr_mode;
|
||||
xmedia_sensor_init_mode init_mode;
|
||||
xmedia_video_size size;
|
||||
xmedia_float fps;
|
||||
|
||||
// [0]: sensor reg info of cur-frame; [1]: sensor reg info of pre-frame;
|
||||
xmedia_sensor_regs_info regs_info[SENSOR_FRAME_MAX_NUM];
|
||||
|
||||
// [0]: fulllines of cur-frame; [1]: pre fulllines of pre-frame
|
||||
xmedia_u32 fl[SENSOR_FRAME_MAX_NUM];
|
||||
|
||||
// fulllines std (vmax) - use for AE resume framerate after slow framerate
|
||||
xmedia_u32 fl_std;
|
||||
xmedia_isp_ae_wdr_mode ae_wdr_mode;
|
||||
|
||||
//color temperature
|
||||
xmedia_u32 ct;
|
||||
|
||||
// 短帧最大曝光时间
|
||||
xmedia_u32 max_short_exp;
|
||||
|
||||
// 曝光比索引按升序排列, 0: 次短帧比最短帧; XMEDIA_ISP_WDR_CHN_MAX_NUM - 1: 最长帧比次长帧
|
||||
xmedia_u32 ratio[XMEDIA_ISP_WDR_EXP_RATIO_MAX_NUM];
|
||||
|
||||
// 帧的索引按升序排列, 0: 最短帧; XMEDIA_ISP_WDR_CHN_MAX_NUM - 1: 最长帧;
|
||||
xmedia_u32 wdr_int_time[XMEDIA_ISP_WDR_CHN_MAX_NUM];
|
||||
|
||||
xmedia_sensor_work_mode work_mode;
|
||||
xmedia_sensor_mipi_lanes lanes;
|
||||
xmedia_bool mirror_en;
|
||||
xmedia_bool flip_en;
|
||||
xmedia_u32 i2c_addr;
|
||||
xmedia_sensor_commbus bus_info;
|
||||
} sensor_context;
|
||||
|
||||
#define SENSOR_CHECK_PTR_RETURN(ptr) \
|
||||
do { \
|
||||
if (ptr == XMEDIA_NULL) { \
|
||||
SENSOR_TRACE(MODULE_DBG_ERR, "%s is Null Pointer!\n", #ptr); \
|
||||
return XMEDIA_ERRCODE_NULL_PTR; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define SENSOR_CHECK_DEV_RETURN(dev) \
|
||||
do { \
|
||||
if ((dev) >= XMEDIA_SENSOR_DEV_MAX_NUM) { \
|
||||
SENSOR_TRACE(MODULE_DBG_ERR, "Invalid dev. The range of dev is [0, %u), but input dev is %u. \n", \
|
||||
XMEDIA_SENSOR_DEV_MAX_NUM, (dev)); \
|
||||
return XMEDIA_ERRCODE_INVALID_DEV_ID; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define SENSOR_CHECK_PIPE_RETURN(pipe) \
|
||||
do { \
|
||||
if ((pipe) >= XMEDIA_ISP_PIPE_MAX_NUM) { \
|
||||
SENSOR_TRACE(MODULE_DBG_ERR, "Invalid pipe. The range of pipe is [0, %u), but input pipe is %u. \n", \
|
||||
XMEDIA_ISP_PIPE_MAX_NUM, (pipe)); \
|
||||
return XMEDIA_ERRCODE_INVALID_DEV_ID; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define SENSOR_FREE(ptr) \
|
||||
do { \
|
||||
if (ptr != XMEDIA_NULL) { \
|
||||
free(ptr); \
|
||||
ptr = XMEDIA_NULL; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define SENSOR_CHECK_RET_RETURN(ret) \
|
||||
do { \
|
||||
if (ret != XMEDIA_SUCCESS) { \
|
||||
SENSOR_TRACE(MODULE_DBG_ERR, "error code = %d\n", ret); \
|
||||
return ret; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Executable
+480
@@ -0,0 +1,480 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AE_H__
|
||||
#define __XMEDIA_AE_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_isp.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 max;
|
||||
xmedia_u32 min;
|
||||
} xmedia_ae_range;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AE_MODE_SLOW_SHUTTER = 0,
|
||||
XMEDIA_AE_MODE_FIX_FRAME_RATE,
|
||||
XMEDIA_AE_MODE_MAX
|
||||
} xmedia_ae_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AE_ANTIFLICKER_NORMAL_MODE = 0,
|
||||
XMEDIA_AE_ANTIFLICKER_AUTO_MODE,
|
||||
XMEDIA_AE_ANTIFLICKER_MODE_MAX
|
||||
} xmedia_ae_anti_flicker_mode;
|
||||
|
||||
typedef struct ISP_ANTIFLICKER_S {
|
||||
xmedia_bool enable;
|
||||
xmedia_u8 frequency;
|
||||
xmedia_ae_anti_flicker_mode mode;
|
||||
} xmedia_ae_anti_flicker;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_u8 luma_diff;
|
||||
} xmedia_ae_sub_flicker;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 black_delay_frame;
|
||||
xmedia_u16 white_delay_frame;
|
||||
} xmedia_ae_delay;
|
||||
|
||||
typedef struct {
|
||||
// base parameter
|
||||
xmedia_ae_range exp_time_range;
|
||||
xmedia_ae_range again_range;
|
||||
xmedia_ae_range dgain_range;
|
||||
xmedia_ae_range isp_dgain_range;
|
||||
xmedia_ae_range sys_gain_range;
|
||||
xmedia_u32 gain_thres_hold;
|
||||
xmedia_u8 speed;
|
||||
xmedia_u8 light_thd;
|
||||
xmedia_u16 black_speed_bias;
|
||||
xmedia_u8 tolerance;
|
||||
xmedia_u8 iso_num;
|
||||
xmedia_u8 light_ratio_low;
|
||||
xmedia_u8 light_ratio_high;
|
||||
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u8 compensation[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u16 ev_bias[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_isp_ae_strategy ae_strategy_mode;
|
||||
xmedia_u16 hist_ratio_slope[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u8 max_hist_offset[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_ae_mode ae_mode;
|
||||
xmedia_ae_anti_flicker anti_flicker;
|
||||
xmedia_ae_sub_flicker sub_flicker;
|
||||
xmedia_ae_delay ae_delay_attr;
|
||||
xmedia_bool manual_exp_value;
|
||||
xmedia_u32 exp_value;
|
||||
xmedia_isp_wdr_mode wdr_mode;
|
||||
xmedia_bool wdr_quick;
|
||||
xmedia_u16 iso_cal_coef;
|
||||
} xmedia_ae_auto_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_operation_mode exp_time_op_type;
|
||||
xmedia_video_operation_mode again_op_type;
|
||||
xmedia_video_operation_mode dgain_op_type;
|
||||
xmedia_video_operation_mode isp_dgain_op_type;
|
||||
xmedia_u32 exp_time;
|
||||
xmedia_u32 again;
|
||||
xmedia_u32 dgain;
|
||||
xmedia_u32 isp_dgain;
|
||||
} xmedia_ae_manual_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_LONG_FRAME = 0,
|
||||
XMEDIA_SHORT_FRAME,
|
||||
XMEDIA_PRIOR_FRAME_MAX
|
||||
} xmedia_ae_prior_frame;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool bypass;
|
||||
xmedia_video_operation_mode op_type;
|
||||
xmedia_u8 ae_run_interval;
|
||||
xmedia_bool hist_stat_adjust;
|
||||
xmedia_bool ae_route_ex_valid;
|
||||
xmedia_ae_prior_frame prior_frame;
|
||||
xmedia_bool ae_gain_sep_cfg;
|
||||
xmedia_ae_manual_attr manual_attr;
|
||||
xmedia_ae_auto_attr auto_attr;
|
||||
} xmedia_ae_exposure_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_operation_mode exp_ratio_type;
|
||||
xmedia_u32 exp_ratio[XMEDIA_ISP_WDR_EXP_RATIO_MAX_NUM];
|
||||
xmedia_u32 exp_ratio_max;
|
||||
xmedia_u32 exp_ratio_min;
|
||||
xmedia_u16 tolerance;
|
||||
xmedia_u16 speed;
|
||||
xmedia_u16 ratio_bias;
|
||||
} xmedia_ae_wdr_exposure_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 kp;
|
||||
xmedia_s32 ki;
|
||||
xmedia_s32 kd;
|
||||
xmedia_u32 min_pwm_duty;
|
||||
xmedia_u32 max_pwm_duty;
|
||||
xmedia_u32 open_pwm_duty;
|
||||
} xmedia_ae_dciris_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 hold_value;
|
||||
xmedia_isp_iris_f_no iris_f_no;
|
||||
} xmedia_ae_mi_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AE_IRIS_KEEP = 0,
|
||||
XMEDIA_AE_IRIS_OPEN,
|
||||
XMEDIA_AE_IRIS_CLOSE,
|
||||
XMEDIA_AE_IRIS_MAX
|
||||
} xmedia_ae_iris_status;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_video_operation_mode op_type;
|
||||
xmedia_isp_iris_type iris_type;
|
||||
xmedia_ae_iris_status iris_status;
|
||||
xmedia_ae_mi_attr mi_attr;
|
||||
} xmedia_ae_iris_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 exp_time;
|
||||
xmedia_u32 short_exp_time;
|
||||
xmedia_u32 median_exp_time;
|
||||
xmedia_u32 long_exp_time;
|
||||
xmedia_u32 again;
|
||||
xmedia_u32 dgain;
|
||||
xmedia_u32 again_sf;
|
||||
xmedia_u32 dgain_sf;
|
||||
xmedia_u32 isp_dgain;
|
||||
xmedia_u32 exposure;
|
||||
xmedia_bool exposure_is_max;
|
||||
xmedia_s16 hist_error;
|
||||
xmedia_u32 ae_hist[XMEDIA_ISP_AE_HIST_NUM];
|
||||
xmedia_u8 avg_luma;
|
||||
xmedia_u32 lines_per_500ms;
|
||||
xmedia_u32 piris_f_no;
|
||||
xmedia_u32 fps;
|
||||
xmedia_u32 iso;
|
||||
xmedia_u32 iso_sf;
|
||||
xmedia_u32 iso_calibrate;
|
||||
xmedia_u32 ref_exp_ratio;
|
||||
xmedia_u32 first_stable_time;
|
||||
xmedia_isp_ae_route ae_route;
|
||||
xmedia_isp_ae_ext_route ae_route_ex;
|
||||
xmedia_isp_ae_route ae_route_sf;
|
||||
xmedia_isp_ae_ext_route ae_route_sf_ex;
|
||||
} xmedia_ae_exp_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_bool ir_mode;
|
||||
xmedia_video_operation_mode smart_exp_type;
|
||||
xmedia_u8 iso_num;
|
||||
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u8 luma_target[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u16 exp_coef[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u16 exp_coef_max;
|
||||
xmedia_u16 exp_coef_min;
|
||||
xmedia_u8 smart_interval;
|
||||
xmedia_u8 smart_speed;
|
||||
xmedia_u16 smart_delay_num;
|
||||
} xmedia_ae_smart_exposure_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 max_inttime;
|
||||
xmedia_u32 min_inttime;
|
||||
xmedia_u32 max_again;
|
||||
xmedia_u32 min_again;
|
||||
xmedia_u32 max_dgain;
|
||||
xmedia_u32 min_dgain;
|
||||
xmedia_u32 max_isp_dgain;
|
||||
xmedia_u32 min_isp_dgain;
|
||||
xmedia_u32 max_sys_gain;
|
||||
xmedia_u32 min_sys_gain;
|
||||
xmedia_u8 compensation[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u16 ev_bias[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_bool manual_exposure_en;
|
||||
xmedia_video_operation_mode exp_time_op_type;
|
||||
xmedia_video_operation_mode again_op_type;
|
||||
xmedia_video_operation_mode dgain_op_type;
|
||||
xmedia_video_operation_mode isp_dgain_op_type;
|
||||
xmedia_u32 manual_exp_time;
|
||||
xmedia_u32 manual_again;
|
||||
xmedia_u32 manual_dgain;
|
||||
xmedia_u32 manual_ispdgain;
|
||||
} xmedia_ae_debug_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 frm_num;
|
||||
xmedia_u32 full_lines;
|
||||
xmedia_u32 exp_time;
|
||||
xmedia_u32 short_exp_time;
|
||||
xmedia_u32 median_exp_time;
|
||||
xmedia_u32 long_exp_time;
|
||||
xmedia_u32 again;
|
||||
xmedia_u32 dgain;
|
||||
xmedia_u32 isp_dgain;
|
||||
xmedia_u64 exposure_value;
|
||||
xmedia_u32 increment;
|
||||
xmedia_s32 hist_error;
|
||||
xmedia_s32 hist_ori_avg;
|
||||
xmedia_s32 luma_offset;
|
||||
xmedia_u32 iso;
|
||||
xmedia_u32 exp_ratio;
|
||||
xmedia_u32 over_exp_ratio;
|
||||
xmedia_u32 over_exp_ratio_filter;
|
||||
} xmedia_ae_debug_status_attr;
|
||||
|
||||
/*
|
||||
* 函数功能: 注册ae库到vi
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_EXIST - ae重复注册
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入参数无效
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 无可用内存
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_register(xmedia_u32 pipe);
|
||||
|
||||
/*
|
||||
* 函数功能: 注销ae库
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_unregister(xmedia_u32 pipe);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置ae库debug功能, 打印信息输出到内存
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* debug_info - 用户分配的debug信息输出buffer信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_debug_info(xmedia_u32 pipe, xmedia_isp_debug_info *debug_info);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置ae库debug打印等级, 打印信息输出到串口
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* debug_level - AE库debug打印等级 (1: ERROR 2: WARNING 3: NOTICE 4: INFO 5: DEBUG)
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_debug_level(xmedia_u32 pipe, xmedia_u32 debug_level);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置ae参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_exposure_attr(xmedia_u32 pipe, const xmedia_ae_exposure_attr *exposure_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取ae参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_get_exposure_attr(xmedia_u32 pipe, xmedia_ae_exposure_attr *exposure_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置WDR模式ae参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_wdr_exposure_attr(xmedia_u32 pipe, const xmedia_ae_wdr_exposure_attr *wdr_exp_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取WDR模式ae参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_get_wdr_exposure_attr(xmedia_u32 pipe, xmedia_ae_wdr_exposure_attr *wdr_exp_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置ae曝光表参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_route_attr(xmedia_u32 pipe, const xmedia_isp_ae_route *ae_route_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取ae曝光表参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_get_route_attr(xmedia_u32 pipe, xmedia_isp_ae_route *ae_route_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置短帧ae曝光表参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_route_sf_attr(xmedia_u32 pipe, const xmedia_isp_ae_route *ae_route_sf_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取短帧ae曝光表参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_get_route_sf_attr(xmedia_u32 pipe, xmedia_isp_ae_route *ae_route_sf_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取ae内部运行状态信息
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_query_exposure_info(xmedia_u32 pipe, xmedia_ae_exp_info *exp_info);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置扩展模式曝光表参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_ext_route_attr(xmedia_u32 pipe, const xmedia_isp_ae_ext_route *ae_ext_route_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取扩展模式曝光表参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_get_ext_route_attr(xmedia_u32 pipe, xmedia_isp_ae_ext_route *ae_ext_route_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置短帧扩展模式曝光表参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_ext_route_sf_attr(xmedia_u32 pipe, const xmedia_isp_ae_ext_route *ae_ext_route_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取短帧扩展模式曝光表参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_get_ext_route_sf_attr(xmedia_u32 pipe, xmedia_isp_ae_ext_route *ae_ext_route_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置智能曝光参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_set_smart_exposure_attr(xmedia_u32 pipe, const xmedia_ae_smart_exposure_attr *smart_exp_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取智能曝光参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* exposure_attr - ae参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ae_get_smart_exposure_attr(xmedia_u32 pipe, xmedia_ae_smart_exposure_attr *smart_exp_attr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __XMEDIA_API_AE_H__
|
||||
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AF_H__
|
||||
#define __XMEDIA_AF_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_video_common.h"
|
||||
#include "xmedia_isp.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define XMEDIA_AF_SPC_GAIN_MAP_X_DIR_NUM 8
|
||||
#define XMEDIA_AF_SPC_GAIN_MAP_Y_DIR_NUM 6
|
||||
#define XMEDIA_AF_DCC_MAP_X_DIR_NUM 8
|
||||
#define XMEDIA_AF_DCC_MAP_Y_DIR_NUM 6
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool vertical_binning_en;
|
||||
xmedia_u32 vertical_binning_times; // [0, 32]
|
||||
xmedia_bool xcorr_smooth_en;
|
||||
xmedia_s32 xcorr_calc_upper_thd; // [-32, 32]
|
||||
xmedia_s32 xcorr_calc_lower_thd; // [-32, 32]
|
||||
xmedia_u32 luma_thd; // [0, 128]
|
||||
xmedia_s32 phase_disparity_thd; // [0, 32]
|
||||
xmedia_s32 dcc_slope_adj_coeff; // [-1024, 1024]
|
||||
xmedia_s32 confidence_thd_low; // [-1024, 1024]
|
||||
xmedia_s32 confidence_thd_high; // [-1024, 1024]
|
||||
|
||||
xmedia_bool spc_en;
|
||||
xmedia_u32 left_spc_gain[XMEDIA_AF_SPC_GAIN_MAP_Y_DIR_NUM][XMEDIA_AF_SPC_GAIN_MAP_X_DIR_NUM]; // [0, 1024]
|
||||
xmedia_u32 right_spc_gain[XMEDIA_AF_SPC_GAIN_MAP_Y_DIR_NUM][XMEDIA_AF_SPC_GAIN_MAP_X_DIR_NUM]; // [0, 1024]
|
||||
xmedia_s32 dcc_slope[XMEDIA_AF_DCC_MAP_Y_DIR_NUM][XMEDIA_AF_DCC_MAP_X_DIR_NUM]; // [-1024, 1024]
|
||||
xmedia_s32 dcc_offset[XMEDIA_AF_DCC_MAP_Y_DIR_NUM][XMEDIA_AF_DCC_MAP_X_DIR_NUM]; // [-1024, 1024]
|
||||
} xmedia_af_pdaf_attr;
|
||||
|
||||
typedef struct {
|
||||
} xmedia_af_cdaf_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AF_TYPE_CDAF,
|
||||
XMEDIA_AF_TYPE_PDAF,
|
||||
XMEDIA_AF_TYPE_HYBRID,
|
||||
XMEDIA_AF_TYPE_MAX,
|
||||
} xmedia_af_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_af_type type;
|
||||
xmedia_video_rect roi;
|
||||
xmedia_u8 run_interval;
|
||||
xmedia_af_pdaf_attr pdaf_attr;
|
||||
xmedia_af_cdaf_attr cdaf_attr;
|
||||
} xmedia_af_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u64 frame_cnt;
|
||||
xmedia_video_rect roi; // 实际生效的roi区域
|
||||
|
||||
xmedia_u32 position; // 镜头绝对位置
|
||||
xmedia_s32 defocus; // 镜头移动量 unit: dac
|
||||
xmedia_s32 confidence_level; // -1: CDAF only, 0: PDAF and CDAF, 1: PDAF only
|
||||
xmedia_s32 phase_disparity; // unit: pixel
|
||||
} xmedia_af_info;
|
||||
|
||||
/*
|
||||
* 函数功能: 注册af库到ISP
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe无效
|
||||
* XMEDIA_ERRCODE_EXIST - af库已注册
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 不允许的操作
|
||||
*/
|
||||
xmedia_s32 xmedia_af_register(xmedia_u32 pipe);
|
||||
|
||||
/*
|
||||
* 函数功能: 反注册af库
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe无效
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 未注册af库
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 不允许的操作
|
||||
*/
|
||||
xmedia_s32 xmedia_af_unregister(xmedia_u32 pipe);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置af参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* af_attr - 输入参数,af属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_af_set_attr(xmedia_u32 pipe, const xmedia_af_attr *af_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取af参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* af_attr - 输出参数,af属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_af_get_attr(xmedia_u32 pipe, xmedia_af_attr *af_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 查询af信息
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* af_info - 输出参数,af信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_af_query_info(xmedia_u32 pipe, xmedia_af_info *af_info);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __XMEDIA_API_AF_H__
|
||||
@@ -0,0 +1,200 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AUDIO_ADEC_H__
|
||||
#define __XMEDIA_AUDIO_ADEC_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_common.h"
|
||||
#include "xmedia_audio_codec.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef struct {
|
||||
audio_codec_type type; // 解码类型
|
||||
decoder_param* param; // 解码参数
|
||||
xmedia_bool package_mode; // 包模式和流程模式标志
|
||||
xmedia_u32 in_buffer_size; // 输入缓存大小,最大支持64 * 1024 字节
|
||||
xmedia_u32 out_frame_num; // 输出缓存帧总数量,最大支持30
|
||||
} adec_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 in_buffer_size; // 输入缓存总字节数
|
||||
xmedia_u32 in_avail_size; // 输入缓存可用字节数
|
||||
xmedia_u32 out_frame_num; // 输出缓存帧总数量
|
||||
xmedia_u32 out_avail_frames; // 输出缓存可用缓存帧数量
|
||||
xmedia_bool eos; // 实际的解码结束标志
|
||||
} adec_status;
|
||||
|
||||
/*
|
||||
* 函数功能:初始化音频解码模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:去初始化音频解码模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_BUSY - 设备忙无法直接退出
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:注册音频解码器
|
||||
* 函数参数:
|
||||
* mask - 输入参数,解码器掩码
|
||||
* handle - 输入参数,解码器句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - adec模块没有初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 解码器掩码不合法
|
||||
* XMEDIA_ERRCODE_EXIST - 解码器已经注册
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_register(codec_mask_type mask, const audio_decoder* handle);
|
||||
|
||||
/*
|
||||
* 函数功能:反注册音频解码器
|
||||
* 函数参数:
|
||||
* mask - 输入参数,解码器掩码
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - adec模块没有初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 解码器掩码不合法
|
||||
* XMEDIA_ERRCODE_BUSY - 设备忙, 无法反注册解码器
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_unregister(codec_mask_type mask);
|
||||
|
||||
/*
|
||||
* 函数功能: 创建一路音频解码
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* attr - 输入参数,通道属性参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - adec模块没有初始化
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_EXIST - 通道已经存在
|
||||
* XMEDIA_ERRCODE_NOT_READY - 解码器没有注册
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 非法解码通道属性参数
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_create_chn(adec_chn chn, const adec_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 销毁一路音频解码
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 非法通道号
|
||||
* XMEDIA_ERRCODE_NOT_INIT - adec模块没有初始化
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_BUSY - 设备忙,需要先解除绑定
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_destroy_chn(adec_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 向音频解码通道发送码流数据
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* stream - 输入参数,码流信息
|
||||
* time_out - 输入参数,超时时间
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_BUFFER_FULL - 码流buffer满
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_send_stream(adec_chn chn, const audio_stream* stream, xmedia_s32 time_out);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频解码通道的解码帧
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* frame - 输出参数,获取的解码帧信息
|
||||
* milli_sec - 输入参数,超时时间
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 解码缓冲区为空
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_get_frame(adec_chn chn, audio_frame* frame, xmedia_s32 time_out);
|
||||
|
||||
/*
|
||||
* 函数功能: 释放音频解码通道的解码帧
|
||||
* 函数参数:
|
||||
* chn - 输入参数,adec通道号
|
||||
* frame - 输入参数,释放的解码帧信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_release_frame(adec_chn chn, audio_frame* frame);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频解码通道解码结束标志
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* eos - 输入参数,码流结束的eos标志
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_set_eos(adec_chn chn, xmedia_bool eos);
|
||||
|
||||
/*
|
||||
* 函数功能: 复位音频解码通道
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_reset(adec_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 查询音频解码通道状态
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* status - 输出参数,通道状态
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
*/
|
||||
xmedia_s32 xmedia_adec_get_status(adec_chn chn, adec_status* status);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AUDIO_AENC_H__
|
||||
#define __XMEDIA_AUDIO_AENC_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_codec.h"
|
||||
#include "xmedia_audio_ai.h"
|
||||
#include "xmedia_audio_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef struct {
|
||||
audio_codec_type type; // 编码类型
|
||||
encoder_param* param; // 编码参数
|
||||
xmedia_u32 in_buffer_size; // 输入缓存大小,最大支持64 * 1024 字节
|
||||
xmedia_u32 out_frame_num; // 输出缓存帧总数量,最大支持30
|
||||
} aenc_attr;
|
||||
|
||||
/*
|
||||
* 函数功能:初始化音频编码模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED- 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:去初始化音频编码模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_BUSY - 设备忙无法直接退出
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:注册音频编码器
|
||||
* 函数参数:
|
||||
* mask - 输入参数,编码器掩码
|
||||
* handle - 输入参数,编码器句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - aenc模块没有初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 编码器掩码不合法
|
||||
* XMEDIA_ERRCODE_EXIST - 编码器已经注册
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_register(codec_mask_type mask, const audio_encoder* handle);
|
||||
|
||||
/*
|
||||
* 函数功能:反注册音频编码器
|
||||
* 函数参数:
|
||||
* mask - 输入参数,编码器掩码
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - aenc模块没有初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 编码器掩码不合法
|
||||
* XMEDIA_ERRCODE_BUSY - 设备忙,无法反注册编码器
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_unregister(codec_mask_type mask);
|
||||
|
||||
/*
|
||||
* 函数功能: 创建一路音频编码
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* attr - 输入参数,通道属性参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - aenc模块没有初始化
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_EXIST - 通道已经存在
|
||||
* XMEDIA_ERRCODE_NOT_READY - 解码器没有注册
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 非法解码通道属性参数
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存不足
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_create_chn(aenc_chn chn, const aenc_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 销毁一路音频编码
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 非法通道号
|
||||
* XMEDIA_ERRCODE_NOT_INIT - aenc模块没有初始化
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_BUSY - 设备忙,需要先解除绑定
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_destroy_chn(aenc_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 向音频编码通道发送码流数据
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* frame - 输入参数,码流帧信息
|
||||
* time_out - 输入参数,超时时间
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_BUFFER_FULL - 码流buffer满
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_send_frame(aenc_chn chn, const audio_frame* frame, xmedia_s32 time_out);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频编码通道的编码帧数据
|
||||
* 函数参数:
|
||||
* chn - 输入参数, 通道号
|
||||
* stream - 输出参数,编码帧信息
|
||||
* time_out - 输入参数,超时时间
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 解码缓冲区为空
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_get_stream(aenc_chn chn, audio_stream* stream, xmedia_s32 time_out);
|
||||
|
||||
/*
|
||||
* 函数功能: 释放音频编码通道的编码帧
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* stream - 输入参数,编码帧信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 通道号超出范围
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_release_stream(aenc_chn chn, audio_stream* stream);
|
||||
|
||||
/*
|
||||
* 函数功能: 绑定音频编码通道和音频输入通道
|
||||
* 函数参数:
|
||||
* chn - 输入参数,通道号
|
||||
* src_dev - 输入参数,音频输入设备号
|
||||
* src_chn - 输入参数,音频输入通道号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效通道号
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效设备号
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 通道已经在使用,绑定不被允许
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_bind(aenc_chn chn, ai_dev src_dev, ai_chn src_chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 解除音频编码通道和音频输入通道
|
||||
* 函数参数:
|
||||
* chn - 输入参数, 通道号
|
||||
* src_dev - 输入参数,音频输入设备号
|
||||
* src_chn - 输入参数,音频输入通道号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效通道号
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效设备号
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_NOT_BIND - aenc没有绑定ai
|
||||
*/
|
||||
xmedia_s32 xmedia_aenc_unbind(aenc_chn chn, ai_dev src_dev, ai_chn src_chn);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,524 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AUDIO_AI_H__
|
||||
#define __XMEDIA_AUDIO_AI_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AI_DEV_ADC0,
|
||||
XMEDIA_AI_DEV_I2S0,
|
||||
XMEDIA_AI_DEV_PDM0,
|
||||
XMEDIA_AI_DEV_PDM_I2S0,
|
||||
XMEDIA_AI_DEV_MAX,
|
||||
} ai_dev;
|
||||
|
||||
typedef struct {
|
||||
analog_input_mode mode;
|
||||
} ai_adc_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool master;
|
||||
audio_i2s_mode i2s_mode;
|
||||
audio_i2s_mclk_sel mclk_sel;
|
||||
audio_i2s_bclk_sel bclk_sel;
|
||||
xmedia_bool pcm_sample_rise_edge;
|
||||
audio_i2s_pcm_delay pcm_delay_cycle;
|
||||
} ai_i2s_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 reserved;
|
||||
} ai_pdm_attr;
|
||||
|
||||
typedef struct {
|
||||
audio_i2s_mode i2s_mode;
|
||||
audio_channel i2s_channels;
|
||||
audio_bit_depth i2s_bit_depth;
|
||||
} ai_pdm_i2s_attr;
|
||||
|
||||
typedef struct {
|
||||
audio_dev_work_mode mode;
|
||||
audio_sample_rate sample_rate;
|
||||
audio_channel channels;
|
||||
audio_bit_depth bit_depth;
|
||||
xmedia_u32 pcm_frame_num;
|
||||
xmedia_u32 pcm_samples_per_frame;
|
||||
xmedia_s32 chn_map[AUDIO_CHANNEL_8];
|
||||
union {
|
||||
ai_adc_attr adc_attr;
|
||||
ai_i2s_attr i2s_attr;
|
||||
ai_pdm_attr pdm_attr;
|
||||
ai_pdm_i2s_attr pdm_i2s_attr;
|
||||
} un_attr;
|
||||
} ai_dev_attr;
|
||||
|
||||
typedef enum {
|
||||
AI_VQE_ENHANCE_ATTR_VERSION_1 = 0x1,
|
||||
AI_VQE_ENHANCE_ATTR_VERSION_2 = 0x2,
|
||||
AI_VQE_ENHANCE_ATTR_VERSION_3 = 0x3,
|
||||
AI_VQE_DETECT_ATTR_VERSION_1 = 0x10,
|
||||
AI_VQE_ASR_ATTR_VERSION_1 = 0x20,
|
||||
AI_VQE_ATTR_VERSION_MAX,
|
||||
} ai_vqe_attr_version;
|
||||
|
||||
typedef struct {
|
||||
ai_vqe_attr_version version;
|
||||
xmedia_s32 work_sample_rate;
|
||||
xmedia_s32 in_channels;
|
||||
xmedia_void* attr; /* refer to ai_vqe_attr_v1 or ai_vqe_attr_v2 */
|
||||
} ai_vqe_attr;
|
||||
|
||||
typedef enum {
|
||||
AI_EC_SOURCE_AO_DAC0 = 0x0,
|
||||
AI_EC_SOURCE_AO_I2S0 = 0x1,
|
||||
AI_EC_SOURCE_MIC = 0x10,
|
||||
AI_EC_SOURCE_PDM_REF = 0x11, /* ec source from XMEDIA_AI_DEV_PDM_I2S0 ai i2s ref */
|
||||
AI_EC_SOURCE_MAX
|
||||
} ai_ec_source;
|
||||
|
||||
typedef struct {
|
||||
audio_sample_rate sample_rate;
|
||||
xmedia_bool interleaved;
|
||||
} ai_user_chn_attr;
|
||||
|
||||
/*for adc,dmic*/
|
||||
typedef struct {
|
||||
xmedia_u32 alc_enable; /* range[0, 1] 0:disable alc, 1:enable alc */
|
||||
xmedia_u32 target_level; /* range[0, 15], by step of 1,mean full scale - step*1.5db */
|
||||
xmedia_u32 noise_gate_enable; /* range[0, 1] 0:disable noise gate , 1:enable noise gate */
|
||||
xmedia_u32 noise_gate_threshold; /* range[0db, 42db],step 6db, mean full scale - 64db ~ full scale - 26db*/
|
||||
xmedia_u32 max_alc_gain; /* range[0, 31],by step of 1,mean max_alc_gain * 1.5db */
|
||||
xmedia_u32 min_alc_gain; /* range[0, 31],by step of 1,mean min_alc_gain * 1.5db */
|
||||
xmedia_u32 hold_time; /* range[2ms, 65536ms],step x2 */
|
||||
xmedia_u32 attack_time; /* range[32ms, 512ms],step 32ms */
|
||||
xmedia_u32 decay_time; /* range[32ms, 512ms],step 32ms */
|
||||
} ai_codec_alc_attr;
|
||||
|
||||
typedef enum {
|
||||
AI_PARAM_ENABLE_CODEC_HPF_FILTER = 0x20000000, /* not support, refer to xmedia_bool */
|
||||
AI_PARAM_SET_CODEC_WNF_MODE, /* not support, refer to xmedia_s32, range[0,3] */
|
||||
AI_PARAM_GET_CODEC_WNF_MODE, /* not support, refer to xmedia_s32 */
|
||||
AI_PARAM_SET_CODEC_MUTE, /* refer to xmedia_bool */
|
||||
AI_PARAM_SET_CODEC_MIC_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */
|
||||
AI_PARAM_SET_CODEC_ADC_GAIN, /* refer to xmedia_s32, range[-95,48], by step of 1 dB */
|
||||
AI_PARAM_GET_CODEC_MIC_GAIN, /* refer to xmedia_s32 */
|
||||
AI_PARAM_GET_CODEC_ADC_GAIN, /* refer to xmedia_s32 */
|
||||
AI_PARAM_SET_CODEC_ADC_LEFT_BOOST_GAIN, /* refer to xmedia_s32, range[0,30], by step of 3 dB, not surpport 3 dB */
|
||||
AI_PARAM_SET_CODEC_ADC_RIGHT_BOOST_GAIN, /* refer to xmedia_s32, range[0,30], by step of 3 dB, not surpport 3 dB */
|
||||
AI_PARAM_SET_CODEC_ADC_LEFT_DIGAL_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */
|
||||
AI_PARAM_SET_CODEC_ADC_RIGHT_DIGAL_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */
|
||||
AI_PARAM_SET_CODEC_ALC_ATTR, /* not support, refer to ai_codec_alc_attr*/
|
||||
AI_PARAM_GET_CODEC_ADC_LEFT_BOOST_GAIN, /* refer to xmedia_s32 */
|
||||
AI_PARAM_GET_CODEC_ADC_RIGHT_BOOST_GAIN, /* refer to xmedia_s32 */
|
||||
AI_PARAM_GET_CODEC_ADC_LEFT_DIGAL_GAIN, /* refer to xmedia_s32 */
|
||||
AI_PARAM_GET_CODEC_ADC_RIGHT_DIGAL_GAIN, /* refer to xmedia_s32 */
|
||||
AI_PARAM_GET_CODEC_MUTE, /* refer to xmedia_bool */
|
||||
AI_PARAM_GET_CODEC_ALC_ATTR, /* not support, refer to ai_codec_alc_attr*/
|
||||
} ai_dev_param_cmd;
|
||||
|
||||
/*
|
||||
* 函数功能: 初始化音频输入模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_READY - AI设备节点打开失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 去初始化音频输入模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_BUSY - 设备未禁用
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频快启模式
|
||||
* 函数参数:
|
||||
* enable - 输入参数,快启模式使能标志
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许,通道已存在
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_set_share_mode(xmedia_bool enable);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输入设备默认设置参数
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* attr - 输出参数,设备属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 传入参数为空
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_get_default_attr(ai_dev dev, ai_dev_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输入设备参数
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* attr - 输入参数,设备属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 传入参数为空
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备使能状态错误
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 无效的设备参数
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_set_dev_attr(ai_dev dev, const ai_dev_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输入设备用户设置的属性
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* attr - 输出参数,设备属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 传入参数为空
|
||||
* XMEDIA_ERRCODE_NOT_CONFIG - 设备没有配置
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_get_dev_attr(ai_dev dev, ai_dev_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 使能音频输入设备
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备初始化状态错误
|
||||
* XMEDIA_ERRCODE_NOT_CONFIG - 设备没有配置
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 设备分配内存失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 函数内部参数错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_enable_dev(ai_dev dev);
|
||||
|
||||
/*
|
||||
* 函数功能: 非使能音频输入设备
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_disable_dev(ai_dev dev);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输入设备各种参数
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* cmd - 输入参数,设置的命令
|
||||
* param - 输入参数,设置命令对应的参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_set_dev_param(ai_dev dev, ai_dev_param_cmd cmd, xmedia_void* param);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输入设备通道模式
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* mode - 输入参数,通道模式
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 无效mode参数
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_set_trackmode(ai_dev dev, audio_track_mode mode);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输入设备通道模式
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* mode - 输出参数,获取的模式
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数为空
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_get_trackmode(ai_dev dev, audio_track_mode* mode);
|
||||
|
||||
/*
|
||||
* 函数功能: 创建音频输入设备的通道
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* chn_attr - 输入参数,需要设置的通道的属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 输入参数chn_attr为空
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存分配错误
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 无效的通道用户参数
|
||||
* XMEDIA_ERRCODE_NOT_ENABLE - 设备没有使能
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_create_chn(ai_dev dev, ai_chn chn, const ai_user_chn_attr* chn_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 销毁音频输入设备的通道
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_destroy_chn(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 使能音频输入设备的通道
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_enable_chn(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 非使能音频输入设备的通道
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_disable_chn(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输入设备通道算法的属性
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* attr - 输入参数,算法的属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数为空
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 无效的vqe参数
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 版本不支持
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_set_vqe_attr(ai_dev dev, ai_chn chn, const ai_vqe_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输入设备通道算法的属性
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* attr - 输出参数,算法的属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数为空
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_get_vqe_attr(ai_dev dev, ai_chn chn, ai_vqe_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 使能音频输入设备通道算法
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_enable_vqe(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 非使能音频输入设备通道算法
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_disable_vqe(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输入设备通道的音量
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* volume - 输入参数,需要设置的音量
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 内部状态空
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_set_volume(ai_dev dev, ai_chn chn, xmedia_s32 volume);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输入设备通道的音量
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* volume - 输出参数,获取的音量
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数为空
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_get_volume(ai_dev dev, ai_chn chn, xmedia_s32* volume);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输入设备通道的帧
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* frame - 输出参数,获取的输入帧
|
||||
* ext_frame - 输出参数,获取的原始或者参考
|
||||
* time_out - 输入参数,超时时间
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数空指针
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 数据buffer为空,无数据
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_acquire_frame(ai_dev dev, ai_chn chn, audio_frame* frame, audio_ext_frame* ext_frame, xmedia_s32 time_out);
|
||||
|
||||
/*
|
||||
* 函数功能: 释放音频输入设备通道的帧
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* frame - 输入参数,需要释放的输入帧
|
||||
* ext_frame - 输入参数,需要释放的原始或者参考
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数空指针
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_release_frame(ai_dev dev, ai_chn chn, audio_frame* frame, audio_ext_frame* ext_frame);
|
||||
|
||||
/*
|
||||
* 函数功能: 使能音频输入设备通道的参考帧
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效设备通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_enable_ec_frame(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 非使能音频输入设备通道的参考帧
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效设备通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_disable_ec_frame(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 使能音频输入设备通道的原始帧
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,需要设置的通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效设备通道ID
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_enable_origin_frame(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 非使能音频输入设备通道的原始帧
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,需要设置的通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效设备通道ID
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_disable_origin_frame(ai_dev dev, ai_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输入设备通道参考帧的来源
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* ref_dev - 输入参数,需要参考的源
|
||||
* ref_chn - 输入参数,需要参考的源的通道
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 错误的源
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 源不支持
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_set_ec_source(ai_dev dev, ai_chn chn, ai_ec_source ref_dev, xmedia_u32 ref_chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 音频输入设备通道保存数据接口
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* dump - 输入参数,dump数据的存储路径以及size大小
|
||||
* enable - 输入参数,dump功能使能状态
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
*/
|
||||
xmedia_s32 xmedia_ai_dump(ai_dev dev, ai_chn chn, const audio_dump* dump, xmedia_bool enable);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,490 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_API_AO_H__
|
||||
#define __XMEDIA_API_AO_H__
|
||||
|
||||
#include "common.h"
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define XMEDIA_AO_CHN_MAX 3
|
||||
#define XMEDIA_AO_SYSCHN_CHNID (XMEDIA_AO_CHN_MAX - 1)
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AO_DEV_DAC0,
|
||||
XMEDIA_AO_DEV_I2S0,
|
||||
XMEDIA_AO_DEV_MAX,
|
||||
} ao_dev;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 reserved;
|
||||
} ao_dac_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool master;
|
||||
audio_i2s_mode i2s_mode;
|
||||
audio_i2s_mclk_sel mclk_sel;
|
||||
audio_i2s_bclk_sel bclk_sel;
|
||||
xmedia_bool pcm_sample_rise_edge;
|
||||
audio_i2s_pcm_delay pcm_delay_cycle;
|
||||
} ao_i2s_attr;
|
||||
|
||||
typedef struct {
|
||||
audio_dev_work_mode mode;
|
||||
audio_sample_rate sample_rate;
|
||||
audio_channel channels;
|
||||
audio_bit_depth bit_depth;
|
||||
xmedia_u32 pcm_frame_max_num;
|
||||
xmedia_u32 pcm_samples_per_frame;
|
||||
union {
|
||||
ao_dac_attr dac_attr;
|
||||
ao_i2s_attr i2s_attr;
|
||||
} un_attr;
|
||||
} ao_dev_attr;
|
||||
|
||||
typedef enum {
|
||||
AO_VQE_ENHANCE_ATTR_VERSION_1 = 0x1,
|
||||
AO_VQE_ENHANCE_ATTR_VERSION_2 = 0x2,
|
||||
AO_VQE_ATTR_VERSION_MAX,
|
||||
} ao_vqe_attr_version;
|
||||
|
||||
typedef struct {
|
||||
ao_vqe_attr_version version;
|
||||
xmedia_void* attr; /* refer to ao_vqe_attr_v1 or ao_vqe_attr_v2 */
|
||||
} ao_vqe_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 threshold; /* support -31 ~ 0db */
|
||||
xmedia_s32 step; /* support 0 ~ 5 */
|
||||
} dac_drc_attr;
|
||||
|
||||
typedef struct ao_chn_state_s {
|
||||
xmedia_u32 total_num;
|
||||
xmedia_u32 free_num;
|
||||
xmedia_u32 busy_num;
|
||||
} ao_chn_state_s;
|
||||
|
||||
typedef enum {
|
||||
AO_PARAM_CODEC_SET_MUTE = 0x3000000, /* refer to xmedia_bool */
|
||||
AO_PARAM_CODEC_GET_MUTE, /* refer to xmedia_bool */
|
||||
AO_PARAM_CODEC_SET_DAC_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */
|
||||
AO_PARAM_CODEC_GET_DAC_GAIN, /* refer to xmedia_s32 */
|
||||
AO_PARAM_CODEC_SET_DAC_DRC_ATTR, /* not support, refer to dac_drc_attr */
|
||||
AO_PARAM_CODEC_GET_DAC_DRC_ATTR, /* not support, refer to dac_drc_attr */
|
||||
AO_PARAM_CODEC_CLEAR_DAC_DRC_ATTR, /* not support, refer to dac_drc_attr */
|
||||
AO_PARAM_CODEC_SET_DAC_LEFT_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */
|
||||
AO_PARAM_CODEC_GET_DAC_LEFT_GAIN, /* refer to xmedia_s32 */
|
||||
AO_PARAM_CODEC_SET_DAC_RIGHT_GAIN, /* refer to xmedia_s32, range[-95,18], by step of 1 dB */
|
||||
AO_PARAM_CODEC_GET_DAC_RIGHT_GAIN, /* refer to xmedia_s32 */
|
||||
AO_PARAM_CODEC_SET_DAC_LEFT_MUTE, /* refer to xmedia_bool */
|
||||
AO_PARAM_CODEC_GET_DAC_LEFT_MUTE, /* refer to xmedia_bool */
|
||||
AO_PARAM_CODEC_SET_DAC_RIGHT_MUTE, /* refer to xmedia_bool */
|
||||
AO_PARAM_CODEC_GET_DAC_RIGHT_MUTE, /* refer to xmedia_bool */
|
||||
|
||||
AO_PARAM_SET_OUTPORT_VOLUME, /* not support, refer to xmedia_s32, range[-81,6], by step of 1 dB */
|
||||
AO_PARAM_GET_OUTPORT_VOLUME, /* not support, refer to xmedia_s32 */
|
||||
AO_PARAM_SET_OUTPORT_MUTE, /* not support, refer to xmedia_bool */
|
||||
AO_PARAM_GET_OUTPORT_MUTE, /* not support, refer to xmedia_bool */
|
||||
|
||||
AO_PARAM_CODEC_SET_DAC_ANALOG_GAIN, /* refer to xmedia_s32, range[-21,0], by step of 3 dB */
|
||||
AO_PARAM_CODEC_GET_DAC_ANALOG_GAIN, /* refer to xmedia_s32 */
|
||||
} ao_dev_param_cmd;
|
||||
|
||||
/*
|
||||
* 函数功能: 初始化音频输出模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_READY - AO节点打开失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 去初始化音频输出模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
XMEDIA_ERRCODE_BUSY - 设备未禁用
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输出设备默认设置参数
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* attr - 输出参数,设备属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 传入参数为空
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_get_default_attr(ao_dev dev, ao_dev_attr *attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输出设备参数
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* attr - 输入参数,设备属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 传入参数为空
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数校验失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_set_dev_attr(ao_dev dev, const ao_dev_attr *attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输出设备用户设置的属性
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* attr - 输出参数,设备属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 传入参数为空
|
||||
* XMEDIA_ERRCODE_NOT_CONFIG - 用户没有配置参数
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_get_dev_attr(ao_dev dev, ao_dev_attr *attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 使能音频输出设备
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误
|
||||
* XMEDIA_ERRCODE_NOT_CONFIG - 设备没有配置参数
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 设备分配内存失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 函数内部位宽错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_enable_dev(ao_dev dev);
|
||||
|
||||
/*
|
||||
* 函数功能: 禁用音频输出设备
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 设备初始化状态错误
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许,通道未销毁
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_disable_dev(ao_dev dev);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输出设备各种参数
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* cmd - 输入参数,设置的命令
|
||||
* param - 输入参数,需要参考的参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - param为空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数校验失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_set_dev_param(ao_dev dev, ao_dev_param_cmd cmd, xmedia_void* param);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输出设备声道模式
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* mode - 输入参数,通道模式
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 无效mode参数
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_set_trackmode(ao_dev dev, audio_track_mode mode);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输出设备声道模式
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* mode - 输出参数,获取的模式
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - mode空指针
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_get_trackmode(ao_dev dev, audio_track_mode* mode);
|
||||
|
||||
/*
|
||||
* 函数功能: 创建音频输出设备通道
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 内部参数为空
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 内存分配失败
|
||||
* XMEDIA_ERRCODE_NOT_ENABLE - 设备使能状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_create_chn(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 销毁音频输出设备通道
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_DISABLE - 通道使能状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_destroy_chn(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 使能音频输出设备通道
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_enable_chn(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 禁用音频输出设备通道
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_disable_chn(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 擦除音频输出通道buf缓存
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_flush_chn(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 暂停音频输出通道播放
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_pause_chn(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 恢复音频输出通道播放
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_resume_chn(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 查询通道播放状态
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* state - 输出参数,通道播放状态
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数为空
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 通道不存在
|
||||
* XMEDIA_ERRCODE_NOT_ENABLE - 通道未使能
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_query_chn_state(ao_dev dev, ao_chn chn, ao_chn_state_s* state);
|
||||
|
||||
/*
|
||||
* 函数功能: 往音频输出设备通道送入音频帧
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* frame - 输入参数,音频帧信息
|
||||
* time_out - 输入参数,超时时间
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_BUFFER_FULL - 音频输出设备通道buf已满
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_send_frame(ao_dev dev, ao_chn chn, const audio_frame* frame, xmedia_s32 time_out);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输出设备通道算法的属性
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* attr - 输入参数,算法的属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效设备通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数为空
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 设备状态错误
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数校验失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_set_vqe_attr(ao_dev dev, ao_chn chn, const ao_vqe_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输出设备通道算法的属性
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,需要的设置算法的通道ID
|
||||
* attr - 输出参数,算法的属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效设备通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 参数为空
|
||||
* XMEDIA_ERRCODE_NOT_CONFIG - 用户没有配置参数
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数校验失败
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_get_vqe_attr(ao_dev dev, ao_chn chn, ao_vqe_attr* attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 使能音频输出通道语音算法功能
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,需要的使能算法的通道ID
|
||||
* enable - 输入参数,使能状态
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_CONFIG - 没有设置算法参数
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_enable_vqe(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 禁用音频输出通道语音算法功能
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,需要的使能算法的通道ID
|
||||
* enable - 输出参数,使能状态
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_CONFIG - 没有设置算法参数
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_disable_vqe(ao_dev dev, ao_chn chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输出设备通道的音量
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,需要设置的通道ID
|
||||
* volume - 输入参数,需要设置的音量
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NOT_ENABLE - 设备通道或者算法未使能
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_set_volume(ao_dev dev, ao_chn chn, xmedia_s32 volume);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取音频输出设备通道的音量
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,需要设置的通道ID
|
||||
* volume - 输出参数,获取的音量
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - volume为空指针
|
||||
* XMEDIA_ERRCODE_NOT_ENABLE - 设备通道或者算法未使能
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_get_volume(ao_dev dev, ao_chn chn, xmedia_s32* volume);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输出设备通道绑定状态
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* dst_chn - 输入参数,ao的通道ID
|
||||
* module - 输入参数,绑定到ao的模块ID
|
||||
* src_chn - 输入参数,绑定到ao的模块通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_bind(ao_dev dev, ao_chn chn, xmedia_mod_id src_module, xmedia_u32 src_chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输出设备通道解绑
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* dst_chn - 输入参数,ao的通道ID
|
||||
* module - 输入参数,绑定到ao的模块ID
|
||||
* src_chn - 输入参数,绑定到ao的模块通道ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_unbind(ao_dev dev, ao_chn chn, xmedia_mod_id src_module, xmedia_u32 src_chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置音频输出设备通道dump信息以及使能状态
|
||||
* 函数参数:
|
||||
* dev - 输入参数,设备ID
|
||||
* chn - 输入参数,通道ID
|
||||
* dump - 输入参数,dump数据的存储路径以及size大小
|
||||
* enable - 输入参数,dump功能使能状态
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备ID
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道ID
|
||||
* XMEDIA_ERRCODE_NULL_PTR - dump为空指针
|
||||
*/
|
||||
xmedia_s32 xmedia_ao_dump(ao_dev dev, ao_chn chn, const audio_dump* dump, xmedia_bool enable);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _XMEDIA_AUDIO_CODEC_H_
|
||||
#define _XMEDIA_AUDIO_CODEC_H_
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#define CODEC_VERSION_MAX_LEN 64
|
||||
|
||||
typedef enum {
|
||||
CODEC_MASK_G711 = 0x01,
|
||||
CODEC_MASK_G726 = 0x02,
|
||||
CODEC_MASK_ADPCM = 0x04,
|
||||
CODEC_MASK_AAC = 0x08,
|
||||
CODEC_MASK_HEAAC = 0x10,
|
||||
CODEC_MASK_MP3 = 0x20,
|
||||
CODEC_MASK_LPCM = 0x40,
|
||||
CODEC_MASK_MAX,
|
||||
} codec_mask_type;
|
||||
|
||||
typedef enum {
|
||||
CODEC_TYPE_G711 = 0x01,
|
||||
CODEC_TYPE_G726 = 0x02,
|
||||
CODEC_TYPE_ADPCM = 0x03,
|
||||
CODEC_TYPE_AAC = 0x04,
|
||||
CODEC_TYPE_MP3 = 0x05,
|
||||
CODEC_TYPE_LPCM = 0x06,
|
||||
CODEC_TYPE_MAX,
|
||||
} audio_codec_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s8 version[CODEC_VERSION_MAX_LEN];
|
||||
} codec_version;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 channels;
|
||||
xmedia_bool interleaved;
|
||||
xmedia_u32 bit_per_sample;
|
||||
xmedia_u32 sample_rate;
|
||||
xmedia_u32 sample_per_frame;
|
||||
xmedia_void* encoder_config;
|
||||
} encoder_param;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s64 pts;
|
||||
xmedia_u8* data;
|
||||
xmedia_u32 size;
|
||||
} encoder_in_packet;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8* out_buf;
|
||||
xmedia_u32 out_buf_size;
|
||||
xmedia_u32 out_frame_len;
|
||||
xmedia_u32 bit_rate;
|
||||
}encoder_out_packet;
|
||||
|
||||
typedef struct {
|
||||
audio_codec_type type;
|
||||
xmedia_char* name; /* encoder type,be used to print proc information */
|
||||
xmedia_s32 (*get_version)(codec_version* ver);
|
||||
xmedia_s32 (*init)(encoder_param* param, xmedia_void** h_encoder);
|
||||
xmedia_s32 (*deinit)(xmedia_void* h_encoder);
|
||||
xmedia_s32 (*get_max_bytes_per_frame)(xmedia_void* h_encoder, xmedia_u32* out_bytes);
|
||||
xmedia_s32 (*set_config)(xmedia_void* h_encoder, xmedia_void* config);
|
||||
xmedia_s32 (*encode_frame)(xmedia_void* h_encoder, encoder_in_packet* frame, encoder_out_packet* stream);
|
||||
} audio_encoder;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 desired_out_channels;
|
||||
xmedia_u32 desired_out_samplerate;
|
||||
xmedia_u32 bit_per_sample;
|
||||
xmedia_bool interleaved;
|
||||
xmedia_void *decoder_config;
|
||||
} decoder_param;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8* data;
|
||||
xmedia_s32 size;
|
||||
xmedia_bool eos;
|
||||
xmedia_s64 pts;
|
||||
xmedia_u32 reserved;
|
||||
} decoder_in_packet;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8* out_buf;
|
||||
xmedia_u32 out_buf_size;
|
||||
xmedia_u32 out_samples;
|
||||
xmedia_bool interleaved;
|
||||
xmedia_u32 bit_per_sample;
|
||||
xmedia_u32 channels;
|
||||
xmedia_u32 sample_rate;
|
||||
xmedia_u32 bit_rate;
|
||||
xmedia_u32 decoder_bytes_left;
|
||||
xmedia_u32 frame_index;
|
||||
} decoder_out_packet;
|
||||
|
||||
typedef struct {
|
||||
audio_codec_type type;
|
||||
xmedia_char* name;
|
||||
xmedia_s32 (*get_version)(codec_version* ver);
|
||||
xmedia_s32 (*init)(decoder_param* param, xmedia_void** h_decoder);
|
||||
xmedia_s32 (*deinit)(xmedia_void* h_decoder);
|
||||
xmedia_s32 (*get_max_bytes_per_frame)(xmedia_void* h_decoder, xmedia_u32* out_bytes);
|
||||
xmedia_s32 (*set_config)(xmedia_void* h_decoder, xmedia_void* config);
|
||||
xmedia_s32 (*decode_frame)(xmedia_void* h_decoder, decoder_in_packet* stream, decoder_out_packet* frame);
|
||||
xmedia_s32 (*reset)(xmedia_void* h_decoder);
|
||||
} audio_decoder;
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#endif/* End of #ifndef __XM_AUDIO_CODEC_H__ */
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef _AUDIO_CODEC_AAC_H_
|
||||
#define _AUDIO_CODEC_AAC_H_
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_codec.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
/*samples per frame for AACLC and aacPlus */
|
||||
#define AACLD_SAMPLES_PER_FRAME 512
|
||||
#define AACLC_SAMPLES_PER_FRAME 1024
|
||||
#define AACPLUS_SAMPLES_PER_FRAME 2048
|
||||
|
||||
/*max length of AAC stream by bytes */
|
||||
#define MAX_AAC_MAINBUF_SIZE 768*2
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AAC_TYPE_AACLC = 0,
|
||||
AAC_TYPE_EAAC = 1, /* eAAC (HEAAC or AAC+ or aacPlusV1) */
|
||||
AAC_TYPE_EAACPLUS = 2, /* eAAC+ (AAC++ or aacPlusV2) */
|
||||
AAC_TYPE_AACLD = 3,
|
||||
AAC_TYPE_AACELD = 4,
|
||||
AAC_TYPE_MAX
|
||||
} aac_type;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AAC_BPS_8K = 8000,
|
||||
AAC_BPS_16K = 16000,
|
||||
AAC_BPS_22K = 22000,
|
||||
AAC_BPS_24K = 24000,
|
||||
AAC_BPS_32K = 32000,
|
||||
AAC_BPS_48K = 48000,
|
||||
AAC_BPS_64K = 64000,
|
||||
AAC_BPS_96K = 96000,
|
||||
AAC_BPS_128K = 128000,
|
||||
AAC_BPS_256K = 256000,
|
||||
AAC_BPS_320K = 320000,
|
||||
AAC_BPS_MAX
|
||||
} aac_bps;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AAC_TRANS_TYPE_ADTS = 0,
|
||||
AAC_TRANS_TYPE_LOAS= 1,
|
||||
AAC_TRANS_TYPE_MAX
|
||||
} aac_trans_type;
|
||||
|
||||
/*
|
||||
AAC Commendatory Parameter:
|
||||
Sampling Rate(HZ) LC bit_rate(Kbit/s) EAAC bit_rate (Kbit/s) EAAC+ bit_rate (Kbit/s)
|
||||
48000 128 48 32,24
|
||||
44100 128 48 32,24
|
||||
32000 96 22 16
|
||||
24000 64
|
||||
22050 64
|
||||
16000 48
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
aac_type type; /* AAC profile type */
|
||||
aac_bps bit_rate; /* AAC bit_rate (LC:16~320, EAAC:24~128, EAAC+:16~64, AACLD:16~320, AACELD:32~320) */
|
||||
xmedia_u32 sample_rate; /* AAC sample rate (LC:8~48, EAAC:16~48, EAAC+:16~48, AACLD:8~48, AACELD:8~48) */
|
||||
xmedia_u32 bit_width; /* AAC bit width (only support 16bit) */
|
||||
xmedia_u32 channels;
|
||||
aac_trans_type trans_type;
|
||||
xmedia_u16 band_width; /* targeted audio band_width in Hz (0 or 1000~enSmpRate/2), the default is 0 */
|
||||
} aac_encoder_config;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
aac_trans_type trans_type;
|
||||
} aac_decoder_config;
|
||||
|
||||
#define aac_enc_get_default_config(config) \
|
||||
do { \
|
||||
((aac_encoder_config *)(config))->type = AAC_TYPE_AACLC; \
|
||||
((aac_encoder_config *)(config))->bit_width = 16; \
|
||||
((aac_encoder_config *)(config))->bit_rate = 128000; \
|
||||
((aac_encoder_config *)(config))->sample_rate = 48000; \
|
||||
((aac_encoder_config *)(config))->band_width = ((aac_encoder_config *)(config))->sample_rate / 2; \
|
||||
((aac_encoder_config *)(config))->channels = 2; \
|
||||
((aac_encoder_config *)(config))->trans_type = AAC_TRANS_TYPE_ADTS; \
|
||||
} while (0)
|
||||
|
||||
#define aac_enc_get_default_param(open_param, private_config) \
|
||||
do { \
|
||||
xmedia_u32 in_sample_per_frame = 1024; \
|
||||
if ((((aac_encoder_config *)private_config)->type == AAC_TYPE_EAAC) || \
|
||||
(((aac_encoder_config *)private_config)->type == AAC_TYPE_EAACPLUS)) { \
|
||||
in_sample_per_frame <<= 1; \
|
||||
} else if ((((aac_encoder_config *)private_config)->type == AAC_TYPE_AACLD) || \
|
||||
(((aac_encoder_config *)private_config)->type == AAC_TYPE_AACELD)) { \
|
||||
in_sample_per_frame >>= 1; \
|
||||
} \
|
||||
((encoder_param *)(open_param))->channels = \
|
||||
((aac_encoder_config *)private_config)->channels; \
|
||||
((encoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
||||
((encoder_param *)(open_param))->bit_per_sample = \
|
||||
((aac_encoder_config *)private_config)->bit_width; \
|
||||
((encoder_param *)(open_param))->sample_rate = \
|
||||
((aac_encoder_config *)private_config)->sample_rate; \
|
||||
((encoder_param *)(open_param))->sample_per_frame = in_sample_per_frame; \
|
||||
((encoder_param *)(open_param))->encoder_config = (xmedia_void *)private_config; \
|
||||
} while (0)
|
||||
|
||||
#define aac_dec_get_default_config(config) \
|
||||
do { \
|
||||
((aac_decoder_config *)(config))->trans_type = AAC_TRANS_TYPE_ADTS; \
|
||||
} while (0)
|
||||
|
||||
#define aac_dec_get_default_param(open_param, private_config) \
|
||||
do { \
|
||||
((decoder_param *)(open_param))->desired_out_channels = 2; \
|
||||
((decoder_param *)(open_param))->desired_out_samplerate = 48000; \
|
||||
((decoder_param *)(open_param))->bit_per_sample = 16; \
|
||||
((decoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
||||
((decoder_param *)(open_param))->decoder_config = (xmedia_void *)private_config; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* 函数功能:获取aac解码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 解码器入口句柄
|
||||
*/
|
||||
audio_decoder* xmedia_aac_dec_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取aac编码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 编码器入口句柄
|
||||
*/
|
||||
audio_encoder* xmedia_aac_enc_get_handle(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef _AUDIO_CODEC_MP3_H_
|
||||
#define _AUDIO_CODEC_MP3_H_
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_codec.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
/*samples per frame for MP3LC and MP3Plus */
|
||||
#define MP3_SAMPLES_PER_FRAME 1152
|
||||
|
||||
/*max length of MP3 stream by bytes */
|
||||
#define MAX_MP3_MAINBUF_SIZE 1152 * 2
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MP3_BPS_8K = 8000,
|
||||
MP3_BPS_16K = 16000,
|
||||
MP3_BPS_24K = 24000,
|
||||
MP3_BPS_32K = 32000,
|
||||
MP3_BPS_40K = 40000,
|
||||
MP3_BPS_48K = 48000,
|
||||
MP3_BPS_56K = 56000,
|
||||
MP3_BPS_64K = 64000,
|
||||
MP3_BPS_80K = 80000,
|
||||
MP3_BPS_96K = 96000,
|
||||
MP3_BPS_112K = 112000,
|
||||
MP3_BPS_128K = 128000,
|
||||
MP3_BPS_144K = 144000,
|
||||
MP3_BPS_160K = 160000,
|
||||
MP3_BPS_192K = 192000,
|
||||
MP3_BPS_224K = 224000,
|
||||
MP3_BPS_256K = 256000,
|
||||
MP3_BPS_320K = 320000,
|
||||
MP3_BPS_MAX
|
||||
} mp3_bps;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MP3_VBR_OFF=0,
|
||||
MP3_VBR_MT, /* obsolete, same as vbr_mtrh */
|
||||
MP3_VBR_RH,
|
||||
MP3_VBR_ABR,
|
||||
MP3_VBR_MTRH,
|
||||
MP3_VBR_MAX_INDICATOR, /* Don't use this! It's used for sanity checks. */
|
||||
MP3_VBR_DEFAULT=MP3_VBR_MTRH /* change this to change the default VBR mode of LAME */
|
||||
} mp3_vbr_mode;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/*vbr_off for constant bitrate
|
||||
vbr_abr for variable bitrate abr mode
|
||||
vbr_default for variable bitrate vbr mode
|
||||
*/
|
||||
mp3_vbr_mode mode;
|
||||
/* quality setting 0..9., default is 7
|
||||
0 = slowest algorithms, but potentially highest quality
|
||||
9 = faster algorithms, very poor quality
|
||||
*/
|
||||
xmedia_u32 quality;
|
||||
/*
|
||||
MPEG-1 layer III sample frequencies (kHz): 32 48 44.1
|
||||
bitrates (kbps): 32 40 48 56 64 80 96 112 128 160 192 224 256 320
|
||||
MPEG-2 layer III sample frequencies (kHz): 16 24 22.05
|
||||
bitrates (kbps): 8 16 24 32 40 48 56 64 80 96 112 128 144 160
|
||||
MPEG-2.5 layer III sample frequencies (kHz): 8 12 11.025
|
||||
bitrates (kbps): 8 16 24 32 40 48 56 64
|
||||
The bitrate to be used. Default is 128kbps in MPEG1 (64 for mono),
|
||||
64kbps in MPEG2 (32 for mono) and 32kbps in MPEG2.5 (16 for mono).
|
||||
*/
|
||||
mp3_bps bit_rate;
|
||||
xmedia_s32 bit_per_sample;
|
||||
xmedia_u32 channels;
|
||||
xmedia_u32 sample_rate;
|
||||
} mp3_encoder_config;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
xmedia_void* reversed;
|
||||
} mp3_decoder_config;
|
||||
|
||||
#define mp3_enc_get_default_config(config) \
|
||||
do { \
|
||||
((mp3_encoder_config *)(config))->quality = 7; \
|
||||
((mp3_encoder_config *)(config))->bit_rate = MP3_BPS_128K; \
|
||||
((mp3_encoder_config *)(config))->sample_rate = 48000; \
|
||||
((mp3_encoder_config *)(config))->channels = 2; \
|
||||
((mp3_encoder_config *)(config))->bit_per_sample = 16; \
|
||||
((mp3_encoder_config *)(config))->mode = MP3_VBR_OFF; \
|
||||
} while (0)
|
||||
|
||||
#define mp3_enc_get_default_param(open_param, private_config) \
|
||||
do { \
|
||||
xmedia_u32 in_sample_per_frame = 1152; \
|
||||
((encoder_param *)(open_param))->channels = \
|
||||
((mp3_encoder_config *)private_config)->channels; \
|
||||
((encoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
||||
((encoder_param *)(open_param))->bit_per_sample = \
|
||||
((mp3_encoder_config *)private_config)->bit_per_sample; \
|
||||
((encoder_param *)(open_param))->sample_rate = \
|
||||
((mp3_encoder_config *)private_config)->sample_rate; \
|
||||
((encoder_param *)(open_param))->sample_per_frame = in_sample_per_frame; \
|
||||
((encoder_param *)(open_param))->encoder_config = (xmedia_void *)private_config; \
|
||||
} while (0)
|
||||
|
||||
#define mp3_dec_get_default_config(config) \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
#define mp3_dec_get_default_param(open_param, private_config) \
|
||||
do { \
|
||||
((decoder_param *)(open_param))->desired_out_channels = 2; \
|
||||
((decoder_param *)(open_param))->desired_out_samplerate = 48000; \
|
||||
((decoder_param *)(open_param))->bit_per_sample = 16; \
|
||||
((decoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
||||
((decoder_param *)(open_param))->decoder_config = (xmedia_void *)private_config; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* 函数功能:获取aac编码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 编码器入口句柄
|
||||
*/
|
||||
audio_encoder* xmedia_mp3_enc_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取mp3解码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 解码器入口句柄
|
||||
*/
|
||||
audio_decoder* xmedia_mp3_dec_get_handle(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _AUDIO_CODEC_VOICE_H_
|
||||
#define _AUDIO_CODEC_VOICE_H_
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_codec.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#define MAX_AUDIO_POINT_BYTES 4
|
||||
#define MAX_VOICE_POINT_NUM 480
|
||||
#define MIN_AUDIO_POINT_NUM 80
|
||||
|
||||
typedef enum {
|
||||
VOICE_FORMAT_G711_A = 0x01,
|
||||
VOICE_FORMAT_G711_U = 0x02,
|
||||
VOICE_FORMAT_ADPCM_DVI4 = 0x03,
|
||||
VOICE_FORMAT_G726_16KBPS = 0x04,
|
||||
VOICE_FORMAT_G726_24KBPS = 0x05,
|
||||
VOICE_FORMAT_G726_32KBPS = 0x06,
|
||||
VOICE_FORMAT_G726_40KBPS = 0x07,
|
||||
VOICE_FORMAT_ADPCM_IMA = 0x23,
|
||||
VOICE_FORMAT_MEDIA_G726_16KBPS = 0x24,
|
||||
VOICE_FORMAT_MEDIA_G726_24KBPS = 0x25,
|
||||
VOICE_FORMAT_MEDIA_G726_32KBPS = 0x26,
|
||||
VOICE_FORMAT_MEDIA_G726_40KBPS = 0x27,
|
||||
VOICE_FORMAT_G711_ORG_A = 0x41,
|
||||
VOICE_FORMAT_G711_ORG_U = 0x42,
|
||||
VOICE_FORMAT_ADPCM_ORG_DVI4 = 0x43,
|
||||
VOICE_FORMAT_G726_ORG_16KBPS = 0x44,
|
||||
} voice_format;
|
||||
|
||||
typedef enum {
|
||||
VOICE_PER_SAMPLE_80 = 80,
|
||||
VOICE_PER_SAMPLE_81 = 81,
|
||||
VOICE_PER_SAMPLE_160 = 160,
|
||||
VOICE_PER_SAMPLE_161 = 161,
|
||||
VOICE_PER_SAMPLE_240 = 240,
|
||||
VOICE_PER_SAMPLE_241 = 241,
|
||||
VOICE_PER_SAMPLE_320 = 320,
|
||||
VOICE_PER_SAMPLE_321 = 321,
|
||||
VOICE_PER_SAMPLE_480 = 480,
|
||||
VOICE_PER_SAMPLE_481 = 481,
|
||||
} voice_per_sample;
|
||||
|
||||
typedef struct {
|
||||
voice_format format;
|
||||
voice_per_sample sample_per_frame;
|
||||
} voice_encoder_config;
|
||||
|
||||
typedef struct {
|
||||
voice_format format;
|
||||
xmedia_u32 sample_rate;
|
||||
} voice_decoder_config;
|
||||
|
||||
#define voice_enc_get_default_config(config) do { \
|
||||
((voice_encoder_config *)(config))->format = VOICE_FORMAT_G711_A; \
|
||||
((voice_encoder_config *)(config))->sample_per_frame = VOICE_PER_SAMPLE_320; \
|
||||
} while (0)
|
||||
|
||||
#define voice_enc_get_default_param(open_param, private_config) do { \
|
||||
((encoder_param *)(open_param))->channels = 1; \
|
||||
((encoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
||||
((encoder_param *)(open_param))->bit_per_sample = 16; \
|
||||
((encoder_param *)(open_param))->sample_rate = 8000; \
|
||||
((encoder_param *)(open_param))->sample_per_frame = ((voice_encoder_config *)(private_config))->sample_per_frame; \
|
||||
((encoder_param *)(open_param))->encoder_config = (xmedia_void *)(private_config); \
|
||||
} while (0)
|
||||
|
||||
#define voice_dec_get_default_config(config) do { \
|
||||
((voice_decoder_config *)(config))->format = VOICE_FORMAT_G711_A; \
|
||||
((voice_decoder_config *)(config))->sample_rate = 8000; \
|
||||
} while (0)
|
||||
|
||||
#define voice_dec_get_default_param(open_param, private_config) do { \
|
||||
((decoder_param *)(open_param))->desired_out_channels = 1; \
|
||||
((decoder_param *)(open_param))->desired_out_samplerate = 8000; \
|
||||
((decoder_param *)(open_param))->bit_per_sample = 16; \
|
||||
((decoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
||||
((decoder_param *)(open_param))->decoder_config = (xmedia_void *)(private_config); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* 函数功能:获取g711编码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 编码器入口句柄
|
||||
*/
|
||||
audio_encoder* xmedia_g711_enc_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取g711解码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 解码器入口句柄
|
||||
*/
|
||||
audio_decoder* xmedia_g711_dec_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取g726编码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 编码器入口句柄
|
||||
*/
|
||||
audio_encoder* xmedia_g726_enc_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取g726解码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 解码器入口句柄
|
||||
*/
|
||||
audio_decoder* xmedia_g726_dec_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取adpcm编码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 编码器入口句柄
|
||||
*/
|
||||
audio_encoder* xmedia_adpcm_enc_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取adpcm解码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 解码器入口句柄
|
||||
*/
|
||||
audio_decoder* xmedia_adpcm_dec_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取lpcm编码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 编码器入口句柄
|
||||
*/
|
||||
audio_encoder* xmedia_lpcm_enc_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取lpcm解码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 解码器入口句柄
|
||||
*/
|
||||
audio_decoder* xmedia_lpcm_dec_get_handle(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,164 @@
|
||||
#ifndef _XMEDIA_API_AUDIO_H_
|
||||
#define _XMEDIA_API_AUDIO_H_
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define MAX_AUDIO_FILE_PATH_LEN 256
|
||||
#define MAX_AUDIO_FILE_PATH_NAME 256
|
||||
#define MIN_AUDIO_FILE_SIZE 1 /* 1K */
|
||||
|
||||
typedef xmedia_u32 adec_chn;
|
||||
typedef xmedia_u32 aenc_chn;
|
||||
typedef xmedia_u32 ao_chn;
|
||||
typedef xmedia_u32 ai_chn;
|
||||
|
||||
typedef enum {
|
||||
AUDIO_SAMPLE_RATE_UNKNOWN = 0,
|
||||
AUDIO_SAMPLE_RATE_8000 = 8000,
|
||||
AUDIO_SAMPLE_RATE_12000 = 12000,
|
||||
AUDIO_SAMPLE_RATE_11025 = 11025,
|
||||
AUDIO_SAMPLE_RATE_16000 = 16000,
|
||||
AUDIO_SAMPLE_RATE_22050 = 22050,
|
||||
AUDIO_SAMPLE_RATE_24000 = 24000,
|
||||
AUDIO_SAMPLE_RATE_32000 = 32000,
|
||||
AUDIO_SAMPLE_RATE_44100 = 44100,
|
||||
AUDIO_SAMPLE_RATE_48000 = 48000,
|
||||
AUDIO_SAMPLE_RATE_64000 = 64000,
|
||||
AUDIO_SAMPLE_RATE_96000 = 96000,
|
||||
AUDIO_SAMPLE_RATE_MAX,
|
||||
} audio_sample_rate;
|
||||
|
||||
typedef enum {
|
||||
AUDIO_BIT_DEPTH_UNKNOWN = 0,
|
||||
AUDIO_BIT_DEPTH_8 = 8,
|
||||
AUDIO_BIT_DEPTH_16 = 16,
|
||||
AUDIO_BIT_DEPTH_24 = 24,
|
||||
AUDIO_BIT_DEPTH_32 = 32,
|
||||
AUDIO_BIT_DEPTH_MAX,
|
||||
} audio_bit_depth;
|
||||
|
||||
typedef enum {
|
||||
AUDIO_CHANNEL_INVALID = -1,
|
||||
AUDIO_CHANNEL_1 = 1,
|
||||
AUDIO_CHANNEL_2 = 2,
|
||||
AUDIO_CHANNEL_4 = 4,
|
||||
AUDIO_CHANNEL_8 = 8,
|
||||
AUDIO_CHANNEL_16 = 16,
|
||||
AUDIO_CHANNEL_32 = 32,
|
||||
AUDIO_CHANNEL_MAX,
|
||||
} audio_channel;
|
||||
|
||||
typedef enum {
|
||||
INPUT_MODE_SINGLE_ENDED = 1,
|
||||
INPUT_MODE_DIFFERENTIAL,
|
||||
INPUT_MODE_MAX,
|
||||
} analog_input_mode;
|
||||
|
||||
typedef enum {
|
||||
AUDIO_DEV_WORK_MODE_MONO = 0,
|
||||
AUDIO_DEV_WORK_MODE_QUEUE = 1,
|
||||
} audio_dev_work_mode;
|
||||
|
||||
typedef enum {
|
||||
AUDIO_TRACK_MODE_STEREO = 0,
|
||||
AUDIO_TRACK_MODE_DOUBLE_LEFT,
|
||||
AUDIO_TRACK_MODE_DOUBLE_RIGHT,
|
||||
AUDIO_TRACK_MODE_EXCHANGE,
|
||||
AUDIO_TRACK_MODE_DOUBLE_MONO,
|
||||
AUDIO_TRACK_MODE_ONLY_RIGHT,
|
||||
AUDIO_TRACK_MODE_ONLY_LEFT,
|
||||
AUDIO_TRACK_MODE_MUTED,
|
||||
|
||||
AUDIO_TRACK_MODE_MAX
|
||||
} audio_track_mode;
|
||||
|
||||
typedef enum {
|
||||
|
||||
AUDIO_I2S_STD_MODE = 0,
|
||||
AUDIO_I2S_PCM_MODE,
|
||||
AUDIO_I2S_TDM_MODE,
|
||||
AUDIO_I2S_TDMPCM_MODE,
|
||||
AUDIO_I2S_MODE_MAX
|
||||
} audio_i2s_mode;
|
||||
|
||||
typedef enum {
|
||||
AUDIO_I2S_PCM_0_DELAY = 0, /* 0 bclk cycles delay */
|
||||
AUDIO_I2S_PCM_1_DELAY = 1, /* 1 bclk cycles delay */
|
||||
AUDIO_I2S_PCM_8_DELAY = 8, /* 8 bclk cycles delay */
|
||||
AUDIO_I2S_PCM_16_DELAY = 16, /* 16 bclk cycles delay */
|
||||
AUDIO_I2S_PCM_17_DELAY = 17, /* 17 bclk cycles delay */
|
||||
AUDIO_I2S_PCM_24_DELAY = 24, /* 24 bclk cycles delay */
|
||||
AUDIO_I2S_PCM_32_DELAY = 32, /* 32 bclk cycles delay */
|
||||
AUDIO_I2S_PCM_DELAY_MAX
|
||||
} audio_i2s_pcm_delay;
|
||||
|
||||
typedef enum {
|
||||
AUDIO_I2S_BCLK_1_DIV = 1,
|
||||
AUDIO_I2S_BCLK_2_DIV = 2,
|
||||
AUDIO_I2S_BCLK_3_DIV = 3,
|
||||
AUDIO_I2S_BCLK_4_DIV = 4,
|
||||
AUDIO_I2S_BCLK_6_DIV = 6,
|
||||
AUDIO_I2S_BCLK_8_DIV = 8,
|
||||
AUDIO_I2S_BCLK_12_DIV = 12,
|
||||
AUDIO_I2S_BCLK_24_DIV = 24,
|
||||
AUDIO_I2S_BCLK_32_DIV = 32,
|
||||
AUDIO_I2S_BCLK_48_DIV = 48,
|
||||
AUDIO_I2S_BCLK_64_DIV = 64,
|
||||
AUDIO_I2S_BCLK_128_DIV = 128,
|
||||
AUDIO_I2S_BCLK_MAX
|
||||
} audio_i2s_bclk_sel;
|
||||
|
||||
typedef enum {
|
||||
AUDIO_I2S_MCLK_128_FS = 0, /* mclk 128*fs */
|
||||
AUDIO_I2S_MCLK_256_FS, /* mclk 256*fs */
|
||||
AUDIO_I2S_MCLK_384_FS, /* mclk 384*fs */
|
||||
AUDIO_I2S_MCLK_512_FS, /* mclk 512*fs */
|
||||
AUDIO_I2S_MCLK_768_FS, /* mclk 768*fs */
|
||||
AUDIO_I2S_MCLK_1024_FS, /* mclk 1024*fs */
|
||||
AUDIO_I2S_MCLK_MAX
|
||||
} audio_i2s_mclk_sel;
|
||||
|
||||
typedef struct {
|
||||
audio_channel channels;
|
||||
audio_sample_rate sample_rate;
|
||||
audio_bit_depth bit_depth;
|
||||
xmedia_bool interleaved;
|
||||
xmedia_u64 timestamp;
|
||||
xmedia_u32 channel_mask;
|
||||
xmedia_u32 index;
|
||||
xmedia_u32 size;
|
||||
xmedia_void* data;
|
||||
} audio_frame;
|
||||
|
||||
typedef struct {
|
||||
audio_frame org_frame;
|
||||
audio_frame ec_frame;
|
||||
} audio_ext_frame;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 len;
|
||||
xmedia_u32 index;
|
||||
xmedia_u64 timestamp;
|
||||
xmedia_void* data;
|
||||
} audio_stream;
|
||||
|
||||
typedef struct {
|
||||
xmedia_char file_path[MAX_AUDIO_FILE_PATH_LEN];
|
||||
xmedia_char file_name[MAX_AUDIO_FILE_PATH_NAME];
|
||||
xmedia_u32 max_file_size;
|
||||
} audio_dump;
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _XMEDIA_AUDIO_RESAMPLER_H_
|
||||
#define _XMEDIA_AUDIO_RESAMPLER_H_
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
#endif
|
||||
|
||||
xmedia_void *xmedia_audio_resampler_create(xmedia_s32 in_rate, xmedia_s32 out_rate, xmedia_s32 chans);
|
||||
xmedia_s32 xmedia_audio_resampler_process(xmedia_void *inst, xmedia_s16 *in_buf, xmedia_s32 in_samps, xmedia_s16 *out_buf);
|
||||
xmedia_void xmedia_audio_resampler_destroy(xmedia_void *inst);
|
||||
xmedia_s32 xmedia_audio_resampler_getmaxoutputnum(xmedia_void *inst, xmedia_s32 in_samps);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef _XMEDIA_API_VQE__H_
|
||||
#define _XMEDIA_API_VQE__H_
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* 函数功能:注册音频处理算法
|
||||
* 函数参数:
|
||||
* dev - 输入参数,算法掩码
|
||||
* chn - 输入参数,算法句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 无效参数
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
*/
|
||||
xmedia_s32 xmedia_vqe_register_module(xmedia_u32 masks, xmedia_void* handle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AUDIO_VQE_BCD_H__
|
||||
#define __XMEDIA_AUDIO_VQE_BCD_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef xmedia_s32 (*fn_bcd_callback)(xmedia_void* private_data); /* Baby Crying Detection be noticed Function Handle type */
|
||||
|
||||
typedef enum load_type {
|
||||
XMEDIA_CL_LOAD_MEM = 0,
|
||||
XMEDIA_CL_LOAD_FILE,
|
||||
} audio_load_type;
|
||||
|
||||
typedef struct {
|
||||
audio_load_type load_type; // 模型输入类别
|
||||
union {
|
||||
struct {
|
||||
xmedia_char *pathname; // bcd模型文件
|
||||
} file;
|
||||
struct {
|
||||
xmedia_u8 *buf; // bcd模型存放的内存
|
||||
xmedia_u32 len; // bcd模型的长度
|
||||
} mem;
|
||||
} model_info;
|
||||
} audio_load_model;
|
||||
|
||||
/* Defines the configure parameters of Baby Crying Detection. */
|
||||
typedef struct {
|
||||
xmedia_bool usr_mode; /* mode 0: auto mode 1: mannual. */
|
||||
xmedia_bool bypass; /* value 0: enable function; value 1: bypass function. */
|
||||
xmedia_u32 alarm_threshold; /* alarm threshold. range[0, 100] */
|
||||
xmedia_u32 time_limit; /* alarm time limit(s), range [0, 120]. */
|
||||
xmedia_u32 time_limit_threshold_count; /* alarm time limit threshold count, range [1, 5]. */
|
||||
xmedia_u32 interval_time; /* alarm interval time to unfreeze(s), [0, 120]*/
|
||||
fn_bcd_callback callback; /* the callback function pointer */
|
||||
audio_load_model bcd_model; /*for load npu xmm,arm not use*/
|
||||
xmedia_void* private_data; /* the callback private data */
|
||||
} audio_bcd_config;
|
||||
|
||||
/* Defines the process data configure of Baby Crying Detection. */
|
||||
typedef struct {
|
||||
xmedia_s16* data; /* the pointer to data buf. */
|
||||
xmedia_s32 data_size; /* the size of data buf. */
|
||||
} audio_process_data;
|
||||
|
||||
/*
|
||||
* 函数功能:获取哭声检测版本号
|
||||
* 函数参数:
|
||||
* version - 输出参数,版本号
|
||||
* 返回值:
|
||||
* 对应版本号数值
|
||||
*/
|
||||
xmedia_s32 xmedia_audio_bcd_get_version(xmedia_char* version);
|
||||
|
||||
/*
|
||||
* 函数功能:实例化哭声检测
|
||||
* 函数参数:
|
||||
* bcd - 输出参数,哭声检查句柄
|
||||
* sample_rate - 输入参数,采样率,当前只支持16K
|
||||
* bcd_config - 输入参数,哭声检测的配置属性
|
||||
* 返回值:
|
||||
* XMEDIA_FAILURE - 初始化失败
|
||||
* XMEDIA_SUCCESS - 初始化成功
|
||||
*/
|
||||
xmedia_s32 xmedia_audio_bcd_init(xmedia_void** bcd, xmedia_s32 sample_rate, const audio_bcd_config* bcd_config);
|
||||
|
||||
/*
|
||||
* 函数功能:哭声检测数据处理
|
||||
* 函数参数:
|
||||
* input_data - 输入参数,输入数据信息
|
||||
* output_data - 输出参数,输出数据信息
|
||||
* 返回值:
|
||||
* XMEDIA_FAILURE - 数据处理失败
|
||||
* XMEDIA_SUCCESS - 数据处理成功
|
||||
*/
|
||||
xmedia_s32 xmedia_audio_bcd_process(xmedia_void* bcd, audio_process_data* input_data, audio_process_data* output_data);
|
||||
|
||||
/*
|
||||
* 函数功能:去实例化哭声检测
|
||||
* 函数参数:
|
||||
* bcd - 输入参数,哭声检测句柄
|
||||
* 返回值:
|
||||
* XMEDIA_FAILURE - 去初始化失败
|
||||
* XMEDIA_SUCCESS - 去初始化成功
|
||||
*/
|
||||
xmedia_s32 xmedia_audio_bcd_deinit(xmedia_void* bcd);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AUDIO_VQE_DETECT_H__
|
||||
#define __XMEDIA_AUDIO_VQE_DETECT_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_audio_vqe_bcd.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define VQE_DETECT_MASK_HPF 0x01000000
|
||||
#define VQE_DETECT_MASK_BCD 0x02000000
|
||||
#define VQE_DETECT_MASK_VED 0x04000000
|
||||
#define VQE_DETECT_MASK_SSL 0x08000000
|
||||
#define VQE_DETECT_MASK_GBD 0x10000000
|
||||
|
||||
#define VQE_DETECT_MASK_MAX (VQE_DETECT_MASK_HPF | VQE_DETECT_MASK_BCD | VQE_DETECT_MASK_VED | VQE_DETECT_MASK_SSL | VQE_DETECT_MASK_GBD)
|
||||
#define VQE_DETECT_LIB_MASK 0x80004
|
||||
|
||||
#define xmedia_vqe_detect_get_hpf_handle xmedia_vqe_v2_get_hpf_handle
|
||||
typedef xmedia_s32 (*fn_detect_ssl_callback)(xmedia_void* private_data, xmedia_s32 out_angle); /* Sound Source Localization be noticed Function Handle type */
|
||||
typedef xmedia_s32 (*fn_detect_ved_callback)(xmedia_void*, xmedia_bool, xmedia_bool, xmedia_s32); /* Volume Mutation Detection be noticed Function Handle type */
|
||||
typedef xmedia_s32 (*fn_detect_gbd_callback)(xmedia_void* private_data); /* glass break detect be noticed Function Handle type */
|
||||
|
||||
typedef enum {
|
||||
VQE_DET_USR_MODE_AUTO = 0,
|
||||
VQE_DET_USR_MODE_USER = 1,
|
||||
VQE_DET_USR_MODE_ADVANCED = 2,
|
||||
VQE_DET_USR_MODE_MAX,
|
||||
} vqe_detect_usr_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 mic_distance; /* 30mm ~ 150mm */
|
||||
xmedia_u32 sensitivity_level; /* range [0 ~ 9] */
|
||||
xmedia_u32 shape; /* 0:linear array, 1:circular array */
|
||||
fn_detect_ssl_callback callback; /* the callback function pointer */
|
||||
xmedia_void* private_data; /* the callback private data */
|
||||
xmedia_void* reserved;
|
||||
} vqe_ssl_config;
|
||||
|
||||
typedef struct {
|
||||
vqe_detect_usr_mode mode;
|
||||
xmedia_s32 volume_threshold; // current volume threshold for event detection, support -80 ~ 0 db
|
||||
xmedia_bool mutation_flag; // flag for mutation detection enable
|
||||
xmedia_s32 fast_change_threshold; // fast changing threshold for mutation detection, support 10 ~ 80 db
|
||||
xmedia_s32 slow_change_threshold; // slow changing threshold for mutation detection, support 1 ~ 20 db
|
||||
fn_detect_ved_callback callback; // the callback function pointer
|
||||
xmedia_void* private_data; // the callback private data
|
||||
} vqe_ved_config;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool usr_mode; /* mode 0: auto mode 1: mannual. */
|
||||
xmedia_bool bypass; /* value 0: enable function; value 1: bypass function. */
|
||||
xmedia_u32 alarm_threshold; /* alarm threshold. range[0, 100] */
|
||||
xmedia_u32 time_limit; /* alarm time limit(s), range [0, 120]. */
|
||||
xmedia_u32 time_limit_threshold_count; /* alarm time limit threshold count, range [1, 5]. */
|
||||
xmedia_u32 interval_time; /* alarm interval time to unfreeze(s), [0, 120]*/
|
||||
fn_detect_gbd_callback callback; /* the callback function pointer */
|
||||
audio_load_model gbd_model; /*for load npu xmm,arm not use*/
|
||||
xmedia_void* private_data; /* the callback private data */
|
||||
} vqe_gbd_config;
|
||||
|
||||
typedef enum {
|
||||
VQE_DETECT_HPF_FREQ_80 = 80,
|
||||
VQE_DETECT_HPF_FREQ_120 = 120,
|
||||
VQE_DETECT_HPF_FREQ_150 = 150,
|
||||
VQE_DETECT_HPF_FREQ_MAX,
|
||||
} vqe_detect_hpf_freq;
|
||||
|
||||
typedef struct {
|
||||
vqe_detect_usr_mode mode;
|
||||
vqe_detect_hpf_freq freq;
|
||||
} vqe_hpf_attr_detect;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 mask;
|
||||
vqe_hpf_attr_detect hpf_attr;
|
||||
audio_bcd_config bcd_attr;
|
||||
vqe_ssl_config ssl_attr;
|
||||
vqe_ved_config ved_attr;
|
||||
vqe_gbd_config gbd_attr;
|
||||
} ai_vqe_attr_detect;
|
||||
|
||||
typedef struct {
|
||||
xmedia_void* bcd_handle;
|
||||
xmedia_void* hpf_handle;
|
||||
xmedia_void* ved_handle;
|
||||
xmedia_void* ssl_handle;
|
||||
xmedia_void* gbd_handle;
|
||||
} vqe_handle_detect;
|
||||
|
||||
xmedia_void *xmedia_vqe_detect_get_hpf_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_detect_get_bcd_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_detect_get_ved_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_detect_get_ssl_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_detect_get_gbd_handle(xmedia_void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AUDIO_VQE_ENHANCE_V1_H__
|
||||
#define __XMEDIA_AUDIO_VQE_ENHANCE_V1_H__
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define VQE_V1_MASK_HPF 0x01
|
||||
#define VQE_V1_MASK_AEC 0x02
|
||||
#define VQE_V1_MASK_AGC 0x04
|
||||
#define VQE_V1_MASK_ANR 0x08
|
||||
#define VQE_V1_MASK_VAD 0x10
|
||||
#define VQE_V1_MASK_WNS 0x20
|
||||
#define VQE_V1_MASK_EQ 0x40
|
||||
#define VQE_V1_MASK_DEREVERB 0x80
|
||||
#define VQE_V1_MASK_CUSTOMER 0x100
|
||||
#define VQE_V1_MASK_3A (VQE_V1_MASK_AEC | VQE_V1_MASK_AGC | VQE_V1_MASK_ANR)
|
||||
#define VQE_V1_MASK_MAX (VQE_V1_MASK_HPF | VQE_V1_MASK_AEC | VQE_V1_MASK_AGC | VQE_V1_MASK_ANR | VQE_V1_MASK_VAD | VQE_V1_MASK_WNS | VQE_V1_MASK_EQ | VQE_V1_MASK_DEREVERB | VQE_V1_MASK_CUSTOMER)
|
||||
#define VQE_V1_LIB_MASK 0x80001
|
||||
|
||||
#define VQE_V1_EQ_BAND_MAX 30 /* EQ band num */
|
||||
|
||||
typedef enum {
|
||||
VQE_V1_HPF_FREQ_80 = 80,
|
||||
VQE_V1_HPF_FREQ_120 = 120,
|
||||
VQE_V1_HPF_FREQ_150 = 150,
|
||||
VQE_V1_HPF_FREQ_MAX,
|
||||
} vqe_v1_hpf_freq;
|
||||
|
||||
typedef enum {
|
||||
VQE_V1_USR_MODE_AUTO = 0,
|
||||
VQE_V1_USR_MODE_USER = 1,
|
||||
VQE_V1_USR_MODE_ADVANCED = 2,
|
||||
VQE_V1_USR_MODE_MAX,
|
||||
} vqe_v1_usr_mode;
|
||||
|
||||
typedef enum {
|
||||
VQE_V1_ANR_SCENE_NORMAL = 0,
|
||||
VQE_V1_ANR_SCENE_MUSIC = 1,
|
||||
VQE_V1_ANR_SCENE_MAX,
|
||||
} vqe_v1_anr_scene;
|
||||
|
||||
typedef enum {
|
||||
VQE_V1_NR_MODE_SPEECH = 0,
|
||||
VQE_V1_NR_MODE_NOISE = 1,
|
||||
VQE_V1_NR_MODE_MAX,
|
||||
} vqe_v1_nr_mode;
|
||||
|
||||
typedef struct {
|
||||
vqe_v1_usr_mode mode;
|
||||
vqe_v1_hpf_freq freq;
|
||||
} vqe_hpf_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
vqe_v1_usr_mode mode;
|
||||
vqe_v1_anr_scene usr_scene;
|
||||
vqe_v1_nr_mode nr_mode; /* noise suppress mode */
|
||||
xmedia_u32 max_suppress_gain; /* maximum of noise suppress gain , range : [5,40] */
|
||||
xmedia_u32 suppress_level; /* noise Suppress level, range : [0,9] */
|
||||
xmedia_u32 nonstationary_suppress_level; /* non-stationary noise suppress level, range : [0,9] */
|
||||
xmedia_void* reserved;
|
||||
} vqe_anr_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
vqe_v1_usr_mode mode;
|
||||
xmedia_s32 target_level; /* support -20 ~ -1 dB */
|
||||
xmedia_u32 max_boost_gain; /* support 0 ~ 30 Db*/
|
||||
xmedia_s32 noise_floor; /* support -120 ~ -25 Db*/
|
||||
xmedia_u32 ratio; /* small signal suppression, surpport 0 ~ 100 */
|
||||
xmedia_u32 attack_time; /* support 1 ~ 100 */
|
||||
xmedia_u32 release_time; /* support 1 ~ 100 */
|
||||
xmedia_void* reserved;
|
||||
} vqe_agc_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
vqe_v1_usr_mode mode;
|
||||
xmedia_bool cng_enable; /* comfort noise generator enable, false : disable true : enable */
|
||||
xmedia_u32 freq_boundary; /* high and low frequency boundary, range : [1500,3800] */
|
||||
xmedia_u32 low_suppress_level; /* low freq echo cancellation level, range : [0,9] */
|
||||
xmedia_u32 high_suppress_level; /* high freq echo cancellation level, range : [0,9] */
|
||||
xmedia_u32 low_enhance_voice_protect_level; /* low freq voice protect level, range : [0,9] */
|
||||
xmedia_u32 high_enhance_voice_protect_level; /* high freq voice protect level, range : [0,9] */
|
||||
xmedia_void* reserved;
|
||||
} vqe_aec_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s8 gain[VQE_V1_EQ_BAND_MAX]; /**< gain level,range:[-50,20]dB */
|
||||
xmedia_void* reserved;
|
||||
} vqe_eq_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
vqe_v1_usr_mode mode;
|
||||
xmedia_u32 sensitivity_level; /* support 0 ~ 9 */
|
||||
xmedia_void* reserved;
|
||||
} vqe_vad_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
vqe_v1_usr_mode mode;
|
||||
xmedia_u32 suppress_level; /*support 0 ~ 4 */
|
||||
xmedia_void* reserved;
|
||||
} vqe_wns_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
vqe_v1_usr_mode mode;
|
||||
xmedia_s32 delay_offset; /*support 5 ~ 30, unit:10ms*/
|
||||
xmedia_s32 delay_count; /*support 3 ~ 10, unit:10ms*/
|
||||
xmedia_void* reserved;
|
||||
} vqe_dereverb_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 mask;
|
||||
vqe_hpf_attr_v1 hpf_attr;
|
||||
vqe_anr_attr_v1 anr_attr;
|
||||
vqe_aec_attr_v1 aec_attr;
|
||||
vqe_agc_attr_v1 agc_attr;
|
||||
vqe_vad_attr_v1 vad_attr;
|
||||
vqe_wns_attr_v1 wns_attr;
|
||||
vqe_eq_attr_v1 eq_attr;
|
||||
vqe_dereverb_attr_v1 dereverb_attr;
|
||||
xmedia_void* customer_attr;
|
||||
} ai_vqe_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 mask;
|
||||
vqe_hpf_attr_v1 hpf_attr;
|
||||
vqe_anr_attr_v1 anr_attr;
|
||||
vqe_agc_attr_v1 agc_attr;
|
||||
vqe_eq_attr_v1 eq_attr;
|
||||
xmedia_void* customer_attr;
|
||||
} ao_vqe_attr_v1;
|
||||
|
||||
typedef struct {
|
||||
xmedia_void* hpf_handle;
|
||||
xmedia_void* anr_handle;
|
||||
xmedia_void* aec_handle;
|
||||
xmedia_void* agc_handle;
|
||||
xmedia_void* vad_handle;
|
||||
xmedia_void* wns_handle;
|
||||
xmedia_void* eq_handle;
|
||||
xmedia_void* resampler_handle;
|
||||
xmedia_void* dereverb_handle;
|
||||
xmedia_void* customer_handle;
|
||||
} vqe_handle_v1;
|
||||
|
||||
xmedia_void *xmedia_vqe_v1_get_aec_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v1_get_agc_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v1_get_anr_handle(xmedia_void);
|
||||
xmedia_void* xmedia_vqe_v1_get_vad_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v1_get_eq_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v1_get_hpf_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v1_get_wns_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v1_get_resampler_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v1_get_dereverb_handle(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,176 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AUDIO_VQE_ENHANCE_V2_H__
|
||||
#define __XMEDIA_AUDIO_VQE_ENHANCE_V2_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define VQE_V2_MASK_HPF 0x00100
|
||||
#define VQE_V2_MASK_AEC 0x00200
|
||||
#define VQE_V2_MASK_AGC 0x00400
|
||||
#define VQE_V2_MASK_ANR 0x00800
|
||||
#define VQE_V2_MASK_BF 0x01000
|
||||
#define VQE_V2_MASK_VAD 0x02000
|
||||
#define VQE_V2_MASK_WNS 0x04000
|
||||
#define VQE_V2_MASK_EQ 0x08000
|
||||
#define VQE_V2_MASK_DEREVERB 0x10000
|
||||
#define VQE_V2_MASK_CUSTOMER 0x20000
|
||||
#define VQE_V2_MASK_3A (VQE_V2_MASK_AEC | VQE_V2_MASK_AGC | VQE_V2_MASK_ANR)
|
||||
#define VQE_V2_MASK_MAX (VQE_V2_MASK_HPF | VQE_V2_MASK_AEC | VQE_V2_MASK_AGC | VQE_V2_MASK_ANR | VQE_V2_MASK_BF | VQE_V2_MASK_VAD | VQE_V2_MASK_WNS | VQE_V2_MASK_EQ | VQE_V2_MASK_DEREVERB | VQE_V2_MASK_CUSTOMER)
|
||||
#define VQE_V2_LIB_MASK 0x80003
|
||||
|
||||
#define EQ_V2_BAND_MAX 30 /* EQ band num */
|
||||
|
||||
typedef enum {
|
||||
VQE_V2_USR_MODE_AUTO = 0,
|
||||
VQE_V2_USR_MODE_USER = 1,
|
||||
VQE_V2_USR_MODE_ADVANCED = 2,
|
||||
VQE_V2_USR_MODE_MAX,
|
||||
} vqe_v2_usr_mode;
|
||||
|
||||
typedef enum {
|
||||
VQE_V2_ANR_SCENE_NORMAL = 0,
|
||||
VQE_V2_ANR_SCENE_MUSIC = 1,
|
||||
VQE_V2_ANR_SCENE_MAX,
|
||||
} vqe_v2_anr_scene;
|
||||
|
||||
typedef enum {
|
||||
VQE_V2_NR_MODE_SPEECH = 0,
|
||||
VQE_V2_NR_MODE_NOISE = 1,
|
||||
VQE_V2_NR_MODE_MAX,
|
||||
} vqe_v2_nr_mode;
|
||||
|
||||
typedef enum {
|
||||
VQE_V2_HPF_FREQ_80 = 80,
|
||||
VQE_V2_HPF_FREQ_120 = 120,
|
||||
VQE_V2_HPF_FREQ_150 = 150,
|
||||
VQE_V2_HPF_FREQ_MAX,
|
||||
} vqe_v2_hpf_freq;
|
||||
|
||||
typedef struct {
|
||||
vqe_v2_usr_mode mode;
|
||||
vqe_v2_hpf_freq freq;
|
||||
} vqe_hpf_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
vqe_v2_usr_mode mode;
|
||||
vqe_v2_anr_scene usr_scene;
|
||||
vqe_v2_nr_mode nr_mode; /* noise suppress mode */
|
||||
xmedia_u32 max_suppress_gain; /* maximum of noise suppress gain , range : [5,40] */
|
||||
xmedia_u32 suppress_level; /* noise Suppress level, range : [0,9] */
|
||||
xmedia_u32 nonstationary_suppress_level; /* non-stationary noise suppress level, range : [0,9] */
|
||||
xmedia_void* reserved;
|
||||
} vqe_anr_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
vqe_v2_usr_mode mode;
|
||||
xmedia_s32 target_level; /* expected reacheable level, support -20 ~ -1 dB */
|
||||
xmedia_u32 max_boost_gain; /* maximum magnification of input signal, support 0 ~ 30 dB */
|
||||
xmedia_s32 noise_floor; /* signal and noise level boundary, support -120 ~ -25 dB */
|
||||
xmedia_u32 ratio; /* small signal suppression, surpport 0 ~ 100 */
|
||||
xmedia_u32 attack_time; /* velocity of input signal up to target level, support 1 ~ 100 */
|
||||
xmedia_u32 release_time; /* velocity of input signal down to target level, support 1 ~ 100 */
|
||||
xmedia_void* reserved;
|
||||
} vqe_agc_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
vqe_v2_usr_mode mode;
|
||||
xmedia_bool cng_enable; /* comfort noise generator enable, false : disable true : enable */
|
||||
xmedia_u32 freq_boundary; /* high and low frequency boundary, range : [1500,3800] */
|
||||
xmedia_u32 low_suppress_level; /* low freq echo cancellation level, range : [0,9] */
|
||||
xmedia_u32 high_suppress_level; /* high freq echo cancellation level, range : [0,9] */
|
||||
xmedia_u32 low_enhance_voice_protect_level; /* low freq voice protect level, range : [0,9] */
|
||||
xmedia_u32 high_enhance_voice_protect_level; /* high freq voice protect level, range : [0,9] */
|
||||
xmedia_void* reserved;
|
||||
} vqe_aec_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
xmedia_void* reserved;
|
||||
} vqe_bf_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
vqe_v2_usr_mode mode;
|
||||
xmedia_u32 sensitivity_level; /* vad sensitivity level, range : [0,9] */
|
||||
xmedia_void* reserved;
|
||||
} vqe_vad_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
vqe_v2_usr_mode mode;
|
||||
xmedia_u32 suppress_level; /*support 0 ~ 4 */
|
||||
xmedia_void* reserved;
|
||||
} vqe_wns_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s8 gain[EQ_V2_BAND_MAX]; /**< gain level,range:[-50,20]dB */
|
||||
xmedia_void* reserved;
|
||||
} vqe_eq_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
vqe_v2_usr_mode mode;
|
||||
xmedia_s32 delay_offset; /*support 5 ~ 30, unit:10ms*/
|
||||
xmedia_s32 delay_count; /*support 3 ~ 10, unit:10ms*/
|
||||
xmedia_void* reserved;
|
||||
} vqe_dereverb_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 mask;
|
||||
vqe_hpf_attr_v2 hpf_attr;
|
||||
vqe_anr_attr_v2 anr_attr;
|
||||
vqe_aec_attr_v2 aec_attr;
|
||||
vqe_agc_attr_v2 agc_attr;
|
||||
vqe_bf_attr_v2 bf_attr;
|
||||
vqe_vad_attr_v2 vad_attr;
|
||||
vqe_wns_attr_v2 wns_attr;
|
||||
vqe_eq_attr_v2 eq_attr;
|
||||
vqe_dereverb_attr_v2 dereverb_attr;
|
||||
xmedia_void* customer_attr;
|
||||
} ai_vqe_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 mask;
|
||||
vqe_hpf_attr_v2 hpf_attr;
|
||||
vqe_anr_attr_v2 anr_attr;
|
||||
vqe_agc_attr_v2 agc_attr;
|
||||
vqe_eq_attr_v2 eq_attr;
|
||||
xmedia_void* customer_attr;
|
||||
} ao_vqe_attr_v2;
|
||||
|
||||
typedef struct {
|
||||
xmedia_void* hpf_handle;
|
||||
xmedia_void* anr_handle;
|
||||
xmedia_void* aec_handle;
|
||||
xmedia_void* agc_handle;
|
||||
xmedia_void* bf_handle;
|
||||
xmedia_void* vad_handle;
|
||||
xmedia_void* wns_handle;
|
||||
xmedia_void* eq_handle;
|
||||
xmedia_void* resampler_handle;
|
||||
xmedia_void* dereverb_handle;
|
||||
xmedia_void* customer_handle;
|
||||
} vqe_handle_v2;
|
||||
|
||||
/*v2 handle*/
|
||||
xmedia_void *xmedia_vqe_v2_get_aec_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_agc_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_anr_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_vad_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_bf_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_eq_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_hpf_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_wns_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_resampler_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v2_get_dereverb_handle(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_AUDIO_VQE_ENHANCE_V3_H__
|
||||
#define __XMEDIA_AUDIO_VQE_ENHANCE_V3_H__
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define VQE_V3_MASK_HPF 0x01
|
||||
#define VQE_V3_MASK_AGC 0x02
|
||||
#define VQE_V3_MASK_ANR 0x04
|
||||
#define VQE_V3_MASK_EQ 0x08
|
||||
#define VQE_V3_MASK_CUSTOMER 0x10
|
||||
#define VQE_V3_MASK_3A (VQE_V3_MASK_AGC | VQE_V3_MASK_ANR)
|
||||
#define VQE_V3_MASK_MAX (VQE_V3_MASK_HPF | VQE_V3_MASK_AGC | VQE_V3_MASK_ANR | VQE_V3_MASK_EQ | VQE_V3_MASK_CUSTOMER)
|
||||
#define VQE_V3_LIB_MASK 0x80007
|
||||
|
||||
#define xmedia_vqe_v3_get_eq_handle xmedia_vqe_v1_get_eq_handle
|
||||
#define xmedia_vqe_v3_get_hpf_handle xmedia_vqe_v1_get_hpf_handle
|
||||
|
||||
#define VQE_V3_EQ_BAND_MAX 30 /* EQ band num */
|
||||
|
||||
typedef enum {
|
||||
VQE_V3_HPF_FREQ_80 = 80,
|
||||
VQE_V3_HPF_FREQ_120 = 120,
|
||||
VQE_V3_HPF_FREQ_150 = 150,
|
||||
VQE_V3_HPF_FREQ_MAX,
|
||||
} vqe_v3_hpf_freq;
|
||||
|
||||
typedef enum {
|
||||
VQE_V3_USR_MODE_AUTO = 0,
|
||||
VQE_V3_USR_MODE_USER = 1,
|
||||
VQE_V3_USR_MODE_ADVANCED = 2,
|
||||
VQE_V3_USR_MODE_MAX,
|
||||
} vqe_v3_usr_mode;
|
||||
|
||||
typedef enum {
|
||||
VQE_V3_ANR_SCENE_NORMAL = 0,
|
||||
VQE_V3_ANR_SCENE_MUSIC = 1,
|
||||
VQE_V3_ANR_SCENE_MAX,
|
||||
} vqe_v3_anr_scene;
|
||||
|
||||
typedef enum {
|
||||
VQE_V3_NR_MODE_SPEECH = 0,
|
||||
VQE_V3_NR_MODE_NOISE = 1,
|
||||
VQE_V3_NR_MODE_MAX,
|
||||
} vqe_v3_nr_mode;
|
||||
|
||||
typedef struct {
|
||||
vqe_v3_usr_mode mode;
|
||||
vqe_v3_hpf_freq freq;
|
||||
} vqe_hpf_attr_v3;
|
||||
|
||||
typedef struct {
|
||||
vqe_v3_usr_mode mode;
|
||||
xmedia_u32 level; /* noise Suppress level, range : [0,3] */
|
||||
xmedia_void* reserved;
|
||||
} vqe_anr_attr_v3;
|
||||
|
||||
typedef struct {
|
||||
vqe_v3_usr_mode mode;
|
||||
xmedia_s32 target_level; /* support -20 ~ -1 dB */
|
||||
xmedia_u32 max_boost_gain; /* support 0 ~ 30 Db*/
|
||||
xmedia_s32 noise_floor; /* support -120 ~ -25 Db*/
|
||||
xmedia_u32 ratio; /* small signal suppression, surpport 0 ~ 100 */
|
||||
xmedia_u32 attack_time; /* support 1 ~ 100 */
|
||||
xmedia_u32 release_time; /* support 1 ~ 100 */
|
||||
xmedia_void* reserved;
|
||||
} vqe_agc_attr_v3;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s8 gain[VQE_V3_EQ_BAND_MAX]; /**< gain level,range:[-50,20]dB */
|
||||
xmedia_void* reserved;
|
||||
} vqe_eq_attr_v3;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 mask;
|
||||
vqe_hpf_attr_v3 hpf_attr;
|
||||
vqe_anr_attr_v3 anr_attr;
|
||||
vqe_agc_attr_v3 agc_attr;
|
||||
vqe_eq_attr_v3 eq_attr;
|
||||
xmedia_void* customer_attr;
|
||||
} ai_vqe_attr_v3;
|
||||
|
||||
typedef struct {
|
||||
xmedia_void* hpf_handle;
|
||||
xmedia_void* anr_handle;
|
||||
xmedia_void* agc_handle;
|
||||
xmedia_void* eq_handle;
|
||||
xmedia_void* resampler_handle;
|
||||
xmedia_void* customer_handle;
|
||||
} vqe_handle_v3;
|
||||
|
||||
xmedia_void *xmedia_vqe_v3_get_agc_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v3_get_anr_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v3_get_eq_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v3_get_hpf_handle(xmedia_void);
|
||||
xmedia_void *xmedia_vqe_v3_get_resampler_handle(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,545 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef __XMEDIA_API_AWB_H__
|
||||
#define __XMEDIA_API_AWB_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_isp.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // End of #ifdef __cplusplus
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 red_cast_gain; // RW; Range: [0x100, 0x180]; Format:4.8; R channel gain after CCM
|
||||
xmedia_u16 green_cast_gain; // RW; Range: [0x100, 0x180]; Format:4.8; G channel gain after CCM
|
||||
xmedia_u16 blue_cast_gain; // RW; Range: [0x100, 0x180]; Format:4.8; B channel gain after CCM
|
||||
} xmedia_awb_color_tone_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AWB_INDOOR_MODE = 0,
|
||||
XMEDIA_AWB_OUTDOOR_MODE,
|
||||
XMEDIA_AWB_INDORR_OUTDOOR_MAX
|
||||
} xmedia_awb_indoor_outdoor_status;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 rgain; // R; Range: [0x0, 0xFFF]; Format:8.8;AWB result of R color channel
|
||||
xmedia_u16 grgain; // R; Range: [0x0, 0xFFF]; Format:8.8; AWB result of Gr color channel
|
||||
xmedia_u16 gbgain; // R; Range: [0x0, 0xFFF]; Format:8.8; AWB result of Gb color channel
|
||||
xmedia_u16 bgain; // R; Range: [0x0, 0xFFF]; Format:8.8; AWB result of B color channel
|
||||
xmedia_u16 saturation; // R; Range: [0x0, 0xFF];Format:8.0;Current saturation
|
||||
xmedia_u16 ct; // R; Range: [0x0, 0xFFFF];Format:16.0;Detect color temperature, maybe out of color
|
||||
// cemeprature range
|
||||
xmedia_u16 ccm[XMEDIA_ISP_CCM_MATRIX_SIZE]; // R; Range: [0x0, 0xFFFF];Format:16.0;Current color correction matrix
|
||||
|
||||
xmedia_u16 ls0_ct; // R; Range: [0x0, 0xFFFF];Format:16.0;color tempearture of primary light source
|
||||
xmedia_u16 ls1_ct; // R; Range: [0x0, 0xFFFF];Format:16.0;color tempearture of secondary light source
|
||||
xmedia_u16 ls0_area; // R; Range: [0x0, 0xFF];Format:8.0;area of primary light source
|
||||
xmedia_u16 ls1_area; // R; Range: [0x0, 0xFF];Format:8.0;area of secondary light source
|
||||
|
||||
xmedia_u8 multi_degree; // R; Range:[0x0, 0xFF];0 means uniform light source, larger value means multi light source
|
||||
xmedia_u16 active_shift; // R; Range;[0x0,0xFF]
|
||||
xmedia_u32 first_stable_time; // R, Range: [0x0, 0xFFFFFFFF];Format:32.0;AWB first stable frame number
|
||||
xmedia_awb_indoor_outdoor_status inout_status; // R; indoor or outdoor status
|
||||
xmedia_s16 bv; // R; Range;[-32768, 32767]; Bv value
|
||||
} xmedia_awb_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 saturation;
|
||||
} xmedia_awb_saturation_manual;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 iso_num;
|
||||
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u8 sat[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
} xmedia_awb_saturation_auto;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_operation_mode op_type;
|
||||
xmedia_awb_saturation_manual manual_attr;
|
||||
xmedia_awb_saturation_auto auto_attr;
|
||||
} xmedia_awb_saturation_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool sat_en;
|
||||
xmedia_u16 ccm[XMEDIA_ISP_CCM_MATRIX_SIZE];
|
||||
} xmedia_awb_ccm_manual;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 ct;
|
||||
xmedia_u16 ccm[XMEDIA_ISP_CCM_MATRIX_SIZE];
|
||||
} xmedia_awb_ccm_param;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool iso_act_en;
|
||||
xmedia_bool temp_act_en;
|
||||
xmedia_u16 ccm_tab_num;
|
||||
xmedia_awb_ccm_param ccm_tab[XMEDIA_ISP_CCM_TAB_MAX_NUM];
|
||||
} xmedia_awb_ccm_auto;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool ccm_en;
|
||||
xmedia_video_operation_mode op_type;
|
||||
xmedia_awb_ccm_manual manual_attr;
|
||||
xmedia_awb_ccm_auto auto_attr;
|
||||
} xmedia_awb_ccm_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 hue_shift[XMEDIA_ISP_COLOR_SECTOR_NUM];
|
||||
xmedia_u16 sat_shift[XMEDIA_ISP_COLOR_SECTOR_NUM];
|
||||
} xmedia_color_sector_manual;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 ct_num;
|
||||
xmedia_u32 ct_level[XMEDIA_ISP_CCM_TAB_MAX_NUM];
|
||||
xmedia_u16 hue_shift[XMEDIA_ISP_CCM_TAB_MAX_NUM][XMEDIA_ISP_COLOR_SECTOR_NUM];
|
||||
xmedia_u16 sat_shift[XMEDIA_ISP_CCM_TAB_MAX_NUM][XMEDIA_ISP_COLOR_SECTOR_NUM];
|
||||
} xmedia_color_sector_auto;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool sector_en;
|
||||
xmedia_video_operation_mode op_type;
|
||||
xmedia_color_sector_manual manual_attr;
|
||||
xmedia_color_sector_auto auto_attr;
|
||||
} xmedia_color_sector_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AWB_MULTI_LS_SAT = 0,
|
||||
XMEDIA_AWB_MULTI_LS_CCM,
|
||||
XMEDIA_AWB_MULTI_LS_MAX
|
||||
} xmedia_awb_multi_ls_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_video_operation_mode op_type;
|
||||
xmedia_awb_indoor_outdoor_status outdoorstatus;
|
||||
xmedia_u32 out_thresh;
|
||||
xmedia_u16 low_start;
|
||||
xmedia_u16 low_stop;
|
||||
xmedia_u16 high_start;
|
||||
xmedia_u16 high_stop;
|
||||
xmedia_bool green_enhanceen;
|
||||
xmedia_u8 out_shift_limit;
|
||||
} xmedia_awb_in_out_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 white_rgain;
|
||||
xmedia_u16 white_bgain;
|
||||
xmedia_u16 exp_quant;
|
||||
xmedia_u16 light_status;
|
||||
xmedia_u16 radius;
|
||||
} xmedia_awb_extra_lightsource_info;
|
||||
|
||||
#define XMEDIA_ISP_AWB_LS_NUM 4
|
||||
#define XMEDIA_ISP_AWB_MULTI_CT_NUM 8
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 tolerance; // RW; Range:[0x0, 0xFF]; Format:8.0; AWB adjust tolerance
|
||||
xmedia_u8 iso_num;
|
||||
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u8 zone_radius[XMEDIA_ISP_ISO_MAX_COUNT]; // RW; Range:[0x0, 0xFF]; Format:8.0; radius of AWB blocks
|
||||
xmedia_u16 curve_l_limit; // RW; Range:[0x0, 0x100]; Format:9.0; Left limit of AWB Curve, recomend for indoor
|
||||
// 0xE0,outdoor 0xE0
|
||||
xmedia_u16 curve_r_limit; // RW; Range:[0x100, 0xFFF]; Format:12.0; Right Limit of AWB Curve,recomend for indoor
|
||||
// 0x130, outdoor 0x120
|
||||
xmedia_bool extra_lighten; // RW; Range:[0, 1]; Format:1.0; Enable special light source function
|
||||
xmedia_awb_extra_lightsource_info light_info[XMEDIA_ISP_AWB_LS_NUM];
|
||||
xmedia_awb_in_out_attr in_or_out;
|
||||
xmedia_bool multilight_source_en; // RW; Range:[0, 1]; Format:1.0;
|
||||
xmedia_awb_multi_ls_type multi_ls_type; // Saturation or CCM Tunning
|
||||
xmedia_u16 multi_ls_scaler; // RW; Range:[0x0, 0x100]; Format:12.0;
|
||||
xmedia_u16 multi_ct_bin[XMEDIA_ISP_AWB_MULTI_CT_NUM]; // RW; Range:[0, 0XFFFF]; Format:16.0;AWB Support divide the
|
||||
xmedia_u16 multi_ct_wt[XMEDIA_ISP_AWB_MULTI_CT_NUM]; // RW; Range:[0x0, 0x400];Weight for different color
|
||||
// temperature, same value of 8 means CT weight does't work
|
||||
xmedia_bool fine_tun_en; // RW; Range:[0x0, 0x1]; Format:1.0;If enabled, skin color scene will be optimized
|
||||
xmedia_u8 fine_tun_strength; // RW; Range:[0x0, 0xFF]; Format:8.0;larger value means better performance of skin
|
||||
// color scene, but will increase error probability in low color temperature scene
|
||||
} xmedia_awb_scene_adj_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_video_operation_mode op_type;
|
||||
|
||||
// RW; Range:[0x0, 0xFFF]; Format:4.8; in Manual Mode, user define the Max Rgain of High Color Temperature
|
||||
xmedia_u16 high_rg_limit;
|
||||
// RW; Range:[0x0, 0xFFF]; Format:4.8; in Manual Mode, user define the Min Bgain of High Color Temperature
|
||||
xmedia_u16 high_bg_limit;
|
||||
// RW; Range:[0x0, 0xFFF]; Format:4.8; limited range:[0x0, u16HighRgLimit)
|
||||
xmedia_u16 low_rg_limit;
|
||||
// RW; Range:[0, 0xFFF]; Format:4.8; limited Range:(u16HighBgLimit, 0xFFF]
|
||||
xmedia_u16 low_bg_limit;
|
||||
|
||||
} xmedia_awb_ct_limit_attr;
|
||||
|
||||
typedef struct {
|
||||
// RW; Range:[0, 1]; Format:1.0;If enabled, statistic parameter cr, cb will change according to iso
|
||||
xmedia_bool enable;
|
||||
xmedia_u8 iso_num;
|
||||
xmedia_u32 iso_level[XMEDIA_ISP_ISO_MAX_COUNT];
|
||||
xmedia_u16 crmax[XMEDIA_ISP_ISO_MAX_COUNT]; // RW; Range:[0x0, 0xFFF]; au16CrMax[i] >= au16CrMin[i]
|
||||
xmedia_u16 crmin[XMEDIA_ISP_ISO_MAX_COUNT]; // RW; Range:[0x0, 0xFFF]
|
||||
xmedia_u16 cbmax[XMEDIA_ISP_ISO_MAX_COUNT]; // RW; Range:[0x0, 0xFFF]; au16CbMax[i] >= au16CbMin[i]
|
||||
xmedia_u16 cbmin[XMEDIA_ISP_ISO_MAX_COUNT]; // RW; Range:[0x0, 0xFFF]
|
||||
} xmedia_awb_cbcr_track_attr;
|
||||
|
||||
#define XMEDIA_AWB_LUM_HIST_NUM 6
|
||||
|
||||
// Defines the parameters of the luminance histogram statistics for white balance
|
||||
typedef struct {
|
||||
xmedia_bool enable; // RW; Range:[0, 1]; Format:1.0; If enabled, zone weight to awb is combined with zone luma
|
||||
xmedia_video_operation_mode op_type; // In auto mode, the weight distribution follows Gaussian distribution
|
||||
// RW; Range:[0x0, 0xFF]; Format:8.0; In manual mode, user define luma thresh, thresh[0] = 0, thresh[5] = 0xFF,
|
||||
// thresh[i] >= thresh[i-1]
|
||||
xmedia_u8 hist_thresh[XMEDIA_AWB_LUM_HIST_NUM];
|
||||
// RW; Range:[0x0, 0xFFFF]; Format:16.0; user can define luma weight in both manual and auto mode.
|
||||
xmedia_u16 hist_wt[XMEDIA_AWB_LUM_HIST_NUM];
|
||||
} xmedia_awb_luma_hist_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AWB_ALG_NORMAL = 0,
|
||||
XMEDIA_AWB_ALG_AI,
|
||||
XMEDIA_AWB_ALG_MAX
|
||||
} xmedia_awb_alg;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_AWB_NORMAL_ALG_LOWCOST = 0,
|
||||
XMEDIA_AWB_NORMAL_ALG_ADVANCE,
|
||||
XMEDIA_AWB_NORMAL_ALG_MAX
|
||||
} xmedia_awb_normal_alg_type;
|
||||
|
||||
#define XMEDIA_AWB_BAYER_CHN_NUM 4
|
||||
#define XMEDIA_AWB_ZONE_ORIG_ROW 32
|
||||
#define XMEDIA_AWB_ZONE_ORIG_COLUMN 32
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_u16 ref_ct;
|
||||
xmedia_u16 static_wb[XMEDIA_AWB_BAYER_CHN_NUM];
|
||||
xmedia_s32 curve_para[XMEDIA_ISP_AWB_CURVE_PARA_NUM];
|
||||
xmedia_awb_normal_alg_type alg_type;
|
||||
xmedia_u8 rg_str;
|
||||
xmedia_u8 bg_str;
|
||||
xmedia_u16 speed;
|
||||
xmedia_u16 zone_sel;
|
||||
xmedia_u16 high_ct;
|
||||
xmedia_u16 low_ct;
|
||||
xmedia_awb_ct_limit_attr ct_limit;
|
||||
xmedia_bool shift_limit_en;
|
||||
xmedia_u8 shift_limit;
|
||||
xmedia_bool gain_norm_en;
|
||||
xmedia_bool natural_cast_en;
|
||||
xmedia_awb_cbcr_track_attr cbcr_track;
|
||||
xmedia_awb_luma_hist_attr luma_hist;
|
||||
xmedia_bool awb_zone_wt_en;
|
||||
xmedia_u8 zone_wt[XMEDIA_AWB_ZONE_ORIG_ROW * XMEDIA_AWB_ZONE_ORIG_COLUMN];
|
||||
} xmedia_awb_auto_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 rgain;
|
||||
xmedia_u16 grgain;
|
||||
xmedia_u16 gbgain;
|
||||
xmedia_u16 bgain;
|
||||
} xmedia_awb_manual_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool bypass; // RW; Range: [0, 1]; Format:1.0; If enabled, awb will be bypassed
|
||||
xmedia_u8 awb_runinterval; // RW; Range: [0x1, 0xFF]; Format:8.0; set the AWB run interval
|
||||
xmedia_video_operation_mode op_type;
|
||||
xmedia_awb_alg alg_type;
|
||||
xmedia_awb_manual_attr manual_attr;
|
||||
xmedia_awb_auto_attr auto_attr;
|
||||
} xmedia_awb_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 raw_white_level;
|
||||
xmedia_u16 raw_black_level;
|
||||
xmedia_u16 raw_cr_max;
|
||||
xmedia_u16 raw_cr_min;
|
||||
xmedia_u16 raw_cb_max;
|
||||
xmedia_u16 raw_cb_min;
|
||||
|
||||
xmedia_u16 wdr_mode;
|
||||
xmedia_u16 enable;
|
||||
xmedia_u16 manual_en;
|
||||
xmedia_u16 zone;
|
||||
xmedia_u16 high_temp;
|
||||
xmedia_u16 low_temp;
|
||||
xmedia_u16 ref_temp;
|
||||
xmedia_u16 rgain_base;
|
||||
xmedia_u16 ggain_base;
|
||||
xmedia_u16 bgain_base;
|
||||
xmedia_s32 p1;
|
||||
xmedia_s32 p2;
|
||||
xmedia_s32 q;
|
||||
xmedia_s32 a;
|
||||
xmedia_s32 c;
|
||||
|
||||
xmedia_u16 man_sat_en;
|
||||
xmedia_u16 sat_target;
|
||||
|
||||
xmedia_u16 hist_en;
|
||||
xmedia_u16 multi_en;
|
||||
xmedia_u16 outdoor_en;
|
||||
} xmedia_awb_dbg_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 count_all;
|
||||
xmedia_u16 raw_r_avg;
|
||||
xmedia_u16 raw_g_avg;
|
||||
xmedia_u16 raw_b_avg;
|
||||
xmedia_u16 tk;
|
||||
xmedia_u16 weight;
|
||||
xmedia_s16 shift;
|
||||
} xmedia_awb_zone_dbg;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 frm_num_bgn;
|
||||
xmedia_u16 global_countall;
|
||||
xmedia_u16 global_countmin;
|
||||
xmedia_u16 global_countmax;
|
||||
xmedia_u16 global_ravg;
|
||||
xmedia_u16 global_gavg;
|
||||
xmedia_u16 global_bavg;
|
||||
xmedia_u16 tk;
|
||||
xmedia_u16 rgain;
|
||||
xmedia_u16 ggain;
|
||||
xmedia_u16 bgain;
|
||||
xmedia_u16 ccm[XMEDIA_ISP_CCM_MATRIX_SIZE];
|
||||
xmedia_awb_zone_dbg zone_debug[XMEDIA_AWB_ZONE_ORIG_ROW * XMEDIA_AWB_ZONE_ORIG_COLUMN];
|
||||
|
||||
xmedia_u32 frm_num_end;
|
||||
} xmedia_awb_dbg_status;
|
||||
|
||||
/*
|
||||
* 函数功能: 注册awb库
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe无效
|
||||
* XMEDIA_ERRCODE_EXIST - awb重复注册
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_register(xmedia_u32 pipe);
|
||||
|
||||
/*
|
||||
* 函数功能: 注销awb库
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_unregister(xmedia_u32 pipe);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置awb属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* awb_attr - awb属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_set_attr(xmedia_u32 pipe, const xmedia_awb_attr *awb_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取awb属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* awb_attr - awb属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_get_attr(xmedia_u32 pipe, xmedia_awb_attr *awb_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置awb场景调整属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* awb_scene_adj_attr - 部分场景调整属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_set_scene_adj_attr(xmedia_u32 pipe, const xmedia_awb_scene_adj_attr *awb_scene_adj_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取awb场景调整属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* awb_scene_adj_attr - 部分场景调整属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_get_scene_adj_attr(xmedia_u32 pipe, xmedia_awb_scene_adj_attr *awb_scene_adj_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置ccm属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* ccm_attr - ccm属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_set_ccm_attr(xmedia_u32 pipe, const xmedia_awb_ccm_attr *ccm_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取ccm属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* ccm_attr - ccm属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_get_ccm_attr(xmedia_u32 pipe, xmedia_awb_ccm_attr *ccm_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置ccm 色调和饱和度调整属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* color_sector_attr - ccm 色调和饱和度调整属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_set_color_sector_attr(xmedia_u32 pipe, const xmedia_color_sector_attr *color_sector_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取ccm 色调和饱和度调整参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* color_sector_attr - ccm 色调和饱和度调整属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_get_color_sector_attr(xmedia_u32 pipe, xmedia_color_sector_attr *color_sector_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置饱和度属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* sat_attr - 饱和度属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_set_saturation_attr(xmedia_u32 pipe, const xmedia_awb_saturation_attr *sat_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取饱和度属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* sat_attr - 饱和度属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_get_saturation_attr(xmedia_u32 pipe, xmedia_awb_saturation_attr *sat_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 更新awb info
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* wb_info - awb info
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_query_info(xmedia_u32 pipe, xmedia_awb_info *wb_info);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置color tone属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* ct_attr - color tone属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_set_color_tone_attr(xmedia_u32 pipe, const xmedia_awb_color_tone_attr *ct_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取color tone属性参数
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* ct_attr - color tone属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入pipe参数无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 输入指针参数无效
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 获取vreg失败
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_get_color_tone_attr(xmedia_u32 pipe, xmedia_awb_color_tone_attr *ct_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 根据色温值计算awbgain
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* awb_attr - awb属性
|
||||
* color_temp - 色温
|
||||
* shift - 偏移量
|
||||
* awb_gain - awb gain
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_cal_gain_by_temp(xmedia_u32 pipe, const xmedia_awb_attr *awb_attr, xmedia_u16 color_temp,
|
||||
xmedia_s16 shift, xmedia_u16 *awb_gain);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置awb库debug功能, 打印信息输出到内存
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* debug_info - 用户分配的debug信息输出buffer信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_set_debug_info(xmedia_u32 pipe, xmedia_isp_debug_info *debug_info);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置awb库debug打印等级, 打印信息输出到串口
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,pipe号
|
||||
* debug_level - AWB库debug打印等级 (1: ERROR 2: WARNING 3: NOTICE 4: INFO 5: DEBUG)
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PIPE_ID - 输入参数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_awb_set_debug_level(xmedia_u32 pipe, xmedia_u32 debug_level);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // End of #ifdef __cplusplus
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,555 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_CIPHER_H__
|
||||
#define __XMEDIA_CIPHER_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_errcode.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define CIPHER_IV_CHANGE_ONE_PKG (1)
|
||||
#define CIPHER_IV_CHANGE_ALL_PKG (2)
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_WORK_MODE_ECB,
|
||||
XMEDIA_CIPHER_WORK_MODE_CBC,
|
||||
XMEDIA_CIPHER_WORK_MODE_CFB,
|
||||
XMEDIA_CIPHER_WORK_MODE_OFB,
|
||||
XMEDIA_CIPHER_WORK_MODE_CTR,
|
||||
XMEDIA_CIPHER_WORK_MODE_MAX,
|
||||
} xmedia_cipher_work_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_ALG_AES = 0x0,
|
||||
XMEDIA_CIPHER_ALG_DMA = 0x1,
|
||||
XMEDIA_CIPHER_ALG_MAX = 0x2,
|
||||
} xmedia_cipher_alg;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_KEY_AES_128BIT = 0x0,
|
||||
XMEDIA_CIPHER_KEY_AES_192BIT = 0x1,
|
||||
XMEDIA_CIPHER_KEY_AES_256BIT = 0x2,
|
||||
XMEDIA_CIPHER_KEY_AES_MAX = 0x3,
|
||||
} xmedia_cipher_key_length;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_BIT_WIDTH_8BIT = 0x0,
|
||||
XMEDIA_CIPHER_BIT_WIDTH_1BIT = 0x1,
|
||||
XMEDIA_CIPHER_BIT_WIDTH_128BIT = 0x2,
|
||||
XMEDIA_CIPHER_BIT_WIDTH_MAX = 0X3,
|
||||
} xmedia_cipher_bit_width;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_KEY_SRC_USER = 0x0,
|
||||
XMEDIA_CIPHER_KEY_SRC_KLAD_1,
|
||||
XMEDIA_CIPHER_KEY_SRC_KLAD_2,
|
||||
XMEDIA_CIPHER_KEY_SRC_KLAD_3,
|
||||
XMEDIA_CIPHER_KEY_SRC_MAX,
|
||||
} xmedia_cipher_ca_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_KLAD_TARGET_AES = 0x0,
|
||||
XMEDIA_CIPHER_KLAD_TARGET_RSA,
|
||||
XMEDIA_CIPHER_KLAD_TARGET_MAX,
|
||||
} xmedia_cipher_klad_target;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 key[8];
|
||||
xmedia_u32 iv[4];
|
||||
xmedia_u32 iv_usage;
|
||||
xmedia_cipher_bit_width bit_width;
|
||||
xmedia_cipher_key_length key_len;
|
||||
} xmedia_cipher_ctrl_aes;
|
||||
|
||||
typedef struct {
|
||||
xmedia_cipher_alg alg;
|
||||
xmedia_cipher_work_mode mode;
|
||||
xmedia_bool key_by_ca;
|
||||
xmedia_cipher_ca_type ca_type;
|
||||
xmedia_cipher_ctrl_aes aes_ctrl;
|
||||
} xmedia_cipher_ctrl;
|
||||
|
||||
typedef struct {
|
||||
xmedia_ulong src_phy_addr;
|
||||
xmedia_ulong dest_phy_addr;
|
||||
xmedia_u32 byte_length;
|
||||
} xmedia_cipher_package;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 *data;
|
||||
xmedia_u32 data_len;
|
||||
} xmedia_cipher_data;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_HASH_TYPE_SHA1,
|
||||
XMEDIA_CIPHER_HASH_TYPE_SHA224,
|
||||
XMEDIA_CIPHER_HASH_TYPE_SHA256,
|
||||
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA1,
|
||||
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA224,
|
||||
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA256,
|
||||
XMEDIA_CIPHER_HASH_TYPE_MAX,
|
||||
} xmedia_cipher_hash_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 *hmac_key;
|
||||
xmedia_u32 hmac_key_len;
|
||||
xmedia_cipher_hash_type type;
|
||||
} xmedia_cipher_hash_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_NO_PADDING,
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_BLOCK_TYPE_0,
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_BLOCK_TYPE_1,
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_BLOCK_TYPE_2,
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_RSAES_OAEP_SHA1,
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_RSAES_OAEP_SHA224,
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_RSAES_OAEP_SHA256,
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_RSAES_PKCS1_V1_5,
|
||||
XMEDIA_CIPHER_RSA_ENC_SCHEME_MAX,
|
||||
} xmedia_cipher_rsa_enc_scheme;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_V15_SHA1 = 0x100,
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_V15_SHA224,
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_V15_SHA256,
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_PSS_SHA1,
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_PSS_SHA224,
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_PSS_SHA256,
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_MAX,
|
||||
} xmedia_cipher_rsa_sign_scheme;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 *n;
|
||||
xmedia_u8 *e;
|
||||
xmedia_u16 n_len;
|
||||
xmedia_u16 e_len;
|
||||
} xmedia_cipher_rsa_pub_key;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 *n;
|
||||
xmedia_u8 *e;
|
||||
xmedia_u8 *d;
|
||||
xmedia_u8 *p;
|
||||
xmedia_u8 *q;
|
||||
xmedia_u8 *dp;
|
||||
xmedia_u8 *dq;
|
||||
xmedia_u8 *qp;
|
||||
xmedia_u16 n_len;
|
||||
xmedia_u16 e_len;
|
||||
xmedia_u16 d_len;
|
||||
xmedia_u16 p_len;
|
||||
xmedia_u16 q_len;
|
||||
xmedia_u16 dp_len;
|
||||
xmedia_u16 dq_len;
|
||||
xmedia_u16 qp_len;
|
||||
} xmedia_cipher_rsa_pri_key;
|
||||
|
||||
typedef struct {
|
||||
xmedia_cipher_rsa_enc_scheme scheme;
|
||||
xmedia_cipher_rsa_pub_key pub_key;
|
||||
} xmedia_cipher_rsa_pub_enc;
|
||||
|
||||
typedef struct {
|
||||
xmedia_cipher_rsa_enc_scheme scheme;
|
||||
xmedia_cipher_rsa_pri_key pri_key;
|
||||
xmedia_cipher_ca_type ca_type;
|
||||
} xmedia_cipher_rsa_pri_enc;
|
||||
|
||||
typedef struct {
|
||||
xmedia_cipher_rsa_sign_scheme scheme;
|
||||
xmedia_cipher_rsa_pri_key pri_key;
|
||||
xmedia_cipher_ca_type ca_type;
|
||||
} xmedia_cipher_rsa_sign_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_cipher_rsa_sign_scheme scheme;
|
||||
xmedia_cipher_rsa_pub_key pub_key;
|
||||
} xmedia_cipher_rsa_verify_attr;
|
||||
|
||||
|
||||
/*
|
||||
* 函数功能:cipher模块初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 超过接口允许的调用次数
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点文件失败
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:cipher模块去初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_CLOSE_FAILED - 关闭设备节点文件失败
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:创建一路Cipher句柄
|
||||
* 函数参数:
|
||||
* handle - 输出参数,cipher句柄指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_BUSY - 通道已申请完,无可用通道
|
||||
* XMEDIA_ERRCODE_NOT_READY - 通道输入节点地址不可配置
|
||||
* 注意:
|
||||
* 1. handle不能为空
|
||||
* 2. cipher句柄将用于数据AES加解密时的输入
|
||||
* 3. 最大支持2路cipher
|
||||
* 4. 使用完通道后,应销毁对应的通道
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_create_handle(xmedia_handle *handle);
|
||||
|
||||
/*
|
||||
* 函数功能:销毁一路cipher
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* 注意:
|
||||
* 创建与销毁通道成对使用
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_destroy_handle(xmedia_handle handle);
|
||||
|
||||
/*
|
||||
* 函数功能:配置cipher控制信息。详细配置请参见结构体xmedia_cipher_ctrl
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* ctrl - 输入参数,cipher控制信息指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_BUSY - OTP控制器忙/KLAD忙
|
||||
* XMEDIA_FAILURE - OTP控制器操作未完成
|
||||
* 注意:
|
||||
* cipher控制信息指针不能为空
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_config_handle(xmedia_handle handle, const xmedia_cipher_ctrl *ctrl);
|
||||
|
||||
/*
|
||||
* 函数功能:获取cipher通道对应的配置信息
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* ctrl - 输出参数,cipher通道的配置信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_get_handle_config(xmedia_handle handle, xmedia_cipher_ctrl *ctrl);
|
||||
|
||||
/*
|
||||
* 函数功能:对数据进行加密
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* src_phy_addr - 输入参数,待加密的数据的物理地址
|
||||
* dest_phy_addr - 输入参数,存放加密结果的物理地址
|
||||
* length - 输入参数,数据的长度(单位:字节)
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* 注意:
|
||||
* 1. cipher句柄必须已创建
|
||||
* 2. 可多次调用
|
||||
* 3. 模式为CTR时数据的长度为任意长度,其他模式要求与block size对齐
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_encrypt(xmedia_handle handle, xmedia_ulong src_phy_addr,
|
||||
xmedia_ulong dest_phy_addr, xmedia_u32 length);
|
||||
|
||||
/*
|
||||
* 函数功能:对数据进行解密
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* src_phy_addr - 输入参数,待解密的数据的物理地址
|
||||
* dest_phy_addr - 输入参数,存放解密结果的物理地址
|
||||
* length - 输入参数,数据的长度(单位:字节)
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* 注意:
|
||||
* 1. cipher句柄必须已创建
|
||||
* 2. 可多次调用
|
||||
* 3. 模式为CTR时数据的长度为任意长度,其他模式要求与block size对齐
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_decrypt(xmedia_handle handle, xmedia_ulong src_phy_addr,
|
||||
xmedia_ulong dest_phy_addr, xmedia_u32 length);
|
||||
|
||||
/*
|
||||
* 函数功能:对数据进行加密
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* src_data - 输入参数,待加密的数据的虚拟地址
|
||||
* dest_data - 输出参数,存放加密结果的虚拟地址
|
||||
* length - 输入参数,数据的长度(单位:字节)
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* 注意:
|
||||
* 1. cipher句柄必须已创建
|
||||
* 2. 可多次调用
|
||||
* 3. 模式为CTR时数据的长度为任意长度,其他模式要求与block size对齐
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_encrypt_vir(xmedia_handle handle, const xmedia_u8 *src_data,
|
||||
xmedia_u8 *dest_data, xmedia_u32 length);
|
||||
|
||||
/*
|
||||
* 函数功能:对数据进行解密
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* src_data - 输入参数,待解密的数据的虚拟地址
|
||||
* dest_data - 输出参数,存放解密结果的虚拟地址
|
||||
* length - 输入参数,数据的长度(单位:字节)
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* 注意:
|
||||
* 1. cipher句柄必须已创建
|
||||
* 2. 可多次调用
|
||||
* 3. 模式为CTR时数据的长度为任意长度,其他模式要求与block size对齐
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_decrypt_vir(xmedia_handle handle, const xmedia_u8 *src_data,
|
||||
xmedia_u8 *dest_data, xmedia_u32 length);
|
||||
|
||||
/*
|
||||
* 函数功能:进行多个包数据的加密
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* pkg - 输入参数,待加密的数据包
|
||||
* num - 输入参数,待加密的数据包个数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* 注意:
|
||||
* 1. cipher句柄必须已创建
|
||||
* 2. 可多次调用
|
||||
* 3. 每次加密的数据包个数最多不超过128个
|
||||
* 4. 对于多个包的操作,每个包都使用xmedia_cipher_config_handle配置的IV进行运算。
|
||||
* IV作用域是可配置的,前一个包的向量运算结果可以作为下一个包的IV,
|
||||
* 或者每个包IV都是独立运算的(前一次函数调用的结果不会影响后一次函数调用的运算结果)
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_encrypt_multi(xmedia_handle handle, const xmedia_cipher_package *pkg,
|
||||
xmedia_u32 num);
|
||||
|
||||
/*
|
||||
* 函数功能:进行多个包数据的解密
|
||||
* 函数参数:
|
||||
* handle - 输入参数,cipher句柄
|
||||
* pkg - 输入参数,待解密的数据包
|
||||
* num - 输入参数,待解密的数据包个数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* 注意:
|
||||
* 1. cipher句柄必须已创建
|
||||
* 2. 可多次调用
|
||||
* 3. 每次加密的数据包个数最多不超过128个
|
||||
* 4. 对于多个包的操作,每个包都使用xmedia_cipher_config_handle配置的IV进行运算。
|
||||
* IV作用域是可配置的,前一个包的向量运算结果可以作为下一个包的IV,
|
||||
* 或者每个包IV都是独立运算的(前一次函数调用的结果不会影响后一次函数调用的运算结果)
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_decrypt_multi(xmedia_handle handle, const xmedia_cipher_package *pkg,
|
||||
xmedia_u32 num);
|
||||
|
||||
/*
|
||||
* 函数功能:使用KLAD对透明密钥进行加密
|
||||
* 函数参数:
|
||||
* type - 输入参数,KLAD根密钥选择,只能选择EFUSE Key
|
||||
* target - 输入参数,使用该密钥的模块
|
||||
* clean_key - 输入参数,透明密钥
|
||||
* ecnrypt_key - 输出参数,加密密钥
|
||||
* key_len - 输入参数,密钥的长度,必须是16整数倍
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_BUSY - OTP控制器忙/KLAD忙
|
||||
* XMEDIA_FAILURE - OTP控制器操作未完成
|
||||
* 注意:
|
||||
* 1. 默认使用AES256 ECB
|
||||
* 2. target为XMEDIA_CIPHER_KLAD_TARGET_RSA时,会对输入数据每16B进行大小端转换,然后对转换后的数据进行加密
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_klad_encrypt_key(xmedia_cipher_ca_type type,
|
||||
xmedia_cipher_klad_target target, const xmedia_u8 *clean_key,
|
||||
xmedia_u8 *encrypt_key, xmedia_u32 key_len);
|
||||
|
||||
/*
|
||||
* 函数功能:生成随机数
|
||||
* 函数参数:
|
||||
* number - 输出参数,输出的随机数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_TIMEOUT - 获取随机数超时
|
||||
* XMEDIA_FAILURE - 随机数无效
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_get_random_number(xmedia_u32 *number);
|
||||
|
||||
/*
|
||||
* 函数功能:初始化HASH模块
|
||||
* 函数参数:
|
||||
* attr - 输入参数,用于计算hash的结构体参数
|
||||
* handle - 输出参数,输出的hash句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* XMEDIA_ERRCODE_BUSY - 所有通道忙,无法申请通道
|
||||
* 注意:
|
||||
* 如果有其他程序正在使用HASH模块,返回失败状态
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_hash_init(const xmedia_cipher_hash_attr *attr, xmedia_handle *handle);
|
||||
|
||||
/*
|
||||
* 函数功能:计算hash值
|
||||
* 函数参数:
|
||||
* handle - 输入参数,hash句柄
|
||||
* input - 输入参数,输入数据缓冲
|
||||
* in_len - 输入参数,输入数据的长度,单位:byte
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_INVALID_HANDLE - hash句柄无效
|
||||
* 注意:
|
||||
* 1. Hash句柄必须已经创建
|
||||
* 2. 可以分多次调用,每次计算若干字节数据
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_hash_update(xmedia_handle handle, const xmedia_u8 *input, xmedia_u32 in_len);
|
||||
|
||||
/*
|
||||
* 函数功能:获取hash值
|
||||
* 函数参数:
|
||||
* handle - 输入参数,hash句柄
|
||||
* output_hash - 输出参数,输出的hash值
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_INVALID_HANDLE - hash句柄无效
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_hash_final(xmedia_handle handle, xmedia_u8 *output);
|
||||
|
||||
/*
|
||||
* 函数功能:使用RSA公钥加密一段明文
|
||||
* 函数参数:
|
||||
* rsa_enc - 输入参数,公钥加密属性结构体
|
||||
* input - 输入参数,待加密的数据及其长度
|
||||
* output - 输出参数,加密结果数据及其长度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* XMEDIA_FAILURE - 加密失败
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_rsa_public_encrypt(const xmedia_cipher_rsa_pub_enc *rsa_enc,
|
||||
xmedia_cipher_data *input,
|
||||
xmedia_cipher_data *output);
|
||||
|
||||
/*
|
||||
* 函数功能:使用RSA私钥解密一段密文
|
||||
* 函数参数:
|
||||
* rsa_dec - 输入参数,私钥解密属性结构体
|
||||
* input - 输入参数,待解密的数据及其长度
|
||||
* output - 输出参数,解密结果数据及其长度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* XMEDIA_FAILURE - 解密失败
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_rsa_private_decrypt(const xmedia_cipher_rsa_pri_enc *rsa_dec,
|
||||
xmedia_cipher_data *input,
|
||||
xmedia_cipher_data *output);
|
||||
|
||||
/*
|
||||
* 函数功能:使用RSA私钥加密一段明文
|
||||
* 函数参数:
|
||||
* rsa_enc - 输入参数,私钥加密属性结构体
|
||||
* input - 输入参数,待加密的数据及其长度
|
||||
* output - 输出参数,加密结果数据及其长度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* XMEDIA_FAILURE - 加密失败
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_rsa_private_encrypt(const xmedia_cipher_rsa_pri_enc *rsa_enc,
|
||||
xmedia_cipher_data *input,
|
||||
xmedia_cipher_data *output);
|
||||
|
||||
/*
|
||||
* 函数功能:使用RSA公钥解密一段密文
|
||||
* 函数参数:
|
||||
* rsa_dec - 输入参数,公钥解密属性结构体
|
||||
* input - 输入参数,待解密的数据及其长度
|
||||
* output - 输出参数,解密结果数据及其长度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* XMEDIA_FAILURE - 解密失败
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_rsa_public_decrypt(const xmedia_cipher_rsa_pub_enc *rsa_dec,
|
||||
xmedia_cipher_data *input,
|
||||
xmedia_cipher_data *output);
|
||||
|
||||
/*
|
||||
* 函数功能:使用RSA私钥签名一段文本
|
||||
* 函数参数:
|
||||
* rsa_sign_attr - 输入参数,签名属性结构体
|
||||
* data - 输入参数,包括待签名的数据及其长度, 如果hash_data不为空,
|
||||
* 则使用hash_data进行签名,该参数将被忽略
|
||||
* hash_data - 输入参数,待签名文本的HASH摘要,如果为空,则自动计算输入数据的HASH摘要进行签名
|
||||
* sign - 输出参数,包括签名结果数据及其长度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* XMEDIA_FAILURE - 签名失败
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_rsa_sign(const xmedia_cipher_rsa_sign_attr *rsa_sign_attr,
|
||||
xmedia_cipher_data *data,
|
||||
const xmedia_u8 *hash_data, xmedia_cipher_data *sign);
|
||||
|
||||
/*
|
||||
* 函数功能:使用RSA公钥验证签名
|
||||
* 函数参数:
|
||||
* rsa_verify_attr - 输入参数,签名验证属性结构体
|
||||
* data - 输入参数,包括待验证的数据及其长度, 如果hash_data不为空,
|
||||
* 则使用hash_data进行验证,该参数将被忽略
|
||||
* hash_data - 输入参数,待验证文本的HASH摘要,如果为空,则自动计算数据的HASH摘要进行验证
|
||||
* sign - 输入参数,包括待验证的签名数据及其长度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
||||
* XMEDIA_FAILURE - 验签失败
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_rsa_verify(const xmedia_cipher_rsa_verify_attr *rsa_verify_attr,
|
||||
xmedia_cipher_data *data,
|
||||
const xmedia_u8 *hash_data, xmedia_cipher_data *sign);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
#ifndef XMEDIA_CL_H
|
||||
#define XMEDIA_CL_H
|
||||
|
||||
#include "xmedia_cl_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_init(xmedia_cl_void);
|
||||
xmedia_cl_s32 xmedia_cl_uninit(xmedia_cl_void);
|
||||
|
||||
// get the device list
|
||||
xmedia_cl_s32 xmedia_cl_get_device_ids(xmedia_cl_device_type_e device_type,
|
||||
xmedia_cl_device_id *devices,
|
||||
xmedia_cl_u32 *num_devices);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_release_device_ids(xmedia_cl_device_id *devices,
|
||||
xmedia_cl_u32 *num_devices);
|
||||
|
||||
xmedia_cl_context xmedia_cl_create_context(xmedia_cl_u32 num_devices,
|
||||
xmedia_cl_device_id *devices,
|
||||
xmedia_cl_s32 *err_code);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_release_context(xmedia_cl_context context);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_wait_for_events(xmedia_cl_u32 num_events,
|
||||
xmedia_cl_event *events);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_release_event(xmedia_cl_event event);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_query_event_status(xmedia_cl_event event,
|
||||
xmedia_cl_s32 *status);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_graph_querysize_from_file(const char *model,
|
||||
xmedia_cl_u32 *worksize,
|
||||
xmedia_cl_u32 *weightsize);
|
||||
xmedia_cl_s32 xmedia_cl_graph_querysize_from_buff(const char *model,
|
||||
xmedia_cl_u32 *worksize,
|
||||
xmedia_cl_u32 *weightsize);
|
||||
xmedia_cl_s32 xmedia_cl_graph_loadmodel_from_file(xmedia_cl_context *context,
|
||||
const char *model,
|
||||
xmedia_cl_graph *graph);
|
||||
xmedia_cl_s32 xmedia_cl_graph_loadmodel_from_buff(xmedia_cl_context *context,
|
||||
const char *model,
|
||||
xmedia_cl_graph *graph);
|
||||
xmedia_cl_s32 xmedia_cl_set_workspace_addr(xmedia_cl_context context,
|
||||
void *workspace_addr,
|
||||
xmedia_cl_u32 worksize);
|
||||
xmedia_cl_s32 xmedia_cl_get_workspace_addr(xmedia_cl_context context,
|
||||
void **workspace_addr,
|
||||
xmedia_cl_u32 *worksize);
|
||||
xmedia_cl_s32 xmedia_cl_graph_loadmodel_from_file_withmem(
|
||||
xmedia_cl_context *context, const char *model, void *workspace,
|
||||
xmedia_cl_u32 worksize, void *weight, xmedia_cl_u32 weightsize,
|
||||
xmedia_cl_graph *graph);
|
||||
xmedia_cl_s32 xmedia_cl_graph_loadmodel_from_buff_withmem(
|
||||
xmedia_cl_context *context, const char *model, void *workspace,
|
||||
xmedia_cl_u32 worksize, void *weight, xmedia_cl_u32 weightsize,
|
||||
xmedia_cl_graph *graph);
|
||||
xmedia_cl_s32 xmedia_cl_graph_loadmodel_from_buff_mmz_mem(
|
||||
xmedia_cl_context *context, const char *model, void *workspace,
|
||||
xmedia_cl_u32 worksize, xmedia_cl_graph *graph);
|
||||
xmedia_cl_s32 xmedia_cl_graph_get_input(xmedia_cl_graph graph,
|
||||
xmedia_cl_u32 input_num,
|
||||
xmedia_cl_tensor_info_inout *input);
|
||||
xmedia_cl_s32 xmedia_cl_graph_get_output(xmedia_cl_graph graph,
|
||||
xmedia_cl_u32 output_num,
|
||||
xmedia_cl_tensor_info_inout *output);
|
||||
xmedia_cl_s32
|
||||
xmedia_cl_graph_set_inout(xmedia_cl_graph graph,
|
||||
const xmedia_cl_tensor_info_inout *input,
|
||||
const xmedia_cl_tensor_info_inout *output);
|
||||
xmedia_cl_s32 xmedia_cl_graph_process(xmedia_cl_graph graph);
|
||||
xmedia_cl_s32 xmedia_cl_graph_submit(xmedia_cl_graph graph,
|
||||
xmedia_cl_event *event);
|
||||
xmedia_cl_s32 xmedia_cl_graph_unload(xmedia_cl_graph graph);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_graph_set_compress_config(xmedia_cl_graph graph,
|
||||
void *device_head_addr,
|
||||
xmedia_cl_u32 head_size,
|
||||
xmedia_cl_u32 break_line);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_graph_communicate(xmedia_cl_graph graph,
|
||||
xmedia_cl_u32 *model_id);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_graph_decommunicate(xmedia_cl_graph graph,
|
||||
xmedia_cl_u32 model_id);
|
||||
/*
|
||||
目前任务优先级定义四个,从0~3,优先级依次升高,具体见宏定义:
|
||||
XMEDIA_CL_JOB_SCHEDULE_PRIO_MIN
|
||||
XMEDIA_CL_JOB_SCHEDULE_PRIO_MEDIUM
|
||||
XMEDIA_CL_JOB_SCHEDULE_PRIO_HIGH
|
||||
XMEDIA_CL_JOB_SCHEDULE_PRIO_MAX
|
||||
*/
|
||||
xmedia_cl_s32 xmedia_cl_graph_set_schedule_prio(xmedia_cl_graph graph,
|
||||
xmedia_cl_u32 prio);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_set_event_callback(
|
||||
xmedia_cl_event event, xmedia_cl_s32 status,
|
||||
void (*notify)(xmedia_cl_event, xmedia_cl_s32, void *), void *data);
|
||||
|
||||
xmedia_cl_s32
|
||||
xmedia_cl_set_profiling(xmedia_cl_graph graph,
|
||||
xmedia_cl_profiling_params profiling_params);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_graph_set_dynamic_batch_size(
|
||||
xmedia_cl_graph graph, xmedia_cl_tensor_info_inout *input,
|
||||
xmedia_cl_u32 index, xmedia_cl_u32 batch_size);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_graph_get_private_data(xmedia_cl_graph graph,
|
||||
void **private_data,
|
||||
xmedia_cl_u32 *data_size);
|
||||
xmedia_cl_s32
|
||||
xmedia_cl_graph_get_memory_reuse_type(xmedia_cl_graph graph,
|
||||
xmedia_cl_memory_reuse_type *memory_type);
|
||||
|
||||
xmedia_cl_s32 xmedia_cl_graph_get_private_data_from_file(
|
||||
const char *model, void *private_data, xmedia_cl_u32 data_size);
|
||||
xmedia_cl_s32 xmedia_cl_graph_get_private_data_from_buff(
|
||||
const char *model, void *private_data, xmedia_cl_u32 data_size);
|
||||
xmedia_cl_s32
|
||||
xmedia_cl_graph_query_model_info_from_file(const char *model, void *info,
|
||||
xmedia_cl_model_info_type info_type);
|
||||
xmedia_cl_s32
|
||||
xmedia_cl_graph_query_model_info_from_buff(const char *model, void *info,
|
||||
xmedia_cl_model_info_type info_type);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,204 @@
|
||||
#ifndef XMEDIA_CL_COMMON_H
|
||||
#define XMEDIA_CL_COMMON_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define XMEDIA_CL_MAX_DIMS_NUM 8
|
||||
#define XMEDIA_CL_BATCH_NUM 8
|
||||
|
||||
/*xmedia_cl_job_schedule_prio_flags */
|
||||
#define XMEDIA_CL_JOB_SCHEDULE_PRIO_MIN 0
|
||||
#define XMEDIA_CL_JOB_SCHEDULE_PRIO_MEDIUM 1
|
||||
#define XMEDIA_CL_JOB_SCHEDULE_PRIO_HIGH 2
|
||||
#define XMEDIA_CL_JOB_SCHEDULE_PRIO_MAX 3
|
||||
|
||||
/*xmedia_cl_error_code*/
|
||||
#define XMEDIA_CL_SUCCESS 0
|
||||
#define XMEDIA_CL_OUT_OF_HOST_MEMORY -6
|
||||
#define XMEDIA_CL_INVALID_VALUE -30
|
||||
#define XMEDIA_CL_INVALID_DEVICE_TYPE -31
|
||||
#define XMEDIA_CL_INVALID_PLATFORM -32
|
||||
#define XMEDIA_CL_INVALID_DEVICE -33
|
||||
#define XMEDIA_CL_INVALID_CONTEXT -34
|
||||
#define XMEDIA_CL_INVALID_COMMAND_QUEUE -36
|
||||
#define XMEDIA_CL_INVALID_HOST_PTR -37
|
||||
#define XMEDIA_CL_INVALID_MEM_OBJECT -38
|
||||
#define XMEDIA_CL_INVALID_BINARY -42
|
||||
#define XMEDIA_CL_INVALID_PROGRAM -44
|
||||
#define XMEDIA_CL_INVALID_PROGRAM_EXECUTABLE -45
|
||||
#define XMEDIA_CL_INVALID_KERNEL_NAME -46
|
||||
#define XMEDIA_CL_INVALID_KERNEL -48
|
||||
#define XMEDIA_CL_INVALID_ARG_INDEX -49
|
||||
#define XMEDIA_CL_INVALID_ARG_VALUE -50
|
||||
#define XMEDIA_CL_INVALID_ARG_SIZE -51
|
||||
#define XMEDIA_CL_INVALID_KERNEL_ARGS -52
|
||||
#define XMEDIA_CL_WAIT_EVENT_FAILED -56
|
||||
#define XMEDIA_CL_INVALID_EVENT_WAIT_LIST -57
|
||||
#define XMEDIA_CL_INVALID_EVENT -58
|
||||
#define XMEDIA_CL_INVALID_OPERATION -59
|
||||
#define XMEDIA_CL_INVALID_UNINIT -60
|
||||
#define XMEDIA_CL_INVALID_BUFFER_SIZE -61
|
||||
#define XMEDIA_CL_INVALID_USER_FUNC -62
|
||||
#define XMEDIA_CL_ALREADY_INIT -63
|
||||
#define XMEDIA_CL_INVALID_MODEL -64
|
||||
#define XMEDIA_CL_READ_MODEL_FAIL -65
|
||||
#define XMEDIA_CL_INSUFFICIENT_SIZE -66
|
||||
#define XMEDIA_CL_CALL_INTERFUNC_ERR -67
|
||||
#define XMEDIA_CL_ERROR_MODEL_TYPE -68
|
||||
#define XMEDIA_CL_ERROR_ADDR_ALIGN -69
|
||||
#define XMEDIA_CL_UNSUPPORT_DYNAMIC_OUTPUT -70
|
||||
#define XMEDIA_CL_MODEL_DECOMPRESS_FAIL -71
|
||||
#define XMEDIA_CL_ERROR_COMPRESS_TYPE -72
|
||||
#define XMEDIA_CL_ERROR_PROC_TYPE -73
|
||||
#define XMEDIA_CL_OUT_OF_MAX_BATCH -74
|
||||
#define XMEDIA_CL_NOT_FIND_FILE -75
|
||||
#define XMEDIA_CL_CONTEXT_WORKSPACE_FAIL -76
|
||||
#define XMEDIA_CL_PRIVATE_DATA_NULL -77
|
||||
#define XMEDIA_CL_PRIVATE_DATA_SIZE_ERROR -78
|
||||
#define XMEDIA_CL_UNSUPPORT_INFO_TYPE -79
|
||||
|
||||
typedef char xmedia_cl_s8;
|
||||
typedef unsigned char xmedia_cl_u8;
|
||||
typedef signed int xmedia_cl_s32;
|
||||
typedef unsigned int xmedia_cl_u32;
|
||||
typedef signed long long xmedia_cl_s64;
|
||||
typedef unsigned long long xmedia_cl_u64;
|
||||
typedef signed short xmedia_cl_s16;
|
||||
typedef unsigned short xmedia_cl_u16;
|
||||
typedef float xmedia_cl_float;
|
||||
typedef double xmedia_cl_double;
|
||||
typedef void xmedia_cl_void;
|
||||
|
||||
typedef enum xmedia_cl_device_type {
|
||||
XMEDIA_CL_DEVICE_CPU = 0,
|
||||
XMEDIA_CL_DEVICE_NPU = 1,
|
||||
XMEDIA_CL_DEVICE_ALL = 2,
|
||||
} xmedia_cl_device_type_e;
|
||||
|
||||
typedef enum tensor_type {
|
||||
XMEDIA_CL_TENSOR_INPUT = 0,
|
||||
XMEDIA_CL_TENSOR_CONST,
|
||||
XMEDIA_CL_TENSOR_OUTPUT,
|
||||
XMEDIA_CL_TENSOR_WORKSPACE,
|
||||
UNKNOWN
|
||||
} xmedia_cl_tensor_type_e;
|
||||
|
||||
typedef enum xmedia_cl_status {
|
||||
XMEDIA_CL_QUEUED = 0,
|
||||
XMEDIA_CL_SUBMITTED = 1,
|
||||
XMEDIA_CL_RUNNING = 2,
|
||||
XMEDIA_CL_COMPLETED = 3,
|
||||
XMEDIA_CL_FAILED = 4,
|
||||
} xmedia_cl_status_e;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CL_INT8 = 0,
|
||||
XMEDIA_CL_UINT8 = 1,
|
||||
XMEDIA_CL_INT16 = 2,
|
||||
XMEDIA_CL_UINT16 = 3,
|
||||
XMEDIA_CL_FP16 = 4,
|
||||
XMEDIA_CL_INT32 = 5,
|
||||
XMEDIA_CL_FP32 = 6,
|
||||
XMEDIA_CL_INT4 = 7,
|
||||
XMEDIA_CL_UINT12 = 8,
|
||||
XMEDIA_CL_UINT10 = 9,
|
||||
XMEDIA_CL_DATA_TYPE_END
|
||||
} xmedia_cl_data_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CL_FORMAT_RGB = 0,
|
||||
XMEDIA_CL_FORMAT_RGrGbB,
|
||||
XMEDIA_CL_FORMAT_BGbGrR,
|
||||
XMEDIA_CL_FORMAT_GrRBGb = 3,
|
||||
XMEDIA_CL_FORMAT_GbBRGr,
|
||||
XMEDIA_CL_FORMAT_YUV,
|
||||
XMEDIA_CL_FORMAT_YVU = 6,
|
||||
} xmedia_cl_data_format;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CL_WORKSPACE = 0,
|
||||
XMEDIA_CL_WORKSPACE_INPUT = 1,
|
||||
XMEDIA_CL_WORKSPACE_OUTPUT = 2,
|
||||
XMEDIA_CL_WORKSPACE_INPUT_OUTPUT = 3,
|
||||
} xmedia_cl_memory_reuse_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CL_PROFILING_TYPE_NORMAL = 0,
|
||||
XMEDIA_CL_PROFILING_TYPE_SIMPLE = 1,
|
||||
} xmedia_cl_profiling_type_e;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CL_PROFILING_OFF = 0,
|
||||
XMEDIA_CL_PROFILING_ON = 1,
|
||||
} xmedia_cl_profiling_flag_e;
|
||||
|
||||
typedef struct _xmedia_cl_profiling_params {
|
||||
xmedia_cl_profiling_type_e profiling_type;
|
||||
xmedia_cl_profiling_flag_e profiling_flag;
|
||||
} xmedia_cl_profiling_params;
|
||||
|
||||
typedef struct _xmedia_cl_tensor_shape {
|
||||
xmedia_cl_u32 ndims;
|
||||
xmedia_cl_u32 dims[XMEDIA_CL_MAX_DIMS_NUM];
|
||||
xmedia_cl_u32 pch[XMEDIA_CL_MAX_DIMS_NUM];
|
||||
xmedia_cl_data_type type;
|
||||
} xmedia_cl_tensor_shape;
|
||||
|
||||
typedef struct _xmedia_cl_tensor_quant {
|
||||
xmedia_cl_float scale;
|
||||
xmedia_cl_s32 zp;
|
||||
} xmedia_cl_tensor_quant;
|
||||
|
||||
typedef struct _xmedia_cl_tensor_list {
|
||||
xmedia_cl_u32 num;
|
||||
xmedia_cl_u32 *id;
|
||||
} xmedia_cl_tensor_list;
|
||||
|
||||
typedef struct _xmedia_cl_tensor_batch {
|
||||
xmedia_cl_u32 batch_count;
|
||||
xmedia_cl_u32 batch[XMEDIA_CL_BATCH_NUM];
|
||||
} xmedia_cl_tensor_batch;
|
||||
|
||||
typedef struct _xmedia_cl_tensor {
|
||||
xmedia_cl_u32 tensor_id;
|
||||
void *addr;
|
||||
xmedia_cl_tensor_shape shape;
|
||||
xmedia_cl_tensor_quant quant;
|
||||
xmedia_cl_u32 size;
|
||||
xmedia_cl_s8 *name;
|
||||
} xmedia_cl_tensor;
|
||||
|
||||
typedef struct _xmedia_cl_tensor_info_inout {
|
||||
xmedia_cl_u32 num;
|
||||
xmedia_cl_tensor *tensor;
|
||||
xmedia_cl_tensor_batch *tensor_batch;
|
||||
xmedia_cl_u32 *current_batch;
|
||||
} xmedia_cl_tensor_info_inout;
|
||||
|
||||
typedef struct _xmedia_cl_mem_info {
|
||||
xmedia_cl_u32 worksize;
|
||||
xmedia_cl_u32 weightsize;
|
||||
xmedia_cl_u32 inputsize;
|
||||
xmedia_cl_u32 outputsize;
|
||||
xmedia_cl_u32 codesize;
|
||||
xmedia_cl_u32 memory_reuse_type;
|
||||
xmedia_cl_u32 private_data_size;
|
||||
} xmedia_cl_mem_info;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CL_MEM_INFO = 0,
|
||||
} xmedia_cl_model_info_type;
|
||||
|
||||
typedef struct _xmedia_cl_device_id *xmedia_cl_device_id;
|
||||
typedef struct _xmedia_cl_event *xmedia_cl_event;
|
||||
typedef struct _xmedia_cl_context *xmedia_cl_context;
|
||||
|
||||
typedef void *xmedia_cl_graph;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Executable
+143
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef XMEDIA_DEBUG_H
|
||||
#define XMEDIA_DEBUG_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "common.h"
|
||||
|
||||
#ifndef __KERNEL__
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 函数功能:检查调试信息打印等级,若打印等级值大于模块的打印等级值,不进行打印;反之,打印
|
||||
* 函数参数:
|
||||
* level - 输入参数,调试信息打印等级
|
||||
* mod_id - 输入参数,模块id
|
||||
* 返回值:
|
||||
* XMEDIA_FAILURE - 函数执行失败或不满足打印条件
|
||||
* XMEDIA_SUCCESS - 允许打印调试信息
|
||||
*/
|
||||
xmedia_s32 usr_log_check_level(xmedia_s32 level, xmedia_mod_id mod_id);
|
||||
|
||||
|
||||
#define _EX__FILE_LINE(fxx,lxx) "[File]:"fxx"\n[Line]:"#lxx"\n[Info]:"
|
||||
#define EX__FILE_LINE(fxx,lxx) _EX__FILE_LINE(fxx,lxx)
|
||||
#define __FILE_LINE__ EX__FILE_LINE(__FILE__, __LINE__)
|
||||
|
||||
#define MODULE_DBG_EMERG 0
|
||||
#define MODULE_DBG_ALERT 1
|
||||
#define MODULE_DBG_CRIT 2
|
||||
#define MODULE_DBG_ERR 3
|
||||
#define MODULE_DBG_WARN 4
|
||||
#define MODULE_DBG_NOTICE 5
|
||||
#define MODULE_DBG_INFO 6
|
||||
#define MODULE_DBG_DEBUG 7
|
||||
|
||||
#define MODULE_USR_DEFAULT_DBG MODULE_DBG_ERR // 用户态日志管理初始化失败时各模块的打印等级
|
||||
|
||||
#ifndef __KERNEL__
|
||||
|
||||
#define XMEDIA_PRINT printf
|
||||
|
||||
#ifdef CONFIG_LOG_TRACE_SUPPORT
|
||||
#define XMEDIA_ASSERT(expr) do { \
|
||||
if (!(expr)) { \
|
||||
printf("\nASSERT at:\n" \
|
||||
" >Function : %s\n" \
|
||||
" >Line No. : %d\n" \
|
||||
" >Condition: %s\n", \
|
||||
__FUNCTION__, __LINE__, #expr); \
|
||||
_exit(-1); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define MODULE_TRACE(level, mod_id, fmt...) do { \
|
||||
if (usr_log_check_level(level, mod_id) == XMEDIA_SUCCESS) { \
|
||||
fprintf(stderr, ##fmt); \
|
||||
} \
|
||||
} while (0) \
|
||||
|
||||
#else
|
||||
#define XMEDIA_ASSERT(expr) do { \
|
||||
if (!(expr)) { \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* for clear compile warning */
|
||||
#define MODULE_TRACE(level, mod_id, fmt...) do { \
|
||||
if (0) { \
|
||||
fprintf(stderr,##fmt); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
#include "drv_log.h"
|
||||
#include "osal.h"
|
||||
|
||||
#define XMEDIA_PRINT osal_printk
|
||||
|
||||
#ifdef CONFIG_LOG_TRACE_SUPPORT
|
||||
#define XMEDIA_ASSERT(expr) do { \
|
||||
if (!(expr)) { \
|
||||
osal_panic("\nASSERT at:\n" \
|
||||
" >Function : %s\n" \
|
||||
" >Line No. : %d\n" \
|
||||
" >Condition: %s\n", \
|
||||
__FUNCTION__, __LINE__, #expr); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define MODULE_TRACE(level, mod_id, fmt...) do { \
|
||||
drv_log_write(level,mod_id,fmt); \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
#define XMEDIA_ASSERT(expr) do { \
|
||||
if (!(expr)) { \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* for clear compile warning */
|
||||
#define MODULE_TRACE(level, mod_id, fmt...) do { \
|
||||
if (0) { \
|
||||
drv_log_write(level,mod_id,fmt); \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#define XMEDIA_PRINT_BLOCK(data_block, length) \
|
||||
{ \
|
||||
xmedia_u32 ii = 0; \
|
||||
xmedia_u8* vir_addr = (xmedia_u8*)(data_block); \
|
||||
if (vir_addr != XMEDIA_NULL) { \
|
||||
XMEDIA_PRINT("\n[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, #data_block); \
|
||||
for (ii = 0; ii < (length);) { \
|
||||
XMEDIA_PRINT(" %02X", *vir_addr); \
|
||||
vir_addr++; \
|
||||
ii++; \
|
||||
if(0 == (ii % 16))XMEDIA_PRINT("\n"); \
|
||||
} \
|
||||
XMEDIA_PRINT("\n\n");\
|
||||
} else { \
|
||||
XMEDIA_PRINT("\n[Func]:%s [Line]:%d [Info]:pointer(%s) is null!\n", __FUNCTION__, __LINE__, #data_block); \
|
||||
} \
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef XMEDIA_ERRCODE_H
|
||||
#define XMEDIA_ERRCODE_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#define XMEDIA_ERRCODE_INVALID_PARAM (xmedia_s32)(0x80010001)
|
||||
#define XMEDIA_ERRCODE_NULL_PTR (xmedia_s32)(0x80010002)
|
||||
#define XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY (xmedia_s32)(0x80010003) // memory allocation fails
|
||||
#define XMEDIA_ERRCODE_NOT_INIT (xmedia_s32)(0x80010004)
|
||||
#define XMEDIA_ERRCODE_NOT_SUPPORT (xmedia_s32)(0x80010005)
|
||||
#define XMEDIA_ERRCODE_TIMEOUT (xmedia_s32)(0x80010006)
|
||||
#define XMEDIA_ERRCODE_BAD_ADDRESS (xmedia_s32)(0x80010007)
|
||||
#define XMEDIA_ERRCODE_OPEN_FAILED (xmedia_s32)(0x80010008)
|
||||
#define XMEDIA_ERRCODE_CLOSE_FAILED (xmedia_s32)(0x80010009)
|
||||
#define XMEDIA_ERRCODE_CREATE_FAILED (xmedia_s32)(0x8001000A)
|
||||
#define XMEDIA_ERRCODE_DESTROY_FAILED (xmedia_s32)(0x8001000B)
|
||||
#define XMEDIA_ERRCODE_BUFFER_EMPTY (xmedia_s32)(0x8001000C)
|
||||
#define XMEDIA_ERRCODE_BUFFER_FULL (xmedia_s32)(0x8001000D)
|
||||
#define XMEDIA_ERRCODE_NO_BUFFER_FREE (xmedia_s32)(0x8001000E)
|
||||
#define XMEDIA_ERRCODE_NOT_PERMITTED (xmedia_s32)(0x8001000F) // Operation not permitted
|
||||
#define XMEDIA_ERRCODE_EXIST (xmedia_s32)(0x80010010) // Target exists
|
||||
#define XMEDIA_ERRCODE_NOT_EXIST (xmedia_s32)(0x80010011) // Target does not exist
|
||||
#define XMEDIA_ERRCODE_NOT_READY (xmedia_s32)(0x80010012) // Target not ready
|
||||
#define XMEDIA_ERRCODE_BUSY (xmedia_s32)(0x80010013) // Device or resource busy
|
||||
#define XMEDIA_ERRCODE_COPY_DATA_ERROR (xmedia_s32)(0x80010014)
|
||||
#define XMEDIA_ERRCODE_TYPE_ERROR (xmedia_s32)(0x80010015)
|
||||
#define XMEDIA_ERRCODE_CHN_FULL (xmedia_s32)(0x80010016)
|
||||
#define XMEDIA_ERRCODE_INVALID_CHN_ID (xmedia_s32)(0x80010017)
|
||||
#define XMEDIA_ERRCODE_INVALID_DEV_ID (xmedia_s32)(0x80010018)
|
||||
#define XMEDIA_ERRCODE_INVALID_PIPE_ID (xmedia_s32)(0x80010019)
|
||||
#define XMEDIA_ERRCODE_INVALID_GRP_ID (xmedia_s32)(0x8001001A)
|
||||
#define XMEDIA_ERRCODE_NOT_CONFIG (xmedia_s32)(0x8001001B)
|
||||
#define XMEDIA_ERRCODE_NOT_ENABLE (xmedia_s32)(0x8001001C)
|
||||
#define XMEDIA_ERRCODE_NOT_DISABLE (xmedia_s32)(0x8001001D)
|
||||
#define XMEDIA_ERRCODE_NOT_BIND (xmedia_s32)(0x8001001E)
|
||||
#define XMEDIA_ERRCODE_BINDED (xmedia_s32)(0x8001001F)
|
||||
|
||||
#endif /* XMEDIA_ERRCODE_H */
|
||||
Executable
+124
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef XMEDIA_INTF_COMMON_H
|
||||
#define XMEDIA_INTF_COMMON_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_RAW_8BIT = 0,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_RAW_10BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_RAW_12BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_RAW_14BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_RAW_16BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_RAW_20BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_RAW_24BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_YUV420_8BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_YUV420_LEGACY_8BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_YUV422_8BIT,
|
||||
XMEDIA_INTF_MIPI_CSI_DATA_TYPE_MAX
|
||||
} xmedia_intf_mipi_csi_data_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_MIPI_DSI_DATA_TYPE_YUV422_16BIT = 0,
|
||||
XMEDIA_INTF_MIPI_DSI_DATA_TYPE_RGB666_18BIT,
|
||||
XMEDIA_INTF_MIPI_DSI_DATA_TYPE_RGB888_24BIT,
|
||||
XMEDIA_INTF_MIPI_DSI_DATA_TYPE_MAX
|
||||
} xmedia_intf_mipi_dsi_data_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_BT_DATA_TYPE_YUV422_8BIT = 0,
|
||||
XMEDIA_INTF_BT_DATA_TYPE_YUV422_10BIT,
|
||||
XMEDIA_INTF_BT_DATA_TYPE_MAX
|
||||
} xmedia_intf_bt_data_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_LCD_DATA_TYPE_RGB565_16BIT = 0,
|
||||
XMEDIA_INTF_LCD_DATA_TYPE_RGB666_18BIT,
|
||||
XMEDIA_INTF_LCD_DATA_TYPE_RGB888_24BIT,
|
||||
XMEDIA_INTF_LCD_DATA_TYPE_MAX
|
||||
} xmedia_intf_lcd_data_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_LVDS_DATA_TYPE_RGB666_18BIT = 0,
|
||||
XMEDIA_INTF_LVDS_DATA_TYPE_RGB666_36BIT,
|
||||
XMEDIA_INTF_LVDS_DATA_TYPE_RGB888_24BIT,
|
||||
XMEDIA_INTF_LVDS_DATA_TYPE_RGB888_48BIT,
|
||||
XMEDIA_INTF_LVDS_DATA_TYPE_MAX
|
||||
} xmedia_intf_lvds_data_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_DC_DATA_TYPE_RAW_8BIT = 0,
|
||||
XMEDIA_INTF_DC_DATA_TYPE_RAW_10BIT,
|
||||
XMEDIA_INTF_DC_DATA_TYPE_RAW_12BIT,
|
||||
XMEDIA_INTF_DC_DATA_TYPE_RAW_14BIT,
|
||||
XMEDIA_INTF_DC_DATA_TYPE_RAW_16BIT,
|
||||
XMEDIA_INTF_DC_DATA_TYPE_MAX
|
||||
} xmedia_intf_dc_data_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_TYPE_BT601 = 0,
|
||||
XMEDIA_INTF_TYPE_BT656,
|
||||
XMEDIA_INTF_TYPE_BT1120,
|
||||
XMEDIA_INTF_TYPE_MIPI_CSI,
|
||||
XMEDIA_INTF_TYPE_MIPI_DSI,
|
||||
XMEDIA_INTF_TYPE_LCD,
|
||||
XMEDIA_INTF_TYPE_LVDS,
|
||||
XMEDIA_INTF_TYPE_DC,
|
||||
XMEDIA_INTF_TYPE_MCU,
|
||||
XMEDIA_INTF_TYPE_SPI,
|
||||
XMEDIA_INTF_TYPE_MAX
|
||||
} xmedia_intf_type;
|
||||
|
||||
/* bt601&bt656 */
|
||||
typedef enum {
|
||||
XMEDIA_INTF_BT601_BT656_DATA_SEQ_UYVY = 0,
|
||||
XMEDIA_INTF_BT601_BT656_DATA_SEQ_VYUY,
|
||||
XMEDIA_INTF_BT601_BT656_DATA_SEQ_YUYV,
|
||||
XMEDIA_INTF_BT601_BT656_DATA_SEQ_YVYU,
|
||||
XMEDIA_INTF_BT601_BT656_DATA_SEQ_MAX
|
||||
} xmedia_intf_bt601_bt656_data_seq;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_BT1120_DATA_SEQ_VUVU = 0,
|
||||
XMEDIA_INTF_BT1120_DATA_SEQ_UVUV,
|
||||
XMEDIA_INTF_BT1120_DATA_SEQ_MAX,
|
||||
} xmedia_intf_bt1120_data_seq;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_YUV_DATA_SEQ_UYVY = 0,
|
||||
XMEDIA_INTF_YUV_DATA_SEQ_VYUY,
|
||||
XMEDIA_INTF_YUV_DATA_SEQ_YUYV,
|
||||
XMEDIA_INTF_YUV_DATA_SEQ_YVYU,
|
||||
XMEDIA_INTF_YUV_DATA_SEQ_MAX
|
||||
} xmedia_intf_yuv_data_seq;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_LCD_DATA_SEQ_RGB = 0,
|
||||
XMEDIA_INTF_LCD_DATA_SEQ_RBG,
|
||||
XMEDIA_INTF_LCD_DATA_SEQ_GRB,
|
||||
XMEDIA_INTF_LCD_DATA_SEQ_GBR,
|
||||
XMEDIA_INTF_LCD_DATA_SEQ_BRG,
|
||||
XMEDIA_INTF_LCD_DATA_SEQ_BGR,
|
||||
XMEDIA_INTF_LCD_DATA_SEQ_MAX,
|
||||
} xmedia_intf_lcd_data_seq;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_INTF_LVDS_FORMAT_VESA = 0,
|
||||
XMEDIA_INTF_LVDS_FORMAT_JEIDA,
|
||||
XMEDIA_INTF_LVDS_FORMAT_MAX
|
||||
} xmedia_intf_lvds_format;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Executable
+4815
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef XMEDIA_LOG_H
|
||||
#define XMEDIA_LOG_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 函数功能:初始化日志模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_log_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:去初始化日志模块
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 无
|
||||
*/
|
||||
xmedia_void xmedia_log_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:设置模块内核态日志等级
|
||||
* 函数参数:
|
||||
* mod_id - 输入参数,目标模块ID
|
||||
* level - 输入参数,内核态日志等级
|
||||
* is_all_mod - 输入参数,是否同时设置所有模块的内核态日志等级
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
* 注意:
|
||||
* 1. 若is_all_mod为XMEDIA_TRUE,表示修改所有模块的内核态日志等级
|
||||
* 2. 需要先调用xmedia_log_init
|
||||
*/
|
||||
xmedia_s32 xmedia_log_set_level_cfg(xmedia_mod_id mod_id, xmedia_u32 level, xmedia_bool is_all_mod);
|
||||
|
||||
/*
|
||||
* 函数功能:获取目标模块内核态日志等级
|
||||
* 函数参数:
|
||||
* mod_id - 输入参数,目标模块ID
|
||||
* level - 输出参数,内核态日志等级
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
* 注意:
|
||||
* 需要先调用xmedia_log_init
|
||||
*/
|
||||
xmedia_s32 xmedia_log_get_level_cfg(xmedia_mod_id mod_id, xmedia_u32 *level);
|
||||
|
||||
/*
|
||||
* 函数功能:设置读取日志时是否一直等待日志信息
|
||||
* 函数参数:
|
||||
* wait_flag - 输入参数,等待控制位
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
* 注意:
|
||||
* 需要先调用xmedia_log_init
|
||||
*/
|
||||
xmedia_s32 xmedia_log_set_wait_flag(xmedia_bool wait_flag);
|
||||
|
||||
/*
|
||||
* 函数功能:读取日志
|
||||
* 函数参数:
|
||||
* buf - 输出参数,保存读出日志的buffer
|
||||
* size - 输入参数,读取日志的大小
|
||||
* 返回值:
|
||||
* 小于 0 - 函数执行失败
|
||||
* 大于或等于 0 - 实际读取日志的大小
|
||||
* 注意:
|
||||
* 需要先调用xmedia_log_init
|
||||
*/
|
||||
xmedia_s32 xmedia_log_read(xmedia_char *buf, xmedia_u32 size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
Executable
+62
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _XMEDIA_MD_H_
|
||||
#define _XMEDIA_MD_H_
|
||||
|
||||
#include "xmedia_ive_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef enum xmedia_md_alg_mode_e {
|
||||
XMEDIA_MD_ALG_MODE_BG = 0x0,
|
||||
XMEDIA_MD_ALG_MODE_REF = 0x1,
|
||||
|
||||
XMEDIA_MD_ALG_MODE_BUTT
|
||||
} xmedia_md_alg_mode_e;
|
||||
typedef struct xmedia_md_attr_s {
|
||||
xmedia_md_alg_mode_e en_alg_mode;
|
||||
xmedia_ive_sad_mode_e en_sad_mode;
|
||||
xmedia_ive_sad_out_ctrl_e en_sad_out_ctrl;
|
||||
xmedia_u32 u32_width;
|
||||
xmedia_u32 u32_height;
|
||||
xmedia_u16 u16_sad_thr;
|
||||
xmedia_ive_ccl_ctrl_s st_ccl_ctrl;
|
||||
xmedia_ive_add_ctrl_s st_add_ctrl;
|
||||
} xmedia_md_attr_s;
|
||||
|
||||
|
||||
xmedia_s32 xmedia_md_init(xmedia_void);
|
||||
|
||||
|
||||
xmedia_s32 xmedia_md_exit(xmedia_void);
|
||||
|
||||
|
||||
xmedia_s32 xmedia_md_create_chn(xmedia_s32 md_chn, xmedia_md_attr_s *pst_md_attr);
|
||||
|
||||
|
||||
xmedia_s32 xmedia_md_destroy_chn(xmedia_s32 md_chn);
|
||||
|
||||
|
||||
xmedia_s32 xmedia_md_set_chn_attr(xmedia_s32 md_chn, xmedia_md_attr_s *pst_md_attr);
|
||||
|
||||
|
||||
xmedia_s32 xmedia_md_get_chn_attr(xmedia_s32 md_chn, xmedia_md_attr_s *pst_md_attr);
|
||||
|
||||
|
||||
xmedia_s32 xmedia_md_get_bg(xmedia_s32 md_chn, xmedia_ive_dst_image_s *pst_bg);
|
||||
|
||||
|
||||
xmedia_s32 xmedia_md_process(xmedia_s32 md_chn, xmedia_ive_src_image_s *pst_cur, xmedia_ive_src_image_s *pst_ref, xmedia_ive_dst_image_s *pst_sad, xmedia_ive_dst_mem_info_s *pst_blob);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef XMEDIA_MEMORY_H
|
||||
#define XMEDIA_MEMORY_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_mmz.h"
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef XMEDIA_MMZ_H
|
||||
#define XMEDIA_MMZ_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 函数功能:申请 MMZ 内存
|
||||
* 函数参数:
|
||||
* mmz_name - 输入参数,申请的内存内存池名
|
||||
* buf_name - 输入参数,申请的内存命名
|
||||
* size - 输入参数,申请的内存大小
|
||||
* 返回值:
|
||||
* 0 - 函数执行失败,返回空
|
||||
* others - 函数执行成功,返回申请内存的物理地址
|
||||
*/
|
||||
xmedia_u64 xmedia_mmz_alloc(const xmedia_char *mmz_name, const xmedia_char *buf_name, xmedia_u32 size);
|
||||
|
||||
/*
|
||||
* 函数功能:释放 MMZ 内存
|
||||
* 函数参数:
|
||||
* phy_addr - 输入参数,待释放的MMZ内存物理地址
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* others - 函数执行失败,返回错误码
|
||||
*/
|
||||
xmedia_s32 xmedia_mmz_free(xmedia_u64 phy_addr);
|
||||
|
||||
/*
|
||||
* 函数功能:映射内存
|
||||
* 函数参数:
|
||||
* phy_addr - 输入参数,待映射内存对应的物理地址
|
||||
* size - 输入参数,待映射内存的大小
|
||||
* cached - 输入参数,映射时是否带cache
|
||||
* 返回值:
|
||||
* XMEDIA_NULL - 函数执行失败,返回空指针
|
||||
* others - 函数执行成功过,返回映射后的虚拟地址
|
||||
*/
|
||||
xmedia_void* xmedia_mmz_map(xmedia_u64 phy_addr, xmedia_u32 size, xmedia_bool cached);
|
||||
|
||||
/*
|
||||
* 函数功能:解除映射
|
||||
* 函数参数:
|
||||
* virt_addr - 输入参数,待解除映射内存对应的虚拟地址
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* others - 函数执行失败,返回错误码
|
||||
*/
|
||||
xmedia_s32 xmedia_mmz_unmap(void *virt_addr);
|
||||
|
||||
/*
|
||||
* 函数功能:刷新 cache 里的内容到MMZ内存并且使 cache 里的内容无效
|
||||
* 函数参数:
|
||||
* phy_addr - 输入参数,待刷新cache对应的内存物理地址
|
||||
* virt_addr - 输入参数,待刷新cache对应的内存虚拟地址
|
||||
* size - 输入参数,待刷新cache区域大小
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* others - 函数执行失败,返回错误码
|
||||
*/
|
||||
xmedia_s32 xmedia_mmz_flush_cache(xmedia_u64 phy_addr, xmedia_void *virt_addr, xmedia_u32 size);
|
||||
|
||||
/*
|
||||
* 函数功能:将用户空间mmz的虚拟地址转换成对应的物理地址
|
||||
* 函数参数:
|
||||
* pphy_addr - 输入参数,输出的mmz内存物理地址保存在此指针中
|
||||
* virt_addr - 输入参数,mmz的内存虚拟地址
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* others - 函数执行失败,返回错误码
|
||||
*/
|
||||
xmedia_s32 xmedia_mmz_virt_to_phy(xmedia_void *virt_addr, xmedia_u64 *pphy_addr);
|
||||
|
||||
/*
|
||||
* 函数功能:获取用户空间mmz map时是否cached
|
||||
* 函数参数:
|
||||
* pcached - 输入参数,输出的mmz内存是否cached保存在此指针中
|
||||
* virt_addr - 输入参数,mmz的内存虚拟地址
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* others - 函数执行失败,返回错误码
|
||||
*/
|
||||
xmedia_s32 xmedia_mmz_is_cached(xmedia_void *virt_addr, xmedia_bool *pcached);
|
||||
|
||||
xmedia_void xmedia_mmz_init(xmedia_void);
|
||||
|
||||
xmedia_void xmedia_mmz_exit(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (c); XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_MSENSOR_H__
|
||||
#define __XMEDIA_MSENSOR_H__
|
||||
|
||||
#include "xmedia_errcode.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define XMEDIA_MSENSOR_MAX_DEV_NUM 2
|
||||
|
||||
#define XMEDIA_MSENSOR_MAX_DATA_NUM 128
|
||||
#define XMEDIA_MSENSOR_GRADIENT (0x1 << 10)
|
||||
|
||||
#define XMEDIA_MSENSOR_TEMP_GYRO 0x1
|
||||
#define XMEDIA_MSENSOR_TEMP_ACC 0x2
|
||||
#define XMEDIA_MSENSOR_TEMP_ALL 0x3
|
||||
|
||||
#define XMEDIA_MSENSOR_DEVICE_GYRO 0x1
|
||||
#define XMEDIA_MSENSOR_DEVICE_ACC 0x2
|
||||
#define XMEDIA_MSENSOR_DEVICE_ALL 0x3
|
||||
|
||||
#define xmedia_unused(x) ((xmedia_void)(x))
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 device_mask;
|
||||
xmedia_u32 temperature_mask;
|
||||
} xmedia_msensor_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u64 phys_addr;
|
||||
xmedia_void *virt_addr;
|
||||
xmedia_u32 buf_len;
|
||||
} xmedia_msensor_buf_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 x;
|
||||
xmedia_s32 y;
|
||||
xmedia_s32 z;
|
||||
xmedia_s32 temperature;
|
||||
xmedia_u64 pts;
|
||||
} xmedia_msensor_sample_data;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 data_num;
|
||||
xmedia_msensor_sample_data gyro_data[XMEDIA_MSENSOR_MAX_DATA_NUM];
|
||||
} xmedia_msensor_gyro_buf;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 data_num;
|
||||
xmedia_msensor_sample_data acc_data[XMEDIA_MSENSOR_MAX_DATA_NUM];
|
||||
} xmedia_msensor_acc_buf;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 odr;
|
||||
xmedia_u32 fsr;
|
||||
xmedia_u8 data_width;
|
||||
xmedia_s32 temperature_max;
|
||||
xmedia_s32 temperature_min;
|
||||
} xmedia_msensor_gyro_config;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 odr; // 速率
|
||||
xmedia_u32 fsr; // 量程
|
||||
xmedia_u8 data_width; // 数据位宽
|
||||
xmedia_s32 temperature_max;
|
||||
xmedia_s32 temperature_min;
|
||||
} xmedia_msensor_acc_config;
|
||||
|
||||
typedef struct {
|
||||
xmedia_msensor_gyro_config gyro_config;
|
||||
xmedia_msensor_acc_config acc_config;
|
||||
} xmedia_msensor_config;
|
||||
|
||||
typedef struct {
|
||||
xmedia_msensor_buf_attr buf_attr;
|
||||
xmedia_msensor_config config;
|
||||
xmedia_msensor_attr attr;
|
||||
} xmedia_msensor_param;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_MSENSOR_DATA_TYPE_GYRO = 0,
|
||||
XMEDIA_MSENSOR_DATA_TYPE_ACC,
|
||||
XMEDIA_MSENSOR_DATA_TYPE_MAX
|
||||
} xmedia_msensor_data_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 *x_phys_addr;
|
||||
xmedia_s32 *y_phys_addr;
|
||||
xmedia_s32 *z_phys_addr;
|
||||
xmedia_s32 *temperature_phys_addr;
|
||||
xmedia_u64 *pts_phys_addr;
|
||||
xmedia_u32 num; /* number of valid data */
|
||||
} xmedia_msensor_data_addr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 id;
|
||||
xmedia_msensor_data_type data_type;
|
||||
xmedia_msensor_data_addr data[2]; /* cyclic buffer 2 */
|
||||
xmedia_u64 begin_pts;
|
||||
xmedia_u64 end_pts;
|
||||
xmedia_s64 addr_offset;
|
||||
} xmedia_msensor_data_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_msensor_attr attr;
|
||||
xmedia_msensor_gyro_buf gyro_buf;
|
||||
xmedia_msensor_acc_buf acc_buf;
|
||||
} xmedia_msensor_data;
|
||||
|
||||
xmedia_s32 xmedia_msensor_init(xmedia_void);
|
||||
xmedia_void xmedia_msensor_exit(xmedia_void);
|
||||
xmedia_s32 xmedia_msensor_create_dev(xmedia_s32 dev, const xmedia_msensor_param *param);
|
||||
xmedia_s32 xmedia_msensor_destroy_dev(xmedia_s32 dev);
|
||||
xmedia_s32 xmedia_msensor_get_param(xmedia_s32 dev, xmedia_msensor_param *param);
|
||||
xmedia_s32 xmedia_msensor_start_dev(xmedia_s32 dev);
|
||||
xmedia_s32 xmedia_msensor_stop_dev(xmedia_s32 dev);
|
||||
xmedia_s32 xmedia_msensor_add_user(xmedia_s32 dev, xmedia_s32 *user_id);
|
||||
xmedia_s32 xmedia_msensor_delete_user(xmedia_s32 dev, xmedia_s32 user_id);
|
||||
xmedia_s32 xmedia_msensor_get_data(xmedia_s32 dev, xmedia_msensor_data_info *data);
|
||||
xmedia_s32 xmedia_msensor_send_data(xmedia_s32 dev, const xmedia_msensor_data_info *data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif
|
||||
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#ifndef __XMEDIA_NPU_H__
|
||||
#define __XMEDIA_NPU_H__
|
||||
|
||||
#include "xmedia_npu_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
xmedia_s32 xmedia_npu_set_quick_start_flag(xmedia_u32 flag);
|
||||
xmedia_s32 xmedia_npu_get_quick_start_flag(xmedia_u32 *flag);
|
||||
xmedia_s32 xmedia_npu_get_proc_info(xmedia_npu_proc_t *proc);
|
||||
xmedia_s32 xmedia_npu_get_usage_rate(xmedia_float *usage);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* __XMEDIA_NPU_H__ */
|
||||
@@ -0,0 +1,51 @@
|
||||
#ifndef __XMEDIA_NPU_COMMON_H__
|
||||
#define __XMEDIA_NPU_COMMON_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__arm64__)
|
||||
typedef xmedia_u64 xmedia_addr;
|
||||
#elif defined(__arm__)
|
||||
typedef xmedia_u32 xmedia_addr;
|
||||
#else
|
||||
#error Invalid ARCH
|
||||
#endif
|
||||
|
||||
typedef enum job_state {
|
||||
JOB_PEND = 0,
|
||||
JOB_PROCESS = 1,
|
||||
JOB_SUCESS_FINISH = 2,
|
||||
JOB_SYNC_FINISH = 3,
|
||||
JOB_TEMP_FINISH = 4,
|
||||
JOB_ABORT_FINISH = 5,
|
||||
JOB_STATE_MAX,
|
||||
} xmedia_npu_job_state_e;
|
||||
|
||||
typedef struct {
|
||||
xmedia_addr phy_addr;
|
||||
xmedia_u32 buff_len;
|
||||
} xmedia_npu_proc_t;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_NPU_FORMAT_RGB = 0,
|
||||
XMEDIA_NPU_FORMAT_RGrGbB,
|
||||
XMEDIA_NPU_FORMAT_BGbGrR,
|
||||
XMEDIA_NPU_FORMAT_GrRBGb = 3,
|
||||
XMEDIA_NPU_FORMAT_GbBRGr,
|
||||
XMEDIA_NPU_FORMAT_YUV,
|
||||
XMEDIA_NPU_FORMAT_YVU = 6,
|
||||
} xmedia_npu_data_format;
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* __XMEDIA_NPU_COMMON_H__ */
|
||||
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_OTP_H__
|
||||
#define __XMEDIA_OTP_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_errcode.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SHA256_BYTE_LEN 32
|
||||
#define AES256_KEY_BYTE_LEN 32
|
||||
#define OTP_USER_DATA_LEN_MAX 32 // 单位:word,用户自定义区共1Kbit
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_OTP_AES256_KEY0 = 0x0,
|
||||
XMEDIA_OTP_AES256_KEY1,
|
||||
XMEDIA_OTP_AES256_KEY2,
|
||||
XMEDIA_OTP_AES256_KEY3,
|
||||
XMEDIA_OTP_AES256_KEY_MAX
|
||||
} xmedia_otp_aes_key_index;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_OTP_UART_BURN_CLOSE = 0x0,
|
||||
XMEDIA_OTP_UART_BURN_REOPEN,
|
||||
XMEDIA_OTP_UART_BURN_MODE_MAX
|
||||
} xmedia_otp_uart_burn_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_OTP_FMC_FREQ_50MHZ = 0x0,
|
||||
XMEDIA_OTP_FMC_FREQ_75MHZ,
|
||||
XMEDIA_OTP_FMC_FREQ_12MHZ,
|
||||
XMEDIA_OTP_FMC_FREQ_MAX
|
||||
} xmedia_otp_fmc_freq;
|
||||
|
||||
/*
|
||||
* 函数功能:OTP模块初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 获取文件描述符失败
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:OTP模块去初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 获取文件描述符失败
|
||||
* XMEDIA_ERRCODE_CLOSE_FAILED - 关闭文件描述符失败
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:使能otp烧写功能,使能后,其余接口会操作真实的otp区域;未使能时,其余接口操作的是模拟otp区域
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_program_enable(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:使能安全启动
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*
|
||||
* 注:
|
||||
* 使能安全启动前,必须先调用xmedia_otp_root_key_sha256_set接口!
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_secure_boot_enable(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:使能DDR加扰
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_ddr_ca_enable(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:关闭jtag接口
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_jtag_disable(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:设置spi nand flash启动模式为4线
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*
|
||||
* 注:
|
||||
* 默认为1线
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_spi_nand_mode_set(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:关闭、打开UART镜像烧写
|
||||
* 函数参数:
|
||||
* burn_mode - 输入参数,关闭或打开UART镜像烧写
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*
|
||||
* 注:
|
||||
* 默认UART可以进行镜像的烧写,关闭UART烧写后可以再次打开UART烧写,再次打开UART烧写后不能再更改
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_uart_burn_mode_sel(xmedia_otp_uart_burn_mode burn_mode);
|
||||
|
||||
/*
|
||||
* 函数功能:设置bootrom阶段spi nor、spi nand的时钟频率
|
||||
* 函数参数:
|
||||
* frequency - 输入参数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*
|
||||
* 注:
|
||||
* 默认时钟频率为12MHz,更改顺序只支持:默认频率->50MHz->75MHz->12MHz,更改顺序可以跳过某频率但是不可逆
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_fmc_freq_sel(xmedia_otp_fmc_freq frequency);
|
||||
|
||||
/*
|
||||
* 函数功能:关闭bootrom串口打印
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_bootrom_debug_disable(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:烧写安全启动使用的RSA4096 PSS验签算法公钥的SHA256值
|
||||
* 函数参数:
|
||||
* sha256_data - 输入参数,SHA256数据起始地址
|
||||
* data_len - 输入参数,SHA256数据长度,单位Byte
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 传入参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_root_key_sha256_set(xmedia_u8 *sha256_data, xmedia_u32 data_len);
|
||||
|
||||
/*
|
||||
* 函数功能:烧写AES使用的硬件key
|
||||
* 函数参数:
|
||||
* key - 输入参数,key数据起始地址
|
||||
* key_len - 输入参数,key数据长度,单位Byte
|
||||
* key_index - 输入参数,key标志
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 传入参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_aes256_key_set(xmedia_u8 *key, xmedia_u32 key_len, xmedia_otp_aes_key_index key_index);
|
||||
|
||||
/*
|
||||
* 函数功能:烧写自定义区OTP指定偏移的区域
|
||||
* 函数参数:
|
||||
* data - 输入参数,要写入otp中的值
|
||||
* offset - 输入参数,自定义otp区中的偏移,以32bit为单位
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 传入参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - otp位已配置过并锁定,无法更改
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_user_data_set(xmedia_u32 data, xmedia_u32 offset);
|
||||
|
||||
/*
|
||||
* 函数功能:读取自定义区OTP指定偏移的区域的值
|
||||
* 函数参数:
|
||||
* data - 输出参数,otp指定偏移的值
|
||||
* offset - 输入参数,自定义otp区中的偏移,以32bit为单位
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 未调用xmedia_otp_init接口进行初始化
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 传入参数不合法
|
||||
*/
|
||||
xmedia_s32 xmedia_otp_user_data_get(xmedia_u32 *data, xmedia_u32 offset);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_PM_H__
|
||||
#define __XMEDIA_PM_H__
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_errcode.h"
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* xmedia_pm_init接口的输入参数,初始化类型
|
||||
* PM_INIT_TYPE_NORMAL:初始化pm模块,不使能str待机功能.
|
||||
* PM_INIT_TYPE_STR: 初始化pm模块,并使能str待机功能.
|
||||
*
|
||||
* 注意: str 待机功能依赖rtc功能.
|
||||
* 如果不支持rtc功能,str待机功能也不支持,不能使用PM_INIT_TYPE_STR参数 !!!
|
||||
*/
|
||||
typedef enum {
|
||||
PM_INIT_TYPE_NORMAL = 0,
|
||||
PM_INIT_TYPE_STR,
|
||||
PM_INIT_TYPE_MAX,
|
||||
} xmedia_pm_init_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_pm_init_type type;
|
||||
} xmedia_pm_init_param;
|
||||
|
||||
typedef enum {
|
||||
PM_WKMODE_WAKEUP = 0,
|
||||
PM_WKMODE_STARTUP,
|
||||
PM_WKMODE_BUTTON,
|
||||
PM_WKMODE_RTC,
|
||||
PM_WKMODE_MAX,
|
||||
} xmedia_pm_wakeup_source;
|
||||
|
||||
typedef enum {
|
||||
PMC_PWR_RISING_EDGE = 0,
|
||||
PMC_PWR_FALLING_EDGE,
|
||||
PMC_PWR_HIGH_LEVEL,
|
||||
PMC_PWR_LOW_LEVEL,
|
||||
PMC_PWR_MAX,
|
||||
} xmedia_pm_wakeup_polarity;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool rtc_enable; // 1:表示使能
|
||||
xmedia_u32 rtc_timeout; // 单位为10ms
|
||||
} xmedia_pm_rtc_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u64 rtc_delta_time; // 单位为1ms
|
||||
xmedia_u64 rtc_current_time;
|
||||
xmedia_u64 rtc_last_suspend_time;
|
||||
} xmedia_pm_rtc_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool wakeup_enable; // 1:表示使能
|
||||
xmedia_pm_wakeup_polarity wakeup_polarity; //上升沿、下降沿、高电平和低电平触发
|
||||
} xmedia_pm_wakeup_attr;
|
||||
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool button_adj_enable; //1:表示使能
|
||||
xmedia_u32 button_adj_time; //button触发时间,精度100ms
|
||||
}xmedia_pm_button_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_pm_wakeup_attr wakeup_attr;
|
||||
xmedia_bool startup_enable;
|
||||
xmedia_bool button_enable;
|
||||
xmedia_pm_button_attr button_attr;
|
||||
xmedia_pm_rtc_attr rtc_attr;
|
||||
} xmedia_pm_attr;
|
||||
|
||||
xmedia_s32 xmedia_pm_init(xmedia_void);
|
||||
xmedia_s32 xmedia_pm_init_ext(xmedia_pm_init_param *param);
|
||||
xmedia_s32 xmedia_pm_deinit(xmedia_void);
|
||||
xmedia_s32 xmedia_pm_get_wakeup_source(xmedia_pm_wakeup_source *source);
|
||||
xmedia_s32 xmedia_pm_get_attr(xmedia_pm_attr *attr);
|
||||
xmedia_s32 xmedia_pm_set_attr(xmedia_pm_attr *attr);
|
||||
xmedia_s32 xmedia_pm_get_rtc_info(xmedia_pm_rtc_info *rtc_info);
|
||||
xmedia_s32 xmedia_pm_suspend(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Executable
+446
@@ -0,0 +1,446 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef __XMEDIA_REGION_H__
|
||||
#define __XMEDIA_REGION_H__
|
||||
|
||||
#include "xmedia_sys.h"
|
||||
#include "xmedia_video_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
// 定义颜色查表长度
|
||||
#define RGN_CLUT_NUM 16
|
||||
|
||||
// 定义任意四边形坐标点个数
|
||||
#define RGN_QUAD_POINT_NUM 4
|
||||
|
||||
// 定义区域类型
|
||||
typedef enum {
|
||||
XMEDIA_RGN_TYPE_OVERLAY = 0,
|
||||
XMEDIA_RGN_TYPE_OVERLAYEX,
|
||||
XMEDIA_RGN_TYPE_COVER,
|
||||
XMEDIA_RGN_TYPE_COVEREX,
|
||||
XMEDIA_RGN_TYPE_MOSAIC,
|
||||
XMEDIA_RGN_TYPE_MOSAICEX,
|
||||
XMEDIA_RGN_TYPE_CORNER_RECT,
|
||||
XMEDIA_RGN_TYPE_CORNER_RECTEX,
|
||||
XMEDIA_RGN_TYPE_MAX
|
||||
}xmedia_rgn_type;
|
||||
|
||||
// 定义overlay区域属性结构体
|
||||
typedef struct {
|
||||
xmedia_u32 bg_color; // 背景色
|
||||
xmedia_u32 canvas_num; // 内存个数
|
||||
xmedia_video_size size; // 区域大小
|
||||
xmedia_video_pixel_format pixel_format; // 像素格式
|
||||
} xmedia_rgn_overlay_attr;
|
||||
|
||||
// 定义overlayex区域属性结构体
|
||||
typedef struct {
|
||||
xmedia_u32 bg_color; // 背景色
|
||||
xmedia_u32 canvas_num; // 内存个数
|
||||
xmedia_video_size size; // 区域大小
|
||||
xmedia_video_pixel_format pixel_format; // 像素格式
|
||||
} xmedia_rgn_overlayex_attr;
|
||||
|
||||
// 定义区域属性联合体
|
||||
typedef union {
|
||||
xmedia_rgn_overlay_attr overlay; // overlay属性
|
||||
xmedia_rgn_overlayex_attr overlayex; // overlayex属性
|
||||
} xmedia_rgn_type_attr;
|
||||
|
||||
// 定义区域属性结构体
|
||||
typedef struct {
|
||||
xmedia_rgn_type type; // 区域类型
|
||||
xmedia_rgn_type_attr attr; // 区域属性
|
||||
} xmedia_rgn_attr;
|
||||
|
||||
// 定义mosaic/mosaicex 块大小
|
||||
typedef enum {
|
||||
XMEDIA_RGN_MOSAIC_BLK_SIZE_8,
|
||||
XMEDIA_RGN_MOSAIC_BLK_SIZE_16,
|
||||
XMEDIA_RGN_MOSAIC_BLK_SIZE_32,
|
||||
XMEDIA_RGN_MOSAIC_BLK_SIZE_MAX
|
||||
} xmedia_rgn_mosaic_blk_size;
|
||||
|
||||
// 定义mosaic属性结构体
|
||||
typedef struct {
|
||||
xmedia_u32 layer; // 区域层次
|
||||
xmedia_video_rect rect; // 位置宽高
|
||||
xmedia_rgn_mosaic_blk_size blk_size; // 块大小
|
||||
} xmedia_rgn_mosaic_chn_attr;
|
||||
|
||||
// 定义mosaicex属性结构体
|
||||
typedef struct {
|
||||
xmedia_u32 layer; // 区域层次
|
||||
xmedia_video_rect rect; // 位置宽高
|
||||
xmedia_rgn_mosaic_blk_size blk_size; // 块大小
|
||||
} xmedia_rgn_mosaicex_chn_attr;
|
||||
|
||||
// 定义cover/coverex 类型
|
||||
typedef enum {
|
||||
XMEDIA_RGN_COVER_TYPE_RECT = 0, // 矩形
|
||||
XMEDIA_RGN_COVER_TYPE_QUAD, // 任意四边形
|
||||
XMEDIA_RGN_COVER_TYPE_MAX
|
||||
} xmedia_rgn_cover_type;
|
||||
|
||||
// 定义任意四边形属性结构体
|
||||
typedef struct {
|
||||
xmedia_bool is_solid; // 实心虚心标志位
|
||||
xmedia_u32 thick; // 厚度
|
||||
xmedia_video_point point[RGN_QUAD_POINT_NUM];// 坐标点位置
|
||||
} xmedia_rgn_quad;
|
||||
|
||||
// 定义cover通道属性结构体
|
||||
typedef struct {
|
||||
xmedia_rgn_cover_type cover_type; // 类型
|
||||
union {
|
||||
xmedia_video_rect rect; // 位置宽高
|
||||
xmedia_rgn_quad quad; // 任意四边形属性
|
||||
};
|
||||
xmedia_u32 color; // 颜色
|
||||
xmedia_u32 layer; // 区域层次
|
||||
} xmedia_rgn_cover_chn_attr;
|
||||
|
||||
// 定义coverex通道属性结构体
|
||||
typedef struct {
|
||||
xmedia_rgn_cover_type coverex_type;// 类型
|
||||
union {
|
||||
xmedia_video_rect rect; // 位置宽高
|
||||
xmedia_rgn_quad quad; // 任意四边形属性
|
||||
};
|
||||
xmedia_u32 color; // 颜色
|
||||
xmedia_u32 layer; // 区域层次
|
||||
} xmedia_rgn_coverex_chn_attr;
|
||||
|
||||
// 定义qp保护
|
||||
typedef struct {
|
||||
xmedia_bool disable; // 关闭 osd与roi重叠区域 的osd qp保护
|
||||
xmedia_bool is_abs_qp; // 是否绝对qp
|
||||
xmedia_s32 qp_val; // qp值
|
||||
} xmedia_rgn_overlay_qp_info;
|
||||
|
||||
// 定义 venc 图像类型
|
||||
typedef enum {
|
||||
XMEDIA_RGN_ATTACH_JPEG_MAIN = 0,
|
||||
XMEDIA_RGN_ATTACH_JPEG_MPF0,
|
||||
XMEDIA_RGN_ATTACH_JPEG_MPF1,
|
||||
XMEDIA_RGN_ATTACH_JPEG_MAX
|
||||
} xmedia_rgn_attach_dst;
|
||||
|
||||
// 定义反色模式
|
||||
typedef enum {
|
||||
XMEDIA_RGN_OSD_INVERT_COLOR_MODE_RGB = 0,
|
||||
XMEDIA_RGN_OSD_INVERT_COLOR_MODE_ALPHA,
|
||||
XMEDIA_RGN_OSD_INVERT_COLOR_MODE_BOTH,
|
||||
XMEDIA_RGN_OSD_INVERT_COLOR_MODE_MAX
|
||||
} xmedia_rgn_osd_invert_color_mode;
|
||||
|
||||
// 定义反色属性
|
||||
typedef struct {
|
||||
xmedia_bool enable; // 是否开启反色
|
||||
xmedia_rgn_osd_invert_color_mode mode; // 反色模式
|
||||
} xmedia_rgn_osd_invert_color_attr;
|
||||
|
||||
// 定义overlay通道属性结构体
|
||||
typedef struct {
|
||||
xmedia_u8 alpha0; // 仅用于位图是ARGB1555场景,alpha位0对应的8位有效值
|
||||
xmedia_u8 alpha1; // 仅用于位图是ARGB1555场景,alpha位1对应的8位有效值
|
||||
xmedia_u32 layer; // 区域层次
|
||||
xmedia_u32 clut[RGN_CLUT_NUM]; // 颜色查找表
|
||||
xmedia_video_point point; // 坐标点
|
||||
xmedia_rgn_attach_dst dst; // venc 图像类型
|
||||
xmedia_rgn_overlay_qp_info qp_info; // qp保护
|
||||
xmedia_rgn_osd_invert_color_attr invert_color; // 反色属性
|
||||
} xmedia_rgn_overlay_chn_attr;
|
||||
|
||||
// 定义overlayex通道属性结构体
|
||||
typedef struct {
|
||||
xmedia_u8 alpha0; // 仅用于位图是ARGB1555场景,alpha位0对应的8位有效值
|
||||
xmedia_u8 alpha1; // 仅用于位图是ARGB1555场景,alpha位1对应的8位有效值
|
||||
xmedia_u32 layer; // 区域层次
|
||||
xmedia_u32 clut[RGN_CLUT_NUM]; // 颜色查找表
|
||||
xmedia_video_point point; // 坐标点
|
||||
xmedia_rgn_osd_invert_color_attr invert_color; // 反色属性
|
||||
} xmedia_rgn_overlayex_chn_attr;
|
||||
|
||||
// 定义corner rect通道属性结构体
|
||||
typedef struct {
|
||||
xmedia_u32 thick; // 线宽
|
||||
xmedia_u32 color; // 颜色
|
||||
xmedia_u32 layer; // 区域层次
|
||||
xmedia_u32 hor_len; // 水平线长
|
||||
xmedia_u32 ver_len; // 垂直线长
|
||||
xmedia_video_rect rect; // 位置宽高
|
||||
} xmedia_rgn_corner_rect_chn_attr;
|
||||
|
||||
// 定义corner rectex通道属性结构体
|
||||
typedef struct {
|
||||
xmedia_u32 thick; // 线宽
|
||||
xmedia_u32 color; // 颜色
|
||||
xmedia_u32 layer; // 区域层次
|
||||
xmedia_u32 hor_len; // 水平线长
|
||||
xmedia_u32 ver_len; // 垂直线长
|
||||
xmedia_video_rect rect; // 位置宽高
|
||||
} xmedia_rgn_corner_rectex_chn_attr;
|
||||
|
||||
// 定义区域通道属性联合体
|
||||
typedef union {
|
||||
xmedia_rgn_overlay_chn_attr overlay_chn; // overlay区域
|
||||
xmedia_rgn_overlayex_chn_attr overlayex_chn; // overlayex区域
|
||||
xmedia_rgn_cover_chn_attr cover_chn; // cover区域
|
||||
xmedia_rgn_coverex_chn_attr coverex_chn; // coverex区域
|
||||
xmedia_rgn_mosaic_chn_attr mosaic_chn; // mosaic区域
|
||||
xmedia_rgn_mosaicex_chn_attr mosaicex_chn; // mosaicex区域
|
||||
xmedia_rgn_corner_rect_chn_attr corner_rect_chn; // corner区域
|
||||
xmedia_rgn_corner_rectex_chn_attr corner_rectex_chn; // cornerex区域
|
||||
} xmedia_rgn_type_chn_attr;
|
||||
|
||||
// 定义区域通道属性
|
||||
typedef struct {
|
||||
xmedia_bool is_show; // 是否显示
|
||||
xmedia_rgn_type type; // 区域类型
|
||||
xmedia_rgn_type_chn_attr attr; // 区域属性
|
||||
} xmedia_rgn_chn_attr;
|
||||
|
||||
|
||||
// 定义区域画布信息
|
||||
typedef struct {
|
||||
xmedia_u64 phy_addr; // 画布物理地址
|
||||
xmedia_void *ATTRIBUTE virt_addr; // 画布虚拟地址
|
||||
xmedia_u32 stride; // 画布跨距
|
||||
xmedia_video_size size; // 画布大小
|
||||
xmedia_video_pixel_format pixel_format; // 像素格式
|
||||
} xmedia_rgn_canvas_info;
|
||||
|
||||
/*
|
||||
* 函数功能: 初始化region模块
|
||||
* 函数参数:
|
||||
* NA
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_READY - 驱动未加载
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 去初始化region模块
|
||||
* 函数参数:
|
||||
* NA
|
||||
* 返回值:
|
||||
* NA
|
||||
*/
|
||||
xmedia_void xmedia_rgn_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 创建一个区域
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* rgn_attr - 输入参数,区域属性指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 区域创建成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_EXIST - 重复创建已存在的区域
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NO_BUFFER_FREE - 分配内存失败
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_create(xmedia_u32 handle, const xmedia_rgn_attr *rgn_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 销毁一个区域
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
*
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 区域销毁成功
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_destroy(xmedia_u32 handle);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取区域属性
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* rgn_attr - 输出参数,区域属性指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 获取区域属性成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_get_attr(xmedia_u32 handle, xmedia_rgn_attr *rgn_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置区域属性
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* rgn_attr - 输入参数,区域属性指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 设置区域属性成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_BUFFER_FULL - 缓冲区数据满
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_set_attr(xmedia_u32 handle, const xmedia_rgn_attr *rgn_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 将区域叠加到通道上
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* chn - 输入参数,通道结构体指针
|
||||
* chn_attr - 输入参数,区域通道属性指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 区域成功叠加到区域
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备号
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道号
|
||||
* XMEDIA_ERRCODE_NO_BUFFER_FREE - 分配内存失败
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_attach_to_chn(xmedia_u32 handle, const xmedia_chn_info *chn, const xmedia_rgn_chn_attr *chn_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 将区域从通道中撤离
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* chn - 输入参数,通道结构体指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 区域成功从通道中撤离
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备号
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道号
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_detach_from_chn(xmedia_u32 handle, const xmedia_chn_info *chn);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取区域通道属性
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* chn - 输入参数,通道结构体指针
|
||||
* chn_attr - 输出参数,区域通道属性指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 成功获取区域通道属性
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备号
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道号
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_get_display_attr(xmedia_u32 handle, const xmedia_chn_info *chn, xmedia_rgn_chn_attr *chn_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 设置区域通道属性
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* chn - 输入参数,通道结构体指针
|
||||
* chn_attr - 输入参数,区域通道属性指针
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 成功设置区域通道属性
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备号
|
||||
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道号
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_set_display_attr(xmedia_u32 handle, const xmedia_chn_info *chn, const xmedia_rgn_chn_attr *chn_attr);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取区域画布信息
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* canvas_info --输出参数,画布信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 成功获取区域画布信息
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_BUFFER_FULL - 缓冲区数据满
|
||||
* XMEDIA_ERRCODE_NO_BUFFER_FREE - 分配内存失败
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_get_canvas_info(xmedia_u32 handle, xmedia_rgn_canvas_info *canvas_info);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取区域画布信息
|
||||
* 函数参数:
|
||||
* handle - 输入参数,区域号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 成功获取区域画布信息
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_update_canvas (xmedia_u32 handle);
|
||||
|
||||
/*
|
||||
* 函数功能: 开启批处理
|
||||
* 函数参数:
|
||||
* grp - 输入参数,批处理组号
|
||||
* handle_num - 输入参数,一组批处理中,区域个数
|
||||
* handle[] - 输入参数,区域句柄号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 成功获取区域画布信息
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_batch_begin(xmedia_u32 *grp, xmedia_u32 handle_num, const xmedia_u32 handle[]);
|
||||
|
||||
/*
|
||||
* 函数功能: 结束批处理
|
||||
* 函数参数:
|
||||
* grp - 输入参数,组号
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 成功获取区域画布信息
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
|
||||
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
|
||||
*/
|
||||
xmedia_s32 xmedia_rgn_batch_end(xmedia_u32 grp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __XMEDIA_REGION_H__ */
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef XMEDIA_SCENE_H
|
||||
#define XMEDIA_SCENE_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_MOD_ID_VICAP = 0,
|
||||
XMEDIA_MOD_ID_VIPROC,
|
||||
XMEDIA_MOD_ID_VPSS,
|
||||
XMEDIA_MOD_ID_GDC,
|
||||
XMEDIA_MOD_ID_VGS,
|
||||
XMEDIA_MOD_ID_NPU,
|
||||
XMEDIA_MOD_ID_VPU,
|
||||
XMEDIA_MOD_ID_JPGE,
|
||||
XMEDIA_MOD_ID_CPU,
|
||||
XMEDIA_MOD_ID_VO,
|
||||
XMEDIA_MOD_ID_TDE,
|
||||
XMEDIA_MOD_ID_AIAO,
|
||||
XMEDIA_MOD_ID_SCD,
|
||||
XMEDIA_MOD_ID_MAX,
|
||||
} xmedia_ddr_ost_qos_mod_id;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 rd_ost;
|
||||
xmedia_u32 wr_ost;
|
||||
xmedia_u32 qos;
|
||||
} xmedia_ddr_ost_qos_config;
|
||||
|
||||
/* npu load level */
|
||||
typedef enum {
|
||||
XMEDIA_NPU_LOAD_LIGHT = 0, // [0-1T)
|
||||
XMEDIA_NPU_LOAD_MIDDLE, // [1T-1.5T)
|
||||
XMEDIA_NPU_LOAD_HEAVY, // [1.5T-2T]
|
||||
XMEDIA_NPU_LOAD_SUPPER, // AINR
|
||||
XMEDIA_NPU_LOAD_MAX,
|
||||
} xmedia_media_npu_load;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 width;
|
||||
xmedia_u32 height;
|
||||
xmedia_u32 framerate;
|
||||
} xmedia_multimedia_capability;
|
||||
|
||||
/* VPU chn width, height, fps info */
|
||||
typedef struct {
|
||||
xmedia_u32 vpu_chn_id;
|
||||
xmedia_multimedia_capability capability;
|
||||
} xmedia_vpu_chn_capability;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 width;
|
||||
xmedia_u32 height;
|
||||
xmedia_bool wdr_enable;
|
||||
} xmedia_vi_max_capability;
|
||||
|
||||
#define XMEDIA_MAX_VPU_CHNS_NUM 16
|
||||
|
||||
typedef struct {
|
||||
xmedia_vpu_chn_capability vpu_chn[XMEDIA_MAX_VPU_CHNS_NUM];
|
||||
xmedia_vi_max_capability vi_chn;
|
||||
} xmedia_scene_capability;
|
||||
|
||||
/*
|
||||
* 函数功能:场景配置初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_scene_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:场景配置去初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 无
|
||||
*/
|
||||
xmedia_void xmedia_scene_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:设置场景配置参数
|
||||
* 函数参数:
|
||||
* npu_load - 输入参数,npu负载级别,分为LIGHT/MIDDLE/HEAVY/SUPPER
|
||||
* scene_capability - 输入参数,vpu大小码流以及vi通路的最大分辨率等配置
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 没有调用init函数进行初始化
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 传入参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 没有先调用xmedia_sys_init设置pipe工作模式
|
||||
*/
|
||||
xmedia_s32 xmedia_scene_config(xmedia_media_npu_load npu_load, xmedia_scene_capability *scene_capability);
|
||||
|
||||
/*
|
||||
* 函数功能:锁定/解锁指定模块的ost/qos配置
|
||||
* 函数参数:
|
||||
* mod_id - 输入参数,指定模块的id
|
||||
* config - 输入参数,需要锁定的目标ost/qos配置
|
||||
* lock_flag - 输入参数,锁定/解锁标志,1表示锁定,0表示解锁
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - 没有调用init函数进行初始化
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 传入参数不合法
|
||||
*/
|
||||
xmedia_s32 xmedia_ddr_ost_qos_lock(xmedia_ddr_ost_qos_mod_id mod_id,
|
||||
xmedia_ddr_ost_qos_config *config, xmedia_u32 lock_flag);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,745 @@
|
||||
#ifndef __XMEDIA_SVP_H__
|
||||
#define __XMEDIA_SVP_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_video_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define XMEDIA_SVP_MAX_TASK_NUM (16u) // 支持最多任务个数
|
||||
#define XMEDIA_SVP_MAX_TARGET_NUM (50u) // 单帧最多输出的目标个数
|
||||
#define MAX_DETECT_KEYPOINT_NUM (68u) // yolov8关键点数量
|
||||
#define XMEDIA_SVP_DMS_MAX_TARGET_NUM (5u) // DMS单帧输出目标最大个数
|
||||
#define XMEDIA_SVP_DMS_SPECIAL_MAX_NUM (3u) // DMS手机和香烟最多输出的目标个数
|
||||
#define XMEDIA_SVP_LANE_MAX_NUM 4 // 车道线最大数量
|
||||
#define XMEDIA_SVP_LANE_AXIS_NUM 2 // 车道线方向数量
|
||||
#define XMEDIA_SVP_LANE_MAX_ROW_POINT 18 // 车道线行方向关键点数量
|
||||
#define XMEDIA_SVP_LANE_MAX_COL_POINT 40 // 车道线列方向关键点数量
|
||||
#define XMEDIA_SVP_LANE_FIT_ORDER 3 // 车道线拟合因子数量
|
||||
#define XMEDIA_SVP_FEATURE_COL 512 // 人脸特征向量纬度
|
||||
#define XMEDIA_SVP_FR_KEYPOINT_NUM 5 // 人脸关键点数量
|
||||
#define XMEDIA_SVP_MAX_VENC_CHN_NUM 16 // venc最大通道数
|
||||
#define XMEDIA_SVP_MAX_VI_PIPE_NUM 8 // vi最大通道数
|
||||
#define XMEDIA_SVP_PLATE_CHAR_MAX_NUM 21 // 车牌字符最大数量
|
||||
#define XMEDIA_SVP_MAX_REGION 5 // 区域最大数量
|
||||
#define XMEDIA_SVP_MAX_EDGE 10 // 区域最大边长
|
||||
#define XMEDIA_SVP_PLATE_VEH_MAX_TARGET_NUM (10u) // 车牌车辆单帧输出目标最大个数
|
||||
#define XMEDIA_SVP_PETBOT_MAX_TARGET 5 // 宠物机器人最大输出目标数量
|
||||
// 单模型算法类别
|
||||
typedef enum {
|
||||
XMEDIA_SVP_ALG_TYPE_PERSON, // 人形检测
|
||||
XMEDIA_SVP_ALG_TYPE_FACE, // 人脸检测
|
||||
XMEDIA_SVP_ALG_TYPE_CAR, // 车形检测
|
||||
XMEDIA_SVP_ALG_TYPE_PET, // 宠物检测
|
||||
XMEDIA_SVP_ALG_TYPE_HEAD, // 人头检测
|
||||
XMEDIA_SVP_ALG_TYPE_ELECTRIC_BICYCLE, // 电瓶车检测
|
||||
XMEDIA_SVP_ALG_TYPE_NON_MOTORIZED_VEHICLE, // 非机动车检测
|
||||
XMEDIA_SVP_ALG_TYPE_FACE_RECOGNITION, // 人脸识别
|
||||
XMEDIA_SVP_ALG_TYPE_PERSON_KEYPOINT, // 人体关键点检测
|
||||
XMEDIA_SVP_ALG_TYPE_FACE_ATTRIBUTE, // 人脸属性
|
||||
XMEDIA_SVP_ALG_TYPE_GESTURE, // 手势识别
|
||||
XMEDIA_SVP_ALG_TYPE_BOUNDARY_PERSON, // 周界检测(人)
|
||||
XMEDIA_SVP_ALG_TYPE_BOUNDARY_CAR, // 周界检测(车)
|
||||
XMEDIA_SVP_ALG_TYPE_OFF_DUTY, // 离岗检测
|
||||
XMEDIA_SVP_ALG_TYPE_PFS, // 客流量检测
|
||||
XMEDIA_SVP_ALG_TYPE_FIREWORKS, // 烟火检测
|
||||
XMEDIA_SVP_ALG_TYPE_PACKAGE, // 包裹检测
|
||||
XMEDIA_SVP_ALG_TYPE_FIRESMOKE, // 烟火检测YOLOV8
|
||||
XMEDIA_SVP_ALG_TYPE_SECOND_STAGE, // 二阶段检测
|
||||
XMEDIA_SVP_ALG_TYPE_PERSON_CAR, // 人车检测
|
||||
XMEDIA_SVP_ALG_TYPE_DMS, // DMS检测
|
||||
XMEDIA_SVP_ALG_TYPE_LICENSE_DETECT, // 车牌检测
|
||||
XMEDIA_SVP_ALG_TYPE_LICENSE_RECO, // 车牌字符识别
|
||||
XMEDIA_SVP_ALG_TYPE_LICENSE_COLOR, // 车牌颜色识别
|
||||
XMEDIA_SVP_ALG_TYPE_VEHICLE_DETECT, // 车辆检测
|
||||
XMEDIA_SVP_ALG_TYPE_VEHICLE_RECO, // 车辆识别
|
||||
XMEDIA_SVP_ALG_TYPE_PCNMV_FIRE, // 人车非火
|
||||
XMEDIA_SVP_ALG_TYPE_MAX,
|
||||
} xmedia_svp_alg_type;
|
||||
|
||||
// 输出某个目标的类别
|
||||
typedef enum {
|
||||
XMEDIA_SVP_CLASS_TYPE_PERSON, // 人形类别
|
||||
XMEDIA_SVP_CLASS_TYPE_FACE, // 人脸类别
|
||||
XMEDIA_SVP_CLASS_TYPE_CAR, // 车形类别
|
||||
XMEDIA_SVP_CLASS_TYPE_PET, // 宠物类别
|
||||
XMEDIA_SVP_CLASS_TYPE_HEAD, // 人头类别
|
||||
XMEDIA_SVP_CLASS_TYPE_ELECTRIC_BICYCLE, // 电瓶车类别
|
||||
XMEDIA_SVP_CLASS_TYPE_MASK, // 口罩类别
|
||||
XMEDIA_SVP_CLASS_TYPE_PERSON_KEYPOINT, // 人体关键点类别
|
||||
XMEDIA_SVP_CLASS_TYPE_BIKE, // 自行车
|
||||
XMEDIA_SVP_CLASS_TYPE_BIKER, // 骑自行车车的人
|
||||
XMEDIA_SVP_CLASS_TYPE_MOTOR, // 摩托车
|
||||
XMEDIA_SVP_CLASS_TYPE_MOTORER, // 骑摩托车的人
|
||||
XMEDIA_SVP_CLASS_TYPE_TRICYCLE, // 三轮车
|
||||
XMEDIA_SVP_CLASS_TYPE_TRICYCLER, // 骑三轮车的人
|
||||
XMEDIA_SVP_CLASS_TYPE_FIREWORKS_FIRE, // 火
|
||||
XMEDIA_SVP_CLASS_TYPE_FIREWORKS_SMOKE, // 烟
|
||||
XMEDIA_SVP_CLASS_TYPE_PACKAGE, // 包裹
|
||||
XMEDIA_SVP_CLASS_TYPE_FIRE, // 火YOLOV8
|
||||
XMEDIA_SVP_CLASS_TYPE_SMOKE, // 烟YOLOV8
|
||||
XMEDIA_SVP_CLASS_TYPE_GESTURE_V, // 手势剪刀手
|
||||
XMEDIA_SVP_CLASS_TYPE_GESTURE_THUMB, // 手势大拇指
|
||||
XMEDIA_SVP_CLASS_TYPE_GESTURE_OK, // 手势OK
|
||||
XMEDIA_SVP_CLASS_TYPE_GESTURE_PALM, // 手势手掌
|
||||
XMEDIA_SVP_CLASS_TYPE_NOGESTURE, // 无手势
|
||||
XMEDIA_SVP_CLASS_TYPE_LICENSE, // 车牌类别
|
||||
XMEDIA_SVP_CLASS_TYPE_MAX,
|
||||
} xmedia_svp_class_type;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SVP_INPUTDATA_FORMAT_YUV420SP, // 输入图像格式YUV420SP
|
||||
XMEDIA_SVP_INPUTDATA_FORMAT_RGB888, // 输入图像格式RGB888
|
||||
XMEDIA_SVP_INPUTDATA_FORMAT_MAX,
|
||||
} xmedia_svp_inputdata_format;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SVP_MODEL_FILE, // 模型文件输入
|
||||
XMEDIA_SVP_MODEL_MEM // 模型内存输入
|
||||
} xmedia_svp_model_type;
|
||||
|
||||
// 目标的矩阵坐标点(坐标原点为图像左上角)
|
||||
typedef struct {
|
||||
xmedia_float x1;
|
||||
xmedia_float y1;
|
||||
xmedia_float x2;
|
||||
xmedia_float y2;
|
||||
} xmedia_svp_rect;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SVP_MOTION_STATE_UNKNOWN = 0, // 未知状态
|
||||
XMEDIA_SVP_MOTION_STATE_STATIC, // 静止
|
||||
XMEDIA_SVP_MOTION_STATE_MOVING, // 运动
|
||||
} xmedia_svp_motion_state;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_alg_type alg_type; // 检测类别
|
||||
xmedia_svp_class_type class_type; // 检测结果类别
|
||||
xmedia_float detect_score; // 检测模型结果置信度
|
||||
xmedia_float classfier_score; // 分类器结果置信度
|
||||
xmedia_s32 tracker_id; // 检测结果追踪id
|
||||
xmedia_u32 tracker_age; // 检测结果追踪age
|
||||
xmedia_svp_rect rect; // 检测结果目标框
|
||||
xmedia_bool special_target; // 特殊目标
|
||||
xmedia_float distance; // 检测目标距离
|
||||
xmedia_svp_motion_state motion_state; // 运动状态
|
||||
} xmedia_svp_detect_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float x;
|
||||
xmedia_float y;
|
||||
} xmedia_svp_point;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable; // 框面积大小限制是否使能
|
||||
xmedia_float min_area; // 最小框面积
|
||||
xmedia_float max_area; // 最大框面积
|
||||
} xmedia_svp_area_limit_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable; // 边缘过滤是否使能
|
||||
xmedia_float w_edge; // 宽度过滤距离(框中心点至左右两边距离)
|
||||
xmedia_float h_edge; // 高度过滤距离(框中心点至上下两边距离)
|
||||
} xmedia_svp_edge_limit_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SVP_TASK_UAV,
|
||||
XMEDIA_SVP_TASK_DETECT,
|
||||
XMEDIA_SVP_TASK_AOV,
|
||||
XMEDIA_SVP_TASK_DETECT_AND_KEYPOINT,
|
||||
XMEDIA_SVP_TASK_ADAS,
|
||||
XMEDIA_SVP_TASK_FIRE,
|
||||
XMEDIA_SVP_TASK_GESTURE,
|
||||
XMEDIA_SVP_TASK_FACE_RECOGNITON,
|
||||
XMEDIA_SVP_TASK_EMOTION_CLASSIFITION,
|
||||
XMEDIA_SVP_TASK_RCNN,
|
||||
XMEDIA_SVP_TASK_RCNN_720P,
|
||||
XMEDIA_SVP_TASK_COMPANION_ROBOT,
|
||||
XMEDIA_SVP_TASK_MULTI_DETECT,
|
||||
XMEDIA_SVP_TASK_DMS,
|
||||
XMEDIA_SVP_TASK_PLATE,
|
||||
XMEDIA_SVP_TASK_VEHICLE,
|
||||
XMEDIA_SVP_TASK_PLATE_VEHICLE,
|
||||
XMEDIA_SVP_TASK_PCNMV_FIRE,
|
||||
XMEDIA_SVP_TASK_MAX,
|
||||
} xmedia_svp_task_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_frame_info *frame;
|
||||
xmedia_u8 frame_num;
|
||||
} xmedia_svp_task_input;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_model_type load_mode; // 模型加载模式
|
||||
xmedia_svp_inputdata_format format; // 模型输入图像格式
|
||||
xmedia_char *pathname; // 模型文件
|
||||
xmedia_u8 *buf; // 模型存放的内存
|
||||
xmedia_u32 len; // 模型的长度
|
||||
xmedia_svp_alg_type alg_type; // 模型检测类别
|
||||
xmedia_void *priv; // 模型私有数据
|
||||
} xmedia_svp_modules;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_task_type task_type; // 任务类型
|
||||
xmedia_svp_modules *modules; // 模型数据
|
||||
xmedia_u8 module_num; // 模型数量
|
||||
xmedia_void *priv; // 私有数据
|
||||
} xmedia_svp_task_cfg;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float detect_threshold; // 置信度阈值,建议值0.65f
|
||||
xmedia_float classifier_threshold; // 分类器阈值,建议值0.8f
|
||||
xmedia_float iou_threshold; // iou相交比阈值,建议值0.5f
|
||||
xmedia_u32 max_target_num; // 最大目标数,最大值10
|
||||
} xmedia_svp_detect_base_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable; // 追踪使能
|
||||
xmedia_float max_feature_distance; // 追踪特征匹配距离最大阈值
|
||||
xmedia_float min_feature_distance; // 追踪特征匹配距离最小阈值
|
||||
xmedia_float max_iou_distance; // 追踪iou匹配距离阈值
|
||||
xmedia_u32 iou2feature; // 追踪iou匹配变成确认态
|
||||
xmedia_u32 max_age; // 追踪age阈值
|
||||
} xmedia_svp_deepsort_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_detect_base_attr person_attr;
|
||||
xmedia_svp_detect_base_attr head_attr;
|
||||
xmedia_svp_detect_base_attr gesture_attr;
|
||||
xmedia_svp_deepsort_attr deepsort_attr;
|
||||
xmedia_u32 focal_length_px;
|
||||
xmedia_u32 head_width_cm;
|
||||
xmedia_u32 palm_width_cm;
|
||||
} xmedia_svp_uav_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_detect_result track_result;
|
||||
xmedia_svp_detect_result head_result;
|
||||
xmedia_svp_detect_result gesture_result;
|
||||
xmedia_float head_distance;
|
||||
xmedia_bool is_hover;
|
||||
xmedia_float gesture_distance;
|
||||
} xmedia_svp_uav_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float detect_threshold; // 置信度阈值,建议值0.65f
|
||||
xmedia_float classifier_threshold; // 分类器阈值,建议值0.8f
|
||||
xmedia_float iou_threshold; // iou相交比阈值,建议值0.5f
|
||||
xmedia_u32 max_target_num; // 最大目标数,最大值10
|
||||
xmedia_bool bytetrack_enable; // 追踪开关
|
||||
xmedia_bool motionless_filter_enable; // 运动状态检测开关
|
||||
xmedia_float stillness_thres; // 由运动转为静止状态的灵敏度阈值,建议值0.9f
|
||||
xmedia_u8 movement_fps_thres; // 由运动转为静止状态的连续帧阈值,建议值5
|
||||
xmedia_bool smart_venc_enable;
|
||||
xmedia_bool smart_ae_enable;
|
||||
xmedia_bool smart_venc_array[XMEDIA_SVP_MAX_VENC_CHN_NUM];
|
||||
xmedia_bool smart_ae_array[XMEDIA_SVP_MAX_VI_PIPE_NUM];
|
||||
} xmedia_svp_yolov5_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 target_num; // 检测结果数量
|
||||
xmedia_svp_detect_result targets[XMEDIA_SVP_MAX_TARGET_NUM]; // 检测结果
|
||||
} xmedia_svp_yolov5_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float detect_threshold; // 置信度阈值,建议值0.65f
|
||||
xmedia_float classifier_threshold; // 分类器阈值,建议值0.8f
|
||||
xmedia_float iou_threshold; // iou相交比阈值,建议值0.5f
|
||||
xmedia_u32 max_target_num; // 最大目标数,最大值10
|
||||
xmedia_bool bytetrack_enable; // 追踪开关
|
||||
xmedia_bool motionless_filter_enable; // 运动状态检测开关
|
||||
xmedia_bool aov_only_target; // 只获取目标有无
|
||||
} xmedia_svp_aov_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool is_exist;
|
||||
xmedia_svp_yolov5_output detect_output;
|
||||
} xmedia_svp_aov_detect_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float x;
|
||||
xmedia_float y;
|
||||
xmedia_float score;
|
||||
} xmedia_svp_keypoint;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float detect_threshold; // 置信度阈值,建议值0.65f
|
||||
xmedia_float classifier_threshold; // 分类器阈值,建议值0.8f
|
||||
xmedia_float iou_threshold; // iou相交比阈值,建议值0.5f
|
||||
xmedia_u32 max_target_num; // 最大目标数,最大值10
|
||||
xmedia_bool bytetrack_enable; // 追踪开关
|
||||
xmedia_bool motionless_filter_enable; // 运动状态检测开关
|
||||
xmedia_float stillness_thres; // 由运动转为静止状态的灵敏度阈值,建议值0.9f
|
||||
xmedia_u8 movement_fps_thres; // 由运动转为静止状态的连续帧阈值,建议值5
|
||||
} xmedia_svp_yolov8_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_alg_type alg_type; // 检测类别
|
||||
xmedia_svp_class_type class_type; // 检测结果类别
|
||||
xmedia_float detect_score; // 检测模型结果置信度
|
||||
xmedia_float classfier_score; // 分类器结果置信度
|
||||
xmedia_s32 tracker_id; // 检测结果追踪id
|
||||
xmedia_u32 tracker_age; // 检测结果追踪age
|
||||
xmedia_svp_rect rect; // 检测结果目标框
|
||||
xmedia_svp_keypoint kpt[MAX_DETECT_KEYPOINT_NUM]; // 关键点坐标
|
||||
xmedia_svp_motion_state motion_state; // 运动状态
|
||||
} xmedia_svp_yolov8_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 target_num; // 检测结果数量
|
||||
xmedia_svp_yolov8_result targets[XMEDIA_SVP_MAX_TARGET_NUM]; // 检测结果
|
||||
} xmedia_svp_yolov8_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 focal_length_px;
|
||||
xmedia_u32 car_limit_angle;
|
||||
xmedia_float camera_height;
|
||||
xmedia_u32 plate_width;
|
||||
} xmedia_svp_adas_distance_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_yolov5_attr car_attr;
|
||||
xmedia_svp_yolov5_attr plate_attr;
|
||||
xmedia_svp_yolov5_attr person_attr;
|
||||
xmedia_svp_yolov5_attr nmv_attr;
|
||||
xmedia_svp_adas_distance_attr distance_attr;
|
||||
} xmedia_svp_adas_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 lane_point_num[XMEDIA_SVP_LANE_MAX_NUM];
|
||||
xmedia_s32 lane_fitted_point_num[XMEDIA_SVP_LANE_MAX_NUM];
|
||||
xmedia_svp_keypoint row_result[XMEDIA_SVP_LANE_AXIS_NUM][XMEDIA_SVP_LANE_MAX_ROW_POINT];
|
||||
xmedia_svp_keypoint col_result[XMEDIA_SVP_LANE_AXIS_NUM][XMEDIA_SVP_LANE_MAX_COL_POINT];
|
||||
xmedia_svp_keypoint row_fitted_result[XMEDIA_SVP_LANE_AXIS_NUM][XMEDIA_SVP_LANE_MAX_ROW_POINT];
|
||||
xmedia_svp_keypoint col_fitted_result[XMEDIA_SVP_LANE_AXIS_NUM][XMEDIA_SVP_LANE_MAX_COL_POINT];
|
||||
xmedia_svp_yolov5_output car_result;
|
||||
xmedia_svp_yolov5_output plate_result;
|
||||
xmedia_svp_yolov5_output person_result;
|
||||
xmedia_svp_yolov5_output nmv_result;
|
||||
xmedia_float coeffs[XMEDIA_SVP_LANE_MAX_NUM][XMEDIA_SVP_LANE_FIT_ORDER];
|
||||
} xmedia_svp_adas_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 smoke_apear_count;
|
||||
xmedia_u8 smoke_loss_count;
|
||||
xmedia_float smoke_change_ratio;
|
||||
xmedia_u8 fire_loss_count;
|
||||
xmedia_float fire_change_ratio;
|
||||
xmedia_float fire_ratio_sum;
|
||||
xmedia_svp_yolov8_attr detect_attr;
|
||||
} xmedia_svp_fire_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_rect gesture_rect;
|
||||
xmedia_s32 gesture_tracker_id;
|
||||
xmedia_float select_score[XMEDIA_SVP_MAX_TARGET_NUM];
|
||||
xmedia_svp_yolov8_output result;
|
||||
} xmedia_svp_gesture_result;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SVP_CLASS_EMOTION_SMILE,
|
||||
XMEDIA_SVP_CLASS_EMOTION_NORMAL,
|
||||
XMEDIA_SVP_CLASS_EMOTION_UNKNOWN,
|
||||
} xmedia_svp_class_emotion_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float clockwise_thres;
|
||||
xmedia_float anticlockwise_thres;
|
||||
xmedia_float left_thres;
|
||||
xmedia_float right_thres;
|
||||
xmedia_float upward_thres;
|
||||
xmedia_float downward_thres;
|
||||
} xmedia_svp_face_pose_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_yolov5_attr detect_attr;
|
||||
xmedia_u64 luma_score;
|
||||
xmedia_s32 ive_sobel_score;
|
||||
xmedia_svp_face_pose_attr fr_pose_attr;
|
||||
xmedia_float keypoint_score;
|
||||
} xmedia_svp_fr_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float vector[XMEDIA_SVP_FEATURE_COL];
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_s32 fr_tracker_id;
|
||||
xmedia_float score;
|
||||
xmedia_svp_point keypoint_arry[XMEDIA_SVP_FR_KEYPOINT_NUM];
|
||||
} xmedia_svp_fr_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_s32 face_tracker_id;
|
||||
xmedia_float score;
|
||||
xmedia_svp_point keypoint_arry[XMEDIA_SVP_FR_KEYPOINT_NUM];
|
||||
xmedia_svp_class_emotion_type emotion_class;
|
||||
} xmedia_svp_face_attribute_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 face_num;
|
||||
xmedia_svp_fr_result fr_result[XMEDIA_SVP_MAX_TARGET_NUM];
|
||||
} xmedia_svp_fr_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 face_num;
|
||||
xmedia_svp_face_attribute_result attribute_result[XMEDIA_SVP_MAX_TARGET_NUM];
|
||||
} xmedia_svp_face_attribute_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 pet_num;
|
||||
xmedia_u32 kpt_num;
|
||||
xmedia_svp_detect_result pet_targets[XMEDIA_SVP_PETBOT_MAX_TARGET];
|
||||
xmedia_svp_yolov8_result kpt_targets[XMEDIA_SVP_PETBOT_MAX_TARGET];
|
||||
} xmedia_svp_petbot_output;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SVP_MEM_TYPE_BLOCK,
|
||||
XMEDIA_SVP_MEM_TYPE_AINR_SHARE,
|
||||
XMEDIA_SVP_MEM_TYPE_COMPLETE,
|
||||
XMEDIA_SVP_MEM_TYPE_MAX,
|
||||
} xmedia_svp_mem_reuse_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 size;
|
||||
xmedia_u64 phyaddr;
|
||||
xmedia_void *viraddr;
|
||||
} xmedia_svp_mem_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_mem_reuse_type reuse_type;
|
||||
xmedia_svp_mem_info workbuf_reuse_mem;
|
||||
xmedia_svp_mem_info input_reuse_mem;
|
||||
xmedia_svp_mem_info output_reuse_mem;
|
||||
} xmedia_svp_cfg;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float detect_threshold; // 置信度阈值,建议值0.65f
|
||||
xmedia_float classifier_threshold; // 分类器阈值,建议值0.8f
|
||||
xmedia_float iou_threshold; // iou相交比阈值,建议值0.5f
|
||||
xmedia_u8 max_target_num; // 单个检测任务的最大目标数,所有检测任务总和最大值50
|
||||
} xmedia_svp_multi_base_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_multi_base_attr car_attr;
|
||||
xmedia_svp_multi_base_attr person_attr;
|
||||
xmedia_svp_multi_base_attr nmv_attr;
|
||||
xmedia_svp_multi_base_attr face_attr;
|
||||
xmedia_svp_multi_base_attr pet_attr;
|
||||
xmedia_svp_multi_base_attr pkg_attr;
|
||||
xmedia_bool bytetrack_enable; // 追踪开关
|
||||
xmedia_bool motionless_filter_enable; // 运动状态检测开关
|
||||
xmedia_float stillness_thres; // 由运动转为静止状态的灵敏度阈值,建议值0.9f
|
||||
xmedia_u8 movement_fps_thres; // 由运动转为静止状态的连续帧阈值,建议值5
|
||||
} xmedia_svp_multi_detect_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_yolov8_attr detect_attr;
|
||||
xmedia_u8 warn_frame; // 警告帧数
|
||||
xmedia_float iou_thres; // 相交阈值,建议值0.1f
|
||||
} xmedia_svp_dms_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool flag; // 状态标志位
|
||||
xmedia_float detect_score; // 检测模型结果置信度
|
||||
xmedia_svp_rect rect; // 检测结果目标框
|
||||
} xmedia_svp_dms_state;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool fatigue_flag; // 疲劳状态标志位
|
||||
xmedia_u8 phone_num; // 手机检测数量,最大3
|
||||
xmedia_svp_dms_state phone[XMEDIA_SVP_DMS_SPECIAL_MAX_NUM]; // 手机状态
|
||||
xmedia_u8 cigar_num; // 香烟检测数量,最大3
|
||||
xmedia_svp_dms_state cigar[XMEDIA_SVP_DMS_SPECIAL_MAX_NUM]; // 香烟状态
|
||||
} xmedia_svp_dms_report;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_alg_type alg_type; // 检测类别
|
||||
xmedia_svp_class_type class_type; // 检测结果类别
|
||||
xmedia_float detect_score; // 检测模型结果置信度
|
||||
xmedia_s32 tracker_id; // 检测结果追踪id
|
||||
xmedia_u32 tracker_age; // 检测结果追踪age
|
||||
xmedia_svp_rect rect; // 检测结果目标框
|
||||
xmedia_bool special_target; // 特殊目标
|
||||
xmedia_svp_keypoint kpt[MAX_DETECT_KEYPOINT_NUM]; // 关键点坐标
|
||||
xmedia_svp_dms_report dms_report;
|
||||
} xmedia_svp_dms_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 target_num; // 检测结果数量
|
||||
xmedia_svp_dms_result targets[XMEDIA_SVP_DMS_MAX_TARGET_NUM]; // 最大目标数5
|
||||
} xmedia_svp_dms_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 x; // X坐标,采用万分比坐标
|
||||
xmedia_s32 y; // Y坐标,采用万分比坐标
|
||||
} xmedia_svp_vec2i;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 points_count; // 坐标点数量
|
||||
xmedia_svp_vec2i points_array[XMEDIA_SVP_MAX_EDGE]; // 坐标点数组
|
||||
} xmedia_svp_landmarks;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 zone_num; // 区域个数
|
||||
xmedia_svp_landmarks zones[XMEDIA_SVP_MAX_REGION]; // 区域数组
|
||||
} xmedia_svp_zone;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_yolov5_attr plate_detect_attr;
|
||||
xmedia_u32 plate_min_width;
|
||||
xmedia_u32 report_count;
|
||||
xmedia_float report_thres;
|
||||
xmedia_svp_zone detect_zone;
|
||||
} xmedia_svp_plate_reco_attr;
|
||||
|
||||
// 车牌车辆方向
|
||||
typedef enum {
|
||||
XMEDIA_SVP_DIRECTION_FORWARD, // 向前
|
||||
XMEDIA_SVP_DIRECTION_BACKWARD, // 向后
|
||||
XMEDIA_SVP_DIRECTION_UNKOWN = 99, // 未知
|
||||
} xmedia_svp_direction;
|
||||
|
||||
// 车牌颜色
|
||||
typedef enum {
|
||||
XMEDIA_SVP_PLATE_COLOR_BLACK = 0, // 黑牌
|
||||
XMEDIA_SVP_PLATE_COLOR_BULE = 1, // 蓝牌
|
||||
XMEDIA_SVP_PLATE_COLOR_GREEN = 2, // 绿牌
|
||||
XMEDIA_SVP_PLATE_COLOR_RESEVER = 3, // 保留
|
||||
XMEDIA_SVP_PLATE_COLOR_WHITE = 4, // 白牌
|
||||
XMEDIA_SVP_PLATE_COLOR_PURPLE = 5, // 紫牌
|
||||
XMEDIA_SVP_PLATE_COLOR_YELLOW = 6, // 黄牌
|
||||
XMEDIA_SVP_PLATE_COLOR_UNKNOWN = 7, // 未知
|
||||
} xmedia_svp_plate_color;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 tracker_id;
|
||||
xmedia_char plate_char[XMEDIA_SVP_PLATE_CHAR_MAX_NUM];
|
||||
xmedia_float char_score;
|
||||
xmedia_svp_plate_color color; // 车牌颜色
|
||||
xmedia_float color_score; // 车牌颜色置信度
|
||||
xmedia_svp_rect rect; // 车牌坐标
|
||||
xmedia_svp_direction lpr_direction; // 车牌触发方向
|
||||
} xmedia_svp_plate_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 target_num;
|
||||
xmedia_svp_plate_result targets[XMEDIA_SVP_PLATE_VEH_MAX_TARGET_NUM];
|
||||
} xmedia_svp_plate_reco_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_yolov5_attr detect_attr;
|
||||
xmedia_u32 report_count;
|
||||
xmedia_float report_thres;
|
||||
xmedia_svp_zone detect_zone;
|
||||
} xmedia_svp_vehicle_reco_attr;
|
||||
|
||||
// 车辆类型
|
||||
typedef enum {
|
||||
XMEDIA_SVP_VEHICLE_TYPE_SEDAN, // 小车
|
||||
XMEDIA_SVP_VEHICLE_TYPE_MINIVAN, // 小型货车
|
||||
XMEDIA_SVP_VEHICLE_TYPE_TRUCK, // 卡车
|
||||
XMEDIA_SVP_VEHICLE_TYPE_TANKER, // 罐车
|
||||
XMEDIA_SVP_VEHICLE_TYPE_MINIBUS, // 巴士
|
||||
XMEDIA_SVP_VEHICLE_TYPE_UNKNOWN = 99, // 未知
|
||||
} xmedia_svp_vehicle_type;
|
||||
|
||||
// 车辆颜色
|
||||
typedef enum {
|
||||
XMEDIA_SVP_VEHICLE_COLOR_WHITE, // 白色
|
||||
XMEDIA_SVP_VEHICLE_COLOR_RED, // 红色
|
||||
XMEDIA_SVP_VEHICLE_COLOR_YELLOW, // 黄色
|
||||
XMEDIA_SVP_VEHICLE_COLOR_BLACK, // 黑色
|
||||
XMEDIA_SVP_VEHICLE_COLOR_BLUE, // 蓝色
|
||||
XMEDIA_SVP_VEHICLE_COLOR_GREEN, // 绿色
|
||||
XMEDIA_SVP_VEHICLE_COLOR_UNKNOWN = 99, // 未知
|
||||
} xmedia_svp_vehicle_color;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 tracker_id;
|
||||
xmedia_svp_vehicle_color color; // 车辆颜色
|
||||
xmedia_svp_vehicle_type type; // 车辆类型
|
||||
xmedia_float color_scr; // 车辆颜色置信度
|
||||
xmedia_float type_scr; // 车辆类型置信度
|
||||
xmedia_svp_rect rect; // 车辆坐标
|
||||
xmedia_svp_direction vehicle_direction; // 车辆触发方向
|
||||
} xmedia_svp_vehicle_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 target_num;
|
||||
xmedia_svp_vehicle_result targets[XMEDIA_SVP_PLATE_VEH_MAX_TARGET_NUM];
|
||||
} xmedia_svp_vehicle_reco_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_yolov5_attr plate_attr;
|
||||
xmedia_svp_yolov5_attr veh_attr;
|
||||
xmedia_u32 plate_min_width;
|
||||
xmedia_u32 report_count;
|
||||
xmedia_float report_thres;
|
||||
xmedia_svp_zone detect_zone;
|
||||
} xmedia_svp_plate_vehicle_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 tracker_id;
|
||||
xmedia_svp_vehicle_color veh_color; // 车辆颜色
|
||||
xmedia_svp_vehicle_type veh_type; // 车辆类型
|
||||
xmedia_float veh_color_scr; // 车辆颜色置信度
|
||||
xmedia_float veh_type_scr; // 车辆类型置信度
|
||||
xmedia_svp_rect veh_rect; // 车辆坐标
|
||||
xmedia_svp_direction veh_direction; // 车辆触发方向
|
||||
xmedia_char plate_char[XMEDIA_SVP_PLATE_CHAR_MAX_NUM];
|
||||
xmedia_float plate_score;
|
||||
xmedia_svp_plate_color plate_color; // 车牌颜色
|
||||
xmedia_float plate_color_scr; // 车牌颜色置信度
|
||||
xmedia_svp_rect plate_rect; // 车牌坐标
|
||||
xmedia_svp_direction plate_direction; // 车牌触发方向
|
||||
} xmedia_svp_plate_veh_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 target_num;
|
||||
xmedia_svp_plate_veh_result targets[XMEDIA_SVP_PLATE_VEH_MAX_TARGET_NUM];
|
||||
} xmedia_svp_plate_vehicle_output;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_yolov8_attr detect_attr;
|
||||
xmedia_bool bytetrack_enable; // 追踪开关
|
||||
xmedia_bool motionless_filter_enable; // 运动状态检测开关
|
||||
xmedia_float stillness_thres; // 由运动转为静止状态的灵敏度阈值,建议值0.9f
|
||||
xmedia_u8 movement_fps_thres; // 由运动转为静止状态的连续帧阈值,建议值5
|
||||
xmedia_u8 smoke_apear_count;
|
||||
xmedia_u8 smoke_loss_count;
|
||||
xmedia_float smoke_change_rate;
|
||||
xmedia_u8 fire_loss_count;
|
||||
xmedia_float fire_change_rate;
|
||||
xmedia_float fire_ratio_sum;
|
||||
} xmedia_svp_pcnmv_fire_attr;
|
||||
/*
|
||||
* 函数功能:初始化SVP
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:去初始化SVP
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_uninit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:设置svp配置信息
|
||||
* 函数参数:
|
||||
* svp_cfg - 输入参数,svp配置信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_set_config(xmedia_svp_cfg* svp_cfg);
|
||||
|
||||
/*
|
||||
* 函数功能:获取svp配置信息
|
||||
* 函数参数:
|
||||
* svp_cfg - 输入参数,svp配置信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_get_config(xmedia_svp_cfg* svp_cfg);
|
||||
|
||||
/*
|
||||
* 函数功能:创建一路svp_task处理流程
|
||||
* 函数参数:
|
||||
* handle - 输出参数,创建成功返回SVP句柄
|
||||
* cfg - 输入参数,svp_task配置信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
* 注意:
|
||||
* 每个句柄对应一路svp_task处理流程
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_task_create(xmedia_s32 *handle, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
/*
|
||||
* 函数功能:设置svp_task处理流程的属性
|
||||
* 函数参数:
|
||||
* handle - 输入参数,svp_task处理流程句柄
|
||||
* task_attr - 输入参数,设置svp_task属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
* 注意:
|
||||
* 创建后,销毁前的任意时间均可调用
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_task_set_attr(xmedia_s32 handle, const xmedia_void *task_attr);
|
||||
|
||||
/*
|
||||
* 函数功能:获取svp_task处理流程的属性
|
||||
* 函数参数:
|
||||
* handle - 输入参数,svp_task处理流程句柄
|
||||
* task_attr - 输出参数,获取的svp_task属性
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_task_get_attr(xmedia_s32 handle, xmedia_void *task_attr);
|
||||
|
||||
/*
|
||||
* 函数功能:开始svp_task处理流程
|
||||
* 函数参数:
|
||||
* handle - 输入参数,SVP处理流程句柄
|
||||
* input - 输入参数,输入图像帧信息
|
||||
* output - 输出参数,处理结果信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
* 注意:
|
||||
* 创建后,销毁前的任意时间均可调用
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_task_process(xmedia_s32 handle, const xmedia_svp_task_input *input, xmedia_void *output);
|
||||
|
||||
/*
|
||||
* 函数功能:销毁一路svp_task处理流程
|
||||
* 函数参数:
|
||||
* handle - 输入参数,SVP处理流程句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_task_destroy(xmedia_s32 handle);
|
||||
|
||||
/*
|
||||
* 函数功能:获取当前SVP版本信息
|
||||
* 函数参数:
|
||||
* version - 输出参数,用于保存SVP版本信息
|
||||
* len - 输入参数,version的长度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_get_version(xmedia_char *version, const xmedia_s32 len);
|
||||
|
||||
/*
|
||||
* 函数功能:重定向handle
|
||||
* 函数参数:
|
||||
* old_handle - 输入参数,旧的SVP处理流程句柄
|
||||
* new_handle - 输出参数,重定向后得到的SVP处理流程句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_FAILURE - 函数执行失败
|
||||
*/
|
||||
xmedia_s32 xmedia_svp_dup_handle(xmedia_s32 old_handle, xmedia_s32 *new_handle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,530 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef XMEDIA_SYS_H
|
||||
#define XMEDIA_SYS_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "common.h"
|
||||
#include "xmedia_video_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define BIND_DEST_MAXNUM 64
|
||||
#define UNIQUE_ID_NUM 6
|
||||
#define SWITCH_MAX_GRP_NUM 2
|
||||
#define SWITCH_MAX_PIPE_NUM 2
|
||||
#define VSYNC_MAX_NUM 4
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_WORK_MODE_OFFLINE = 0,
|
||||
XMEDIA_WORK_MODE_ONLINE,
|
||||
XMEDIA_WORK_MODE_MAX,
|
||||
} xmedia_work_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_work_mode vicap_viproc_mode;
|
||||
xmedia_work_mode viproc_vpss_mode;
|
||||
xmedia_work_mode gdc_vpss_mode;
|
||||
} xmedia_pipe_work_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_pipe_work_mode pipe_mode[VI_MAX_PIPE_NUM];
|
||||
} xmedia_sys_config;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SYS_MULTI_PIPE_MODE_NORMAL = 0,
|
||||
XMEDIA_SYS_MULTI_PIPE_MODE_DUAL_SWITCH,
|
||||
XMEDIA_SYS_MULTI_PIPE_MODE_MAX
|
||||
} xmedia_sys_multi_pipe_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SYS_SWITCH_SYNC_MODE_SOC_MASTER_SLAVE = 0,
|
||||
XMEDIA_SYS_SWITCH_SYNC_MODE_SOC_SLAVE,
|
||||
XMEDIA_SYS_SWITCH_SYNC_MODE_SENSOR_MASTER_SLAVE,
|
||||
XMEDIA_SYS_SWITCH_SYNC_MODE_MAX
|
||||
} xmedia_sys_switch_sync_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_sys_multi_pipe_mode multi_pipe_mode;
|
||||
xmedia_u32 pipe_num;
|
||||
xmedia_s32 master_pipe_id;
|
||||
xmedia_s32 pipe_id[SWITCH_MAX_PIPE_NUM];
|
||||
xmedia_bool pipe_sel[SWITCH_MAX_PIPE_NUM];
|
||||
xmedia_sys_switch_sync_mode sync_mode;
|
||||
xmedia_bool ext_switch_en;
|
||||
} xmedia_sys_switch_config;
|
||||
|
||||
typedef struct {
|
||||
xmedia_mod_id mod_id;
|
||||
xmedia_s32 dev_id;
|
||||
xmedia_s32 chn_id;
|
||||
} xmedia_chn_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 num;
|
||||
xmedia_chn_info mpp_chn[BIND_DEST_MAXNUM];
|
||||
} xmedia_sys_bind_dest;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 id[UNIQUE_ID_NUM];
|
||||
} xmedia_unique_id;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SCALE_RANGE_0 = 0, /* scale range < 8/64 */
|
||||
XMEDIA_SCALE_RANGE_1, /* scale range >= 8/64 */
|
||||
XMEDIA_SCALE_RANGE_2, /* scale range >= 9/64 */
|
||||
XMEDIA_SCALE_RANGE_3, /* scale range >= 12/64 */
|
||||
XMEDIA_SCALE_RANGE_4, /* scale range >= 17/64 */
|
||||
XMEDIA_SCALE_RANGE_5, /* scale range >= 21/64 */
|
||||
XMEDIA_SCALE_RANGE_6, /* scale range >= 26/64 */
|
||||
XMEDIA_SCALE_RANGE_7, /* scale range >= 31/64 */
|
||||
XMEDIA_SCALE_RANGE_8, /* scale range >= 34/64 */
|
||||
XMEDIA_SCALE_RANGE_9, /* scale range >= 36/64 */
|
||||
XMEDIA_SCALE_RANGE_10, /* scale range >= 40/64 */
|
||||
XMEDIA_SCALE_RANGE_11, /* scale range >= 43/64 */
|
||||
XMEDIA_SCALE_RANGE_12, /* scale range >= 46/64 */
|
||||
XMEDIA_SCALE_RANGE_13, /* scale range >= 49/64 */
|
||||
XMEDIA_SCALE_RANGE_14, /* scale range >= 52/64 */
|
||||
XMEDIA_SCALE_RANGE_15, /* scale range >= 54/64 */
|
||||
XMEDIA_SCALE_RANGE_16, /* scale range >= 56/64 */
|
||||
XMEDIA_SCALE_RANGE_17, /* scale range >= 58/64 */
|
||||
XMEDIA_SCALE_RANGE_18, /* scale range > 1 */
|
||||
XMEDIA_SCALE_RANGE_MAX,
|
||||
} xmedia_scale_range;
|
||||
|
||||
typedef struct {
|
||||
xmedia_scale_range horizontal;
|
||||
xmedia_scale_range vertical;
|
||||
} xmedia_sys_scale_range;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_COEFF_LEVEL_0 = 0, /* coefficient level 0 */
|
||||
XMEDIA_COEFF_LEVEL_1, /* coefficient level 1 */
|
||||
XMEDIA_COEFF_LEVEL_2, /* coefficient level 2 */
|
||||
XMEDIA_COEFF_LEVEL_3, /* coefficient level 3 */
|
||||
XMEDIA_COEFF_LEVEL_4, /* coefficient level 4 */
|
||||
XMEDIA_COEFF_LEVEL_5, /* coefficient level 5 */
|
||||
XMEDIA_COEFF_LEVEL_6, /* coefficient level 6 */
|
||||
XMEDIA_COEFF_LEVEL_7, /* coefficient level 7 */
|
||||
XMEDIA_COEFF_LEVEL_8, /* coefficient level 8 */
|
||||
XMEDIA_COEFF_LEVEL_9, /* coefficient level 9 */
|
||||
XMEDIA_COEFF_LEVEL_10, /* coefficient level 10 */
|
||||
XMEDIA_COEFF_LEVEL_11, /* coefficient level 11 */
|
||||
XMEDIA_COEFF_LEVEL_12, /* coefficient level 12 */
|
||||
XMEDIA_COEFF_LEVEL_13, /* coefficient level 13 */
|
||||
XMEDIA_COEFF_LEVEL_14, /* coefficient level 14 */
|
||||
XMEDIA_COEFF_LEVEL_15, /* coefficient level 15 */
|
||||
XMEDIA_COEFF_LEVEL_16, /* coefficient level 16 */
|
||||
XMEDIA_COEFF_LEVEL_17, /* coefficient level 17 */
|
||||
XMEDIA_COEFF_LEVEL_18, /* coefficient level 18 */
|
||||
XMEDIA_COEFF_LEVEL_MAX,
|
||||
} xmedia_coeff_level;
|
||||
|
||||
typedef struct {
|
||||
xmedia_coeff_level horizontal_lum; /* horizontal luminance coefficient level */
|
||||
xmedia_coeff_level horizontal_chr; /* horizontal chrominance coefficient level */
|
||||
xmedia_coeff_level vertical_lum; /* vertical luminance coefficient level */
|
||||
xmedia_coeff_level vertical_chr; /* vertical chrominance coefficient level */
|
||||
} xmedia_scale_coef_level;
|
||||
|
||||
typedef struct {
|
||||
xmedia_char gps_latitude_ref; /* GPS LatitudeRef Indicates whether the latitude is north or south latitude,
|
||||
* 'N'/'S', default 'N' */
|
||||
xmedia_u32 gps_latitude[3][2]; /* GPS Latitude is expressed as degrees, minutes and seconds, a typical format
|
||||
* like "dd/1, mm/1, ss/1", default 0/0, 0/0, 0/0 */
|
||||
xmedia_char gps_longitude_ref; /* GPS LongitudeRef Indicates whether the longitude is east or west longitude,
|
||||
* 'E'/'W', default 'E' */
|
||||
xmedia_u32 gps_longitude[3][2]; /* GPS Longitude is expressed as degrees, minutes and seconds, a typical format
|
||||
* like "dd/1, mm/1, ss/1", default 0/0, 0/0, 0/0 */
|
||||
xmedia_u8 gps_altitude_ref; /* GPS AltitudeRef Indicates the reference altitude used, 0 - above sea level,
|
||||
* 1 - below sea level default 0 */
|
||||
xmedia_u32 gps_altitude[2]; /* GPS AltitudeRef Indicates the altitude based on the reference gps_altitude_ref,
|
||||
* the reference unit is meters, default 0/0 */
|
||||
} xmedia_gps_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool all_online;
|
||||
|
||||
xmedia_u32 frame_rate; /* Input frame rate of VIPROC(linear/Frame mode WDR is the sensor frame rate,
|
||||
* and the line mode WDR is the frame rate after synthesis) */
|
||||
xmedia_u32 full_lines_std; /* Total height of sensor, include of VBlank */
|
||||
|
||||
xmedia_video_size large_stream_size; /* VENC Large Stream Size */
|
||||
xmedia_video_size small_stream_size; /* VENC Small Stream Size */
|
||||
|
||||
xmedia_payload_type type; /* VENC encode type */
|
||||
|
||||
} xmedia_vpss_venc_wrap_param;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_SYS_COMPRESS_LEVEL_0 = 0, //较低压缩率
|
||||
XMEDIA_SYS_COMPRESS_LEVEL_1, //折中压缩率
|
||||
XMEDIA_SYS_COMPRESS_LEVEL_2, //较高压缩率
|
||||
XMEDIA_SYS_COMPRESS_LEVEL_MAX
|
||||
} xmedia_sys_compress_level;
|
||||
|
||||
/*
|
||||
* 函数功能:SYS模块初始化
|
||||
* 函数参数:
|
||||
* sys_config - 输入参数,配置pipe工作模式
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_init(const xmedia_sys_config *sys_config);
|
||||
|
||||
/*
|
||||
* 函数功能:SYS模块去初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_CLOSE_FAILED - 关闭节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:设置sensor帧同步管脚
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,指定pipe号,范围[0, 3]
|
||||
* vsync - 输入参数,同步信号,范围[0, 3]
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* 注:针对sensor需要soc给同步信号,但用户硬件设计同步管脚走线不同的场景
|
||||
* 以11a举例:
|
||||
* vsync0-----pin113或pin115
|
||||
* vsync1-----pin114或pin118
|
||||
* vsync2-----pin108或pin116
|
||||
* vsync3-----pin109或pin118
|
||||
* 对应pipe的sensor帧同步信号连接哪个pin脚,配合管脚复用,配对应vsyncx
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_set_vsync(xmedia_s32 pipe, xmedia_u32 vsync);
|
||||
|
||||
/*
|
||||
* 函数功能:获取sensor帧同步管脚
|
||||
* 函数参数:
|
||||
* pipe - 输入参数,指定pipe号,范围[0, 3]
|
||||
* vsync - 输出参数,同步信号,范围[0, 3]
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_vsync(xmedia_s32 pipe, xmedia_u32 *vsync);
|
||||
|
||||
/*
|
||||
* 函数功能:设置switch配置信息
|
||||
* 函数参数:
|
||||
* grp_id - 输入参数,switch组号
|
||||
* xmedia_sys_switch_config - 输入参数,switch配置信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_set_switch_config(xmedia_s32 grp_id, const xmedia_sys_switch_config *switch_config);
|
||||
|
||||
/*
|
||||
* 函数功能:获取switch配置信息
|
||||
* 函数参数:
|
||||
* grp_id - 输入参数,switch组号
|
||||
* xmedia_sys_switch_config - 输出参数,获取到的switch配置信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_switch_config(xmedia_s32 grp_id, xmedia_sys_switch_config *switch_config);
|
||||
|
||||
/*
|
||||
* 函数功能:数据源到数据接收者绑定
|
||||
* 函数参数:
|
||||
* src_chn - 输入参数,数据源的描述信息
|
||||
* dest_chn - 输入参数,数据接收者的描述信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请绑定相关内存失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_bind(const xmedia_chn_info *src_chn, const xmedia_chn_info *dest_chn);
|
||||
|
||||
/*
|
||||
* 函数功能:数据源到数据接收者解除绑定
|
||||
* 函数参数:
|
||||
* src_chn - 输入参数,数据源的描述信息
|
||||
* dest_chn - 输入参数,数据接收者的描述信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_unbind(const xmedia_chn_info *src_chn, const xmedia_chn_info *dest_chn);
|
||||
|
||||
/*
|
||||
* 函数功能:获取目标通道上绑定的源通道的信息
|
||||
* 函数参数:
|
||||
* dest_chn - 输入参数,数据接收者的描述信息
|
||||
* src_chn - 输出参数,获取的对应数据源的描述信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_bind_by_dest(const xmedia_chn_info *dest_chn, xmedia_chn_info *src_chn);
|
||||
|
||||
/*
|
||||
* 函数功能:根据源获取绑定的目标
|
||||
* 函数参数:
|
||||
* src_chn - 输入参数,数据源的描述信息
|
||||
* bind_dest - 输出参数,获取的源对应所有接收者的描述信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_bind_by_src(const xmedia_chn_info *src_chn, xmedia_sys_bind_dest *bind_dest);
|
||||
|
||||
/*
|
||||
* 函数功能:获取当前芯片的 ID
|
||||
* 函数参数:
|
||||
* chip_id - 输出参数,当前芯片的ID,来源OTP
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_chip_id(xmedia_u32 *chip_id);
|
||||
|
||||
/*
|
||||
* 函数功能:获取芯片唯一识别码
|
||||
* 函数参数:
|
||||
* unique_id - 输出参数,芯片唯一识别码
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_unique_id(xmedia_unique_id *unique_id);
|
||||
|
||||
/*
|
||||
* 函数功能:获取当前芯片的客户识别码
|
||||
* 函数参数:
|
||||
* custom_code - 输出参数,当前芯片的客户识别码
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_custom_code(xmedia_u32 *custom_code);
|
||||
|
||||
/*
|
||||
* 函数功能:获取系统的当前时间戳
|
||||
* 函数参数:
|
||||
* cur_pts - 输出参数,系统的当前时间戳
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_cur_pts(xmedia_u64 *cur_pts);
|
||||
|
||||
/*
|
||||
* 函数功能:初始化系统的时间戳基准
|
||||
* 函数参数:
|
||||
* pts_base - 输入参数,设置的时间戳基准
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_init_pts_base(xmedia_u64 pts_base);
|
||||
|
||||
/*
|
||||
* 函数功能:同步系统的时间戳
|
||||
* 函数参数:
|
||||
* pts_base - 输入参数,设置的时间戳基准
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_sync_pts(xmedia_u64 pts_base);
|
||||
|
||||
/*
|
||||
* 函数功能:配置内存参数,设置模块设备通道使用的 MMZ 区域名称
|
||||
* 函数参数:
|
||||
* chn_info - 输入参数,设备通道描述信息
|
||||
* mmz_name - 输入参数,MMZ区域名称
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_set_mem_config(const xmedia_chn_info *chn_info, const xmedia_char *mmz_name);
|
||||
|
||||
/*
|
||||
* 函数功能:获取模块设备通道使用的 MMZ 区域名称
|
||||
* 函数参数:
|
||||
* chn_info - 输入参数,设备通道描述信息
|
||||
* mmz_name - 输出参数,返回的对应MMZ区域名称
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_mem_config(const xmedia_chn_info *chn_info, xmedia_char *mmz_name);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 VPSS 模块和 VGS 模块的缩放系数等级
|
||||
* 函数参数:
|
||||
* scale_range - 输入参数,缩放区域信息
|
||||
* scale_coef_level - 输入参数,缩放等级信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_set_scale_coef_level(const xmedia_sys_scale_range *scale_range,
|
||||
const xmedia_scale_coef_level *scale_coef_level);
|
||||
|
||||
/*
|
||||
* 函数功能:获取 VPSS 和 VGS 缩放系数等级
|
||||
* 函数参数:
|
||||
* scale_range - 输入参数,缩放区域信息
|
||||
* scale_coef_level - 输出参数,缩放等级信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_scale_coef_level(const xmedia_sys_scale_range *scale_range,
|
||||
xmedia_scale_coef_level *scale_coef_level);
|
||||
|
||||
/*
|
||||
* 函数功能:设置时区信息
|
||||
* 函数参数:
|
||||
* timezone - 输入参数,时区信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_set_timezone(xmedia_s32 timezone);
|
||||
|
||||
/*
|
||||
* 函数功能:获取时区信息
|
||||
* 函数参数:
|
||||
* timezone - 输出参数,时区信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_timezone(xmedia_s32 *timezone);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 GPS 信息
|
||||
* 函数参数:
|
||||
* gps_info - 输入参数,GPS信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_set_gps_info(const xmedia_gps_info *gps_info);
|
||||
|
||||
/*
|
||||
* 函数功能:获取 GPS 信息
|
||||
* 函数参数:
|
||||
* gps_info - 输出参数,GPS信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_gps_info(xmedia_gps_info *gps_info);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 Tuning 工具连接
|
||||
* 函数参数:
|
||||
* connect - 输入参数,Tuning 工具连接控制状态
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_set_tuning_connect(xmedia_s32 connect);
|
||||
|
||||
/*
|
||||
* 函数功能:获取 Tuning 工具连接状态
|
||||
* 函数参数:
|
||||
* connect - 输出参数,Tuning 工具连接控制状态
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_tuning_connect(xmedia_s32 *connect);
|
||||
|
||||
/*
|
||||
* 函数功能:获取VPSS-VENC卷绕模式下的buffer像素行数
|
||||
* 函数参数:
|
||||
* wrap_param - 输入参数,计算卷绕buffer像素行数的参数
|
||||
* buf_line - 输出参数,卷绕buffer的像素行数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_vpss_venc_wrap_buf_line(const xmedia_vpss_venc_wrap_param *wrap_param, xmedia_u32 *buf_line);
|
||||
|
||||
/*
|
||||
* 函数功能:设置系统压缩率等级
|
||||
* 函数参数:
|
||||
* compress_level - 输入参数,系统压缩率等级
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 函数调用时机错误,必须在确定vb block大小前调用
|
||||
* 注意:
|
||||
* 1、必须在确定vb block大小前调用,不调用则使用默认等级
|
||||
* 2、默认系统压缩率等级为XMEDIA_SYS_COMPRESS_LEVEL_0
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_set_compress_level(xmedia_sys_compress_level compress_level);
|
||||
|
||||
/*
|
||||
* 函数功能:获取系统压缩率等级
|
||||
* 函数参数:
|
||||
* compress_level - 输出参数,系统压缩率等级
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
*/
|
||||
xmedia_s32 xmedia_sys_get_compress_level(xmedia_sys_compress_level *compress_level);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
Executable
+393
@@ -0,0 +1,393 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_TDE_H__
|
||||
#define __XMEDIA_TDE_H__
|
||||
|
||||
#include "xmedia_errcode.h"
|
||||
#include "xmedia_video_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define XMEDIA_COLOR_COMPONENT_NUM 3
|
||||
|
||||
typedef struct {
|
||||
xmedia_u64 phys_addr[XMEDIA_COLOR_COMPONENT_NUM]; // 0:Y或RGB; 1:UV; 2:U或V
|
||||
xmedia_u32 stride[XMEDIA_COLOR_COMPONENT_NUM]; // 0:Y或RGB; 1:UV; 2:U或V
|
||||
xmedia_u32 width;
|
||||
xmedia_u32 height;
|
||||
xmedia_video_pixel_format pixel_format;
|
||||
xmedia_bool is_alpha_ext_1555; // ARGB1555 alpha位扩展8位有效位场景,0:系统默认扩展,1:用户配置
|
||||
xmedia_u8 alpha0; // ARGB1555 alpha位扩展8位有效位场景,0对应的8位有效位
|
||||
xmedia_u8 alpha1; // ARGB1555 alpha位扩展8位有效位场景,1对应的8位有效位
|
||||
xmedia_u64 clut_phys_addr; // 256个argb8888颜色,总内存256*4字节
|
||||
xmedia_bool clut_reload;
|
||||
} xmedia_tde_surface;
|
||||
|
||||
typedef struct {
|
||||
xmedia_tde_surface surface;
|
||||
xmedia_video_rect rect;
|
||||
} xmedia_tde_surface_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_point start_point;
|
||||
xmedia_video_point end_point;
|
||||
xmedia_u32 thick;
|
||||
xmedia_u32 color; // 颜色值固定按照ARGB8888解析,可配范围[0x0, 0xffffffff]
|
||||
} xmedia_tde_line_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_TDE_BLEND_MODE_CLEAR = 0, // fs: 0.0 fd: 0.0
|
||||
XMEDIA_TDE_BLEND_MODE_SRC, // fs: 1.0 fd: 0.0
|
||||
XMEDIA_TDE_BLEND_MODE_DST, // fs: 0.0 fd: 1.0
|
||||
XMEDIA_TDE_BLEND_MODE_SRCOVER, // fs: 1.0 fd: 1.0-sa
|
||||
XMEDIA_TDE_BLEND_MODE_DSTOVER, // fs: 1.0-da fd: 1.0
|
||||
XMEDIA_TDE_BLEND_MODE_SRCIN, // fs: da fd: 0.0
|
||||
XMEDIA_TDE_BLEND_MODE_DSTIN, // fs: 0.0 fd: sa
|
||||
XMEDIA_TDE_BLEND_MODE_SRCOUT, // fs: 1.0-da fd: 0.0
|
||||
XMEDIA_TDE_BLEND_MODE_DSTOUT, // fs: 0.0 fd: 1.0-sa
|
||||
XMEDIA_TDE_BLEND_MODE_SRCATOP, // fs: da fd: 1.0-sa
|
||||
XMEDIA_TDE_BLEND_MODE_DSTATOP, // fs: 1.0-da fd: sa
|
||||
XMEDIA_TDE_BLEND_MODE_XOR, // fs: 1.0-da fd: 1.0-sa
|
||||
XMEDIA_TDE_BLEND_MODE_DARKEN, // alpha取1,color取min(s1, s2)
|
||||
XMEDIA_TDE_BLEND_MODE_LIGHTEN, // alpha取1,color取max(s1, s2)
|
||||
XMEDIA_TDE_BLEND_MODE_MULTIPLY, // As1 * As2/256, Cs1 * Cs2/256
|
||||
XMEDIA_TDE_BLEND_MODE_SCREEN, // As1 + As2 - As1 * As2/256, Cs1 + Cs2 - Cs1 * Cs2/256
|
||||
XMEDIA_TDE_BLEND_MODE_MAX
|
||||
} xmedia_tde_blend_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool global_alpha_en;
|
||||
xmedia_bool pixel_alpha_en;
|
||||
xmedia_bool bg_premulti_en;
|
||||
xmedia_bool fg_premulti_en;
|
||||
xmedia_tde_blend_mode blend_mode;
|
||||
} xmedia_tde_blend_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_TDE_ROP_MODE_BLACKNESS = 0, // Blackness
|
||||
XMEDIA_TDE_ROP_MODE_NOTMERGEPEN, // ~(S2 | S1)
|
||||
XMEDIA_TDE_ROP_MODE_MASKNOTPEN, // ~S2&S1
|
||||
XMEDIA_TDE_ROP_MODE_NOTCOPYPEN, // ~S2
|
||||
XMEDIA_TDE_ROP_MODE_MASKPENNOT, // S2&~S1
|
||||
XMEDIA_TDE_ROP_MODE_NOT, // ~S1
|
||||
XMEDIA_TDE_ROP_MODE_XORPEN, // S2^S1
|
||||
XMEDIA_TDE_ROP_MODE_NOTMASKPEN, // ~(S2 & S1)
|
||||
XMEDIA_TDE_ROP_MODE_MASKPEN, // S2&S1
|
||||
XMEDIA_TDE_ROP_MODE_NOTXORPEN, // ~(S2^S1)
|
||||
XMEDIA_TDE_ROP_MODE_NOP, // S1
|
||||
XMEDIA_TDE_ROP_MODE_MERGENOTPEN, // ~S2|S1
|
||||
XMEDIA_TDE_ROP_MODE_COPYPEN, // S2
|
||||
XMEDIA_TDE_ROP_MODE_MERGEPENNOT, // S2|~S1
|
||||
XMEDIA_TDE_ROP_MODE_MERGEPEN, // S2|S1
|
||||
XMEDIA_TDE_ROP_MODE_WHITE, // Whiteness
|
||||
XMEDIA_TDE_ROP_MODE_MAX
|
||||
} xmedia_tde_rop_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_tde_rop_mode alpha_rop;
|
||||
xmedia_tde_rop_mode color_rop;
|
||||
} xmedia_tde_rop_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_TDE_COLORKEY_MODE_FOREGROUND = 0,
|
||||
XMEDIA_TDE_COLORKEY_MODE_BACKGROUND,
|
||||
XMEDIA_TDE_COLORKEY_MODE_MAX
|
||||
} xmedia_tde_colorkey_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 component_min;
|
||||
xmedia_u8 component_max;
|
||||
xmedia_u8 component_mask;
|
||||
xmedia_bool is_component_out;
|
||||
xmedia_bool is_component_ignore;
|
||||
} xmedia_tde_colorkey_comp;
|
||||
|
||||
typedef union {
|
||||
struct {
|
||||
xmedia_tde_colorkey_comp alpha;
|
||||
xmedia_tde_colorkey_comp red;
|
||||
xmedia_tde_colorkey_comp green;
|
||||
xmedia_tde_colorkey_comp blue;
|
||||
} argb_color_key;
|
||||
struct {
|
||||
xmedia_tde_colorkey_comp alpha;
|
||||
xmedia_tde_colorkey_comp y;
|
||||
xmedia_tde_colorkey_comp cb;
|
||||
xmedia_tde_colorkey_comp cr;
|
||||
} yuv_color_key;
|
||||
struct {
|
||||
xmedia_tde_colorkey_comp alpha;
|
||||
xmedia_tde_colorkey_comp clut;
|
||||
} clut_color_key;
|
||||
} xmedia_tde_colorkey_value;
|
||||
|
||||
typedef struct {
|
||||
xmedia_tde_colorkey_mode ck_mode;
|
||||
xmedia_tde_colorkey_value ck_value;
|
||||
} xmedia_tde_colorkey_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_TDE_CLIP_MODE_INSIDE = 0,
|
||||
XMEDIA_TDE_CLIP_MODE_OUTSIDE,
|
||||
XMEDIA_TDE_CLIP_MODE_MAX
|
||||
} xmedia_tde_clip_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_tde_clip_mode clip_mode;
|
||||
xmedia_video_rect clip_rect;
|
||||
} xmedia_tde_clip_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_TDE_OUT_ALPHA_MODE_NORMAL = 0,
|
||||
XMEDIA_TDE_OUT_ALPHA_MODE_FROM_BACKGROUND,
|
||||
XMEDIA_TDE_OUT_ALPHA_MODE_FROM_FOREGROUND,
|
||||
XMEDIA_TDE_OUT_ALPHA_MODE_FROM_GLOBALALPHA,
|
||||
XMEDIA_TDE_OUT_ALPHA_MODE_MAX
|
||||
} xmedia_tde_out_alpha_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool blend_en;
|
||||
xmedia_tde_blend_attr blend_attr;
|
||||
xmedia_bool rop_en;
|
||||
xmedia_tde_rop_attr rop_attr;
|
||||
xmedia_bool colorkey_en;
|
||||
xmedia_tde_colorkey_attr ck_attr;
|
||||
xmedia_bool clip_en;
|
||||
xmedia_tde_clip_attr clip_attr;
|
||||
xmedia_bool mirror_en;
|
||||
xmedia_bool flip_en;
|
||||
xmedia_tde_out_alpha_mode alpha_mode;
|
||||
xmedia_u8 global_alpha;
|
||||
} xmedia_tde_operation_attr;
|
||||
|
||||
/*
|
||||
* 函数功能: 初始化tde模块
|
||||
* 函数参数:
|
||||
* NA
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_READY - 驱动未加载
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 去初始化tde模块
|
||||
* 函数参数:
|
||||
* NA
|
||||
* 返回值:
|
||||
* NA
|
||||
*/
|
||||
xmedia_void xmedia_tde_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 创建一个工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输出参数, 对应job的有效句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_create_job(xmedia_s32 *handle);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加一个或多个画线任务(task)到指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* dst - 输入参数, 目标surface和目标rect
|
||||
* line - 输入参数, 线条属性信息
|
||||
* line_num - 输入参数, 线条个数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_add_task_draw_line(xmedia_s32 handle, const xmedia_tde_surface_info *dst,
|
||||
xmedia_tde_line_attr *line, xmedia_u32 line_num);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加一个快速填充任务(task)到指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* dst - 输入参数, 目标surface和目标rect
|
||||
* fill_color - 输入参数, 填充色, 固定按ARGB8888配
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_add_task_quick_fill(xmedia_s32 handle, const xmedia_tde_surface_info *dst,
|
||||
xmedia_u32 fill_color);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加一个快速拷贝任务(task)到指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* src - 输入参数, 源surface和源rect
|
||||
* dst - 输入参数, 目标surface和目标rect
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_add_task_quick_copy(xmedia_s32 handle, const xmedia_tde_surface_info *src,
|
||||
const xmedia_tde_surface_info *dst);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加一个缩放任务(task)到指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* src - 输入参数, 源surface和源rect
|
||||
* dst - 输入参数, 目标surface和目标rect
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_add_task_scale(xmedia_s32 handle, const xmedia_tde_surface_info *src,
|
||||
const xmedia_tde_surface_info *dst);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加一个旋转任务(task)到指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* src - 输入参数, 源surface和源rect
|
||||
* dst - 输入参数, 目标surface和目标rect
|
||||
* rot - 输入参数, 旋转角度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_add_task_rotation(xmedia_s32 handle, const xmedia_tde_surface_info *src,
|
||||
const xmedia_tde_surface_info *dst, xmedia_video_rotation rot);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加一个单源搬移任务(task)到指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* src - 输入参数, 源surface和源rect
|
||||
* dst - 输入参数, 目标surface和目标rect
|
||||
* fill_color - 输入参数, 可以配ARGB8888格式的填充色当做前景与背景叠加输出到目标位图
|
||||
* opt - 输入参数, 附加操作集合(alpha blending/rop/colorkey/clip/mirro/flip); opt可以为NULL
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_add_task_single_blit(xmedia_s32 handle, const xmedia_tde_surface_info *src,
|
||||
const xmedia_tde_surface_info *dst, xmedia_u32 fill_color, xmedia_tde_operation_attr *opt);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加一个双源搬移任务(task)到指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* bg - 输入参数, 背景surface和背景rect
|
||||
* fg - 输入参数, 前景surface和前景rect
|
||||
* dst - 输入参数, 目标surface和目标rect
|
||||
* opt - 输入参数, 附加操作集合(alpha blending/rop/colorkey/clip/mirro/flip);不能为NULL
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_add_task_double_blit(xmedia_s32 handle, const xmedia_tde_surface_info *bg,
|
||||
const xmedia_tde_surface_info *fg, const xmedia_tde_surface_info *dst, xmedia_tde_operation_attr *opt);
|
||||
|
||||
/*
|
||||
* 函数功能: 提交指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_submit_job(xmedia_s32 handle);
|
||||
|
||||
/*
|
||||
* 函数功能: 取消指定的工作组(job)
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
|
||||
* 注意:异步提交, 接口返回不代表硬件已经完成,可使用xmedia_vgs_wait_job同步
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_cancel_job(xmedia_s32 handle);
|
||||
|
||||
/*
|
||||
* 函数功能: 等待指定的工作组(job)完成
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_TIMEOUT - 等待超时
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_wait_job(xmedia_s32 handle, xmedia_u32 timeout);
|
||||
|
||||
/*
|
||||
* 函数功能: 指定alpha阈值
|
||||
* 函数参数:
|
||||
* value - 输入参数, alpha阈值 0~255
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_set_alpha_threshold_value(xmedia_u8 value);
|
||||
|
||||
/*
|
||||
* 函数功能: 获取alpha阈值
|
||||
* 函数参数:
|
||||
* value - 输出参数, alpha阈值 0~255
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
*/
|
||||
xmedia_s32 xmedia_tde_get_alpha_threshold_value(xmedia_u8 *value);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __XMEDIA_TDE_H__ */
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c). All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_TYPE_H__
|
||||
#define __XMEDIA_TYPE_H__
|
||||
|
||||
typedef unsigned char xmedia_uchar;
|
||||
typedef unsigned char xmedia_u8;
|
||||
typedef unsigned short xmedia_u16;
|
||||
typedef unsigned int xmedia_u32;
|
||||
typedef unsigned long long xmedia_u64;
|
||||
typedef unsigned long xmedia_ulong;
|
||||
|
||||
typedef char xmedia_char;
|
||||
typedef signed char xmedia_s8;
|
||||
typedef short xmedia_s16;
|
||||
typedef int xmedia_s32;
|
||||
typedef long long xmedia_s64;
|
||||
typedef long xmedia_slong;
|
||||
|
||||
typedef float xmedia_float;
|
||||
typedef double xmedia_double;
|
||||
|
||||
typedef void xmedia_void;
|
||||
|
||||
typedef xmedia_u32 xmedia_handle;
|
||||
|
||||
typedef xmedia_ulong xmedia_uintptr_t;
|
||||
typedef xmedia_slong xmedia_intptr_t;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_FALSE = 0,
|
||||
XMEDIA_TRUE = 1,
|
||||
} xmedia_bool;
|
||||
|
||||
#define XMEDIA_NULL 0L
|
||||
|
||||
#define XMEDIA_SUCCESS 0
|
||||
#define XMEDIA_FAILURE (-1)
|
||||
|
||||
#define XMEDIA_INVALID_HANDLE (0xffffffff)
|
||||
|
||||
#define XMEDIA_UNUSED(x) ((x) = (x))
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,277 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef XMEDIA_VB_H
|
||||
#define XMEDIA_VB_H
|
||||
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_video_common.h"
|
||||
#include "defines.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define VB_INVALID_BLKID (-1U)
|
||||
#define VB_INVALID_POOLID (-1U)
|
||||
#define VB_INVALID_HANDLE (-1U)
|
||||
#define XMEDIA_VB_MAX_COMM_POOLS 16
|
||||
|
||||
#define XMEDIA_VB_SUPPLEMENT_ISP_INFO_ENABLE 1
|
||||
#define XMEDIA_VB_SUPPLEMENT_VDEC_INFO_ENABLE (1 << 1)
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VB_MAP_MODE_NONE = 0, /* no map */
|
||||
XMEDIA_VB_MAP_MODE_NOCACHE = 1, /* no cache map */
|
||||
XMEDIA_VB_MAP_MODE_CACHED = 2, /* cached map, if you use this mode, you should flush cache by yourself */
|
||||
XMEDIA_VB_MAP_MODE_MAX
|
||||
} xmedia_vb_map_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 block_size;
|
||||
xmedia_u32 block_cnt;
|
||||
xmedia_vb_map_mode map_mode;
|
||||
xmedia_char mmz_name[MAX_MMZ_NAME_LEN];
|
||||
} xmedia_vb_pool_config;
|
||||
|
||||
typedef struct {
|
||||
/*
|
||||
* supplement_config:bit[0] 和bit[1]有效,其余为非法值。
|
||||
* bit[0]: 1表示打开ISP的内存申请开关,0表示关闭;
|
||||
* bit[1]: 1表示打开VDEC的内存申请开关,0表示关闭。
|
||||
*/
|
||||
xmedia_u32 supplement_config;
|
||||
xmedia_u32 max_pool_cnt;
|
||||
xmedia_vb_pool_config common_pool[XMEDIA_VB_MAX_COMM_POOLS];
|
||||
} xmedia_vb_config;
|
||||
|
||||
/*
|
||||
* 函数功能:VB模块初始化以及公共内存池初始化
|
||||
* 函数参数:
|
||||
* config - 输入参数,补充内存池、公共内存池的配置信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 非法参数
|
||||
* XMEDIA_ERRCODE_BUSY - 资源忙,已执行初始化
|
||||
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 创建公共内存池失败
|
||||
* 注意:
|
||||
* config->max_pool_cnt可以不配置
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_init(const xmedia_vb_config *config);
|
||||
|
||||
/*
|
||||
* 函数功能:VB模块去初始化以及公共内存池去初始化
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_BUSY - 还有vb未被释放,不能去初始化
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:打开/关闭强制销毁vb功能
|
||||
* 函数参数:
|
||||
* enable - 输入参数,打开或关闭强制销毁vb功能
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_enable_force_destroy(xmedia_bool enable);
|
||||
|
||||
/*
|
||||
* 函数功能:获取公共内存池、补充内存池属性
|
||||
* 函数参数:
|
||||
* config - 输出参数,公共内存池配置信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NOT_READY - 没有配置公共内存池,未初始化
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_get_config(xmedia_vb_config *config);
|
||||
|
||||
/*
|
||||
* 函数功能:创建模块私有内存池
|
||||
* 函数参数:
|
||||
* pool_config - 输入参数,模块私有配置信息
|
||||
* 返回值:
|
||||
* (-1U) - 无效pool_Id,函数执行失败
|
||||
* others - 新建的内存池ID
|
||||
* 注意:
|
||||
* 需要先完成初始化,xmedia_vb_init,才能创建私有内存池
|
||||
*/
|
||||
xmedia_u32 xmedia_vb_create_pool(xmedia_vb_pool_config *pool_config);
|
||||
|
||||
/*
|
||||
* 函数功能:销毁指定pool_id的内存池资源
|
||||
* 函数参数:
|
||||
* pool_id - 输入参数,需要销毁的内存池ID
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NOT_READY - VB没有初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 尝试销毁不存在的内存池
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 非法操作,尝试销毁内核态申请的私有内存池或者VB还有模块在使用
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_destroy_pool(xmedia_u32 pool_id);
|
||||
|
||||
/*
|
||||
* 函数功能:根据内存池ID或size获取内存块handle
|
||||
* 函数参数:
|
||||
* pool_id - 输入参数,需要申请的内存池ID
|
||||
* blk_size - 输入参数,需要申请的内存块大小
|
||||
* mmz_name - 输入参数,内存块所属的mmz zone名称,在根据size申请内存块时需要设置
|
||||
* 返回值:
|
||||
* (-1U) - 无效handle,函数执行失败
|
||||
* others - 内存块handle
|
||||
* 注意:
|
||||
* 如果pool_id为非法值(-1U),则从公共内存池根据blk_size获取内存块
|
||||
*/
|
||||
xmedia_handle xmedia_vb_get_block(xmedia_u32 pool_id, xmedia_u32 blk_size, xmedia_char *mmz_name);
|
||||
|
||||
/*
|
||||
* 函数功能:根据handle释放内存块到free链表
|
||||
* 函数参数:
|
||||
* handle - 输入参数,需要释放的内存块handle
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NOT_READY - VB没有初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_NOT_EXIST - 尝试释放不存在的内存块
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_release_block(xmedia_handle handle);
|
||||
|
||||
/*
|
||||
* 函数功能:根据物理地址获取对应内存块handle
|
||||
* 函数参数:
|
||||
* phy_addr - 输入参数,目标内存的物理地址
|
||||
* 返回值:
|
||||
* (-1U) - 无效handle,函数执行失败
|
||||
* others - 内存块handle
|
||||
* 注意:
|
||||
* 找到的内存块的地址范围包含目标物理地址
|
||||
*/
|
||||
xmedia_handle xmedia_vb_phy_addr_to_handle(xmedia_u64 phy_addr);
|
||||
|
||||
/*
|
||||
* 函数功能:根据内存块handle获取对应的起始物理地址
|
||||
* 函数参数:
|
||||
* handle - 输入参数,目标内存块handle
|
||||
* 返回值:
|
||||
* 非0 - 目标内存块对应的起始物理地址
|
||||
* 0 - 函数执行失败
|
||||
*/
|
||||
xmedia_u64 xmedia_vb_handle_to_phy_addr(xmedia_handle handle);
|
||||
|
||||
/*
|
||||
* 函数功能:根据内存块handle获取对应内存池ID
|
||||
* 函数参数:
|
||||
* handle - 输入参数,目标内存块handle
|
||||
* 返回值:
|
||||
* (-1U) - 函数执行失败
|
||||
* others - 目标内存池ID
|
||||
*/
|
||||
xmedia_u32 xmedia_vb_handle_to_pool_id(xmedia_handle handle);
|
||||
|
||||
/*
|
||||
* 函数功能:根据内存块handle查询当前使用者个数
|
||||
* 函数参数:
|
||||
* handle - 输入参数,目标内存块handle
|
||||
* 返回值:
|
||||
* (-1U) - 函数执行失败
|
||||
* others - 目标内存块当前使用者个数
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_inquire_user_cnt(xmedia_handle handle);
|
||||
|
||||
/*
|
||||
* 函数功能:根据句柄获取补充内存中内存块的信息
|
||||
* 函数参数:
|
||||
* handle - 输入参数,内存块句柄
|
||||
* info - 输出参数,内存块描述信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NOT_READY - VB没有初始化
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
* XMEDIA_ERRCODE_COPY_DATA_ERROR - 拷贝补充内存池信息到用户态失败
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_get_supplement_info(xmedia_handle handle, xmedia_video_private_info *info);
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VB_AINR_DIRECTION_INPUT, // npu输入
|
||||
XMEDIA_VB_AINR_DIRECTION_OUTPUT, // npu输出
|
||||
XMEDIA_VB_AINR_DIRECTION_MAX
|
||||
} xmedia_vb_ainr_direction;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool ainr_en;
|
||||
xmedia_vb_ainr_direction ainr_direction;
|
||||
} xmedia_vb_ainr_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_format video_fmt;
|
||||
xmedia_video_pixel_format pixel_fmt;
|
||||
xmedia_video_compress_mode cmp_mode;
|
||||
xmedia_video_data_width bit_width;
|
||||
|
||||
xmedia_u32 width;
|
||||
xmedia_u32 height;
|
||||
xmedia_u32 align; // 0:auto
|
||||
|
||||
xmedia_vb_ainr_attr ainr_attr;
|
||||
} xmedia_vb_base_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 vb_size;
|
||||
|
||||
xmedia_u32 head_size; //压缩头大小
|
||||
xmedia_u32 head_y_size;
|
||||
xmedia_u32 head_y_stride;
|
||||
xmedia_u32 head_c_stride;
|
||||
|
||||
xmedia_u32 main_size;//内容数据大小
|
||||
xmedia_u32 main_y_size;
|
||||
xmedia_u32 main_stride; // y stride
|
||||
xmedia_u32 c_stride;
|
||||
} xmedia_vb_cal_cfg;
|
||||
|
||||
/*
|
||||
* 函数功能:计算图像数据所需内存信息,包括内存大小,间距等
|
||||
* 函数参数:
|
||||
* vb_base_info - 输入参数,图像数据描述信息
|
||||
* vb_cal_cfg - 输出参数,计算得到的内存大小、间距等信息
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点失败
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 输入图像描述信息不支持
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数非法
|
||||
*/
|
||||
xmedia_s32 xmedia_vb_get_buffer_config(xmedia_vb_base_info* vb_base_info, xmedia_vb_cal_cfg* vb_cal_cfg);
|
||||
|
||||
/*
|
||||
* 函数功能:计算yuv格式图像数据卷绕模式下所需内存大小
|
||||
* 函数参数:
|
||||
* vb_base_info - 输入参数,图像数据描述信息
|
||||
* buffer_line - 输入参数,卷绕buffer行数
|
||||
* 返回值:
|
||||
* 0 - 函数执行失败,返回0
|
||||
* 其他值 - 函数执行成功,返回内存大小
|
||||
*/
|
||||
xmedia_u32 xmedia_vb_get_wrap_buffer_size(xmedia_vb_base_info* vb_base_info, xmedia_u32 buffer_line);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,279 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_VGS_H__
|
||||
#define __XMEDIA_VGS_H__
|
||||
|
||||
#include "xmedia_errcode.h"
|
||||
#include "xmedia_video_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define XMEDIA_VGS_CLUT_LEN 16
|
||||
#define XMEDIA_VGS_POINT_NUM 4
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_frame_info img_in;
|
||||
xmedia_video_frame_info img_out;
|
||||
} xmedia_vgs_frame_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_point start_point;
|
||||
xmedia_video_point end_point;
|
||||
xmedia_u32 thick;
|
||||
xmedia_u32 color; // 颜色值固定按照ARGB8888解析,alpha固定0xff,RGB用户可配,范围[0x0, 0x00ffffff]
|
||||
} xmedia_vgs_line_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VGS_COVER_TYPE_RECT = 0,
|
||||
XMEDIA_VGS_COVER_TYPE_QUAD_RANGLE,
|
||||
XMEDIA_VGS_COVER_TYPE_MAX
|
||||
} xmedia_vgs_cover_type;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool is_solid;
|
||||
xmedia_u32 thick;
|
||||
xmedia_video_point points[XMEDIA_VGS_POINT_NUM];
|
||||
} xmedia_vgs_quadrangle_cover;
|
||||
|
||||
typedef struct {
|
||||
xmedia_vgs_cover_type cover_type;
|
||||
union {
|
||||
xmedia_video_rect dst_rect;
|
||||
xmedia_vgs_quadrangle_cover quadrangle;
|
||||
};
|
||||
xmedia_u32 color;
|
||||
} xmedia_vgs_cover_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VGS_OSD_REVERT_MODE_RGB = 0,
|
||||
XMEDIA_VGS_OSD_REVERT_MODE_ALPHA,
|
||||
XMEDIA_VGS_OSD_REVERT_MODE_BOTH,
|
||||
XMEDIA_VGS_OSD_REVERT_MODE_MAX
|
||||
} xmedia_vgs_osd_revert_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_rect osd_rect;
|
||||
xmedia_video_pixel_format pixel_fmt;
|
||||
xmedia_u64 phys_addr;
|
||||
xmedia_u32 stride;
|
||||
xmedia_u8 alpha0; // 仅用于位图是ARGB1555的场景, alpha值为0时使用alpha0
|
||||
xmedia_u8 alpha1; // 仅用于位图是ARGB1555的场景, alpha值为1时使用alpha1
|
||||
xmedia_bool is_osd_revert;
|
||||
xmedia_vgs_osd_revert_mode revert_mode;
|
||||
xmedia_u32 clut[XMEDIA_VGS_CLUT_LEN];
|
||||
} xmedia_vgs_osd_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_size dst_img_size;
|
||||
xmedia_video_point out_block_offset;
|
||||
} xmedia_vgs_block_info;
|
||||
|
||||
/*
|
||||
* 函数功能: 初始化vgs模块
|
||||
* 函数参数:
|
||||
* NA
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_READY - 驱动未加载
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_init(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 去初始化vgs模块
|
||||
* 函数参数:
|
||||
* NA
|
||||
* 返回值:
|
||||
* NA
|
||||
*/
|
||||
xmedia_void xmedia_vgs_exit(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能: 创建job
|
||||
* 函数参数:
|
||||
* handle - 输出参数, 对应job的有效句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_create_job(xmedia_s32 *handle);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加缩放task到指定的job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* frame_info - 输入参数, 输入、输出帧信息
|
||||
* scale_mode - 输入参数, 缩放模式
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_add_task_scale(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
||||
xmedia_video_scale_mode scale_mode);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加画线task到指定的job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* frame_info - 输入参数, 输入、输出帧信息
|
||||
* line - 输入参数, 线条属性信息
|
||||
* num - 输入参数, 线条个数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_add_task_line(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
||||
const xmedia_vgs_line_attr *line, xmedia_u32 num);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加遮挡task到指定的job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* frame_info - 输入参数, 输入、输出帧信息
|
||||
* cover - 输入参数, 遮挡属性信息
|
||||
* num - 输入参数, 遮挡个数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_add_task_cover(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
||||
const xmedia_vgs_cover_attr *cover, xmedia_u32 num);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加叠加位图task到指定的job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* frame_info - 输入参数, 输入、输出帧信息
|
||||
* osd - 输入参数, 位图属性信息
|
||||
* num - 输入参数, 位图个数
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_add_task_osd(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
||||
const xmedia_vgs_osd_attr *osd, xmedia_u32 num);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加旋转task到指定的job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* frame_info - 输入参数, 输入、输出帧信息
|
||||
* rotation - 输入参数, 旋转角度
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_add_task_rotation(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
||||
xmedia_video_rotation rotation);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加亮度统计task到指定的job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* frame_info - 输入参数, 输入、输出帧信息
|
||||
* luma_rect - 输入参数, 亮度统计区域
|
||||
* num - 输入参数, 区域个数,针对luma_rect和luma_data同时生效
|
||||
* luma_data - 输出参数, 亮度统计结果
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_add_task_luma(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
||||
const xmedia_video_rect *luma_rect, xmedia_u32 num, xmedia_u64 *luma_data);
|
||||
|
||||
/*
|
||||
* 函数功能: 添加block scale task到指定的job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* frame_info - 输入参数, 输入原图(整图)、输出分块帧信息
|
||||
* block_info - 输入参数, 分块信息
|
||||
* scale_mode - 输入参数, 缩放模式
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_add_task_block_scale(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
||||
const xmedia_vgs_block_info *block_info, xmedia_video_scale_mode scale_mode);
|
||||
|
||||
/*
|
||||
* 函数功能: 提交job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_submit_job(xmedia_s32 handle);
|
||||
|
||||
/*
|
||||
* 函数功能: 取消job
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
|
||||
* 注意:异步提交, 接口返回不代表硬件已经完成,可使用xmedia_vgs_wait_job同步
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_cancel_job(xmedia_s32 handle);
|
||||
|
||||
/*
|
||||
* 函数功能: 等待job完成
|
||||
* 函数参数:
|
||||
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
||||
* 返回值:
|
||||
* XMEDIA_SUCCESS - 函数执行成功
|
||||
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
||||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||||
* XMEDIA_ERRCODE_TIMEOUT - 等待超时
|
||||
*/
|
||||
xmedia_s32 xmedia_vgs_wait_job(xmedia_s32 handle, xmedia_u32 timeout);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __XMEDIA_VGS_H__ */
|
||||
File diff suppressed because it is too large
Load Diff
Executable
+405
@@ -0,0 +1,405 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef XMEDIA_VIDEO_COMMON_H
|
||||
#define XMEDIA_VIDEO_COMMON_H
|
||||
|
||||
#include "common.h"
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define XMEDIA_VIDEO_ISP_WDR_EXP_RATIO_MAX_NUM 2
|
||||
#define XMEDIA_VIDEO_PMF_COEF_NUM 9
|
||||
#define XMEDIA_VIDEO_LDCV2_CALIBRATION_COEF_NUM 3
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_OPERATION_MODE_AUTO = 0,
|
||||
XMEDIA_VIDEO_OPERATION_MODE_MANUAL,
|
||||
XMEDIA_VIDEO_OPERATION_MODE_MAX
|
||||
} xmedia_video_operation_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_ROTATION_0 = 0x0,
|
||||
XMEDIA_VIDEO_ROTATION_90,
|
||||
XMEDIA_VIDEO_ROTATION_180,
|
||||
XMEDIA_VIDEO_ROTATION_270,
|
||||
XMEDIA_VIDEO_ROTATION_MAX
|
||||
} xmedia_video_rotation;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 x;
|
||||
xmedia_s32 y;
|
||||
} xmedia_video_point;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 width;
|
||||
xmedia_u32 height;
|
||||
} xmedia_video_size;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 x;
|
||||
xmedia_s32 y;
|
||||
xmedia_u32 width;
|
||||
xmedia_u32 height;
|
||||
} xmedia_video_rect;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_COORD_MODE_ABS = 0, // 绝对坐标
|
||||
XMEDIA_VIDEO_COORD_MODE_RATIO, // 相对坐标
|
||||
XMEDIA_VIDEO_COORD_MODE_MAX
|
||||
} xmedia_video_coord_mode;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_video_coord_mode coord_mode;
|
||||
xmedia_video_rect rect;
|
||||
} xmedia_video_crop_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 src_frm_rate;
|
||||
xmedia_s32 dst_frm_rate;
|
||||
} xmedia_video_frame_rate_ctrl;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_u32 buf_line; // wrap所需行数。用于wrap场景计算,一般buf_line = height/2
|
||||
xmedia_u32 buf_size; // wrap buf大小
|
||||
} xmedia_video_wrap_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_WDR_MODE_NONE = 0x0,
|
||||
XMEDIA_VIDEO_WDR_MODE_BUILT_IN,
|
||||
XMEDIA_VIDEO_WDR_MODE_2TO1_LINE,
|
||||
XMEDIA_VIDEO_WDR_MODE_2TO1_FRAME,
|
||||
XMEDIA_VIDEO_WDR_MODE_3TO1_LINE,
|
||||
XMEDIA_VIDEO_WDR_MODE_3TO1_FRAME,
|
||||
XMEDIA_VIDEO_WDR_MODE_4TO1_LINE,
|
||||
XMEDIA_VIDEO_WDR_MODE_4TO1_FRAME,
|
||||
XMEDIA_VIDEO_WDR_MODE_MAX,
|
||||
} xmedia_video_wdr_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_WDR_FMT_NONE = 0x0,
|
||||
XMEDIA_VIDEO_WDR_FMT_VC,
|
||||
XMEDIA_VIDEO_WDR_FMT_DOL,
|
||||
XMEDIA_VIDEO_WDR_FMT_BUILTIN,
|
||||
XMEDIA_VIDEO_WDR_FMT_MAX,
|
||||
} xmedia_video_wdr_format;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_BAYER_FMT_RGGB = 0,
|
||||
XMEDIA_VIDEO_BAYER_FMT_GRBG,
|
||||
XMEDIA_VIDEO_BAYER_FMT_GBRG,
|
||||
XMEDIA_VIDEO_BAYER_FMT_BGGR,
|
||||
|
||||
XMEDIA_VIDEO_BAYER_FMT_GRGBI,
|
||||
XMEDIA_VIDEO_BAYER_FMT_RGBGI,
|
||||
XMEDIA_VIDEO_BAYER_FMT_GBGRI,
|
||||
XMEDIA_VIDEO_BAYER_FMT_BGRGI,
|
||||
XMEDIA_VIDEO_BAYER_FMT_IGRGB,
|
||||
XMEDIA_VIDEO_BAYER_FMT_IRGBG,
|
||||
XMEDIA_VIDEO_BAYER_FMT_IBGRG,
|
||||
XMEDIA_VIDEO_BAYER_FMT_IGBGR,
|
||||
|
||||
XMEDIA_VIDEO_BAYER_FMT_RCCB,
|
||||
XMEDIA_VIDEO_BAYER_FMT_RCCG,
|
||||
XMEDIA_VIDEO_BAYER_FMT_RCCC,
|
||||
XMEDIA_VIDEO_BAYER_FMT_CCCC,
|
||||
|
||||
XMEDIA_VIDEO_BAYER_FMT_RYYC,
|
||||
XMEDIA_VIDEO_BAYER_FMT_RYYB,
|
||||
|
||||
XMEDIA_VIDEO_BAYER_FMT_RGBIR_2X2,
|
||||
XMEDIA_VIDEO_BAYER_FMT_RGBIR_4X4,
|
||||
|
||||
XMEDIA_VIDEO_BAYER_MAX
|
||||
} xmedia_video_bayer_format;
|
||||
|
||||
typedef enum {
|
||||
/* Semi-Planner */
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YUV_SEMIPLANAR_420 = 0,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YVU_SEMIPLANAR_420,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YUV_SEMIPLANAR_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YVU_SEMIPLANAR_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YUV_SEMIPLANAR_444,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YVU_SEMIPLANAR_444,
|
||||
|
||||
/* Package */
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YUYV_PACKAGE_422 = 0x40,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YVYU_PACKAGE_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_UYVY_PACKAGE_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_VYUY_PACKAGE_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YYUV_PACKAGE_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YYVU_PACKAGE_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_UVYY_PACKAGE_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_VUYY_PACKAGE_422,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_VY1UY0_PACKAGE_422,
|
||||
|
||||
/*yuv 400 */
|
||||
XMEDIA_VIDEO_PIXEL_FMT_YUV_400 = 0x90,
|
||||
|
||||
/*RGB*/
|
||||
XMEDIA_VIDEO_PIXEL_FMT_ARGB_1555 = 0xC0,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_ARGB_4444,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_ARGB_8888,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_ABGR_1555,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_ABGR_4444,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_ABGR_8888,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_RGBA_1555,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_RGBA_4444,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_RGBA_8888,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_BGRA_1555,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_BGRA_4444,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_BGRA_8888,
|
||||
|
||||
XMEDIA_VIDEO_PIXEL_FMT_RGB_565,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_RGB_888,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_BGR_565,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_BGR_888,
|
||||
|
||||
/*CLUT*/
|
||||
XMEDIA_VIDEO_PIXEL_FMT_CLUT2 = 0x100,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_CLUT4,
|
||||
XMEDIA_VIDEO_PIXEL_FMT_CLUT8,
|
||||
|
||||
/*RAW*/
|
||||
XMEDIA_VIDEO_PIXEL_FMT_RAW = 0x110,
|
||||
|
||||
XMEDIA_VIDEO_PIXEL_FMT_MAX = 0x120
|
||||
} xmedia_video_pixel_format;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_FMT_LINEAR = 0x0,
|
||||
XMEDIA_VIDEO_FMT_TILE_16x4,
|
||||
XMEDIA_VIDEO_FMT_TILE_32x4,
|
||||
XMEDIA_VIDEO_FMT_TILE_64x4,
|
||||
XMEDIA_VIDEO_FMT_TILE_64x64,
|
||||
XMEDIA_VIDEO_FMT_MAX
|
||||
} xmedia_video_format;
|
||||
|
||||
/*维度:
|
||||
*yuv、RGB、RAW
|
||||
*有损/无损,
|
||||
*行、帧、段紧凑、段非紧凑
|
||||
*/
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_COMPRESS_MODE_NONE = 0x0,
|
||||
XMEDIA_VIDEO_COMPRESS_MODE_LINE, // 3DNR 使用行压缩
|
||||
XMEDIA_VIDEO_COMPRESS_MODE_FRAME,
|
||||
XMEDIA_VIDEO_COMPRESS_MODE_SEG,
|
||||
XMEDIA_VIDEO_COMPRESS_MODE_TILE, // tile非紧凑压缩
|
||||
XMEDIA_VIDEO_COMPRESS_MODE_SLICE,
|
||||
XMEDIA_VIDEO_COMPRESS_MODE_TILE_COMPACT, // tile紧凑压缩
|
||||
|
||||
XMEDIA_VIDEO_COMPRESS_MODE_MAX
|
||||
} xmedia_video_compress_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_COLOR_SPACE_YUV = 0x0,
|
||||
XMEDIA_VIDEO_COLOR_SPACE_RGB,
|
||||
XMEDIA_VIDEO_COLOR_SPACE_MAX
|
||||
} xmedia_video_color_space;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_COLOR_GAMUT_BT601 = 0x0,
|
||||
XMEDIA_VIDEO_COLOR_GAMUT_BT709,
|
||||
XMEDIA_VIDEO_COLOR_GAMUT_BT2020,
|
||||
XMEDIA_VIDEO_COLOR_GAMUT_USER,
|
||||
XMEDIA_VIDEO_COLOR_GAMUT_MAX
|
||||
} xmedia_video_color_gamut;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_COLOR_LIMITED_RANGE = 0x0,
|
||||
XMEDIA_VIDEO_COLOR_FULL_RANGE,
|
||||
XMEDIA_VIDEO_COLOR_RANGE_MAX
|
||||
} xmedia_video_color_quantify_range;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_color_space color_space;
|
||||
xmedia_video_color_gamut color_gamut;
|
||||
xmedia_video_color_quantify_range quantify_range;
|
||||
} xmedia_video_color_descript;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_DYNAMIC_RANGE_SDR = 0x0,
|
||||
XMEDIA_VIDEO_DYNAMIC_RANGE_HDR10,
|
||||
XMEDIA_VIDEO_DYNAMIC_RANGE_HLG,
|
||||
XMEDIA_VIDEO_DYNAMIC_RANGE_MAX
|
||||
} xmedia_video_dynamic_range;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_DATA_WIDTH_8 = 0x0,
|
||||
XMEDIA_VIDEO_DATA_WIDTH_10,
|
||||
XMEDIA_VIDEO_DATA_WIDTH_12,
|
||||
XMEDIA_VIDEO_DATA_WIDTH_14,
|
||||
XMEDIA_VIDEO_DATA_WIDTH_16,
|
||||
XMEDIA_VIDEO_DATA_WIDTH_MAX
|
||||
} xmedia_video_data_width;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 iso;
|
||||
xmedia_u32 exposure_time;
|
||||
xmedia_u32 exposure_bias_value; // 曝光补偿
|
||||
xmedia_u8 exposure_program;
|
||||
xmedia_u8 exposure_mode; // 曝光模式:0-自动曝光,1-手动曝光
|
||||
xmedia_u32 exposure_ratio[VI_MAX_WDR_NUM - 1];
|
||||
xmedia_u32 isp_dgain;
|
||||
xmedia_u32 isp_nr_strength;
|
||||
xmedia_u32 sensor_id;
|
||||
xmedia_u32 sensor_mode;
|
||||
xmedia_u32 sensor_hmax;
|
||||
xmedia_u32 sensor_vmax;
|
||||
xmedia_u32 sensor_again;
|
||||
xmedia_u32 sensor_dgain;
|
||||
xmedia_u32 f_number;
|
||||
xmedia_u32 max_aperture_value; // 最大光圈值
|
||||
xmedia_u8 white_balance_mode; // 白平衡模式:0-自动白平衡,1-手动白平衡
|
||||
xmedia_u32 vc_num;
|
||||
xmedia_video_bayer_format bayer_format;
|
||||
xmedia_video_color_gamut color_gamut;
|
||||
xmedia_video_color_quantify_range color_quantify_range;
|
||||
xmedia_u64 private_data;
|
||||
} xmedia_video_isp_frame_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u16 top_offset;
|
||||
xmedia_u16 left_offset;
|
||||
xmedia_u16 bottom_offset;
|
||||
xmedia_u16 right_offset;
|
||||
xmedia_u32 max_luma;
|
||||
xmedia_u32 min_luma;
|
||||
xmedia_u64 private_data;
|
||||
} xmedia_video_vdec_frame_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u64 isp_info_phy_addr;
|
||||
xmedia_u64 lowdelay_info_phy_addr;
|
||||
xmedia_u64 vdec_info_phy_addr;
|
||||
|
||||
xmedia_void *ATTRIBUTE isp_info_vir_addr;
|
||||
xmedia_void *ATTRIBUTE lowdelay_info_vir_addr;
|
||||
xmedia_void *ATTRIBUTE vdec_info_vir_addr;
|
||||
} xmedia_video_private_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u64 y_head_phy_addr;
|
||||
xmedia_u64 c_head_phy_addr;
|
||||
xmedia_u64 y_phy_addr;
|
||||
xmedia_u64 c_phy_addr;
|
||||
// xmedia_u64 y_buf_phy_addr; // luma buffer start phy addr
|
||||
// xmedia_u64 c_buf_phy_addr; // chroma buffer start phy addr
|
||||
// xmedia_u32 y_size; // luma buffer size
|
||||
// xmedia_u32 c_size; // chroma buffer size
|
||||
} xmedia_video_frame_address;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 y_head_stride;
|
||||
xmedia_u32 c_head_stride;
|
||||
xmedia_u32 y_stride;
|
||||
xmedia_u32 c_stride;
|
||||
} xmedia_video_frame_stride;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 index;
|
||||
|
||||
xmedia_u32 width;
|
||||
xmedia_u32 height;
|
||||
xmedia_video_frame_address addr;
|
||||
xmedia_video_frame_stride stride;
|
||||
|
||||
xmedia_video_data_width bit_width;
|
||||
xmedia_video_pixel_format pixel_fmt;
|
||||
xmedia_video_compress_mode compress_mode;
|
||||
xmedia_video_format video_fmt;
|
||||
|
||||
xmedia_video_dynamic_range dynamic_range;
|
||||
xmedia_video_color_descript color_info;
|
||||
|
||||
xmedia_u64 pts;
|
||||
xmedia_u32 time_ref;
|
||||
xmedia_u32 frame_flag;
|
||||
xmedia_video_private_info priv_info;
|
||||
} xmedia_video_frame;
|
||||
|
||||
typedef struct {
|
||||
xmedia_video_frame frame;
|
||||
xmedia_u32 pool_id;
|
||||
xmedia_mod_id mod_id;
|
||||
} xmedia_video_frame_info;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_LDC_V1 = 0,
|
||||
XMEDIA_VIDEO_LDC_V2,
|
||||
XMEDIA_VIDEO_LDC_MAX,
|
||||
} xmedia_video_ldc_version;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool aspect; // 视野调整过程中是否保持幅型比
|
||||
xmedia_s32 x_ratio; // [0,100]X方向视野大小参数,aspect = 0时有效
|
||||
xmedia_s32 y_ratio; // [0,100]Y方向视野大小参数,aspect = 0时有效
|
||||
xmedia_s32 xy_ratio; // [0,100]视野大小参数,aspect = 1时有效
|
||||
xmedia_s32 center_xoffset; // [-500,500]图像中心点相对于物理中心点的水平偏移
|
||||
xmedia_s32 center_yoffset; // [-500,500]图像中心点相对于物理中心点的垂直偏移
|
||||
xmedia_s32 distortion_ratio; // [-300,500]校正强度,负数为枕型,正数为桶型
|
||||
} xmedia_video_ldcv1_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 focal_len_x; // 水平方向镜头有效焦距
|
||||
xmedia_s32 focal_len_y; // 垂直方向镜头有效焦距
|
||||
xmedia_s32 coor_shift_x; // 光心X坐标
|
||||
xmedia_s32 coor_shift_y; // 光心Y坐标
|
||||
xmedia_s32 src_calibration_ratio[XMEDIA_VIDEO_LDCV2_CALIBRATION_COEF_NUM]; // 镜头畸变系数
|
||||
} xmedia_video_ldcv2_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_video_ldc_version version;
|
||||
union {
|
||||
xmedia_video_ldcv1_attr ldcv1_attr;
|
||||
xmedia_video_ldcv2_attr ldcv2_attr;
|
||||
};
|
||||
} xmedia_video_ldc_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_STITCH_MODE_PLANE_PROJECTION = 0, // 平面投影
|
||||
XMEDIA_VIDEO_STITCH_MODE_CYLINDER_PROJECTION = 1, // 柱面投影
|
||||
XMEDIA_VIDEO_STITCH_MODE_MAX
|
||||
} xmedia_video_stitch_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_MCF_HIST_ADJ_MODE_NON = 0, // 不做调整
|
||||
XMEDIA_VIDEO_MCF_HIST_ADJ_MODE_COLOR, // 对彩色路图像做直方图调整
|
||||
XMEDIA_VIDEO_MCF_HIST_ADJ_MODE_MONO, // 对黑白路图像做直方图调整
|
||||
XMEDIA_VIDEO_MCF_HIST_ADJ_MODE_MAX,
|
||||
} xmedia_video_mcf_hist_adj_mode;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_VB_SOURCE_COMMON = 0,
|
||||
XMEDIA_VIDEO_VB_SOURCE_PRIVATE,
|
||||
XMEDIA_VIDEO_VB_SOURCE_USER,
|
||||
XMEDIA_VIDEO_VB_SOURCE_MAX
|
||||
} xmedia_video_vb_source;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable; // 拼接亮度同步使能
|
||||
xmedia_s32 vi_grp; // 拼接业务对应的vi_grp号
|
||||
xmedia_u32 frame_interval; // 拼接亮度同步时间间隔
|
||||
xmedia_u32 smooth_str; // 垂直滤波窗口大小。取值范围[1,16]。该值越大,亮度矫正表垂直滤波窗口越大,过渡越平滑。
|
||||
xmedia_u32 shading_adjust_thr; // 增益可调节限制范围。取值范围[0,255]。
|
||||
} xmedia_video_stitch_luma_sync_attr;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_VIDEO_SCALE_MODE_NORMAL = 0,
|
||||
XMEDIA_VIDEO_SCALE_MODE_BILINEAR, // 双线性插值
|
||||
XMEDIA_VIDEO_SCALE_MODE_MAX
|
||||
} xmedia_video_scale_mode;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
Executable
+1160
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user