ss928_framework/ss928sdk/include/ot_common_rc.h

396 lines
11 KiB
C
Raw Normal View History

2024-12-16 13:31:45 +08:00
/*
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
*/
#ifndef OT_COMMON_RC_H
#define OT_COMMON_RC_H
#include "ot_type.h"
#include "ot_defines.h"
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif
#define OT_VENC_TEXTURE_THRESHOLD_SIZE 16
/* rc mode */
typedef enum {
OT_VENC_RC_MODE_H264_CBR = 1,
OT_VENC_RC_MODE_H264_VBR,
OT_VENC_RC_MODE_H264_AVBR,
OT_VENC_RC_MODE_H264_QVBR,
OT_VENC_RC_MODE_H264_CVBR,
OT_VENC_RC_MODE_H264_FIXQP,
OT_VENC_RC_MODE_H264_QPMAP,
OT_VENC_RC_MODE_MJPEG_CBR,
OT_VENC_RC_MODE_MJPEG_VBR,
OT_VENC_RC_MODE_MJPEG_FIXQP,
OT_VENC_RC_MODE_H265_CBR,
OT_VENC_RC_MODE_H265_VBR,
OT_VENC_RC_MODE_H265_AVBR,
OT_VENC_RC_MODE_H265_QVBR,
OT_VENC_RC_MODE_H265_CVBR,
OT_VENC_RC_MODE_H265_FIXQP,
OT_VENC_RC_MODE_H265_QPMAP,
OT_VENC_RC_MODE_BUTT,
} ot_venc_rc_mode;
/* qpmap mode */
typedef enum {
OT_VENC_RC_QPMAP_MODE_MEAN_QP = 0,
OT_VENC_RC_QPMAP_MODE_MIN_QP,
OT_VENC_RC_QPMAP_MODE_MAX_QP,
OT_VENC_RC_QPMAP_MODE_BUTT,
} ot_venc_rc_qpmap_mode;
typedef struct {
td_u32 gop;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 i_qp;
td_u32 p_qp;
td_u32 b_qp;
} ot_venc_h264_fixqp;
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
} ot_venc_h264_cbr;
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_h264_vbr;
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
td_u32 short_term_stats_time;
td_u32 long_term_stats_time;
td_u32 long_term_max_bit_rate;
td_u32 long_term_min_bit_rate;
} ot_venc_h264_cvbr;
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_h264_avbr;
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
} ot_venc_h264_qpmap;
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 target_bit_rate;
} ot_venc_h264_qvbr;
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_qpmap;
typedef ot_venc_h264_cbr ot_venc_h265_cbr;
typedef ot_venc_h264_vbr ot_venc_h265_vbr;
typedef ot_venc_h264_avbr ot_venc_h265_avbr;
typedef ot_venc_h264_fixqp ot_venc_h265_fixqp;
typedef ot_venc_h264_qvbr ot_venc_h265_qvbr;
typedef ot_venc_h264_cvbr ot_venc_h265_cvbr;
typedef struct {
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 qfactor;
} ot_venc_mjpeg_fixqp;
typedef struct {
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
} ot_venc_mjpeg_cbr;
typedef struct {
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_mjpeg_vbr;
typedef struct {
ot_venc_rc_mode rc_mode;
union {
ot_venc_h264_cbr h264_cbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_CBR; */
ot_venc_h264_vbr h264_vbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_VBR; */
ot_venc_h264_avbr h264_avbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_AVBR; */
ot_venc_h264_qvbr h264_qvbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_QVBR; */
ot_venc_h264_cvbr h264_cvbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_CVBR; */
ot_venc_h264_fixqp h264_fixqp; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_FIXQP; */
ot_venc_h264_qpmap h264_qpmap; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_QPMAP; */
ot_venc_mjpeg_cbr mjpeg_cbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_MJPEG_CBR; */
ot_venc_mjpeg_vbr mjpeg_vbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_MJPEG_VBR; */
ot_venc_mjpeg_fixqp mjpeg_fixqp; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_MJPEG_FIXQP; */
ot_venc_h265_cbr h265_cbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_CBR; */
ot_venc_h265_vbr h265_vbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_VBR; */
ot_venc_h265_avbr h265_avbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_AVBR; */
ot_venc_h265_qvbr h265_qvbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_QVBR; */
ot_venc_h265_cvbr h265_cvbr; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_CVBR; */
ot_venc_h265_fixqp h265_fixqp; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_FIXQP; */
ot_venc_h265_qpmap h265_qpmap; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_QPMAP; */
};
} ot_venc_rc_attr;
typedef enum {
OT_VENC_SUPER_FRAME_NONE = 0, /* sdk don't care super frame */
OT_VENC_SUPER_FRAME_DISCARD, /* the super frame is discarded */
OT_VENC_SUPER_FRAME_REENCODE, /* the super frame is re-encode */
OT_VENC_SUPER_FRAME_BUTT
} ot_venc_super_frame_mode;
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_s32 max_reencode_times;
td_bool qpmap_en;
} ot_venc_h264_cbr_param;
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
} ot_venc_h264_vbr_param;
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
td_s32 min_still_percent;
td_u32 max_still_qp;
td_u32 min_still_psnr;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 min_qp_delta;
td_u32 motion_sensitivity;
td_bool save_bitrate_en;
} ot_venc_h264_avbr_param;
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_s32 max_bit_percent;
td_s32 min_bit_percent;
td_s32 max_psnr_fluctuate;
td_s32 min_psnr_fluctuate;
} ot_venc_h264_qvbr_param;
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 min_qp_delta;
td_u32 max_qp_delta;
td_u32 extra_bit_percent;
td_u32 long_term_stats_time_unit;
td_bool save_bitrate_en;
} ot_venc_h264_cvbr_param;
typedef struct {
td_u32 max_qfactor;
td_u32 min_qfactor;
} ot_venc_mjpeg_cbr_param;
typedef struct {
td_s32 chg_pos;
td_u32 max_qfactor;
td_u32 min_qfactor;
} ot_venc_mjpeg_vbr_param;
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_cbr_param;
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_vbr_param;
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_s32 min_still_percent;
td_u32 max_still_qp;
td_u32 min_still_psnr;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 min_qp_delta;
td_u32 motion_sensitivity;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_avbr_param;
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_s32 max_bit_percent;
td_s32 min_bit_percent;
td_s32 max_psnr_fluctuate;
td_s32 min_psnr_fluctuate;
} ot_venc_h265_qvbr_param;
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 min_qp_delta;
td_u32 max_qp_delta;
td_u32 extra_bit_percent;
td_u32 long_term_stats_time_unit;
} ot_venc_h265_cvbr_param;
typedef struct {
td_bool detect_scene_chg_en;
td_bool adapt_insert_idr_frame_en;
} ot_venc_scene_chg_detect;
typedef struct {
td_u32 threshold_i[OT_VENC_TEXTURE_THRESHOLD_SIZE];
td_u32 threshold_p[OT_VENC_TEXTURE_THRESHOLD_SIZE];
td_u32 threshold_b[OT_VENC_TEXTURE_THRESHOLD_SIZE];
td_u32 direction;
td_u32 row_qp_delta;
td_s32 first_frame_start_qp;
ot_venc_scene_chg_detect scene_chg_detect;
union {
ot_venc_h264_cbr_param h264_cbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_CBR; */
ot_venc_h264_vbr_param h264_vbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_VBR; */
ot_venc_h264_avbr_param h264_avbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_AVBR; */
ot_venc_h264_qvbr_param h264_qvbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_QVBR; */
ot_venc_h264_cvbr_param h264_cvbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H264_CVBR; */
ot_venc_h265_cbr_param h265_cbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_CBR; */
ot_venc_h265_vbr_param h265_vbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_VBR; */
ot_venc_h265_avbr_param h265_avbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_AVBR; */
ot_venc_h265_qvbr_param h265_qvbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_QVBR; */
ot_venc_h265_cvbr_param h265_cvbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_H265_CVBR; */
ot_venc_mjpeg_cbr_param mjpeg_cbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_MJPEG_CBR; */
ot_venc_mjpeg_vbr_param mjpeg_vbr_param; /* AUTO:ot_venc_rc_mode:OT_VENC_RC_MODE_MJPEG_VBR; */
};
} ot_venc_rc_param;
typedef enum {
OT_VENC_FRAME_LOST_NORMAL = 0,
OT_VENC_FRAME_LOST_P_SKIP,
OT_VENC_FRAME_LOST_BUTT,
} ot_venc_frame_lost_mode;
typedef struct {
td_bool enable;
td_u32 bit_rate_threshold;
ot_venc_frame_lost_mode mode;
td_u32 frame_gap;
} ot_venc_frame_lost_strategy;
typedef enum {
OT_VENC_REENCODE_BIT_RATE_FIRST = 1,
OT_VENC_REENCODE_FRAME_BITS_FIRST,
OT_VENC_REENCODE_BUTT,
} ot_venc_reencode_priority;
typedef struct {
ot_venc_super_frame_mode super_frame_mode;
td_u32 i_frame_bits_threshold;
td_u32 p_frame_bits_threshold;
td_u32 b_frame_bits_threshold;
ot_venc_reencode_priority reencode_priority;
} ot_venc_super_frame_strategy;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif