xref: /rockchip-linux_mpp/mpp/codec/rc/rc_base.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka  * Copyright (c) 2016 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka  */
5*437bfbebSnyanmisaka 
6*437bfbebSnyanmisaka #ifndef __RC_BASE_H__
7*437bfbebSnyanmisaka #define __RC_BASE_H__
8*437bfbebSnyanmisaka 
9*437bfbebSnyanmisaka #include "mpp_list.h"
10*437bfbebSnyanmisaka #include "mpp_enc_cfg.h"
11*437bfbebSnyanmisaka #include "mpp_rc.h"
12*437bfbebSnyanmisaka 
13*437bfbebSnyanmisaka /*
14*437bfbebSnyanmisaka  * mpp rate control contain common caculation methd
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka /*
18*437bfbebSnyanmisaka  * 1. MppData - data statistic struct
19*437bfbebSnyanmisaka  *    size    - max valid data number
20*437bfbebSnyanmisaka  *    pos_pw  - current data preset write position
21*437bfbebSnyanmisaka  *    pos_w   - current data write position
22*437bfbebSnyanmisaka  *    pos_r   - current data read position
23*437bfbebSnyanmisaka  *    val     - buffer array pointer
24*437bfbebSnyanmisaka  *
25*437bfbebSnyanmisaka  *    When statistic length is less than 8 use direct save mode which will move
26*437bfbebSnyanmisaka  *    all the data on each update.
27*437bfbebSnyanmisaka  *    When statistic length is larger than 8 use loop save mode which will
28*437bfbebSnyanmisaka  *    cyclically reuse the data position.
29*437bfbebSnyanmisaka  */
30*437bfbebSnyanmisaka typedef struct MppDataV2_t {
31*437bfbebSnyanmisaka     RK_S32  size;
32*437bfbebSnyanmisaka     RK_S32  pos_r;
33*437bfbebSnyanmisaka     RK_S32  pos_pw;
34*437bfbebSnyanmisaka     RK_S32  pos_w;
35*437bfbebSnyanmisaka     RK_S32  pos_ahead;
36*437bfbebSnyanmisaka     RK_S64  sum;
37*437bfbebSnyanmisaka     RK_S32  val[];
38*437bfbebSnyanmisaka } MppDataV2;
39*437bfbebSnyanmisaka 
40*437bfbebSnyanmisaka #ifdef __cplusplus
41*437bfbebSnyanmisaka extern "C" {
42*437bfbebSnyanmisaka #endif
43*437bfbebSnyanmisaka 
44*437bfbebSnyanmisaka MPP_RET mpp_data_init_v2(MppDataV2 **p, RK_S32 len, RK_S32 value);
45*437bfbebSnyanmisaka void mpp_data_deinit_v2(MppDataV2 *p);
46*437bfbebSnyanmisaka void mpp_data_reset_v2(MppDataV2 *p, RK_S32 val);
47*437bfbebSnyanmisaka void mpp_data_preset_v2(MppDataV2 *p, RK_S32 val);
48*437bfbebSnyanmisaka void mpp_data_update_v2(MppDataV2 *p, RK_S32 val);
49*437bfbebSnyanmisaka RK_S32 mpp_data_sum_v2(MppDataV2 *p);
50*437bfbebSnyanmisaka RK_S32 mpp_data_mean_v2(MppDataV2 *p);
51*437bfbebSnyanmisaka RK_S32 mpp_data_get_pre_val_v2(MppDataV2 *p, RK_S32 idx);
52*437bfbebSnyanmisaka RK_S32 mpp_data_sum_with_ratio_v2(MppDataV2 *p, RK_S32 len, RK_S32 num, RK_S32 denom);
53*437bfbebSnyanmisaka 
54*437bfbebSnyanmisaka #ifdef __cplusplus
55*437bfbebSnyanmisaka }
56*437bfbebSnyanmisaka #endif
57*437bfbebSnyanmisaka 
58*437bfbebSnyanmisaka #endif /* __RC_BASE_H__ */
59