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