liyujie
2025-08-28 786ff4f4ca2374bdd9177f2e24b503d43e7a3b93
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
/******************************************************************************
 *
 * Copyright (C) 2018 The Android Open Source Project
 *
 * 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.
 *
 *****************************************************************************
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
/*!
******************************************************************************
* \file rc_rd_model_struct.h
*
* \brief
*    This file contains rate control rd model struct and constant macro
*
* \date
*
* \author
*    ittiam
*
******************************************************************************
*/
#ifndef RC_RD_MODEL_STRUCT
#define RC_RD_MODEL_STRUCT
 
/*****************************************************************************/
/* Constant Macros                                                           */
/*****************************************************************************/
/* Tool Set Switch */
#define ENABLE_QUAD_MODEL 1
 
/* Number of elements for QP */
/* #define MPEG2_QP_ELEM       (MAX_MPEG2_QP + 1) */
 
/*#define MAX_NUM_PIC_TYPES_FOR_RC_MODEL  3*/ /* how many types of pictures will the rate-control handle */
 
#define QUAD 1
#define MIN_FRAMES_FOR_QUAD_MODEL 5
#define MAX_ACTIVE_FRAMES 16
#define MIN_FRAMES_FOR_LIN_MODEL 3
#define INVALID_FRAME_INDEX 255
 
#define UP_THR_SM 1 /* (1  /pow(2,4) = 0.0625   */
#define UP_THR_E 4
 
#define LO_THR_SM 368 /* (368.64 / pow(2,14)) = 0.0225 */
#define LO_THR_E 14
 
#define QUAD_DEV_THR_SM 1 /* (1 / pow(1,2)) = .25*/
#define QUAD_DEV_THR_E 2
 
#define LIN_DEV_THR_SM 1 /* (1 / pow(1,2)) = .25*/
#define LIN_DEV_THR_E 2
 
#define QUAD_MODEL 0
#define LIN_MODEL 1
#define PREV_FRAME_MODEL 2
 
/* Q Factors used for fixed point calculation */
#define Q_FORMAT_GAMMA 8
#define Q_FORMAT_ETA 8
 
/*****************************************************************************/
/* Structure                                                                 */
/*****************************************************************************/
typedef struct rc_rd_model_t
{
    UWORD8 u1_curr_frm_counter;
    UWORD8 u1_num_frms_in_model;
    UWORD8 u1_max_frms_to_model;
    UWORD8 u1_model_used;
 
    UWORD32 pi4_res_bits[MAX_FRAMES_MODELLED];
    LWORD64 pi8_sad[MAX_FRAMES_MODELLED];
 
    UWORD8 pu1_num_skips[MAX_FRAMES_MODELLED];
    /* UWORD8   pu1_avg_qp[MAX_FRAMES_MODELLED]; */
    WORD32 ai4_avg_qp[MAX_FRAMES_MODELLED];
    WORD32 ai4_avg_qp_q6[MAX_FRAMES_MODELLED];
    /* UWORD8   au1_num_frames[MPEG2_QP_ELEM];  */
 
    model_coeff model_coeff_a_quad;
    model_coeff model_coeff_b_quad;
    model_coeff model_coeff_c_quad;
 
    model_coeff model_coeff_a_lin;
    model_coeff model_coeff_b_lin;
    model_coeff model_coeff_c_lin;
 
    model_coeff model_coeff_a_lin_wo_int;
    model_coeff model_coeff_b_lin_wo_int;
    model_coeff model_coeff_c_lin_wo_int;
} rc_rd_model_t;
 
#endif /* RC_RD_MODEL_STRUCT*/