396 lines
11 KiB
C
396 lines
11 KiB
C
![]() |
/*
|
||
|
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
|