xref: /aosp_15_r20/external/libhevc/encoder/rc_cntrl_param.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar  *
3*c83a76b0SSuyog Pawar  * Copyright (C) 2018 The Android Open Source Project
4*c83a76b0SSuyog Pawar  *
5*c83a76b0SSuyog Pawar  * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar  * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar  * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar  *
9*c83a76b0SSuyog Pawar  * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar  *
11*c83a76b0SSuyog Pawar  * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar  * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar  * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar  * limitations under the License.
16*c83a76b0SSuyog Pawar  *
17*c83a76b0SSuyog Pawar  *****************************************************************************
18*c83a76b0SSuyog Pawar  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*c83a76b0SSuyog Pawar */
20*c83a76b0SSuyog Pawar /*!
21*c83a76b0SSuyog Pawar ******************************************************************************
22*c83a76b0SSuyog Pawar * \file rc_cntrl_param.h
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    This file should contain only enumerations and macros exported to codec
26*c83a76b0SSuyog Pawar *    by RC
27*c83a76b0SSuyog Pawar *
28*c83a76b0SSuyog Pawar * \date
29*c83a76b0SSuyog Pawar *
30*c83a76b0SSuyog Pawar * \author
31*c83a76b0SSuyog Pawar *    ittiam
32*c83a76b0SSuyog Pawar *
33*c83a76b0SSuyog Pawar ******************************************************************************
34*c83a76b0SSuyog Pawar */
35*c83a76b0SSuyog Pawar 
36*c83a76b0SSuyog Pawar #ifndef _RC_CNTRL_PARAM_H_
37*c83a76b0SSuyog Pawar #define _RC_CNTRL_PARAM_H_
38*c83a76b0SSuyog Pawar 
39*c83a76b0SSuyog Pawar /*****************************************************************************/
40*c83a76b0SSuyog Pawar /* Constant Macros                                                           */
41*c83a76b0SSuyog Pawar /*****************************************************************************/
42*c83a76b0SSuyog Pawar #define QSCALE_Q_FAC 6
43*c83a76b0SSuyog Pawar #define QSCALE_Q_FAC_3 3
44*c83a76b0SSuyog Pawar 
45*c83a76b0SSuyog Pawar /*corresponds to hevc qp = 4, not letting it go below 4 for better stability*/
46*c83a76b0SSuyog Pawar #define MIN_QSCALE_Q6 64
47*c83a76b0SSuyog Pawar 
48*c83a76b0SSuyog Pawar #define INVALID_QP (-55)
49*c83a76b0SSuyog Pawar #define SCD_MIN_HEVC_QP 18
50*c83a76b0SSuyog Pawar 
51*c83a76b0SSuyog Pawar /*For very high bitrate reduce min qp limit*/
52*c83a76b0SSuyog Pawar #define SCD_MIN_HEVC_QP_HBR 14
53*c83a76b0SSuyog Pawar #define SCD_MIN_HEVC_QP_VHBR 10
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar #define SCD_MAX_HEVC_QP 48
56*c83a76b0SSuyog Pawar #define MAX_HEVC_QP 51
57*c83a76b0SSuyog Pawar 
58*c83a76b0SSuyog Pawar /*classification based on i_to_average rest ratio so that appropriate qp offset can be chosen*/
59*c83a76b0SSuyog Pawar #define I_TO_REST_EXTREME_FAST (1.5)
60*c83a76b0SSuyog Pawar #define I_TO_REST_VVFAST (3)
61*c83a76b0SSuyog Pawar #define I_TO_REST_VFAST (5)
62*c83a76b0SSuyog Pawar #define I_TO_REST_FAST (8)
63*c83a76b0SSuyog Pawar #define I_TO_REST_MEDI (10)
64*c83a76b0SSuyog Pawar #define I_TO_REST_SLOW (14)
65*c83a76b0SSuyog Pawar 
66*c83a76b0SSuyog Pawar #define MAX_NUM_FRAME_PARALLEL 8
67*c83a76b0SSuyog Pawar 
68*c83a76b0SSuyog Pawar /*****************************************************************************/
69*c83a76b0SSuyog Pawar /* Enums                                                                     */
70*c83a76b0SSuyog Pawar /*****************************************************************************/
71*c83a76b0SSuyog Pawar /* RC algo type */
72*c83a76b0SSuyog Pawar typedef enum
73*c83a76b0SSuyog Pawar {
74*c83a76b0SSuyog Pawar     VBR_STORAGE = 0,
75*c83a76b0SSuyog Pawar     VBR_STORAGE_DVD_COMP = 1,
76*c83a76b0SSuyog Pawar     VBR_STREAMING = 2,
77*c83a76b0SSuyog Pawar     CONST_QP = 3,
78*c83a76b0SSuyog Pawar     CBR_LDRC = 4,
79*c83a76b0SSuyog Pawar     CBR_NLDRC = 5,
80*c83a76b0SSuyog Pawar     CBR_NLDRC_HBR = 6,
81*c83a76b0SSuyog Pawar     MAX_RC_TYPE
82*c83a76b0SSuyog Pawar } rc_type_e;
83*c83a76b0SSuyog Pawar 
84*c83a76b0SSuyog Pawar /**/
85*c83a76b0SSuyog Pawar typedef enum
86*c83a76b0SSuyog Pawar {
87*c83a76b0SSuyog Pawar     FIELD_OFFSET = 4
88*c83a76b0SSuyog Pawar } field_offset_e;
89*c83a76b0SSuyog Pawar 
90*c83a76b0SSuyog Pawar /* Picture type structure*/
91*c83a76b0SSuyog Pawar typedef enum
92*c83a76b0SSuyog Pawar {
93*c83a76b0SSuyog Pawar     BUF_PIC = -1,
94*c83a76b0SSuyog Pawar     I_PIC = 0,
95*c83a76b0SSuyog Pawar     P_PIC,
96*c83a76b0SSuyog Pawar     B_PIC,
97*c83a76b0SSuyog Pawar     B1_PIC,
98*c83a76b0SSuyog Pawar     B2_PIC,
99*c83a76b0SSuyog Pawar     P1_PIC,
100*c83a76b0SSuyog Pawar     BB_PIC,
101*c83a76b0SSuyog Pawar     B11_PIC,
102*c83a76b0SSuyog Pawar     B22_PIC,
103*c83a76b0SSuyog Pawar     MAX_PIC_TYPE
104*c83a76b0SSuyog Pawar } picture_type_e;
105*c83a76b0SSuyog Pawar 
106*c83a76b0SSuyog Pawar typedef enum
107*c83a76b0SSuyog Pawar {
108*c83a76b0SSuyog Pawar     I_PIC_SCD = 0x100,
109*c83a76b0SSuyog Pawar     NA_PIC
110*c83a76b0SSuyog Pawar } picture_type_SCD;
111*c83a76b0SSuyog Pawar 
112*c83a76b0SSuyog Pawar /* MB Type structure*/
113*c83a76b0SSuyog Pawar typedef enum
114*c83a76b0SSuyog Pawar {
115*c83a76b0SSuyog Pawar     MB_TYPE_INTRA,
116*c83a76b0SSuyog Pawar     MB_TYPE_INTER,
117*c83a76b0SSuyog Pawar     MAX_MB_TYPE /* Based on MB TYPES added the array size increases */
118*c83a76b0SSuyog Pawar } mb_type_e;
119*c83a76b0SSuyog Pawar 
120*c83a76b0SSuyog Pawar typedef enum
121*c83a76b0SSuyog Pawar {
122*c83a76b0SSuyog Pawar     VBV_NORMAL,
123*c83a76b0SSuyog Pawar     VBV_UNDERFLOW,
124*c83a76b0SSuyog Pawar     VBV_OVERFLOW,
125*c83a76b0SSuyog Pawar     VBR_CAUTION
126*c83a76b0SSuyog Pawar } vbv_buf_status_e;
127*c83a76b0SSuyog Pawar 
128*c83a76b0SSuyog Pawar #endif
129