hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
 * 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__ */