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

362 lines
11 KiB
C

/*
* Copyright (c) 2021 Rockchip, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __RKADK_COMMON_H__
#define __RKADK_COMMON_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "rk_mpi_vi.h"
#include "rkadk_log.h"
#include <pthread.h>
#include <stdbool.h>
// dump isp process result
//#define RKADK_DUMP_ISP_RESULT
// camera sensor count
#define RKADK_MAX_SENSOR_CNT 3
// simultaneous record files num
#define RECORD_FILE_NUM_MAX 2
#define RKADK_MAX_FILE_PATH_LEN 128
#define RKADK_PIX_FMT_LEN 32
#define RKADK_INTF_FMT_LEN 32
#define RKADK_SPLICE_MODE_LEN 10
#define RKADK_THREAD_NAME_LEN 32
#define JPEG_SLICE_WIDTH_MAX 8192
#define JPEG_SLICE_HEIGHT_MAX 8192
#define RKADK_BUFFER_LEN 64
#define RKADK_PATH_LEN 128
#define RKADK_RC_MODE_LEN 5
typedef unsigned char RKADK_U8;
typedef unsigned short RKADK_U16;
typedef unsigned int RKADK_U32;
typedef char RKADK_S8;
typedef short RKADK_S16;
typedef int RKADK_S32;
typedef unsigned long RKADK_UL;
typedef signed long RKADK_SL;
typedef float RKADK_FLOAT;
typedef double RKADK_DOUBLE;
#ifndef _M_IX86
typedef unsigned long long RKADK_U64;
typedef long long RKADK_S64;
#else
typedef unsigned __int64 RKADK_U64;
typedef __int64 RKADK_S64;
#endif
typedef char RKADK_CHAR;
#define RKADK_VOID void
typedef unsigned int RKADK_HANDLE;
typedef RKADK_VOID *RKADK_MW_PTR;
typedef char (*ARRAY_FILE_NAME)[RKADK_MAX_FILE_PATH_LEN];
typedef enum {
RKADK_FALSE = 0,
RKADK_TRUE = 1,
} RKADK_BOOL;
typedef enum {
RKADK_THUMB_TYPE_NV12 = 0,
RKADK_THUMB_TYPE_JPEG,
RKADK_THUMB_TYPE_RGB565,
RKADK_THUMB_TYPE_RGBA8888,
RKADK_THUMB_TYPE_BGRA8888
} RKADK_THUMB_TYPE_E;
typedef struct {
RKADK_U32 u32X;
RKADK_U32 u32Y;
RKADK_U32 u32Width;
RKADK_U32 u32Height;
} RKADK_RECT_S;
typedef struct {
RKADK_THUMB_TYPE_E enType;
// 4 alignment
RKADK_U32 u32Width;
// 2 alignment
RKADK_U32 u32Height;
// 4 alignment
RKADK_U32 u32VirWidth;
// 2 alignment
RKADK_U32 u32VirHeight;
RKADK_U8 *pu8Buf;
RKADK_U32 u32BufSize;
RKADK_S32 s32VdecChn;
RKADK_S32 s32VpssGrp;
RKADK_S32 s32VpssChn;
} RKADK_THUMB_ATTR_S;
typedef RKADK_THUMB_ATTR_S RKADK_FRAME_ATTR_S;
typedef enum {
RKADK_MIC_TYPE_LEFT = 0,
RKADK_MIC_TYPE_RIGHT,
RKADK_MIC_TYPE_BOTH,
RKADK_MIC_TYPE_BUTT
} RKADK_MIC_TYPE_E;
typedef enum {
RKADK_CODEC_TYPE_H264 = 0,
RKADK_CODEC_TYPE_H265,
RKADK_CODEC_TYPE_MJPEG,
RKADK_CODEC_TYPE_JPEG,
RKADK_CODEC_TYPE_G711A,
RKADK_CODEC_TYPE_G711U,
RKADK_CODEC_TYPE_G726,
RKADK_CODEC_TYPE_MP2,
RKADK_CODEC_TYPE_MP3,
RKADK_CODEC_TYPE_ACC,
RKADK_CODEC_TYPE_PCM,
RKADK_CODEC_TYPE_BUTT
} RKADK_CODEC_TYPE_E;
typedef enum {
RKADK_VQE_MODE_AI_TALK = 0,
RKADK_VQE_MODE_AI_RECORD,
RKADK_VQE_MODE_BUTT
} RKADK_VQE_MODE_E;
typedef enum {
RKADK_STREAM_TYPE_SENSOR,
RKADK_STREAM_TYPE_VIDEO_MAIN,
RKADK_STREAM_TYPE_VIDEO_SUB,
RKADK_STREAM_TYPE_SNAP,
RKADK_STREAM_TYPE_PREVIEW,
RKADK_STREAM_TYPE_LIVE,
RKADK_STREAM_TYPE_DISP,
RKADK_STREAM_TYPE_THUMB,
RKADK_STREAM_TYPE_BUTT
} RKADK_STREAM_TYPE_E;
typedef enum {
RKADK_FMT_ARGB1555, /* 16-bit RGB */
RKADK_FMT_ABGR1555, /* 16-bit RGB */
RKADK_FMT_RGBA5551, /* 16-bit RGB */
RKADK_FMT_BGRA5551, /* 16-bit RGB */
RKADK_FMT_ARGB4444, /* 16-bit RGB */
RKADK_FMT_ABGR4444, /* 16-bit RGB */
RKADK_FMT_RGBA4444, /* 16-bit RGB */
RKADK_FMT_BGRA4444, /* 16-bit RGB */
RKADK_FMT_ARGB8888, /* 32-bit RGB */
RKADK_FMT_ABGR8888, /* 32-bit RGB */
RKADK_FMT_RGBA8888, /* 32-bit RGB */
RKADK_FMT_BGRA8888, /* 32-bit RGB */
RKADK_FMT_RGB565, /* 16-bit RGB */
RKADK_FMT_BGR565, /* 16-bit RGB */
RKADK_FMT_2BPP,
RKADK_FMT_YUV420SP,
RKADK_FMT_YUV420SP_10BIT,
RKADK_FMT_YUV422SP,
RKADK_FMT_YUV420SP_VU,
RKADK_FMT_YUV422_UYVY,
RKADK_FMT_YUV422_VYUY,
RKADK_FMT_BUTT,
} RKADK_FORMAT_E;
typedef enum {
VO_FORMAT_ARGB8888 = 0,
VO_FORMAT_ABGR8888,
VO_FORMAT_RGB888,
VO_FORMAT_BGR888,
VO_FORMAT_ARGB1555,
VO_FORMAT_ABGR1555,
VO_FORMAT_RGB565,
VO_FORMAT_BGR565,
VO_FORMAT_RGB444,
VO_FORMAT_NV12,
VO_FORMAT_NV21
} RKADK_VO_FORMAT_E;
typedef enum {
SPLICE_MODE_RGA = 0,
SPLICE_MODE_GPU,
SPLICE_MODE_BYPASS
} RKADK_VO_SPLICE_MODE_E;
typedef enum {
DISPLAY_TYPE_HDMI = 0,
DISPLAY_TYPE_EDP,
DISPLAY_TYPE_VGA,
DISPLAY_TYPE_DP,
DISPLAY_TYPE_HDMI_EDP,
DISPLAY_TYPE_MIPI,
DISPLAY_TYPE_LCD,
DISPLAY_TYPE_DEFAULT,
} RKADK_VO_INTF_TYPE_E;
typedef enum {
RKADK_DECODE_MODE_FRAME = 0,
RKADK_DECODE_MODE_STREAM,
RKADK_DECODE_MODE_FRAME_SLICE,
RKADK_DECODE_MODE_SLICE,
RKADK_DECODE_MODE_COMPAT,
RKADK_DECODE_MODE_BUTT,
} RKADK_VDEC_DECODE_MODE_E;
typedef struct tagRKADK_PARAM_VENC_PARAM_S {
/* rc param */
RKADK_S32 first_frame_qp; /* start QP value of the first frame */
RKADK_S32 qp_step;
RKADK_S32 max_qp; /* max QP: [8, 51] */
RKADK_S32 min_qp; /* min QP: [0, 48], can't be larger than max_qp */
RKADK_S32 frame_min_qp; /* range:[0, 51]; the frame min QP value, recommended larger than min_qp */
RKADK_S32 i_min_qp; /* min qp for i frame */
RKADK_S32 i_frame_min_qp; /* range:[0, 51]; the I frame min QP value, recommended larger than i_min_qp */
bool hier_qp_en;
char hier_qp_delta[RKADK_BUFFER_LEN];
char hier_frame_num[RKADK_BUFFER_LEN];
bool full_range;
bool scaling_list;
} RKADK_PARAM_VENC_PARAM_S;
typedef struct tagRKADK_PARAM_VENC_ATTR_S {
RKADK_U32 max_width;
RKADK_U32 max_height;
RKADK_U32 width;
RKADK_U32 height;
RKADK_U32 bufsize;
RKADK_U32 bitrate;
RKADK_U32 framerate;
RKADK_U32 gop;
RKADK_U32 profile;
RKADK_CODEC_TYPE_E codec_type;
RKADK_U32 venc_chn;
bool enable_vpss;
RKADK_U32 vpss_grp;
RKADK_U32 vpss_chn;
bool post_aiisp;
char rc_mode[RKADK_RC_MODE_LEN]; /* options: CBR/VBR/AVBR */
RKADK_PARAM_VENC_PARAM_S venc_param;
} RKADK_PARAM_VENC_ATTR_S;
typedef struct {
RKADK_U32 index;
RKADK_U32 u32ViChn;
VI_CHN_ATTR_S stChnAttr;
} RKADK_PRAAM_VI_ATTR_S;
#ifndef NULL
#define NULL 0L
#endif
#define RKADK_NULL 0L
#define RKADK_SUCCESS 0
#define RKADK_FAILURE (-1)
#define RKADK_PARAM_NOT_EXIST (-2)
#define RKADK_STATE_ERR (-3)
#define RKADK_ABS(x) ((x) < (0) ? -(x) : (x))
#ifndef UPALIGNTO
#define UPALIGNTO(value, align) (((value) + (align) - 1) / (align) * (align))
#endif
/* Pointer Check */
#define RKADK_CHECK_POINTER(p, errcode) \
do { \
if (!(p)) { \
RKADK_LOGE("pointer[%s] is NULL", #p); \
return errcode; \
} \
} while (0)
/* Pointer Check */
#define RKADK_CHECK_POINTER_N(p) \
do { \
if (!(p)) { \
RKADK_LOGE("pointer[%s] is NULL", #p); \
return; \
} \
} while (0)
/* CameraID Check */
#define RKADK_CHECK_CAMERAID(id, errcode) \
do { \
if ((id) >= RKADK_MAX_SENSOR_CNT) { \
RKADK_LOGE("invalid camera id: %d", id); \
return errcode; \
} \
} while (0)
/* Init Check */
#define RKADK_CHECK_INIT(init, errcode) \
do { \
if (!(init)) { \
RKADK_LOGE("[%s] not init", #init); \
return errcode; \
} \
} while (0)
/* Mutex Lock */
#define RKADK_MUTEX_INIT_LOCK(mutex) \
do { \
(RKADK_VOID) pthread_mutex_init(&mutex, NULL); \
} while (0)
#define RKADK_MUTEX_LOCK(mutex) \
do { \
(RKADK_VOID) pthread_mutex_lock(&mutex); \
} while (0)
#define RKADK_MUTEX_UNLOCK(mutex) \
do { \
(RKADK_VOID) pthread_mutex_unlock(&mutex); \
} while (0)
#define RKADK_MUTEX_DESTROY(mutex) \
do { \
(RKADK_VOID) pthread_mutex_destroy(&mutex); \
} while (0)
#define RKADK_CHECK_EQUAL(a, b, mutex, ret) \
do { \
if (a == b) { \
RKADK_MUTEX_UNLOCK(mutex); \
return ret; \
} \
} while (0)
#define RKADK_SWAP16(x) \
(((RKADK_U16)(x)&0x00ff) << 8) | (((RKADK_U16)(x)&0xff00) >> 8)
#define RKADK_SWAP32(x) \
((((RKADK_U32)(x) & (0xff000000)) >> 24) | \
(((RKADK_U32)(x) & (0x00ff0000)) >> 8) | \
(((RKADK_U32)(x) & (0x0000ff00)) << 8) | \
(((RKADK_U32)(x) & (0x000000ff)) << 24))
#ifdef __cplusplus
}
#endif
#endif