Lines Matching refs:ctx

77 MPP_RET bits_model_param_deinit(RcModelV2Ctx *ctx)  in bits_model_param_deinit()  argument
79 rc_dbg_func("enter %p\n", ctx); in bits_model_param_deinit()
81 if (ctx->i_bit != NULL) { in bits_model_param_deinit()
82 mpp_data_deinit_v2(ctx->i_bit); in bits_model_param_deinit()
83 ctx->i_bit = NULL; in bits_model_param_deinit()
86 if (ctx->p_bit != NULL) { in bits_model_param_deinit()
87 mpp_data_deinit_v2(ctx->p_bit); in bits_model_param_deinit()
88 ctx->p_bit = NULL; in bits_model_param_deinit()
91 if (ctx->vi_bit != NULL) { in bits_model_param_deinit()
92 mpp_data_deinit_v2(ctx->vi_bit); in bits_model_param_deinit()
93 ctx->vi_bit = NULL; in bits_model_param_deinit()
96 if (ctx->pre_p_bit != NULL) { in bits_model_param_deinit()
97 mpp_data_deinit_v2(ctx->pre_p_bit); in bits_model_param_deinit()
98 ctx->pre_p_bit = NULL; in bits_model_param_deinit()
101 if (ctx->pre_i_bit != NULL) { in bits_model_param_deinit()
102 mpp_data_deinit_v2(ctx->pre_i_bit); in bits_model_param_deinit()
103 ctx->pre_i_bit = NULL; in bits_model_param_deinit()
106 if (ctx->pre_i_mean_qp != NULL) { in bits_model_param_deinit()
107 mpp_data_deinit_v2(ctx->pre_i_mean_qp); in bits_model_param_deinit()
108 ctx->pre_i_mean_qp = NULL; in bits_model_param_deinit()
111 if (ctx->madi != NULL) { in bits_model_param_deinit()
112 mpp_data_deinit_v2(ctx->madi); in bits_model_param_deinit()
113 ctx->madi = NULL; in bits_model_param_deinit()
115 if (ctx->madp != NULL) { in bits_model_param_deinit()
116 mpp_data_deinit_v2(ctx->madp); in bits_model_param_deinit()
117 ctx->madp = NULL; in bits_model_param_deinit()
120 if (ctx->stat_rate != NULL) { in bits_model_param_deinit()
121 mpp_data_deinit_v2(ctx->stat_rate); in bits_model_param_deinit()
122 ctx->stat_rate = NULL; in bits_model_param_deinit()
125 if (ctx->stat_bits != NULL) { in bits_model_param_deinit()
126 mpp_data_deinit_v2(ctx->stat_bits); in bits_model_param_deinit()
127 ctx->stat_bits = NULL; in bits_model_param_deinit()
129 if (ctx->gop_bits != NULL) { in bits_model_param_deinit()
130 mpp_data_deinit_v2(ctx->gop_bits); in bits_model_param_deinit()
131 ctx->gop_bits = NULL; in bits_model_param_deinit()
133 if (ctx->motion_level != NULL) { in bits_model_param_deinit()
134 mpp_data_deinit_v2(ctx->motion_level); in bits_model_param_deinit()
135 ctx->motion_level = NULL; in bits_model_param_deinit()
137 if (ctx->complex_level != NULL) { in bits_model_param_deinit()
138 mpp_data_deinit_v2(ctx->complex_level); in bits_model_param_deinit()
139 ctx->complex_level = NULL; in bits_model_param_deinit()
141 rc_dbg_func("leave %p\n", ctx); in bits_model_param_deinit()
145 MPP_RET bits_model_param_init(RcModelV2Ctx *ctx) in bits_model_param_init() argument
147 RK_S32 gop_len = ctx->usr_cfg.igop; in bits_model_param_init()
148 RcFpsCfg *fps = &ctx->usr_cfg.fps; in bits_model_param_init()
150 RK_U32 stat_len = fps->fps_out_num * ctx->usr_cfg.stats_time / fps->fps_out_denom; in bits_model_param_init()
153 bits_model_param_deinit(ctx); in bits_model_param_init()
154 mpp_data_init_v2(&ctx->i_bit, I_WINDOW_LEN, 0); in bits_model_param_init()
155 if (ctx->i_bit == NULL) { in bits_model_param_init()
160 mpp_data_init_v2(&ctx->vi_bit, I_WINDOW_LEN, 0); in bits_model_param_init()
161 if (ctx->vi_bit == NULL) { in bits_model_param_init()
165 mpp_data_init_v2(&ctx->p_bit, P_WINDOW1_LEN, 0); in bits_model_param_init()
166 if (ctx->p_bit == NULL) { in bits_model_param_init()
171 mpp_data_init_v2(&ctx->pre_p_bit, P_WINDOW2_LEN, 0); in bits_model_param_init()
172 if (ctx->pre_p_bit == NULL) { in bits_model_param_init()
177 mpp_data_init_v2(&ctx->pre_i_bit, I_WINDOW_LEN, 0); in bits_model_param_init()
178 if (ctx->pre_i_bit == NULL) { in bits_model_param_init()
183 mpp_data_init_v2(&ctx->pre_i_mean_qp, I_WINDOW_LEN, -1); in bits_model_param_init()
184 if (ctx->pre_i_mean_qp == NULL) { in bits_model_param_init()
188 mpp_data_init_v2(&ctx->madi, P_WINDOW2_LEN, 0); in bits_model_param_init()
189 if (ctx->madi == NULL) { in bits_model_param_init()
193 mpp_data_init_v2(&ctx->madp, P_WINDOW2_LEN, 0); in bits_model_param_init()
194 if (ctx->madp == NULL) { in bits_model_param_init()
198 mpp_data_init_v2(&ctx->stat_rate, fps->fps_out_num, 0); in bits_model_param_init()
199 if (ctx->stat_rate == NULL) { in bits_model_param_init()
204 mpp_data_init_v2(&ctx->stat_bits, stat_len, ctx->bit_per_frame); in bits_model_param_init()
205 if (ctx->stat_bits == NULL) { in bits_model_param_init()
210 mpp_data_init_v2(&ctx->gop_bits, gop_len, 0); in bits_model_param_init()
211 if (ctx->gop_bits == NULL) { in bits_model_param_init()
216 if (ctx->usr_cfg.refresh_len) { in bits_model_param_init()
217 mpp_data_init_v2(&ctx->i_refresh_bit, ctx->usr_cfg.refresh_len, 0); in bits_model_param_init()
218 if (ctx->i_refresh_bit == NULL) { in bits_model_param_init()
219 mpp_err("i_refresh_bit init fail refresh_len %d", ctx->usr_cfg.refresh_len); in bits_model_param_init()
224 mpp_data_init_v2(&ctx->motion_level, mad_len, 0); in bits_model_param_init()
225 if (ctx->motion_level == NULL) { in bits_model_param_init()
230 mpp_data_init_v2(&ctx->complex_level, mad_len, 0); in bits_model_param_init()
231 if (ctx->complex_level == NULL) { in bits_model_param_init()
239 void bits_frm_init(RcModelV2Ctx *ctx) in bits_frm_init() argument
241 RcCfg *usr_cfg = &ctx->usr_cfg; in bits_frm_init()
246 rc_dbg_func("enter %p\n", ctx); in bits_frm_init()
250 ctx->i_scale = ctx->usr_cfg.init_ip_ratio; in bits_frm_init()
251 ctx->p_scale = 16; in bits_frm_init()
253 p_bit = ctx->gop_total_bits * 16; in bits_frm_init()
255 p_bit = ctx->gop_total_bits * 16 / (ctx->i_scale + ctx->p_scale * (gop_len - 1)); in bits_frm_init()
256 mpp_data_reset_v2(ctx->p_bit, p_bit); in bits_frm_init()
257 ctx->p_sumbits = 5 * p_bit; in bits_frm_init()
258 mpp_data_reset_v2(ctx->i_bit, p_bit * ctx->i_scale / 16); in bits_frm_init()
259 ctx->i_sumbits = 2 * p_bit * ctx->i_scale / 16; in bits_frm_init()
261 ctx->i_refresh_scale = ctx->i_scale / usr_cfg->refresh_len + ctx->p_scale; in bits_frm_init()
262 refresh_bit = ctx->gop_total_bits * 16 / (ctx->i_refresh_scale * usr_cfg->refresh_len in bits_frm_init()
263 … + ctx->p_scale * (gop_len - usr_cfg->refresh_len)); in bits_frm_init()
264 mpp_data_reset_v2(ctx->i_refresh_bit, refresh_bit); in bits_frm_init()
265 ctx->i_refresh_sumbits = usr_cfg->refresh_len * refresh_bit; in bits_frm_init()
271 ctx->i_scale = 320; in bits_frm_init()
272 ctx->p_scale = 16; in bits_frm_init()
273 ctx->vi_scale = 32; in bits_frm_init()
278 …p_bit = ctx->gop_total_bits * 16 / (ctx->i_scale + ctx->vi_scale * vi_num + ctx->p_scale * (gop_le… in bits_frm_init()
279 mpp_data_reset_v2(ctx->p_bit, p_bit); in bits_frm_init()
280 ctx->p_sumbits = 5 * p_bit; in bits_frm_init()
282 mpp_data_reset_v2(ctx->i_bit, p_bit * ctx->i_scale / 16); in bits_frm_init()
283 ctx->i_sumbits = 2 * p_bit * ctx->i_scale / 16; in bits_frm_init()
285 mpp_data_reset_v2(ctx->vi_bit, p_bit * ctx->vi_scale / 16); in bits_frm_init()
286 ctx->vi_sumbits = 2 * p_bit * ctx->vi_scale / 16; in bits_frm_init()
291 …rc_dbg_rc("p_sumbits %d i_sumbits %d vi_sumbits %d\n", ctx->p_sumbits, ctx->i_sumbits, ctx->vi_sum… in bits_frm_init()
292 rc_dbg_func("leave %p\n", ctx); in bits_frm_init()
295 RK_S32 moving_judge_update(RcModelV2Ctx *ctx, EncRcTaskInfo *cfg) in moving_judge_update() argument
299 mpp_data_update_v2(ctx->pre_i_bit, cfg->bit_real); in moving_judge_update()
300 mpp_data_update_v2(ctx->pre_i_mean_qp, cfg->quality_real); in moving_judge_update()
304 mpp_data_update_v2(ctx->pre_p_bit, cfg->bit_real); in moving_judge_update()
305 mpp_data_update_v2(ctx->madp, cfg->madp); in moving_judge_update()
314 void bit_statics_update(RcModelV2Ctx *ctx, RK_U32 real_bit) in bit_statics_update() argument
317 RcCfg *usr_cfg = &ctx->usr_cfg; in bit_statics_update()
320 mpp_data_update_v2(ctx->gop_bits, real_bit); in bit_statics_update()
321 mean_pbits = mpp_data_mean_v2(ctx->pre_p_bit); in bit_statics_update()
322 mean_ibits = mpp_data_mean_v2(ctx->pre_i_bit); in bit_statics_update()
323 ctx->real_gbits = mpp_data_sum_v2(ctx->gop_bits); in bit_statics_update()
324 ctx->avg_gbits = (gop_len - 1) * (RK_S64)mean_pbits + mean_ibits; in bit_statics_update()
327 MPP_RET bits_model_preset(RcModelV2Ctx *ctx, EncRcTaskInfo *info) in bits_model_preset() argument
329 RcCfg *usr_cfg = &ctx->usr_cfg; in bits_model_preset()
333 mpp_data_preset_v2(ctx->stat_rate, preset_bit != 0); in bits_model_preset()
334 mpp_data_preset_v2(ctx->stat_bits, preset_bit); in bits_model_preset()
336 ctx->ins_bps = mpp_data_sum_v2(ctx->stat_bits) / usr_cfg->stats_time; in bits_model_preset()
337 if (preset_bit + ctx->stat_watl > ctx->watl_thrd) in bits_model_preset()
338 water_level = ctx->watl_thrd - ctx->bit_per_frame; in bits_model_preset()
340 water_level = preset_bit + ctx->stat_watl - ctx->bit_per_frame; in bits_model_preset()
345 ctx->stat_watl = water_level; in bits_model_preset()
348 mpp_data_preset_v2(ctx->i_bit, preset_bit); in bits_model_preset()
349 ctx->i_sumbits = mpp_data_sum_v2(ctx->i_bit); in bits_model_preset()
350 ctx->i_scale = 80 * ctx->i_sumbits / (2 * ctx->p_sumbits); in bits_model_preset()
352 ctx->i_sumbits, ctx->p_sumbits, ctx->i_scale); in bits_model_preset()
355 mpp_data_preset_v2(ctx->p_bit, preset_bit); in bits_model_preset()
356 ctx->p_sumbits = mpp_data_sum_v2(ctx->p_bit); in bits_model_preset()
359 if (!ctx->p_sumbits) in bits_model_preset()
360 ctx->p_sumbits = 1; in bits_model_preset()
362 ctx->p_scale = 16; in bits_model_preset()
365 mpp_data_preset_v2(ctx->vi_bit, preset_bit); in bits_model_preset()
366 ctx->vi_sumbits = mpp_data_sum_v2(ctx->vi_bit); in bits_model_preset()
367 ctx->vi_scale = 80 * ctx->vi_sumbits / (2 * ctx->p_sumbits); in bits_model_preset()
369 ctx->vi_scale = mpp_clip(ctx->vi_scale, 16, 320); in bits_model_preset()
372 mpp_data_update_v2(ctx->i_refresh_bit, preset_bit); in bits_model_preset()
373 mpp_data_update_v2(ctx->madi, info->madi); in bits_model_preset()
374 ctx->i_refresh_sumbits = mpp_data_sum_v2(ctx->i_refresh_bit); in bits_model_preset()
375ctx->i_refresh_scale = 80 * ctx->i_refresh_sumbits / (usr_cfg->refresh_len * ctx->p_sumbits); in bits_model_preset()
376 ctx->i_refresh_scale = mpp_clip(ctx->i_refresh_scale, 16, 64); in bits_model_preset()
384 MPP_RET bits_model_update(RcModelV2Ctx *ctx, EncRcTaskInfo *cfg) in bits_model_update() argument
386 RcCfg *usr_cfg = &ctx->usr_cfg; in bits_model_update()
391 rc_dbg_func("enter %p\n", ctx); in bits_model_update()
393 mpp_data_update_v2(ctx->stat_rate, real_bit != 0); in bits_model_update()
394 mpp_data_update_v2(ctx->stat_bits, real_bit); in bits_model_update()
396 ctx->ins_bps = mpp_data_sum_v2(ctx->stat_bits) / usr_cfg->stats_time; in bits_model_update()
397 if (real_bit + ctx->stat_watl > ctx->watl_thrd) in bits_model_update()
398 water_level = ctx->watl_thrd - ctx->bit_per_frame; in bits_model_update()
400 water_level = real_bit + ctx->stat_watl - ctx->bit_per_frame; in bits_model_update()
405 ctx->stat_watl = water_level; in bits_model_update()
409 mpp_data_update_v2(ctx->i_bit, real_bit); in bits_model_update()
410 ctx->i_sumbits = mpp_data_sum_v2(ctx->i_bit); in bits_model_update()
411 ctx->i_scale = 80 * ctx->i_sumbits / (2 * ctx->p_sumbits); in bits_model_update()
413 ctx->i_sumbits, ctx->p_sumbits, ctx->i_scale); in bits_model_update()
416 mpp_data_update_v2(ctx->p_bit, real_bit); in bits_model_update()
417 mpp_data_update_v2(ctx->madi, madi); in bits_model_update()
418 ctx->p_sumbits = mpp_data_sum_v2(ctx->p_bit); in bits_model_update()
421 if (!ctx->p_sumbits) in bits_model_update()
422 ctx->p_sumbits = 1; in bits_model_update()
424 ctx->p_scale = 16; in bits_model_update()
427 mpp_data_update_v2(ctx->vi_bit, real_bit); in bits_model_update()
428 ctx->vi_sumbits = mpp_data_sum_v2(ctx->vi_bit); in bits_model_update()
429 ctx->vi_scale = 80 * ctx->vi_sumbits / (2 * ctx->p_sumbits); in bits_model_update()
431 ctx->vi_scale = mpp_clip(ctx->vi_scale, 16, 320); in bits_model_update()
434 mpp_data_update_v2(ctx->i_refresh_bit, real_bit); in bits_model_update()
435 mpp_data_update_v2(ctx->madi, madi); in bits_model_update()
436 ctx->i_refresh_sumbits = mpp_data_sum_v2(ctx->i_refresh_bit); in bits_model_update()
437ctx->i_refresh_scale = 80 * ctx->i_refresh_sumbits / (usr_cfg->refresh_len * ctx->p_sumbits); in bits_model_update()
438 ctx->i_refresh_scale = mpp_clip(ctx->i_refresh_scale, 16, 64); in bits_model_update()
444 rc_dbg_func("leave %p\n", ctx); in bits_model_update()
448 MPP_RET bits_model_alloc(RcModelV2Ctx *ctx, EncRcTaskInfo *cfg, RK_S64 total_bits) in bits_model_alloc() argument
450 RcCfg *usr_cfg = &ctx->usr_cfg; in bits_model_alloc()
453 RK_S32 i_scale = ctx->i_scale; in bits_model_alloc()
454 RK_S32 vi_scale = ctx->vi_scale; in bits_model_alloc()
459 ctx->i_scale = 80 * ctx->i_sumbits / (2 * ctx->p_sumbits); in bits_model_alloc()
460 i_scale = ctx->i_scale; in bits_model_alloc()
462 rc_dbg_func("enter %p\n", ctx); in bits_model_alloc()
502ctx->gop_total_bits, ctx->i_sumbits, ctx->p_sumbits, usr_cfg->vgop, usr_cfg->igop); in bits_model_alloc()
520 total_bits = total_bits * ctx->i_refresh_scale; in bits_model_alloc()
521 rc_dbg_rc("ctx->i_refresh_scale = %d", ctx->i_refresh_scale); in bits_model_alloc()
531 (ctx->i_refresh_scale * usr_cfg->refresh_len + in bits_model_alloc()
544 ctx->cur_super_thd = super_bit_thr; in bits_model_alloc()
553 rc_dbg_func("leave %p\n", ctx); in bits_model_alloc()
557 MPP_RET calc_next_i_ratio(RcModelV2Ctx *ctx) in calc_next_i_ratio() argument
559 RcCfg *usr_cfg = &ctx->usr_cfg; in calc_next_i_ratio()
562 RK_S32 pre_qp = ctx->pre_i_qp; in calc_next_i_ratio()
565 rc_dbg_func("enter %p\n", ctx); in calc_next_i_ratio()
567 bits_alloc = ctx->gop_total_bits * max_i_prop / (max_i_prop + 16 * (gop_len - 1)); in calc_next_i_ratio()
569 bits_alloc = ctx->gop_total_bits * max_i_prop / max_i_prop; in calc_next_i_ratio()
572 if (ctx->pre_real_bits > bits_alloc || ctx->next_i_ratio) { in calc_next_i_ratio()
573 RK_S32 ratio = ((ctx->pre_real_bits - bits_alloc) << 8) / bits_alloc; in calc_next_i_ratio()
576 ratio = ctx->next_i_ratio + ratio; in calc_next_i_ratio()
583 ctx->next_i_ratio = ratio; in calc_next_i_ratio()
584 rc_dbg_rc("ctx->next_i_ratio %d", ctx->next_i_ratio); in calc_next_i_ratio()
587 rc_dbg_func("leave %p\n", ctx); in calc_next_i_ratio()
592 MPP_RET calc_debreath_qp(RcModelV2Ctx *ctx) in calc_debreath_qp() argument
594 rc_dbg_func("enter %p\n", ctx); in calc_debreath_qp()
595 RcDebreathCfg *debreath_cfg = &ctx->usr_cfg.debreath_cfg; in calc_debreath_qp()
598 RK_U8 idx2 = MPP_MIN(ctx->pre_iblk4_prop >> 5, (RK_S32)sizeof(intra_qp_map) - 1); in calc_debreath_qp()
606 qp_start_sum = MPP_MIN(ctx->gop_qp_sum / ctx->gop_frm_cnt, (RK_S32)sizeof(strength_map) - 1); in calc_debreath_qp()
609 ctx->start_qp, qp_start_sum, ctx->pre_iblk4_prop); in calc_debreath_qp()
617 ctx->start_qp = mpp_clip(new_start_qp, ctx->usr_cfg.min_i_quality, ctx->usr_cfg.max_i_quality); in calc_debreath_qp()
619 rc_dbg_func("leave %p\n", ctx); in calc_debreath_qp()
623 MPP_RET calc_cbr_ratio(void *ctx, EncRcTaskInfo *cfg) in calc_cbr_ratio() argument
625 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in calc_cbr_ratio()
694 MPP_RET reenc_calc_super_frm_ratio(void *ctx, EncRcTaskInfo *cfg) in reenc_calc_super_frm_ratio() argument
696 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in reenc_calc_super_frm_ratio()
705 MPP_RET reenc_calc_cbr_ratio(void *ctx, EncRcTaskInfo *cfg) in reenc_calc_cbr_ratio() argument
707 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in reenc_calc_cbr_ratio()
725 return reenc_calc_super_frm_ratio(ctx, cfg); in reenc_calc_cbr_ratio()
825 MPP_RET calc_vbr_ratio(void *ctx, EncRcTaskInfo *cfg) in calc_vbr_ratio() argument
827 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in calc_vbr_ratio()
885 MPP_RET reenc_calc_vbr_ratio(void *ctx, EncRcTaskInfo *cfg) in reenc_calc_vbr_ratio() argument
888 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in reenc_calc_vbr_ratio()
905 return reenc_calc_super_frm_ratio(ctx, cfg); in reenc_calc_vbr_ratio()
934 RK_S32 moving_ratio_calc(RcModelV2Ctx *ctx) in moving_ratio_calc() argument
936 RK_S32 motion_sensitivity = ctx->motion_sensitivity; in moving_ratio_calc()
943 RK_S32 pre_I_bit = mpp_data_get_pre_val_v2(ctx->pre_i_bit, i); in moving_ratio_calc()
944 RK_S32 pre_mean_qp = mpp_data_get_pre_val_v2(ctx->pre_i_mean_qp, i); in moving_ratio_calc()
948 RK_S32 index = pre_mean_qp + 8 - ctx->pre_mean_qp; in moving_ratio_calc()
957 rc_dbg_rc("pre_mean_qp = %d, ctx->pre_mean_qp %d", pre_mean_qp, ctx->pre_mean_qp); in moving_ratio_calc()
961 pbit_sum = mpp_data_sum_v2(ctx->pre_p_bit); in moving_ratio_calc()
962 madi_sum = mpp_data_sum_v2(ctx->madi); in moving_ratio_calc()
963 madp_sum = mpp_data_sum_v2(ctx->madp); in moving_ratio_calc()
972 rc_dbg_rc("means qp percent %d min_still_percent %d", percent, ctx->min_still_percent); in moving_ratio_calc()
973 RK_S32 percent_a = (ctx->min_still_percent - 30) << 8; in moving_ratio_calc()
974 RK_S32 percent_b = 100 - ctx->min_still_percent; in moving_ratio_calc()
978 RK_S32 mv_percnt = (ctx->prev_md_prop * 100) >> 8; in moving_ratio_calc()
996 MPP_RET calc_avbr_ratio(void *ctx, EncRcTaskInfo *cfg) in calc_avbr_ratio() argument
998 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in calc_avbr_ratio()
1097 MPP_RET bits_model_init(RcModelV2Ctx *ctx) in bits_model_init() argument
1099 RcCfg *usr_cfg = &ctx->usr_cfg; in bits_model_init()
1100 RK_S32 gop_len = ctx->usr_cfg.igop; in bits_model_init()
1101 RcFpsCfg *fps = &ctx->usr_cfg.fps; in bits_model_init()
1105 rc_dbg_func("enter %p\n", ctx); in bits_model_init()
1130 ctx->max_still_qp = 35; in bits_model_init()
1131 ctx->motion_sensitivity = 90; in bits_model_init()
1133 ctx->first_frm_flg = 1; in bits_model_init()
1134 ctx->gop_frm_cnt = 0; in bits_model_init()
1135 ctx->gop_qp_sum = 0; in bits_model_init()
1141 target_bps = ctx->usr_cfg.bps_max; in bits_model_init()
1142 ctx->re_calc_ratio = reenc_calc_vbr_ratio; in bits_model_init()
1143 switch (ctx->usr_cfg.mode) { in bits_model_init()
1145 ctx->calc_ratio = calc_cbr_ratio; in bits_model_init()
1146 ctx->re_calc_ratio = reenc_calc_cbr_ratio; in bits_model_init()
1147 target_bps = ctx->usr_cfg.bps_target; in bits_model_init()
1150 ctx->calc_ratio = calc_vbr_ratio; in bits_model_init()
1156 ctx->calc_ratio = calc_avbr_ratio; in bits_model_init()
1158 ctx->min_still_percent = (RK_S64)usr_cfg->bps_min * 100 / usr_cfg->bps_max; in bits_model_init()
1160 ctx->min_still_percent = 25; in bits_model_init()
1162 rc_dbg_rc("min_still_percent %d", ctx->min_still_percent); in bits_model_init()
1175 ctx->target_bps = ctx->usr_cfg.bps_target; in bits_model_init()
1182 ctx->gop_total_bits = gop_bits / fps->fps_out_num; in bits_model_init()
1183 ctx->bit_per_frame = target_bps * fps->fps_out_denom / fps->fps_out_num; in bits_model_init()
1184 ctx->watl_thrd = 3 * target_bps; in bits_model_init()
1185 ctx->stat_watl = ctx->watl_thrd >> 3; in bits_model_init()
1186 ctx->watl_base = ctx->stat_watl; in bits_model_init()
1187 ctx->last_fps = fps->fps_out_num / fps->fps_out_denom; in bits_model_init()
1190 ctx->usr_cfg.igop, ctx->gop_total_bits, ctx->bit_per_frame, in bits_model_init()
1191 ctx->usr_cfg.stats_time); in bits_model_init()
1193 if (bits_model_param_init(ctx)) { in bits_model_init()
1196 ctx->time_base = mpp_time(); in bits_model_init()
1197 bits_frm_init(ctx); in bits_model_init()
1198 rc_dbg_func("leave %p\n", ctx); in bits_model_init()
1202 static MPP_RET update_mode_param(RcModelV2Ctx *ctx, RK_U32 fps) in update_mode_param() argument
1204 RcCfg *usr_cfg = &ctx->usr_cfg; in update_mode_param()
1205 RK_S32 gop_len = ctx->usr_cfg.igop; in update_mode_param()
1210 target_bps = ctx->usr_cfg.bps_max; in update_mode_param()
1211 if (ctx->usr_cfg.mode == RC_CBR) { in update_mode_param()
1212 target_bps = ctx->usr_cfg.bps_target; in update_mode_param()
1220 ctx->gop_total_bits = gop_bits / fps; in update_mode_param()
1222 ctx->bit_per_frame = target_bps / fps; in update_mode_param()
1224 if (ctx->stat_bits != NULL) { in update_mode_param()
1225 mpp_data_deinit_v2(ctx->stat_bits); in update_mode_param()
1226 ctx->stat_bits = NULL; in update_mode_param()
1228 mpp_data_init_v2(&ctx->stat_bits, stat_len , ctx->bit_per_frame); in update_mode_param()
1229 if (ctx->stat_bits == NULL) { in update_mode_param()
1236 static MPP_RET fps_chg_update_mode(RcModelV2Ctx *ctx) in fps_chg_update_mode() argument
1238 ctx->time_end = mpp_time(); in fps_chg_update_mode()
1239 ctx->frm_cnt++; in fps_chg_update_mode()
1241 if (ctx->time_base && ctx->time_end && in fps_chg_update_mode()
1242 ((ctx->time_end - ctx->time_base) >= (RK_S64)(250 * 1000))) { in fps_chg_update_mode()
1244 RK_S32 time_diff = ((RK_S32)(ctx->time_end - ctx->time_base) / 1000); in fps_chg_update_mode()
1245 RK_U32 fps = ctx->frm_cnt * 1000 / time_diff; in fps_chg_update_mode()
1247 if (ctx->last_fps > 0 && fps && in fps_chg_update_mode()
1248 … abs(ctx->last_fps - (RK_S32)fps) * 100 / ctx->last_fps > (RK_S32)ctx->usr_cfg.fps_chg_prop) { in fps_chg_update_mode()
1249 update_mode_param(ctx, fps); in fps_chg_update_mode()
1250 mpp_log("fps chg from %d -> %d", ctx->last_fps, fps); in fps_chg_update_mode()
1251 ctx->last_fps = fps; in fps_chg_update_mode()
1253 ctx->time_base = ctx->time_end; in fps_chg_update_mode()
1254 ctx->frm_cnt = 0; in fps_chg_update_mode()
1260 MPP_RET bits_mode_reset(RcModelV2Ctx *ctx) in bits_mode_reset() argument
1262 rc_dbg_func("enter %p\n", ctx); in bits_mode_reset()
1263 (void) ctx; in bits_mode_reset()
1264 rc_dbg_func("leave %p\n", ctx); in bits_mode_reset()
1268 MPP_RET check_super_frame(RcModelV2Ctx *ctx, EncRcTaskInfo *cfg) in check_super_frame() argument
1273 RcCfg *usr_cfg = &ctx->usr_cfg; in check_super_frame()
1275 rc_dbg_func("enter %p\n", ctx); in check_super_frame()
1291 rc_dbg_func("leave %p\n", ctx); in check_super_frame()
1295 MPP_RET check_re_enc(RcModelV2Ctx *ctx, EncRcTaskInfo *cfg) in check_re_enc() argument
1297 RcCfg *usr_cfg = &ctx->usr_cfg; in check_re_enc()
1301 RK_S32 last_ins_bps = mpp_data_sum_v2(ctx->stat_bits) / stat_time; in check_re_enc()
1302 RK_S32 ins_bps = (last_ins_bps * stat_time - mpp_data_get_pre_val_v2(ctx->stat_bits, -1) in check_re_enc()
1307 rc_dbg_func("enter %p\n", ctx); in check_re_enc()
1311 if (ctx->reenc_cnt >= usr_cfg->max_reencode_times) in check_re_enc()
1314 if (check_super_frame(ctx, cfg)) in check_re_enc()
1317 if (usr_cfg->debreath_cfg.enable && !ctx->first_frm_flg) in check_re_enc()
1356 rc_dbg_func("leave %p ret %d\n", ctx, ret); in check_re_enc()
1361 MPP_RET rc_model_v2_init(void *ctx, RcCfg *cfg) in rc_model_v2_init() argument
1363 RcModelV2Ctx *p = (RcModelV2Ctx*)ctx; in rc_model_v2_init()
1365 rc_dbg_func("enter %p\n", ctx); in rc_model_v2_init()
1373 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_init()
1377 MPP_RET rc_model_v2_deinit(void *ctx) in rc_model_v2_deinit() argument
1379 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in rc_model_v2_deinit()
1381 rc_dbg_func("enter %p\n", ctx); in rc_model_v2_deinit()
1384 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_deinit()
1388 MPP_RET rc_model_v2_start(void *ctx, EncRcTask *task) in rc_model_v2_start() argument
1390 RcModelV2Ctx *p = (RcModelV2Ctx*)ctx; in rc_model_v2_start()
1395 rc_dbg_func("enter %p\n", ctx); in rc_model_v2_start()
1431 fps_chg_update_mode(ctx); in rc_model_v2_start()
1473 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_start()
1519 static RK_S32 derive_min_qp_from_complexity(RcModelV2Ctx *ctx, EncRcTaskInfo *info, RK_U32 is_intra) in derive_min_qp_from_complexity() argument
1521 RcCfg *usr_cfg = &ctx->usr_cfg; in derive_min_qp_from_complexity()
1526 RK_S32 cplx = mpp_data_sum_v2(ctx->complex_level); in derive_min_qp_from_complexity()
1527 RK_S32 md = mpp_data_sum_v2(ctx->motion_level); in derive_min_qp_from_complexity()
1528 RK_S32 md3 = mpp_data_get_pre_val_v2(ctx->motion_level, 0) + in derive_min_qp_from_complexity()
1529 mpp_data_get_pre_val_v2(ctx->motion_level, 1) + in derive_min_qp_from_complexity()
1530 mpp_data_get_pre_val_v2(ctx->motion_level, 2); in derive_min_qp_from_complexity()
1557 ctx->frm_num, cplx, md, md3, qp_min); in derive_min_qp_from_complexity()
1563 MPP_RET rc_model_v2_hal_start(void *ctx, EncRcTask *task) in rc_model_v2_hal_start() argument
1565 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in rc_model_v2_hal_start()
1670 calc_debreath_qp(ctx); in rc_model_v2_hal_start()
1724 MPP_RET rc_model_v2_hal_end(void *ctx, EncRcTask *task) in rc_model_v2_hal_end() argument
1726 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in rc_model_v2_hal_end()
1729 rc_dbg_func("enter ctx %p task %p\n", ctx, task); in rc_model_v2_hal_end()
1736 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_hal_end()
1740 MPP_RET rc_model_v2_check_reenc(void *ctx, EncRcTask *task) in rc_model_v2_check_reenc() argument
1742 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in rc_model_v2_check_reenc()
1747 rc_dbg_func("enter ctx %p cfg %p\n", ctx, cfg); in rc_model_v2_check_reenc()
1799 MPP_RET rc_model_v2_end(void *ctx, EncRcTask *task) in rc_model_v2_end() argument
1801 RcModelV2Ctx *p = (RcModelV2Ctx *)ctx; in rc_model_v2_end()
1805 rc_dbg_func("enter ctx %p cfg %p\n", ctx, cfg); in rc_model_v2_end()
1840 rc_dbg_func("leave %p\n", ctx); in rc_model_v2_end()