155 lines
6.5 KiB
C
155 lines
6.5 KiB
C
/******************************************************************************
|
|
*
|
|
* 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_common.h
|
|
*
|
|
* \brief
|
|
* This file contains common macro used by rate control module
|
|
*
|
|
* \date
|
|
*
|
|
* \author
|
|
* ittiam
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
#ifndef _RC_COMMON_H_
|
|
#define _RC_COMMON_H_
|
|
|
|
/*****************************************************************************/
|
|
/* Constant Macros */
|
|
/*****************************************************************************/
|
|
/****************************************************************************
|
|
NOTE : Put only those things into this file which are common across many
|
|
files, say I_TO_P_BIT_RATIO macro is used across bit_allocation.c
|
|
and rate_control_api.c.If anything is exclusive only to one file,
|
|
define it in the same file
|
|
|
|
This file is an RC private file. It should not be exported to Codec
|
|
****************************************************************************/
|
|
|
|
/* Defines the maximum and the minimum quantizer allowed in the stream.*/
|
|
#define MAX_MPEG2_QP (4095) /*255*/ /* 127*/
|
|
#define ERR_2PASS_DISTR_GOP 5
|
|
|
|
#define ENABLE_SSD_CALC_RC 0
|
|
|
|
#ifdef ARM9
|
|
/* Mem tab alignment to 4 bytes */
|
|
#define MEM_TAB_ALIGNMENT 32 /*ALIGN_WORD32*/
|
|
#else /* ARM968 */
|
|
/* Mem tab alignment to 128 bytes */
|
|
#define MEM_TAB_ALIGNMENT ALIGN_128_BYTE
|
|
#endif /* ARM968 */
|
|
|
|
#define COMP_TO_BITS_MAP(X, factor) \
|
|
((-1.7561f * (X * X * X * X) + (2.5547f * X * X * X) - 0.3408f * (X * X) + (0.5343f * X) - \
|
|
0.003f) * \
|
|
factor)
|
|
|
|
#define COMP_TO_BITS_MAP_2_PASS(X, factor) \
|
|
((-1.7561f * (X * X * X * X) + (2.5547f * X * X * X) - 0.3408f * (X * X) + (0.5343f * X) - \
|
|
0.003f) * \
|
|
factor)
|
|
/* Calculates P = (X*Y/Z) (Assuming all the four are in integers)*/
|
|
#define X_PROD_Y_DIV_Z(X1, Y1, Z1, P1) \
|
|
{ \
|
|
number_t vq_a, vq_b, vq_c; \
|
|
SET_VAR_Q(vq_a, (X1), 0); \
|
|
SET_VAR_Q(vq_b, (Y1), 0); \
|
|
SET_VAR_Q(vq_c, (Z1), 0); \
|
|
mult32_var_q(vq_a, vq_b, &vq_a); \
|
|
div32_var_q(vq_a, vq_c, &vq_a); \
|
|
number_t_to_word32(vq_a, &(P1)); \
|
|
}
|
|
|
|
/* Maximum number of drain-rates supported. Currently a maximum of only 2
|
|
drain-rates supported. One for
|
|
I pictures and the other for P & B pictures */
|
|
#define MAX_NUM_DRAIN_RATES 2
|
|
|
|
/* The ratios between I to P and P to B Qp is specified here */
|
|
#define K_Q 4
|
|
#define I_TO_P_RATIO (18) /*(16)*/ /* In K_Q Q factor */
|
|
#define P_TO_B_RATIO (18) /* In K_Q Q factor */
|
|
#define B_TO_B1_RATIO (18)
|
|
#define B1_TO_B2_RATIO (18)
|
|
#define P_TO_I_RATIO (14)
|
|
#define I_TO_B_RATIO ((P_TO_B_RATIO * I_TO_P_RATIO) >> K_Q)
|
|
#define I_TO_B1_RATIO ((B_TO_B1_RATIO * P_TO_B_RATIO * I_TO_P_RATIO) >> (K_Q + K_Q))
|
|
#define I_TO_B2_RATIO \
|
|
((B1_TO_B2_RATIO * B_TO_B1_RATIO * P_TO_B_RATIO * I_TO_P_RATIO) >> (K_Q + K_Q + K_Q))
|
|
|
|
#define P_TO_B_RATIO_HBR (16)
|
|
#define I_TO_P_RATIO_LOW_MOTION (20)
|
|
#define I_TO_P_RATIO_VLOW_MOTION (23)
|
|
#define I_TO_P_RATIO_VVLOW_MOTION (26)
|
|
|
|
/* #define I_TO_P_RATIO (16) In K_Q Q factor */
|
|
/* #define P_TO_B_RATIO (16) In K_Q Q factor */
|
|
|
|
/*Ratio of I frame bit consumptin vs average bit consumption for rest of the GOP
|
|
* This is based on experimaental runs over different seqience(same resolution scaled)*/
|
|
#define I_TO_AVG_REST_GOP_BIT (8)
|
|
#define MINIMUM_VISIBILITY_B4_STATIC_I \
|
|
(18) //assumes this minimum lap window for bit allocation of static frame
|
|
#define MINIMUM_FRM_I_TO_REST_LAP_ENABLED (8)
|
|
#define I_TO_AVG_REST_GOP_BIT_MIN (1)
|
|
#define I_TO_AVG_REST_GOP_BIT_MAX (20)
|
|
#define I_TO_AVG_REST_GOP_BIT_MAX_INFINITE (80)
|
|
#define I_TO_AVG_REST_GOP_BIT_MAX_2_PASS (40)
|
|
#define I_TO_AVG_REST_GOP_BIT_MIN_2_PASS (0.5f)
|
|
|
|
#define UPPER_THRESHOLD_EBF_Q4 (15)
|
|
#define STATIC_I_TO_REST_MULTIPLIER (6)
|
|
|
|
/*also present in encoder herader file with same name*/
|
|
#define MAX_LAP_COMPLEXITY_Q7 (90)
|
|
#define DEFAULT_TEX_PERCENTAGE_Q5 24
|
|
|
|
#ifdef DISABLE_NON_STEADY_STATE_CODE
|
|
#define NON_STEADSTATE_CODE (0)
|
|
#else
|
|
#define NON_STEADSTATE_CODE (1)
|
|
#endif
|
|
|
|
/*HEVC_hierarchy*/
|
|
#define I_TO_P_BIT_RATIO (6)
|
|
#define P_TO_B_BIT_RATIO (2)
|
|
#define B_TO_B1_BIT_RATO0 (2)
|
|
#define B1_TO_B2_BIT_RATIO (2)
|
|
|
|
/*define static I_TO_P ratio for all pic types*/
|
|
/* Trying to detect a static content and fixing the quality for that content. The trigger for such a
|
|
content is if the ratio between the estimated I frame to that of P is more than 18 times. If such
|
|
a simple content is detected then the bit ditribution is fixed to a ration of 36:2:1 (I:P:B) */
|
|
#define STATIC_I_TO_B2_RATIO (100) //(24)
|
|
#define STATIC_P_TO_B2_RATIO (2)
|
|
#define STATIC_B_TO_B2_RATIO (1)
|
|
#define STATIC_B1_TO_B2_RATIO (1)
|
|
|
|
/*Fsim limits*/
|
|
#define RC_FSIM_LOW_THR_SCD 64
|
|
|
|
#define RC_FSIM_HIGH_THR_STATIC 115
|
|
|
|
#endif /* _RC_COMMON_H_ */
|