Lines Matching refs:p
320 RcModelV2SmtCtx *p = (RcModelV2SmtCtx*)ctx; in rc_model_v2_smt_h265_init() local
324 memcpy(&p->usr_cfg, cfg, sizeof(RcCfg)); in rc_model_v2_smt_h265_init()
325 bits_model_smt_init(p); in rc_model_v2_smt_h265_init()
333 RcModelV2SmtCtx *p = (RcModelV2SmtCtx*)ctx; in rc_model_v2_smt_h264_init() local
337 memcpy(&p->usr_cfg, cfg, sizeof(RcCfg)); in rc_model_v2_smt_h264_init()
338 bits_model_smt_init(p); in rc_model_v2_smt_h264_init()
347 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *)ctx; in rc_model_v2_smt_deinit() local
349 bits_model_smt_deinit(p); in rc_model_v2_smt_deinit()
356 RcModelV2SmtCtx *p = (RcModelV2SmtCtx*)ctx; in set_coef() local
357 RK_S32 cplx_lvl_0 = mpp_data_get_pre_val_v2(p->complex_level, 0); in set_coef()
358 RK_S32 cplx_lvl_1 = mpp_data_get_pre_val_v2(p->complex_level, 1); in set_coef()
359 RK_S32 cplx_lvl_sum = mpp_data_sum_v2(p->complex_level); in set_coef()
540 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *) ctx; in smt_start_prepare() local
542 RcFpsCfg *fps = &p->usr_cfg.fps; in smt_start_prepare()
544 RK_S32 b_min = p->usr_cfg.bps_min; in smt_start_prepare()
545 RK_S32 b_max = p->usr_cfg.bps_max; in smt_start_prepare()
548 p->frame_type = frm->is_intra ? INTRA_FRAME : INTER_P_FRAME; in smt_start_prepare()
550 p->frame_type = info->frame_type = INTER_VI_FRAME; in smt_start_prepare()
552 switch (p->gop_mode) { in smt_start_prepare()
554 if (p->frame_type == INTRA_FRAME) { in smt_start_prepare()
555 bits_lower = p->bits_per_lower_i; in smt_start_prepare()
556 bits_upper = p->bits_per_upper_i; in smt_start_prepare()
558 bits_lower = p->bits_per_lower_p - mpp_data_mean_v2(p->pid_lower_p); in smt_start_prepare()
559 bits_upper = p->bits_per_upper_p - mpp_data_mean_v2(p->pid_upper_p); in smt_start_prepare()
563 bits_lower = p->bits_per_lower_i - mpp_pid_calc(&p->pid_lower_i); in smt_start_prepare()
564 bits_upper = p->bits_per_upper_i - mpp_pid_calc(&p->pid_upper_i); in smt_start_prepare()
567 if (p->frame_type == INTRA_FRAME) { in smt_start_prepare()
568 RK_S32 diff_bit = mpp_pid_calc(&p->pid_fps); in smt_start_prepare()
570 p->pre_gop_left_bit = p->pid_fps.i - diff_bit; in smt_start_prepare()
571 mpp_pid_reset(&p->pid_fps); in smt_start_prepare()
572 if (p->acc_intra_count) { in smt_start_prepare()
573 bits_lower = (p->bits_per_lower_i + diff_bit); in smt_start_prepare()
574 bits_upper = (p->bits_per_upper_i + diff_bit); in smt_start_prepare()
576 bits_lower = p->bits_per_lower_i - mpp_pid_calc(&p->pid_lower_i); in smt_start_prepare()
577 bits_upper = p->bits_per_upper_i - mpp_pid_calc(&p->pid_upper_i); in smt_start_prepare()
580 if (p->last_frame_type == INTRA_FRAME) { in smt_start_prepare()
581 RK_S32 bits_prev_i = p->pre_real_bit_i; in smt_start_prepare()
583 bits_lower = p->bits_per_lower_p in smt_start_prepare()
584 = ((RK_S64)b_min * p->igop / fps_out - bits_prev_i + in smt_start_prepare()
585 p->pre_gop_left_bit) / (p->igop - 1); in smt_start_prepare()
587 bits_upper = p->bits_per_upper_p in smt_start_prepare()
588 = ((RK_S64)b_max * p->igop / fps_out - bits_prev_i + in smt_start_prepare()
589 p->pre_gop_left_bit) / (p->igop - 1); in smt_start_prepare()
592 RK_S32 diff_bit_lr = mpp_data_mean_v2(p->pid_lower_p); in smt_start_prepare()
593 RK_S32 diff_bit_hr = mpp_data_mean_v2(p->pid_upper_p); in smt_start_prepare()
597 bits_lower = p->bits_per_lower_p - diff_bit_lr; in smt_start_prepare()
601 bits_upper = p->bits_per_upper_p - diff_bit_hr; in smt_start_prepare()
610 p->bits_tgt_lower = bits_lower; in smt_start_prepare()
611 p->bits_tgt_upper = bits_upper; in smt_start_prepare()
616 if (NULL == p->qp_p) { in smt_start_prepare()
618 mpp_data_init(&p->qp_p, mpp_clip(MPP_MAX(p->igop, nfps), 20, 50)); in smt_start_prepare()
622 p->bits_tgt_lower, p->bits_tgt_upper, info->bit_max, p->qp_out); in smt_start_prepare()
629 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *) ctx; in smt_calc_coef() local
632 RK_S32 md_lvl_sum = mpp_data_sum_v2(p->motion_level); in smt_calc_coef()
633 RK_S32 md_lvl_0 = mpp_data_get_pre_val_v2(p->motion_level, 0); in smt_calc_coef()
634 RK_S32 md_lvl_1 = mpp_data_get_pre_val_v2(p->motion_level, 1); in smt_calc_coef()
712 static RK_S32 derive_iframe_qp_by_bitrate(RcModelV2SmtCtx *p, RK_S32 bit_target_use) in derive_iframe_qp_by_bitrate() argument
714 RcFpsCfg *fps = &p->usr_cfg.fps; in derive_iframe_qp_by_bitrate()
715 RK_S32 avg_bps = (p->usr_cfg.bps_min + p->usr_cfg.bps_max) / 2; in derive_iframe_qp_by_bitrate()
717 RK_S32 avg_pqp = mpp_data_avg(p->qp_p, -1, 1, 1); in derive_iframe_qp_by_bitrate()
718 RK_S32 avg_qp = mpp_clip(avg_pqp, p->qp_min, p->qp_max); in derive_iframe_qp_by_bitrate()
719 RK_S32 prev_iqp = p->pre_qp_i; in derive_iframe_qp_by_bitrate()
720 RK_S32 prev_pqp = p->qp_prev_out; in derive_iframe_qp_by_bitrate()
721 RK_S32 pre_bits_i = p->pre_real_bit_i; in derive_iframe_qp_by_bitrate()
734 p->frm_num, bit_target_use, pre_bits_i, prev_iqp, qp_out_i); in derive_iframe_qp_by_bitrate()
737 if (!p->reenc_cnt && p->usr_cfg.debreath_cfg.enable) in derive_iframe_qp_by_bitrate()
738 calc_smt_debreath_qp(p); in derive_iframe_qp_by_bitrate()
750 p->frm_num, qp_out_i, avg_qp, prev_pqp, prev_iqp, qp_out_i); in derive_iframe_qp_by_bitrate()
752 if (p->pre_gop_left_bit < 0) { in derive_iframe_qp_by_bitrate()
753 if (abs(p->pre_gop_left_bit) * 5 > avg_bps * (p->igop / fps_out)) in derive_iframe_qp_by_bitrate()
755 else if (abs(p->pre_gop_left_bit) * 20 > avg_bps * (p->igop / fps_out)) in derive_iframe_qp_by_bitrate()
759 p->frm_num, p->pre_gop_left_bit, avg_bps, qp_out_i); in derive_iframe_qp_by_bitrate()
765 static RK_S32 derive_pframe_qp_by_bitrate(RcModelV2SmtCtx *p) in derive_pframe_qp_by_bitrate() argument
767 RcFpsCfg *fps = &p->usr_cfg.fps; in derive_pframe_qp_by_bitrate()
768 RK_S32 avg_bps = (p->usr_cfg.bps_min + p->usr_cfg.bps_max) / 2; in derive_pframe_qp_by_bitrate()
772 RK_S32 coef = smt_calc_coef(p); in derive_pframe_qp_by_bitrate()
773 RK_S32 m_tbr = p->bits_tgt_upper - p->bits_tgt_lower; in derive_pframe_qp_by_bitrate()
774 RK_S32 m_dbr = p->pre_diff_bit_upper - p->pre_diff_bit_lower; in derive_pframe_qp_by_bitrate()
775 RK_S32 diff_bit = (p->pid_lower_all.i + p->pid_upper_all.i) >> 1; in derive_pframe_qp_by_bitrate()
776 RK_S32 prev_pqp = p->qp_prev_out; in derive_pframe_qp_by_bitrate()
777 RK_S32 qp_out = p->qp_out; in derive_pframe_qp_by_bitrate()
780 bits_target_use = ((RK_S64)m_tbr * coef + (RK_S64)p->bits_tgt_lower * 1024) >> 10; in derive_pframe_qp_by_bitrate()
781 pre_diff_bit_use = ((RK_S64)m_dbr * coef + (RK_S64)p->pre_diff_bit_lower * 1024) >> 10; in derive_pframe_qp_by_bitrate()
789 p->frm_num, bits_target_use, m_tbr, coef, p->bits_tgt_lower, in derive_pframe_qp_by_bitrate()
790 pre_diff_bit_use, m_dbr, p->pre_diff_bit_lower, in derive_pframe_qp_by_bitrate()
791 p->bits_tgt_upper, p->pre_diff_bit_upper, qp_out); in derive_pframe_qp_by_bitrate()
811 rc_dbg_rc("frame %lld prev_pqp %d qp_out_1 %d\n", p->frm_num, prev_pqp, qp_out); in derive_pframe_qp_by_bitrate()
813 qp_out = mpp_clip(qp_out, p->qp_min, p->qp_max); in derive_pframe_qp_by_bitrate()
815 pre_diff_bit_use = ((RK_S64)m_dbr * coef + (RK_S64)p->pre_diff_bit_lower * 1024) >> 10; in derive_pframe_qp_by_bitrate()
824 p->frm_num, pre_diff_bit_use, bits_target_use, coef); in derive_pframe_qp_by_bitrate()
826 pre_diff_bit_use = ((RK_S64)m_dbr * coef + (RK_S64)p->pre_diff_bit_lower * 1024) >> 10; in derive_pframe_qp_by_bitrate()
827 bits_target_use = ((RK_S64)m_tbr * coef + (RK_S64)p->bits_tgt_lower * 1024) >> 10; in derive_pframe_qp_by_bitrate()
847 p->frm_num, pre_diff_bit_use, bits_target_use, prev_pqp, qp_out); in derive_pframe_qp_by_bitrate()
850 qp_out = mpp_clip(qp_out, p->qp_min, p->qp_max); in derive_pframe_qp_by_bitrate()
853 p->change_bit_flag = 0; in derive_pframe_qp_by_bitrate()
854 if (p->usr_cfg.rc_container) { in derive_pframe_qp_by_bitrate()
855 RK_S32 cnt = p->usr_cfg.scene_mode * 3 + p->usr_cfg.rc_container; in derive_pframe_qp_by_bitrate()
856 if (p->count_real_bit < p->count_pred_bit * rc_ctnr_br_thd1[cnt] / 100) { in derive_pframe_qp_by_bitrate()
858 p->change_bit_flag = 1; in derive_pframe_qp_by_bitrate()
862 } else if (p->count_real_bit < p->count_pred_bit * rc_ctnr_br_thd2[cnt] / 100) { in derive_pframe_qp_by_bitrate()
864 p->change_bit_flag = 1; in derive_pframe_qp_by_bitrate()
874 p->frm_num, qp_out, qp_add, qp_minus); in derive_pframe_qp_by_bitrate()
881 rc_dbg_rc("frame %lld avg_bps %d qp_out_4 %d\n", p->frm_num, avg_bps, qp_out); in derive_pframe_qp_by_bitrate()
887 static RK_S32 revise_qp_by_complexity(RcModelV2SmtCtx *p, RK_S32 fm_min_iqp, in revise_qp_by_complexity() argument
890 RK_S32 md_lvl_sum = mpp_data_sum_v2(p->motion_level); in revise_qp_by_complexity()
891 RK_S32 md_lvl_0 = mpp_data_get_pre_val_v2(p->motion_level, 0); in revise_qp_by_complexity()
892 RK_S32 cplx_lvl_sum = mpp_data_sum_v2(p->complex_level); in revise_qp_by_complexity()
894 RK_S32 qp_final = p->qp_out; in revise_qp_by_complexity()
912 p->frm_num, md_lvl_sum, md_lvl_0, cplx_lvl_sum, in revise_qp_by_complexity()
915 if (p->frame_type == INTRA_FRAME) in revise_qp_by_complexity()
917 else if (p->frame_type == INTER_VI_FRAME) { in revise_qp_by_complexity()
927 qp_final = mpp_clip(qp_final, p->qp_min, p->qp_max); in revise_qp_by_complexity()
929 p->frm_num, p->frame_type, fm_min_iqp, fm_max_iqp, in revise_qp_by_complexity()
930 fm_min_pqp, fm_max_pqp, p->qp_min, p->qp_max, qp_final); in revise_qp_by_complexity()
937 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *) ctx; in rc_model_v2_smt_start() local
940 RcFpsCfg *fps = &p->usr_cfg.fps; in rc_model_v2_smt_start()
943 RK_S32 fm_min_iqp = p->usr_cfg.fqp_min_i; in rc_model_v2_smt_start()
944 RK_S32 fm_min_pqp = p->usr_cfg.fqp_min_p; in rc_model_v2_smt_start()
945 RK_S32 fm_max_iqp = p->usr_cfg.fqp_max_i; in rc_model_v2_smt_start()
946 RK_S32 fm_max_pqp = p->usr_cfg.fqp_max_p; in rc_model_v2_smt_start()
952 avg_pqp = mpp_data_avg(p->qp_p, -1, 1, 1); in rc_model_v2_smt_start()
954 if (p->frm_num == 0) { in rc_model_v2_smt_start()
955 RK_S32 mb_w = MPP_ALIGN(p->usr_cfg.width, 16) / 16; in rc_model_v2_smt_start()
956 RK_S32 mb_h = MPP_ALIGN(p->usr_cfg.height, 16) / 16; in rc_model_v2_smt_start()
959 if (p->usr_cfg.init_quality < 0) { in rc_model_v2_smt_start()
960 qp_out_f0 = cal_smt_first_i_start_qp(p->bits_tgt_upper * ratio, mb_w * mb_h); in rc_model_v2_smt_start()
961 qp_out_f0 = (fm_min_iqp > 31) ? mpp_clip(qp_out_f0, fm_min_iqp, p->qp_max) : in rc_model_v2_smt_start()
962 mpp_clip(qp_out_f0, 31, p->qp_max); in rc_model_v2_smt_start()
964 qp_out_f0 = p->usr_cfg.init_quality; in rc_model_v2_smt_start()
966 p->qp_out = qp_out_f0; in rc_model_v2_smt_start()
967 p->count_real_bit = 0; in rc_model_v2_smt_start()
968 p->count_pred_bit = 0; in rc_model_v2_smt_start()
969 p->count_frame = 0; in rc_model_v2_smt_start()
972 p->usr_cfg.init_quality, p->bits_tgt_upper, in rc_model_v2_smt_start()
973 mb_w, mb_h, ratio, p->qp_out); in rc_model_v2_smt_start()
974 } else if (p->frame_type == INTRA_FRAME) { in rc_model_v2_smt_start()
976 p->qp_out = derive_iframe_qp_by_bitrate(p, info->bit_max); in rc_model_v2_smt_start()
978 if (p->last_frame_type == INTRA_FRAME) { in rc_model_v2_smt_start()
979 RK_S32 prev_qp = p->qp_prev_out; in rc_model_v2_smt_start()
980 p->qp_out = prev_qp + (prev_qp < 33 ? 3 : (prev_qp < 35 ? 2 : 1)); in rc_model_v2_smt_start()
982 p->qp_out = derive_pframe_qp_by_bitrate(p); in rc_model_v2_smt_start()
985 p->qp_out = revise_qp_by_complexity(p, fm_min_iqp, fm_min_pqp, fm_max_iqp, fm_max_pqp); in rc_model_v2_smt_start()
987 info->quality_target = p->qp_out; in rc_model_v2_smt_start()
989 if (p->frame_type == INTER_P_FRAME && avg_pqp >= fm_max_pqp - 1 && in rc_model_v2_smt_start()
990 p->qp_out == fm_max_pqp && p->qp_prev_out == fm_max_pqp) in rc_model_v2_smt_start()
993 info->quality_max = p->usr_cfg.max_quality; in rc_model_v2_smt_start()
994 info->quality_min = p->usr_cfg.min_quality; in rc_model_v2_smt_start()
997 p->frm_num, info->quality_min, info->quality_target, in rc_model_v2_smt_start()
1000 p->frm_num++; in rc_model_v2_smt_start()
1001 p->reenc_cnt = 0; in rc_model_v2_smt_start()
1088 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *)ctx; in rc_model_v2_smt_check_reenc() local
1091 RcCfg *usr_cfg = &p->usr_cfg; in rc_model_v2_smt_check_reenc()
1099 p->on_drop || p->on_pskip) in rc_model_v2_smt_check_reenc()
1102 if (check_re_enc_smt(p, cfg)) { in rc_model_v2_smt_check_reenc()
1108 if (usr_cfg->drop_gap && p->drop_cnt >= usr_cfg->drop_gap) in rc_model_v2_smt_check_reenc()
1111 rc_dbg_drop("reenc drop_mode %d drop_cnt %d\n", drop_mode, p->drop_cnt); in rc_model_v2_smt_check_reenc()
1117 p->on_drop = 1; in rc_model_v2_smt_check_reenc()
1118 p->drop_cnt++; in rc_model_v2_smt_check_reenc()
1124 p->on_pskip = 1; in rc_model_v2_smt_check_reenc()
1125 p->drop_cnt++; in rc_model_v2_smt_check_reenc()
1131 if (p->frame_type == INTRA_FRAME) in rc_model_v2_smt_check_reenc()
1142 p->reenc_cnt++; in rc_model_v2_smt_check_reenc()
1145 p->drop_cnt = 0; in rc_model_v2_smt_check_reenc()
1155 RcModelV2SmtCtx *p = (RcModelV2SmtCtx *) ctx; in rc_model_v2_smt_end() local
1162 mpp_data_update_v2(p->rt_bits, bit_real); in rc_model_v2_smt_end()
1163 cfg->rt_bits = mpp_data_sum_v2(p->rt_bits); in rc_model_v2_smt_end()
1165 p->frm_num - 1, bit_real, cfg->rt_bits); in rc_model_v2_smt_end()
1167 mpp_data_update_v2(p->motion_level, cfg->motion_level); in rc_model_v2_smt_end()
1168 mpp_data_update_v2(p->complex_level, cfg->complex_level); in rc_model_v2_smt_end()
1169 p->first_frm_flg = 0; in rc_model_v2_smt_end()
1171 if (p->frame_type == INTER_P_FRAME || p->gop_mode == MPP_GOP_ALL_INTRA) in rc_model_v2_smt_end()
1172 mpp_data_update(p->qp_p, p->qp_out); in rc_model_v2_smt_end()
1174 p->pre_qp_i = p->qp_out; in rc_model_v2_smt_end()
1175 p->pre_real_bit_i = bit_real; in rc_model_v2_smt_end()
1178 bits_model_update_smt(p, bit_real); in rc_model_v2_smt_end()
1179 p->qp_prev_out = p->qp_out; in rc_model_v2_smt_end()
1180 p->last_frame_type = p->frame_type; in rc_model_v2_smt_end()
1181 p->pre_iblk4_prop = cfg->iblk4_prop; in rc_model_v2_smt_end()
1182 p->gop_frm_cnt++; in rc_model_v2_smt_end()
1183 p->gop_qp_sum += p->qp_out; in rc_model_v2_smt_end()