/* * Copyright 2016 Rockchip Electronics Co. LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __RC_CTX_H__ #define __RC_CTX_H__ #include "mpp_rc_api.h" #include "rc_base.h" typedef struct RcModelV2Ctx_t { RcCfg usr_cfg; RK_U32 last_frame_type; RK_S64 gop_total_bits; RK_U32 bit_per_frame; RK_U32 first_frm_flg; RK_S64 avg_gbits; RK_S64 real_gbits; MppDataV2 *i_bit; RK_U32 i_sumbits; RK_U32 i_scale; MppDataV2 *idr_bit; RK_U32 idr_sumbits; RK_U32 idr_scale; MppDataV2 *vi_bit; RK_U32 vi_sumbits; RK_U32 vi_scale; MppDataV2 *p_bit; RK_U32 p_sumbits; RK_U32 p_scale; MppDataV2 *pre_p_bit; MppDataV2 *pre_i_bit; MppDataV2 *pre_i_mean_qp; MppDataV2 *madi; MppDataV2 *madp; RK_S32 target_bps; RK_S32 pre_target_bits; RK_S32 pre_real_bits; RK_S32 frm_bits_thr; RK_S32 ins_bps; RK_S32 last_inst_bps; RK_U32 motion_sensitivity; RK_U32 min_still_percent; RK_U32 max_still_qp; RK_S32 moving_ratio; RK_U32 pre_mean_qp; RK_U32 pre_i_scale; RK_S32 cur_super_thd; MppDataV2 *stat_bits; MppDataV2 *gop_bits; MppDataV2 *stat_rate; RK_S32 watl_thrd; RK_S32 stat_watl; RK_S32 watl_base; RK_S32 next_i_ratio; // scale 64 RK_S32 next_ratio; // scale 64 RK_S32 pre_i_qp; RK_S32 pre_p_qp; RK_U32 scale_qp; // scale 64 MppDataV2 *means_qp; RK_U32 frm_num; /* qp decision */ RK_S32 cur_scale_qp; RK_S32 start_qp; RK_S32 prev_quality; RK_S32 prev_md_prop; RK_S32 gop_qp_sum; RK_S32 gop_frm_cnt; RK_S32 pre_iblk4_prop; RK_S32 reenc_cnt; RK_U32 drop_cnt; RK_S32 on_drop; RK_S32 on_pskip; RK_S32 qp_layer_id; RK_S32 hier_frm_cnt[4]; MPP_RET (*calc_ratio)(void* ctx, EncRcTaskInfo *cfg); MPP_RET (*re_calc_ratio)(void* ctx, EncRcTaskInfo *cfg); } RcModelV2Ctx; #ifdef __cplusplus extern "C" { #endif /* basic helper function */ MPP_RET bits_model_init(RcModelV2Ctx *ctx); MPP_RET bits_model_deinit(RcModelV2Ctx *ctx); MPP_RET bits_model_alloc(RcModelV2Ctx *ctx, EncRcTaskInfo *cfg, RK_S64 total_bits); MPP_RET bits_model_update(RcModelV2Ctx *ctx, EncRcTaskInfo *cfg); MPP_RET calc_next_i_ratio(RcModelV2Ctx *ctx); MPP_RET check_re_enc(RcModelV2Ctx *ctx, EncRcTaskInfo *cfg); #ifdef __cplusplus } #endif #endif /* __RC_CTX_H__ */