ss928_framework/ss928sdk/include/ot_common_venc.h
2024-12-16 13:31:45 +08:00

919 lines
26 KiB
C
Executable File

/*
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
*/
#ifndef OT_COMMON_VENC_H
#define OT_COMMON_VENC_H
#include "ot_common_rc.h"
#include "ot_common.h"
#include "ot_common_video.h"
#include "ot_common_vb.h"
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif
/* invalid channel ID */
#define OT_ERR_VENC_INVALID_CHN_ID OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_INVALID_CHN_ID)
/* at least one parameter is illagal ,eg, an illegal enumeration value */
#define OT_ERR_VENC_ILLEGAL_PARAM OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_ILLEGAL_PARAM)
/* channel exists */
#define OT_ERR_VENC_EXIST OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_EXIST)
/* channel exists */
#define OT_ERR_VENC_UNEXIST OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_UNEXIST)
/* using a NULL pointer */
#define OT_ERR_VENC_NULL_PTR OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_NULL_PTR)
/* try to enable or initialize system,device or channel, before configing attribute */
#define OT_ERR_VENC_NOT_CFG OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_CFG)
/* operation is not supported by NOW */
#define OT_ERR_VENC_NOT_SUPPORT OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_SUPPORT)
/* operation is not permitted ,eg, try to change statuses attribute */
#define OT_ERR_VENC_NOT_PERM OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_PERM)
/* failure caused by malloc memory */
#define OT_ERR_VENC_NO_MEM OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_NO_MEM)
/* failure caused by malloc buffer */
#define OT_ERR_VENC_NO_BUF OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_NO_BUF)
/* no data in buffer */
#define OT_ERR_VENC_BUF_EMPTY OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_BUF_EMPTY)
/* no buffer for new data */
#define OT_ERR_VENC_BUF_FULL OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_BUF_FULL)
/* system is not ready,had not initialed or loaded */
#define OT_ERR_VENC_SYS_NOT_READY OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_READY)
/* system is busy */
#define OT_ERR_VENC_BUSY OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_BUSY)
/* buf size not enough */
#define OT_ERR_VENC_SIZE_NOT_ENOUGH OT_DEFINE_ERR(OT_ID_VENC, OT_ERR_LEVEL_ERROR, OT_ERR_SIZE_NOT_ENOUGH)
#define OT_VENC_MAX_PACK_INFO_NUM 8
#define OT_VENC_MAX_MPF_NUM 2
#define OT_VENC_PRORES_MAX_ID_CHAR_NUM 4
#define OT_VENC_MAX_HIERARCHY_NUM 4
#define OT_VENC_SCALING_LIST_SIZE_16 16
#define OT_VENC_SCALING_LIST_SIZE_64 64
#define OT_VENC_JPEG_QT_COEF_NUM 64
#define OT_VENC_MJPEG_QT_COEF_NUM OT_VENC_JPEG_QT_COEF_NUM
#define OT_VENC_QP_HIST_NUM 52
#define OT_VENC_MAX_ROI_NUM 8
#define OT_VENC_MAX_JPEG_ROI_NUM 16
#define OT_VENC_MAX_SSE_NUM 8
#define OT_VENC_MD_THRESHOLD_NUM 3
#define OT_VENC_MD_LEVEL_NUM 4
#define OT_VENC_MAX_SVC_RECT_NUM 32
#define OT_VENC_MAX_MOSAIC_RECT_NUM 200
#define OT_VENC_MAX_FRAME_NUM 2
#define OT_VENC_MB_SIZE 16
typedef enum {
OT_VENC_RECV_SRC0 = 0,
OT_VENC_RECV_SRC1,
OT_VENC_RECV_SRC2,
OT_VENC_RECV_SRC3,
OT_VENC_RECV_BUTT
} ot_venc_recv_src;
typedef enum {
OT_VENC_H264_NALU_B_SLICE = 0,
OT_VENC_H264_NALU_P_SLICE = 1,
OT_VENC_H264_NALU_I_SLICE = 2,
OT_VENC_H264_NALU_IDR_SLICE = 5,
OT_VENC_H264_NALU_SEI = 6,
OT_VENC_H264_NALU_SPS = 7,
OT_VENC_H264_NALU_PPS = 8,
OT_VENC_H264_NALU_BUTT
} ot_venc_h264_nalu_type;
typedef enum {
OT_VENC_H265_NALU_B_SLICE = 0,
OT_VENC_H265_NALU_P_SLICE = 1,
OT_VENC_H265_NALU_I_SLICE = 2,
OT_VENC_H265_NALU_IDR_SLICE = 19,
OT_VENC_H265_NALU_VPS = 32,
OT_VENC_H265_NALU_SPS = 33,
OT_VENC_H265_NALU_PPS = 34,
OT_VENC_H265_NALU_SEI = 39,
OT_VENC_H265_NALU_ENHANCE = 64,
OT_VENC_H265_NALU_BUTT
} ot_venc_h265_nalu_type;
typedef enum {
OT_VENC_H264_REF_SLICE_FOR_1X = 1,
OT_VENC_H264_REF_SLICE_FOR_2X = 2,
OT_VENC_H264_REF_SLICE_FOR_4X = 5,
OT_VENC_H264_REF_SLICE_FOR_BUTT
} ot_venc_h264_ref_slice_type;
typedef enum {
OT_VENC_JPEG_PACK_ECS = 5,
OT_VENC_JPEG_PACK_APP = 6,
OT_VENC_JPEG_PACK_VDO = 7,
OT_VENC_JPEG_PACK_PIC = 8,
OT_VENC_JPEG_PACK_DCF = 9,
OT_VENC_JPEG_PACK_DCF_PIC = 10,
OT_VENC_JPEG_PACK_BUTT
} ot_venc_jpege_pack_type;
typedef enum {
OT_VENC_PRORES_PACK_PIC = 1,
OT_VENC_PRORES_PACK_BUTT
} ot_venc_prores_pack_type;
typedef enum {
OT_VENC_MOSAIC_MODE_RECT = 0, /* user input mosaic rect */
OT_VENC_MOSAIC_MODE_MAP, /* user input mosaic map */
OT_VENC_MOSAIC_MODE_BUTT
} ot_venc_mosaic_mode;
typedef union {
ot_venc_h264_nalu_type h264_type; /* AUTO:ot_payload_type:OT_PT_H264; */
ot_venc_jpege_pack_type jpeg_type; /* AUTO:ot_payload_type:OT_PT_JPEG; */
ot_venc_h265_nalu_type h265_type; /* AUTO:ot_payload_type:OT_PT_H265; */
ot_venc_prores_pack_type prores_type; /* AUTO:ot_payload_type:OT_PT_PRORES; */
} ot_venc_data_type;
typedef struct {
ot_venc_data_type pack_type;
td_u32 pack_offset;
td_u32 pack_len;
} ot_venc_pack_info;
typedef struct {
td_phys_addr_t phys_addr;
td_u8 ATTRIBUTE *addr;
td_u32 ATTRIBUTE len;
td_u64 pts;
td_bool is_frame_end;
ot_venc_data_type data_type;
td_u32 offset;
td_u32 data_num;
ot_venc_pack_info pack_info[OT_VENC_MAX_PACK_INFO_NUM];
} ot_venc_pack;
/* Defines the frame type and reference attributes of the H.264 frame skipping reference streams */
typedef enum {
OT_VENC_BASE_IDR_SLICE = 0, /* the Idr frame at Base layer */
OT_VENC_BASE_P_SLICE_REF_TO_IDR, /* the P frame at Base layer, referenced by other frames
* at Base layer and reference to Idr frame
*/
OT_VENC_BASE_P_SLICE_REF_BY_BASE, /* the P frame at Base layer, referenced by other frames
* at Base layer
*/
OT_VENC_BASE_P_SLICE_REF_BY_ENHANCE, /* the P frame at Base layer, referenced by other frames
* at Enhance layer
*/
OT_VENC_ENHANCE_P_SLICE_REF_BY_ENHANCE, /* the P frame at Enhance layer, referenced by other frames
* at Enhance layer
*/
OT_VENC_ENHANCE_P_SLICE_NOT_FOR_REF, /* the P frame at Enhance layer ,not referenced */
OT_VENC_P_SLICE_BUTT
} ot_venc_ref_type;
typedef struct {
td_u32 pic_bytes;
td_u32 inter16x16_mb_num;
td_u32 inter8x8_mb_num;
td_u32 intra16_mb_num;
td_u32 intra8_mb_num;
td_u32 intra4_mb_num;
ot_venc_ref_type ref_type;
td_u32 update_attr_cnt;
td_u32 start_qp;
td_u32 mean_qp;
td_bool is_p_skip;
} ot_venc_h264_stream_info;
typedef struct {
td_u32 pic_bytes;
td_u32 inter64x64_cu_num;
td_u32 inter32x32_cu_num;
td_u32 inter16x16_cu_num;
td_u32 inter8x8_cu_num;
td_u32 intra32x32_cu_num;
td_u32 intra16x16_cu_num;
td_u32 intra8x8_cu_num;
td_u32 intra4x4_cu_num;
ot_venc_ref_type ref_type;
td_u32 update_attr_cnt;
td_u32 start_qp;
td_u32 mean_qp;
td_bool is_p_skip;
} ot_venc_h265_stream_info;
typedef struct {
td_bool enable;
td_u64 sse_val;
} ot_venc_sse_info;
typedef struct {
td_u32 residual_bits;
td_u32 head_bits;
td_u32 madi_val;
td_u32 madp_val;
td_double psnr_val;
td_u32 sse_lcu_cnt;
td_u64 sse_sum;
ot_venc_sse_info sse_info[OT_VENC_MAX_SSE_NUM];
td_u32 qp_hist[OT_VENC_QP_HIST_NUM];
td_u32 move_scene16x16_num;
td_u32 move_scene_bits;
} ot_venc_h264_adv_stream_info;
typedef struct {
td_u32 residual_bits;
td_u32 head_bits;
td_u32 madi_val;
td_u32 madp_val;
td_double psnr_val;
td_u32 sse_lcu_cnt;
td_u64 sse_sum;
ot_venc_sse_info sse_info[OT_VENC_MAX_SSE_NUM];
td_u32 qp_hist[OT_VENC_QP_HIST_NUM];
td_u32 move_scene32x32_num;
td_u32 move_scene_bits;
} ot_venc_h265_adv_stream_info;
typedef struct {
td_u32 pic_bytes;
td_u32 update_attr_cnt;
} ot_venc_prores_stream_info;
typedef struct {
td_u32 pic_bytes;
td_u32 update_attr_cnt;
td_u32 qfactor;
} ot_venc_jpeg_stream_info;
typedef struct {
ot_venc_pack ATTRIBUTE *pack;
td_u32 ATTRIBUTE pack_cnt;
td_u32 seq;
union {
ot_venc_h264_stream_info h264_info; /* AUTO:ot_payload_type:OT_PT_H264; */
ot_venc_jpeg_stream_info jpeg_info; /* AUTO:ot_payload_type:OT_PT_JPEG; */
ot_venc_h265_stream_info h265_info; /* AUTO:ot_payload_type:OT_PT_H265; */
ot_venc_prores_stream_info prores_info; /* AUTO:ot_payload_type:OT_PT_PRORES; */
};
union {
ot_venc_h264_adv_stream_info h264_adv_info; /* AUTO:ot_payload_type:OT_PT_H264; */
ot_venc_h265_adv_stream_info h265_adv_info; /* AUTO:ot_payload_type:OT_PT_H265; */
};
} ot_venc_stream;
typedef struct {
ot_venc_ref_type ref_type;
td_u32 pic_bytes;
td_u32 pic_cnt;
td_u32 start_qp;
td_u32 mean_qp;
td_bool is_p_skip;
td_u32 residual_bits;
td_u32 head_bits;
td_u32 madi_val;
td_u32 madp_val;
td_u64 sse_sum;
td_u32 sse_lcu_cnt;
td_double psnr_val;
} ot_venc_stream_info;
typedef struct {
td_u8 large_thumbnail_num;
ot_size large_thumbnail_size[OT_VENC_MAX_MPF_NUM];
} ot_venc_mpf_cfg;
typedef enum {
OT_VENC_PIC_RECV_SINGLE = 0,
OT_VENC_PIC_RECV_MULTI,
OT_VENC_PIC_RECV_BUTT
} ot_venc_pic_recv_mode;
typedef struct {
td_bool dcf_en;
ot_venc_mpf_cfg mpf_cfg;
ot_venc_pic_recv_mode recv_mode;
} ot_venc_jpeg_attr;
typedef struct {
td_bool rcn_ref_share_buf_en;
td_u32 frame_buf_ratio;
} ot_venc_h264_attr;
typedef struct {
td_bool rcn_ref_share_buf_en;
td_u32 frame_buf_ratio;
} ot_venc_h265_attr;
typedef enum {
OT_VENC_PRORES_FRAME_RATE_UNKNOWN = 0,
OT_VENC_PRORES_FRAME_RATE_23_976,
OT_VENC_PRORES_FRAME_RATE_24,
OT_VENC_PRORES_FRAME_RATE_25,
OT_VENC_PRORES_FRAME_RATE_29_97,
OT_VENC_PRORES_FRAME_RATE_30,
OT_VENC_PRORES_FRAME_RATE_50,
OT_VENC_PRORES_FRAME_RATE_59_94,
OT_VENC_PRORES_FRAME_RATE_60,
OT_VENC_PRORES_FRAME_RATE_100,
OT_VENC_PRORES_FRAME_RATE_119_88,
OT_VENC_PRORES_FRAME_RATE_120,
OT_VENC_PRORES_FRAME_RATE_BUTT
} ot_venc_prores_frame_rate;
typedef enum {
OT_VENC_PRORES_ASPECT_RATIO_UNKNOWN = 0,
OT_VENC_PRORES_ASPECT_RATIO_SQUARE,
OT_VENC_PRORES_ASPECT_RATIO_4_3,
OT_VENC_PRORES_ASPECT_RATIO_16_9,
OT_VENC_PRORES_ASPECT_RATIO_BUTT
} ot_venc_prores_aspect_ratio;
typedef struct {
td_char identifier[OT_VENC_PRORES_MAX_ID_CHAR_NUM];
ot_venc_prores_frame_rate frame_rate_code;
ot_venc_prores_aspect_ratio aspect_ratio;
} ot_venc_prores_attr;
typedef struct {
ot_payload_type type;
td_u32 max_pic_width;
td_u32 max_pic_height;
td_u32 buf_size;
td_u32 profile;
td_bool is_by_frame;
td_u32 pic_width;
td_u32 pic_height;
union {
ot_venc_h264_attr h264_attr; /* AUTO:ot_payload_type:OT_PT_H264; */
ot_venc_h265_attr h265_attr; /* AUTO:ot_payload_type:OT_PT_H265; */
ot_venc_jpeg_attr jpeg_attr; /* AUTO:ot_payload_type:OT_PT_JPEG; */
ot_venc_prores_attr prores_attr; /* AUTO:ot_payload_type:OT_PT_PRORES; */
};
} ot_venc_attr;
typedef enum {
OT_VENC_GOP_MODE_NORMAL_P = 0,
OT_VENC_GOP_MODE_DUAL_P = 1,
OT_VENC_GOP_MODE_SMART_P = 2,
OT_VENC_GOP_MODE_ADV_SMART_P = 3,
OT_VENC_GOP_MODE_BIPRED_B = 4,
OT_VENC_GOP_MODE_LOW_DELAY_B = 5,
OT_VENC_GOP_MODE_BUTT,
} ot_venc_gop_mode;
typedef struct {
td_s32 ip_qp_delta;
} ot_venc_gop_normal_p;
typedef struct {
td_u32 sp_interval;
td_s32 sp_qp_delta;
td_s32 ip_qp_delta;
} ot_venc_gop_dual_p;
typedef struct {
td_u32 bg_interval;
td_s32 bg_qp_delta;
td_s32 vi_qp_delta;
} ot_venc_gop_smart_p;
typedef struct {
td_u32 bg_interval;
td_s32 bg_qp_delta;
td_s32 vi_qp_delta;
} ot_venc_gop_adv_smart_p;
typedef struct {
td_u32 b_frame_num;
td_s32 b_qp_delta;
td_s32 ip_qp_delta;
} ot_venc_gop_bipred_b;
typedef struct {
ot_venc_gop_mode gop_mode;
union {
ot_venc_gop_normal_p normal_p; /* AUTO:ot_venc_gop_mode:OT_VENC_GOP_MODE_NORMAL_P; */
ot_venc_gop_dual_p dual_p; /* AUTO:ot_venc_gop_mode:OT_VENC_GOP_MODE_DUAL_P; */
ot_venc_gop_smart_p smart_p; /* AUTO:ot_venc_gop_mode:OT_VENC_GOP_MODE_SMART_P; */
ot_venc_gop_adv_smart_p adv_smart_p; /* AUTO:ot_venc_gop_mode:OT_VENC_GOP_MODE_ADV_SMART_P; */
ot_venc_gop_bipred_b bipred_b; /* AUTO:ot_venc_gop_mode:OT_VENC_GOP_MODE_BIPRED_B; */
};
} ot_venc_gop_attr;
typedef struct {
ot_venc_attr venc_attr;
ot_venc_rc_attr rc_attr;
ot_venc_gop_attr gop_attr;
} ot_venc_chn_attr;
typedef struct {
td_s32 recv_pic_num;
} ot_venc_start_param;
typedef struct {
td_u32 left_pics;
td_u32 left_stream_bytes;
td_u32 left_stream_frames;
td_u32 cur_packs;
td_u32 left_recv_pics;
td_u32 left_enc_pics;
td_bool is_jpeg_snap_end;
td_u64 release_pic_pts;
ot_venc_stream_info stream_info;
} ot_venc_chn_status;
typedef struct {
td_u32 constrained_intra_pred_flag;
} ot_venc_h264_intra_pred;
typedef struct {
td_u32 intra_trans_mode;
td_u32 inter_trans_mode;
td_bool scaling_list_valid;
td_u8 inter_scaling_list8x8[OT_VENC_SCALING_LIST_SIZE_64];
td_u8 intra_scaling_list8x8[OT_VENC_SCALING_LIST_SIZE_64];
td_s32 chroma_qp_index_offset;
} ot_venc_h264_trans;
typedef struct {
td_u32 entropy_coding_mode_i;
td_u32 entropy_coding_mode_p;
td_u32 entropy_coding_mode_b;
td_u32 cabac_init_idc;
} ot_venc_h264_entropy;
typedef struct {
td_u32 pic_order_cnt_type;
} ot_venc_h264_poc;
typedef struct {
td_u32 disable_deblocking_filter_idc;
td_s32 slice_alpha_c0_offset_div2;
td_s32 slice_beta_offset_div2;
} ot_venc_h264_dblk;
typedef struct {
td_u8 timing_info_present_flag;
td_u8 fixed_frame_rate_flag;
td_u32 num_units_in_tick;
td_u32 time_scale;
} ot_venc_h264_vui_time_info;
typedef struct {
td_u8 aspect_ratio_info_present_flag;
td_u8 aspect_ratio_idc;
td_u8 overscan_info_present_flag;
td_u8 overscan_appropriate_flag;
td_u16 sar_width;
td_u16 sar_height;
} ot_venc_vui_aspect_ratio;
typedef struct {
td_u8 video_signal_type_present_flag;
td_u8 video_format;
td_u8 video_full_range_flag;
td_u8 colour_description_present_flag;
td_u8 colour_primaries;
td_u8 transfer_characteristics;
td_u8 matrix_coefficients;
} ot_venc_vui_video_signal;
typedef struct {
td_u8 bitstream_restriction_flag;
} ot_venc_vui_bitstream_restric;
typedef struct {
ot_venc_vui_aspect_ratio vui_aspect_ratio;
ot_venc_h264_vui_time_info vui_time_info;
ot_venc_vui_video_signal vui_video_signal;
ot_venc_vui_bitstream_restric vui_bitstream_restric;
} ot_venc_h264_vui;
typedef struct {
td_u32 timing_info_present_flag;
td_u32 num_units_in_tick;
td_u32 time_scale;
td_u32 num_ticks_poc_diff_one_minus1;
} ot_venc_h265_vui_time_info;
typedef struct {
ot_venc_vui_aspect_ratio vui_aspect_ratio;
ot_venc_h265_vui_time_info vui_time_info;
ot_venc_vui_video_signal vui_video_signal;
ot_venc_vui_bitstream_restric vui_bitstream_restric;
} ot_venc_h265_vui;
typedef struct {
td_u32 qfactor;
td_u8 y_qt[OT_VENC_JPEG_QT_COEF_NUM];
td_u8 cb_qt[OT_VENC_JPEG_QT_COEF_NUM];
td_u8 cr_qt[OT_VENC_JPEG_QT_COEF_NUM];
td_u32 mcu_per_ecs;
td_bool ecs_output_en;
} ot_venc_jpeg_param;
typedef struct {
td_u8 y_qt[OT_VENC_MJPEG_QT_COEF_NUM];
td_u8 cb_qt[OT_VENC_MJPEG_QT_COEF_NUM];
td_u8 cr_qt[OT_VENC_MJPEG_QT_COEF_NUM];
td_u32 mcu_per_ecs;
td_bool ecs_output_en;
} ot_venc_mjpeg_param;
typedef struct {
td_u32 idx;
td_bool enable;
td_bool is_abs_qp;
td_s32 qp;
ot_rect rect;
} ot_venc_roi_attr;
typedef enum {
OT_VENC_ROI_FOR_I = 0,
OT_VENC_ROI_FOR_P_B,
OT_VENC_ROI_FOR_VI,
OT_VENC_ROI_FOR_BUTT,
} ot_venc_roi_for_frame;
typedef struct {
td_u32 idx;
td_bool enable[OT_VENC_ROI_FOR_BUTT];
td_bool is_abs_qp[OT_VENC_ROI_FOR_BUTT];
td_s32 qp[OT_VENC_ROI_FOR_BUTT];
ot_rect rect[OT_VENC_ROI_FOR_BUTT];
} ot_venc_roi_attr_ex;
typedef struct {
td_u32 idx;
td_bool enable;
td_u32 level;
ot_rect rect;
} ot_venc_jpeg_roi_attr;
typedef struct {
td_s32 src_frame_rate;
td_s32 dst_frame_rate;
} ot_venc_roi_bg_frame_rate;
typedef struct {
td_u32 base;
td_u32 enhance;
td_bool pred_en;
} ot_venc_ref_param;
typedef enum {
OT_VENC_JPEG_DERING_LEVEL_0 = 0, /* Jpeg channel dering mode is 1 */
OT_VENC_JPEG_DERING_LEVEL_1 = 1, /* Jpeg channel dering mode is adaptive */
OT_VENC_JPEG_DERING_LEVEL_2 = 2, /* Jpeg channel dering mode is adaptive */
OT_VENC_JPEG_DERING_LEVEL_3 = 3, /* Jpeg channel dering mode is adaptive */
OT_VENC_JPEG_DERING_LEVEL_BUTT,
} ot_venc_jpeg_dering_level;
typedef enum {
OT_VENC_JPEG_ENC_ALL = 0, /* Jpeg channel snap all the pictures when started. */
OT_VENC_JPEG_ENC_SNAP = 1, /* Jpeg channel snap the flashed pictures when started. */
OT_VENC_JPEG_ENC_BUTT,
} ot_venc_jpeg_enc_mode;
typedef struct {
td_phys_addr_t phys_addr[OT_VENC_MAX_TILE_NUM];
td_void ATTRIBUTE *user_addr[OT_VENC_MAX_TILE_NUM];
td_u64 ATTRIBUTE buf_size[OT_VENC_MAX_TILE_NUM];
} ot_venc_stream_buf_info;
typedef struct {
td_u32 constrained_intra_pred_flag;
td_u32 strong_intra_smoothing_enabled_flag;
} ot_venc_h265_pu;
typedef struct {
td_s32 cb_qp_offset;
td_s32 cr_qp_offset;
td_bool scaling_list_en;
td_bool scaling_list_tu4_valid;
td_u8 inter_scaling_list4x4[2][OT_VENC_SCALING_LIST_SIZE_16]; // 2: 0 luma; 1 chroma
td_u8 intra_scaling_list4x4[2][OT_VENC_SCALING_LIST_SIZE_16]; // 2: 0 luma; 1 chroma
td_bool scaling_list_tu8_valid;
td_u8 inter_scaling_list8x8[2][OT_VENC_SCALING_LIST_SIZE_64]; // 2: 0 luma; 1 chroma
td_u8 intra_scaling_list8x8[2][OT_VENC_SCALING_LIST_SIZE_64]; // 2: 0 luma; 1 chroma
td_bool scaling_list_tu16_valid;
td_u8 inter_scaling_list16x16[2][OT_VENC_SCALING_LIST_SIZE_64]; // 2: 0 luma; 1 chroma
td_u8 intra_scaling_list16x16[2][OT_VENC_SCALING_LIST_SIZE_64]; // 2: 0 luma; 1 chroma
td_bool scaling_list_tu32_valid;
td_u8 inter_scaling_list32x32[OT_VENC_SCALING_LIST_SIZE_64];
td_u8 intra_scaling_list32x32[OT_VENC_SCALING_LIST_SIZE_64];
} ot_venc_h265_trans;
typedef struct {
td_u32 cabac_init_flag;
} ot_venc_h265_entropy;
typedef struct {
td_u32 slice_deblocking_filter_disabled_flag;
td_s32 slice_beta_offset_div2;
td_s32 slice_tc_offset_div2;
td_u32 loop_filter_across_tiles_enabled_flag;
td_u32 loop_filter_across_slices_enabled_flag;
} ot_venc_h265_dblk;
typedef struct {
td_u32 slice_sao_luma_flag;
td_u32 slice_sao_chroma_flag;
} ot_venc_h265_sao;
typedef enum {
OT_VENC_INTRA_REFRESH_ROW = 0,
OT_VENC_INTRA_REFRESH_COLUMN,
OT_VENC_INTRA_REFRESH_BUTT
} ot_venc_intra_refresh_mode;
typedef struct {
td_bool enable;
ot_venc_intra_refresh_mode mode;
td_u32 refresh_num;
td_u32 request_i_qp;
} ot_venc_intra_refresh;
typedef enum {
OT_VENC_MOD_VENC = 1,
OT_VENC_MOD_H264,
OT_VENC_MOD_H265,
OT_VENC_MOD_JPEG,
OT_VENC_MOD_RC,
OT_VENC_MOD_BUTT
} ot_venc_mod_type;
typedef struct {
td_u32 buf_cache;
td_u32 frame_buf_recycle;
} ot_venc_venc_mod_param;
typedef struct {
td_u32 one_stream_buf;
td_u32 mini_buf_mode;
td_u32 low_power_mode;
ot_vb_src vb_src;
td_bool qp_hist_en;
td_u32 max_user_data_len; /* RW; Range:[0, 65536]; one user data buffer len */
} ot_venc_h264_mod_param;
typedef struct {
td_u32 one_stream_buf;
td_u32 mini_buf_mode;
td_u32 low_power_mode;
ot_vb_src vb_src;
td_bool qp_hist_en;
td_u32 max_user_data_len; /* RW; Range:[0, 65536]; one user data buffer len */
} ot_venc_h265_mod_param;
typedef struct {
td_u32 one_stream_buf;
td_u32 mini_buf_mode;
td_u32 clear_stream_buf;
td_u32 dering_mode;
} ot_venc_jpeg_mod_param;
typedef struct {
ot_venc_mod_type mod_type;
union {
ot_venc_venc_mod_param venc_mod_param; /* AUTO:ot_venc_mod_type:OT_VENC_MOD_VENC; */
ot_venc_h264_mod_param h264_mod_param; /* AUTO:ot_venc_mod_type:OT_VENC_MOD_H264; */
ot_venc_h265_mod_param h265_mod_param; /* AUTO:ot_venc_mod_type:OT_VENC_MOD_H265; */
ot_venc_jpeg_mod_param jpeg_mod_param; /* AUTO:ot_venc_mod_type:OT_VENC_MOD_JPEG; */
};
} ot_venc_mod_param;
typedef enum {
OT_VENC_FRAME_TYPE_NONE = 1,
OT_VENC_FRAME_TYPE_IDR,
OT_VENC_FRAME_TYPE_P_SKIP,
OT_VENC_FRAME_TYPE_BUTT
} ot_venc_frame_type;
typedef struct {
td_bool qpmap_valid;
td_bool skip_weight_valid;
td_u32 blk_start_qp;
td_phys_addr_t qpmap_phys_addr;
td_phys_addr_t skip_weight_phys_addr;
ot_venc_frame_type frame_type;
} ot_venc_user_rc_info;
typedef struct {
td_bool valid;
td_phys_addr_t phys_addr;
} ot_venc_user_roimap;
typedef struct {
ot_video_frame_info user_frame;
ot_venc_user_rc_info user_rc_info;
ot_venc_user_roimap user_roimap;
} ot_venc_user_frame_info;
typedef struct {
td_u8 data_y;
td_u8 data_u;
td_u8 data_v;
} ot_venc_mosaic_pixel_yuv;
typedef struct {
td_u32 rect_num;
ot_rect rect[OT_VENC_MAX_MOSAIC_RECT_NUM];
} ot_venc_mosaic_rect;
typedef struct {
td_bool valid;
td_phys_addr_t phys_addr;
td_bool specified_yuv_en;
ot_venc_mosaic_pixel_yuv pixel_yuv;
} ot_venc_mosaic_map;
/* the information of the mosaic */
typedef struct {
ot_venc_mosaic_mode mode;
ot_mosaic_blk_size blk_size;
union {
ot_venc_mosaic_rect rect_param; /* AUTO:ot_venc_mosaic_mode:OT_VENC_MOSAIC_MODE_RECT; */
ot_venc_mosaic_map map_param; /* AUTO:ot_venc_mosaic_mode:OT_VENC_MOSAIC_MODE_MAP; */
};
} ot_venc_mosaic_info;
/* the information of the multi frame */
typedef struct {
td_u32 frame_num;
ot_video_frame_info frame[OT_VENC_MAX_FRAME_NUM];
ot_venc_mosaic_info mosaic_info;
} ot_venc_multi_frame_info;
typedef struct {
td_bool mosaic_en;
td_bool composite_enc_en;
td_u32 quality_level; /* 0: lower quality with less ddr consumption; 1: higher quality with more ddr consumption. */
} ot_venc_chn_config;
typedef struct {
td_u32 idx;
td_bool enable;
ot_rect rect;
} ot_venc_sse_rgn;
typedef struct {
td_bool color_to_grey_en;
td_u32 priority;
td_u32 max_stream_cnt;
td_u32 poll_wake_up_frame_cnt;
ot_crop_info crop_info;
ot_frame_rate_ctrl frame_rate;
} ot_venc_chn_param;
typedef struct {
td_bool enable;
td_u32 direction;
td_u32 gain;
td_u32 offset;
td_u32 threshold_p[OT_VENC_TEXTURE_THRESHOLD_SIZE];
td_u32 threshold_b[OT_VENC_TEXTURE_THRESHOLD_SIZE];
} ot_venc_fg_protect;
typedef enum {
OT_VENC_SCENE_0 = 0, /* RW; A scene in which the camera does not move or periodically moves continuously */
OT_VENC_SCENE_1 = 1, /* RW; Motion scene at high bit rate */
OT_VENC_SCENE_2 = 2, /* RW; It has regular continuous motion at medium bit rate and
the encoding pressure is relatively large */
OT_VENC_SCENE_BUTT
} ot_venc_scene_mode;
typedef struct {
td_bool enable;
td_s32 strength0;
td_s32 strength1;
} ot_venc_debreath_effect;
typedef struct {
ot_op_mode pred_mode;
td_u32 intra32_cost;
td_u32 intra16_cost;
td_u32 intra8_cost;
td_u32 intra4_cost;
td_u32 inter64_cost;
td_u32 inter32_cost;
td_u32 inter16_cost;
td_u32 inter8_cost;
} ot_venc_cu_pred;
typedef struct {
td_bool enable;
td_u32 gain;
td_u32 offset;
td_u32 bg_cost;
td_u32 fg_cost;
} ot_venc_skip_bias;
typedef struct {
td_bool enable;
td_s32 qp_delta[OT_VENC_MAX_HIERARCHY_NUM];
td_s32 frame_num[OT_VENC_MAX_HIERARCHY_NUM];
} ot_venc_hierarchical_qp;
typedef struct {
ot_vb_pool pic_vb_pool;
ot_vb_pool pic_info_vb_pool;
} ot_venc_chn_pool;
typedef struct {
td_u32 clear_stats_after_set_attr;
} ot_venc_rc_adv_param;
typedef struct {
td_bool enable;
td_u32 split_mode;
td_u32 split_size;
td_bool slice_output_en;
} ot_venc_slice_split;
typedef struct {
td_u32 param_set_id; /* Range: for H264: [0, 30]; for H265: [0, 15]; */
} ot_venc_param_set_id;
typedef struct {
ot_op_mode mode;
td_u32 hor;
td_u32 ver;
} ot_venc_search_window;
typedef enum {
SVC_RECT_TYPE0 = 0,
SVC_RECT_TYPE1,
SVC_RECT_TYPE2,
SVC_RECT_TYPE3,
SVC_RECT_TYPE4,
SVC_RECT_TYPE_BUTT
} ot_venc_svc_rect_type;
typedef struct {
td_u8 qpmap_value_i; /* RW;Range: [0, 255] */
td_u8 qpmap_value_p; /* RW;Range: [0, 255] */
td_u8 skipmap_value; /* RW;Range: [0, 255] */
} ot_venc_svc_map_param;
typedef struct {
td_u32 rect_num;
ot_size base_resolution;
ot_rect rect_attr[OT_VENC_MAX_SVC_RECT_NUM];
ot_venc_svc_rect_type detect_type[OT_VENC_MAX_SVC_RECT_NUM];
td_u64 pts;
} ot_venc_svc_rect_info;
typedef struct {
ot_venc_svc_map_param fg_region[SVC_RECT_TYPE_BUTT];
ot_venc_svc_map_param activity_region;
ot_venc_svc_map_param bg_region;
td_bool fg_protect_adaptive_en; /* RW;Range: [0, 1] */
} ot_venc_svc_param;
typedef struct {
td_bool deblur_en;
td_bool deblur_adaptive_en;
} ot_venc_deblur_param;
typedef enum {
OT_VENC_MD_SAD_MODE_ZERO = 0,
OT_VENC_MD_SAD_MODE_SEARCH = 1,
OT_VENC_MD_SAD_MODE_BUTT
} ot_venc_md_sad_mode;
typedef struct {
td_bool online_en;
td_bool sad_stats_en;
td_bool level_stats_en;
ot_venc_md_sad_mode sad_mode;
td_s32 threshold_gain[OT_VENC_MD_THRESHOLD_NUM];
td_s32 threshold_offset[OT_VENC_MD_THRESHOLD_NUM];
td_s32 qp_delta[OT_VENC_MD_LEVEL_NUM];
td_s32 md_skip_weight[OT_VENC_MD_LEVEL_NUM];
} ot_venc_md_param;
/* the information of the user frame */
typedef struct {
td_bool rc_info_valid;
td_u32 target_bits;
td_u32 max_qp;
td_u32 min_qp;
td_u32 start_qp;
ot_venc_frame_type frame_type;
} ot_omx_user_rc_info;
typedef struct {
ot_video_frame_info user_frame;
ot_omx_user_rc_info user_rc_info;
} ot_omx_user_frame_info;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif /* OT_COMMON_VENC_H */