362 lines
11 KiB
C
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
|