406 lines
12 KiB
C
Executable File
406 lines
12 KiB
C
Executable File
/*
|
|
* 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
|