Lines Matching refs:ctx
95 MPP_RET bits_model_smt_deinit(RcModelV2SmtCtx *ctx) in bits_model_smt_deinit() argument
97 rc_dbg_func("enter %p\n", ctx); in bits_model_smt_deinit()
99 if (ctx->qp_p) { in bits_model_smt_deinit()
100 mpp_data_deinit(ctx->qp_p); in bits_model_smt_deinit()
101 ctx->qp_p = NULL; in bits_model_smt_deinit()
104 if (ctx->motion_level != NULL) { in bits_model_smt_deinit()
105 mpp_data_deinit_v2(ctx->motion_level); in bits_model_smt_deinit()
106 ctx->motion_level = NULL; in bits_model_smt_deinit()
109 if (ctx->complex_level != NULL) { in bits_model_smt_deinit()
110 mpp_data_deinit_v2(ctx->complex_level); in bits_model_smt_deinit()
111 ctx->complex_level = NULL; in bits_model_smt_deinit()
114 if (ctx->stat_bits != NULL) { in bits_model_smt_deinit()
115 mpp_data_deinit_v2(ctx->stat_bits); in bits_model_smt_deinit()
116 ctx->stat_bits = NULL; in bits_model_smt_deinit()
119 if (ctx->rt_bits != NULL) { in bits_model_smt_deinit()
120 mpp_data_deinit_v2(ctx->rt_bits); in bits_model_smt_deinit()
121 ctx->rt_bits = NULL; in bits_model_smt_deinit()
124 if (ctx->pid_lower_p != NULL) { in bits_model_smt_deinit()
125 mpp_data_deinit_v2(ctx->pid_lower_p); in bits_model_smt_deinit()
126 ctx->pid_lower_p = NULL; in bits_model_smt_deinit()
129 if (ctx->pid_upper_p != NULL) { in bits_model_smt_deinit()
130 mpp_data_deinit_v2(ctx->pid_upper_p); in bits_model_smt_deinit()
131 ctx->pid_upper_p = NULL; in bits_model_smt_deinit()
134 rc_dbg_func("leave %p\n", ctx); in bits_model_smt_deinit()
138 MPP_RET bits_model_smt_init(RcModelV2SmtCtx *ctx) in bits_model_smt_init() argument
140 RK_S32 gop_len = ctx->usr_cfg.igop; in bits_model_smt_init()
141 RcFpsCfg *fps = &ctx->usr_cfg.fps; in bits_model_smt_init()
150 RK_S32 stat_len = fps->fps_out_num * ctx->usr_cfg.stats_time / fps->fps_out_denom; in bits_model_smt_init()
153 rc_dbg_func("enter %p\n", ctx); in bits_model_smt_init()
154 ctx->frm_num = 0; in bits_model_smt_init()
155 ctx->first_frm_flg = 1; in bits_model_smt_init()
156 ctx->gop_frm_cnt = 0; in bits_model_smt_init()
157 ctx->gop_qp_sum = 0; in bits_model_smt_init()
160 ctx->igop = gop_len; in bits_model_smt_init()
161 ctx->qp_min = 10; in bits_model_smt_init()
162 ctx->qp_max = 51; in bits_model_smt_init()
164 if (ctx->motion_level) in bits_model_smt_init()
165 mpp_data_deinit_v2(ctx->motion_level); in bits_model_smt_init()
166 mpp_data_init_v2(&ctx->motion_level, mad_len, 0); in bits_model_smt_init()
168 if (ctx->complex_level) in bits_model_smt_init()
169 mpp_data_deinit_v2(ctx->complex_level); in bits_model_smt_init()
170 mpp_data_init_v2(&ctx->complex_level, mad_len, 0); in bits_model_smt_init()
172 if (ctx->pid_lower_p) in bits_model_smt_init()
173 mpp_data_deinit_v2(ctx->pid_lower_p); in bits_model_smt_init()
174 mpp_data_init_v2(&ctx->pid_lower_p, stat_len, 0); in bits_model_smt_init()
176 if (ctx->pid_upper_p) in bits_model_smt_init()
177 mpp_data_deinit_v2(ctx->pid_upper_p); in bits_model_smt_init()
178 mpp_data_init_v2(&ctx->pid_upper_p, stat_len, 0); in bits_model_smt_init()
180 mpp_pid_reset(&ctx->pid_fps); in bits_model_smt_init()
181 mpp_pid_reset(&ctx->pid_lower_i); in bits_model_smt_init()
182 mpp_pid_reset(&ctx->pid_upper_i); in bits_model_smt_init()
183 mpp_pid_reset(&ctx->pid_lower_all); in bits_model_smt_init()
184 mpp_pid_reset(&ctx->pid_upper_all); in bits_model_smt_init()
186 mpp_pid_set_param(&ctx->pid_fps, 4, 6, 0, 90, win_len); in bits_model_smt_init()
187 mpp_pid_set_param(&ctx->pid_lower_i, 4, 6, 0, 100, win_len); in bits_model_smt_init()
188 mpp_pid_set_param(&ctx->pid_upper_i, 4, 6, 0, 100, win_len); in bits_model_smt_init()
189 mpp_pid_set_param(&ctx->pid_lower_all, 4, 6, 0, 100, gop_len); in bits_model_smt_init()
190 mpp_pid_set_param(&ctx->pid_upper_all, 4, 6, 0, 100, gop_len); in bits_model_smt_init()
192 ave_bits_lower = (RK_S64)ctx->usr_cfg.bps_min * fps->fps_out_denom / fps->fps_out_num; in bits_model_smt_init()
193 ave_bits_uppper = (RK_S64)ctx->usr_cfg.bps_max * fps->fps_out_denom / fps->fps_out_num; in bits_model_smt_init()
195 ctx->acc_intra_count = 0; in bits_model_smt_init()
196 ctx->acc_inter_count = 0; in bits_model_smt_init()
197 ctx->last_fps_bits = 0; in bits_model_smt_init()
200 ctx->gop_mode = MPP_GOP_ALL_INTER; in bits_model_smt_init()
206 ctx->gop_mode = MPP_GOP_ALL_INTRA; in bits_model_smt_init()
212 if (ctx->usr_cfg.debreath_cfg.enable) in bits_model_smt_init()
213 ctx->usr_cfg.debreath_cfg.enable = 0; in bits_model_smt_init()
215 ctx->gop_mode = MPP_GOP_SMALL; in bits_model_smt_init()
224 ctx->gop_mode = MPP_GOP_LARGE; in bits_model_smt_init()
229 ctx->fixed_i_pred_bit = (ctx->usr_cfg.bps_max / nfps * 8) / 8; in bits_model_smt_init()
230 … ctx->fixed_p_pred_bit = ((ctx->usr_cfg.bps_max * g / nfps - ctx->fixed_i_pred_bit) / (g - 1)) / 8; in bits_model_smt_init()
233 ctx->bits_per_lower_i = bits_lower_i; in bits_model_smt_init()
234 ctx->bits_per_upper_i = bits_upper_i; in bits_model_smt_init()
235 ctx->bits_per_lower_p = bits_lower_p; in bits_model_smt_init()
236 ctx->bits_per_upper_p = bits_upper_p; in bits_model_smt_init()
242 if (ctx->stat_bits) in bits_model_smt_init()
243 mpp_data_deinit_v2(ctx->stat_bits); in bits_model_smt_init()
244 mpp_data_init_v2(&ctx->stat_bits, stat_len, bits_upper_p); in bits_model_smt_init()
246 if (ctx->rt_bits) in bits_model_smt_init()
247 mpp_data_deinit_v2(ctx->rt_bits); in bits_model_smt_init()
248 mpp_data_init_v2(&ctx->rt_bits, rt_stat_len, bits_upper_p); in bits_model_smt_init()
250 rc_dbg_func("leave %p\n", ctx); in bits_model_smt_init()
254 MPP_RET bits_model_update_smt(RcModelV2SmtCtx *ctx, RK_S32 real_bit) in bits_model_update_smt() argument
256 rc_dbg_func("enter %p\n", ctx); in bits_model_update_smt()
257 RcFpsCfg *fps = &ctx->usr_cfg.fps; in bits_model_update_smt()
261 rc_dbg_func("enter %p\n", ctx); in bits_model_update_smt()
263 mpp_data_update_v2(ctx->stat_bits, real_bit); in bits_model_update_smt()
264 ctx->pre_diff_bit_lower = ctx->bits_tgt_lower - real_bit; in bits_model_update_smt()
265 ctx->pre_diff_bit_upper = ctx->bits_tgt_upper - real_bit; in bits_model_update_smt()
267 ctx->count_real_bit = ctx->count_real_bit + real_bit / 8; in bits_model_update_smt()
268 if (ctx->frame_type == INTRA_FRAME) { in bits_model_update_smt()
269 ctx->count_pred_bit = ctx->count_pred_bit + ctx->fixed_i_pred_bit; in bits_model_update_smt()
271 ctx->count_pred_bit = ctx->count_pred_bit + ctx->fixed_p_pred_bit; in bits_model_update_smt()
273 ctx->count_frame ++; in bits_model_update_smt()
274 if (ctx->count_real_bit > 72057594037927935 || ctx->count_pred_bit > 72057594037927935) { in bits_model_update_smt()
275 ctx->count_real_bit = 0; in bits_model_update_smt()
276 ctx->count_pred_bit = 0; in bits_model_update_smt()
279 if (ctx->change_bit_flag == 1) { in bits_model_update_smt()
283 if (ctx->frame_type == INTRA_FRAME) { in bits_model_update_smt()
284 ctx->acc_intra_count++; in bits_model_update_smt()
285 mpp_pid_update(&ctx->pid_lower_i, real_bit - ctx->bits_tgt_lower, 1); in bits_model_update_smt()
286 mpp_pid_update(&ctx->pid_upper_i, real_bit - ctx->bits_tgt_upper, 1); in bits_model_update_smt()
288 ctx->acc_inter_count++; in bits_model_update_smt()
289 mpp_data_update_v2(ctx->pid_lower_p, real_bit - ctx->bits_tgt_lower); in bits_model_update_smt()
290 mpp_data_update_v2(ctx->pid_upper_p, real_bit - ctx->bits_tgt_upper); in bits_model_update_smt()
292 mpp_pid_update(&ctx->pid_lower_all, real_bit - ctx->bits_tgt_lower, 1); in bits_model_update_smt()
293 mpp_pid_update(&ctx->pid_upper_all, real_bit - ctx->bits_tgt_upper, 1); in bits_model_update_smt()
295 ctx->last_fps_bits += real_bit; in bits_model_update_smt()
297 mod = ctx->acc_intra_count + ctx->acc_inter_count; in bits_model_update_smt()
300 bps_target_tmp = (ctx->usr_cfg.bps_min + ctx->usr_cfg.bps_max) >> 1; in bits_model_update_smt()
301 if (bps_target_tmp * 3 > (ctx->last_fps_bits * 2)) in bits_model_update_smt()
302 mpp_pid_update(&ctx->pid_fps, bps_target_tmp - ctx->last_fps_bits, 0); in bits_model_update_smt()
304 bps_target_tmp = ctx->usr_cfg.bps_min * 4 / 10 + ctx->usr_cfg.bps_max * 6 / 10; in bits_model_update_smt()
305 mpp_pid_update(&ctx->pid_fps, bps_target_tmp - ctx->last_fps_bits, 0); in bits_model_update_smt()
307 ctx->last_fps_bits = 0; in bits_model_update_smt()
311 ctx->qp_prev_out = ctx->qp_out; in bits_model_update_smt()
313 rc_dbg_func("leave %p\n", ctx); in bits_model_update_smt()
318 MPP_RET rc_model_v2_smt_h265_init(void *ctx, RcCfg *cfg) in rc_model_v2_smt_h265_init() argument
320 RcModelV2SmtCtx *p = (RcModelV2SmtCtx*)ctx; in rc_model_v2_smt_h265_init()
322 rc_dbg_func("enter %p\n", ctx); in rc_model_v2_smt_h265_init()
327 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_smt_h265_init()
331 MPP_RET rc_model_v2_smt_h264_init(void *ctx, RcCfg *cfg) in rc_model_v2_smt_h264_init() argument
333 RcModelV2SmtCtx *p = (RcModelV2SmtCtx*)ctx; in rc_model_v2_smt_h264_init()
335 rc_dbg_func("enter %p\n", ctx); in rc_model_v2_smt_h264_init()
340 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_smt_h264_init()
345 MPP_RET rc_model_v2_smt_deinit(void *ctx) in rc_model_v2_smt_deinit() argument
347 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *)ctx; in rc_model_v2_smt_deinit()
348 rc_dbg_func("enter %p\n", ctx); in rc_model_v2_smt_deinit()
350 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_smt_deinit()
354 static void set_coef(void *ctx, RK_S32 *coef, RK_S32 val) in set_coef() argument
356 RcModelV2SmtCtx *p = (RcModelV2SmtCtx*)ctx; in set_coef()
498 static MPP_RET calc_smt_debreath_qp(RcModelV2SmtCtx * ctx) in calc_smt_debreath_qp() argument
502 RcDebreathCfg *debreath_cfg = &ctx->usr_cfg.debreath_cfg; in calc_smt_debreath_qp()
504 RK_S32 gop_qp_sum = ctx->gop_qp_sum; in calc_smt_debreath_qp()
505 RK_S32 gop_frm_cnt = ctx->gop_frm_cnt; in calc_smt_debreath_qp()
509 RK_U8 idx2 = MPP_MIN(ctx->pre_iblk4_prop >> 5, (RK_S32)sizeof(intra_qp_map) - 1); in calc_smt_debreath_qp()
517 rc_dbg_func("enter %p\n", ctx); in calc_smt_debreath_qp()
522 ctx->qp_out, fm_qp_sum, ctx->pre_iblk4_prop); in calc_smt_debreath_qp()
530 ctx->qp_out = mpp_clip(new_fm_qp, ctx->usr_cfg.min_i_quality, ctx->usr_cfg.max_i_quality); in calc_smt_debreath_qp()
531 ctx->gop_frm_cnt = 0; in calc_smt_debreath_qp()
532 ctx->gop_qp_sum = 0; in calc_smt_debreath_qp()
533 rc_dbg_func("leave %p\n", ctx); in calc_smt_debreath_qp()
537 static MPP_RET smt_start_prepare(void *ctx, EncRcTask *task) in smt_start_prepare() argument
540 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *) ctx; in smt_start_prepare()
627 static RK_S32 smt_calc_coef(void *ctx) in smt_calc_coef() argument
629 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *) ctx; in smt_calc_coef()
637 set_coef(ctx, &coef, 0); in smt_calc_coef()
640 set_coef(ctx, &coef, 102); in smt_calc_coef()
642 set_coef(ctx, &coef, 154); in smt_calc_coef()
645 set_coef(ctx, &coef, 154); in smt_calc_coef()
648 set_coef(ctx, &coef, 205); in smt_calc_coef()
650 set_coef(ctx, &coef, 256); in smt_calc_coef()
652 set_coef(ctx, &coef, 307); in smt_calc_coef()
654 set_coef(ctx, &coef, 307); in smt_calc_coef()
658 set_coef(ctx, &coef, 307); in smt_calc_coef()
660 set_coef(ctx, &coef, 358); in smt_calc_coef()
662 set_coef(ctx, &coef, 410); in smt_calc_coef()
665 set_coef(ctx, &coef, 358); in smt_calc_coef()
667 set_coef(ctx, &coef, 410); in smt_calc_coef()
669 set_coef(ctx, &coef, 461); in smt_calc_coef()
671 set_coef(ctx, &coef, 461); in smt_calc_coef()
675 set_coef(ctx, &coef, 410); in smt_calc_coef()
677 set_coef(ctx, &coef, 461); in smt_calc_coef()
679 set_coef(ctx, &coef, 512); in smt_calc_coef()
682 set_coef(ctx, &coef, 512); in smt_calc_coef()
684 set_coef(ctx, &coef, 563); in smt_calc_coef()
686 set_coef(ctx, &coef, 614); in smt_calc_coef()
688 set_coef(ctx, &coef, 614); in smt_calc_coef()
690 set_coef(ctx, &coef, 666); in smt_calc_coef()
692 set_coef(ctx, &coef, 768); in smt_calc_coef()
694 set_coef(ctx, &coef, 900); in smt_calc_coef()
935 MPP_RET rc_model_v2_smt_start(void *ctx, EncRcTask * task) in rc_model_v2_smt_start() argument
937 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *) ctx; in rc_model_v2_smt_start()
951 smt_start_prepare(ctx, task); in rc_model_v2_smt_start()
1002 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_smt_start()
1006 MPP_RET check_super_frame_smt(RcModelV2SmtCtx *ctx, EncRcTaskInfo *cfg) in check_super_frame_smt() argument
1009 RK_S32 frame_type = ctx->frame_type; in check_super_frame_smt()
1011 RcCfg *usr_cfg = &ctx->usr_cfg; in check_super_frame_smt()
1013 rc_dbg_func("enter %p\n", ctx); in check_super_frame_smt()
1028 rc_dbg_func("leave %p\n", ctx); in check_super_frame_smt()
1032 MPP_RET check_re_enc_smt(RcModelV2SmtCtx *ctx, EncRcTaskInfo *cfg) in check_re_enc_smt() argument
1034 RcCfg *usr_cfg = &ctx->usr_cfg; in check_re_enc_smt()
1035 RK_S32 frame_type = ctx->frame_type; in check_re_enc_smt()
1038 RK_S32 last_ins_bps = mpp_data_sum_v2(ctx->stat_bits) / stat_time; in check_re_enc_smt()
1039 RK_S32 ins_bps = (last_ins_bps * stat_time - mpp_data_get_pre_val_v2(ctx->stat_bits, -1) in check_re_enc_smt()
1044 rc_dbg_func("enter %p\n", ctx); in check_re_enc_smt()
1048 if (ctx->reenc_cnt >= usr_cfg->max_reencode_times) in check_re_enc_smt()
1051 if (check_super_frame_smt(ctx, cfg)) in check_re_enc_smt()
1054 if (usr_cfg->debreath_cfg.enable && !ctx->first_frm_flg) in check_re_enc_smt()
1082 rc_dbg_func("leave %p ret %d\n", ctx, ret); in check_re_enc_smt()
1086 MPP_RET rc_model_v2_smt_check_reenc(void *ctx, EncRcTask *task) in rc_model_v2_smt_check_reenc() argument
1088 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *)ctx; in rc_model_v2_smt_check_reenc()
1093 rc_dbg_func("enter ctx %p cfg %p\n", ctx, cfg); in rc_model_v2_smt_check_reenc()
1153 MPP_RET rc_model_v2_smt_end(void *ctx, EncRcTask * task) in rc_model_v2_smt_end() argument
1155 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *) ctx; in rc_model_v2_smt_end()
1159 rc_dbg_func("enter ctx %p cfg %p\n", ctx, cfg); in rc_model_v2_smt_end()
1185 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_smt_end()
1189 MPP_RET rc_model_v2_smt_hal_start(void *ctx, EncRcTask *task) in rc_model_v2_smt_hal_start() argument
1191 rc_dbg_func("smt_hal_start enter ctx %p task %p\n", ctx, task); in rc_model_v2_smt_hal_start()
1195 MPP_RET rc_model_v2_smt_hal_end(void *ctx, EncRcTask *task) in rc_model_v2_smt_hal_end() argument
1197 rc_dbg_func("smt_hal_end enter ctx %p task %p\n", ctx, task); in rc_model_v2_smt_hal_end()
1198 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_smt_hal_end()