xref: /aosp_15_r20/external/libhevc/encoder/vbr_str_prms.c (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 vbr_str_prms.c
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    This file contain
26*c83a76b0SSuyog Pawar *
27*c83a76b0SSuyog Pawar * \date
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar * \author
30*c83a76b0SSuyog Pawar *    ittiam
31*c83a76b0SSuyog Pawar *
32*c83a76b0SSuyog Pawar ******************************************************************************
33*c83a76b0SSuyog Pawar */
34*c83a76b0SSuyog Pawar /*****************************************************************************/
35*c83a76b0SSuyog Pawar /* File Includes                                                             */
36*c83a76b0SSuyog Pawar /*****************************************************************************/
37*c83a76b0SSuyog Pawar /* System include files */
38*c83a76b0SSuyog Pawar #include <stdio.h>
39*c83a76b0SSuyog Pawar 
40*c83a76b0SSuyog Pawar /* User include files */
41*c83a76b0SSuyog Pawar #include "ittiam_datatypes.h"
42*c83a76b0SSuyog Pawar #include "rc_cntrl_param.h"
43*c83a76b0SSuyog Pawar #include "var_q_operator.h"
44*c83a76b0SSuyog Pawar #include "rc_common.h"
45*c83a76b0SSuyog Pawar #include "vbr_str_prms.h"
46*c83a76b0SSuyog Pawar 
47*c83a76b0SSuyog Pawar /******************************************************************************
48*c83a76b0SSuyog Pawar   Function Name   : init_vbv_str_prms
49*c83a76b0SSuyog Pawar   Description     : Initializes and calcuates the number of I frame and P frames
50*c83a76b0SSuyog Pawar                     in the delay period
51*c83a76b0SSuyog Pawar   Arguments       :
52*c83a76b0SSuyog Pawar   Return Values   : void
53*c83a76b0SSuyog Pawar   Revision History:
54*c83a76b0SSuyog Pawar                     Creation
55*c83a76b0SSuyog Pawar *****************************************************************************/
56*c83a76b0SSuyog Pawar #if NON_STEADSTATE_CODE
init_vbv_str_prms(vbr_str_prms_t * p_vbr_str_prms,UWORD32 u4_intra_frm_interval,UWORD32 u4_src_ticks,UWORD32 u4_tgt_ticks,UWORD32 u4_frms_in_delay_period)57*c83a76b0SSuyog Pawar void init_vbv_str_prms(
58*c83a76b0SSuyog Pawar     vbr_str_prms_t *p_vbr_str_prms,
59*c83a76b0SSuyog Pawar     UWORD32 u4_intra_frm_interval,
60*c83a76b0SSuyog Pawar     UWORD32 u4_src_ticks,
61*c83a76b0SSuyog Pawar     UWORD32 u4_tgt_ticks,
62*c83a76b0SSuyog Pawar     UWORD32 u4_frms_in_delay_period)
63*c83a76b0SSuyog Pawar {
64*c83a76b0SSuyog Pawar     p_vbr_str_prms->u4_frms_in_delay_prd = u4_frms_in_delay_period;
65*c83a76b0SSuyog Pawar     p_vbr_str_prms->u4_src_ticks = u4_src_ticks;
66*c83a76b0SSuyog Pawar     p_vbr_str_prms->u4_tgt_ticks = u4_tgt_ticks;
67*c83a76b0SSuyog Pawar     p_vbr_str_prms->u4_intra_frame_int = u4_intra_frm_interval;
68*c83a76b0SSuyog Pawar }
69*c83a76b0SSuyog Pawar #endif /* #if NON_STEADSTATE_CODE */
70*c83a76b0SSuyog Pawar 
71*c83a76b0SSuyog Pawar /*********************************************************************************
72*c83a76b0SSuyog Pawar   Function Name   : change_vbr_str_prms
73*c83a76b0SSuyog Pawar   Description     : Takes in changes of Intra frame interval, source and target ticks
74*c83a76b0SSuyog Pawar                     and recalculates the position of the  next I frame
75*c83a76b0SSuyog Pawar   Arguments       :
76*c83a76b0SSuyog Pawar   Return Values   : void
77*c83a76b0SSuyog Pawar   Revision History:
78*c83a76b0SSuyog Pawar                     Creation
79*c83a76b0SSuyog Pawar ***********************************************************************************/
80*c83a76b0SSuyog Pawar #if NON_STEADSTATE_CODE
change_vsp_ifi(vbr_str_prms_t * p_vbr_str_prms,UWORD32 u4_intra_frame_int)81*c83a76b0SSuyog Pawar void change_vsp_ifi(vbr_str_prms_t *p_vbr_str_prms, UWORD32 u4_intra_frame_int)
82*c83a76b0SSuyog Pawar {
83*c83a76b0SSuyog Pawar     init_vbv_str_prms(
84*c83a76b0SSuyog Pawar         p_vbr_str_prms,
85*c83a76b0SSuyog Pawar         u4_intra_frame_int,
86*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_src_ticks,
87*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_tgt_ticks,
88*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_frms_in_delay_prd);
89*c83a76b0SSuyog Pawar }
90*c83a76b0SSuyog Pawar /******************************************************************************
91*c83a76b0SSuyog Pawar   Function Name   : change_vsp_tgt_ticks
92*c83a76b0SSuyog Pawar   Description     :
93*c83a76b0SSuyog Pawar   Arguments       : p_vbr_str_prms
94*c83a76b0SSuyog Pawar   Return Values   : void
95*c83a76b0SSuyog Pawar   Revision History:
96*c83a76b0SSuyog Pawar                     Creation
97*c83a76b0SSuyog Pawar *****************************************************************************/
change_vsp_tgt_ticks(vbr_str_prms_t * p_vbr_str_prms,UWORD32 u4_tgt_ticks)98*c83a76b0SSuyog Pawar void change_vsp_tgt_ticks(vbr_str_prms_t *p_vbr_str_prms, UWORD32 u4_tgt_ticks)
99*c83a76b0SSuyog Pawar {
100*c83a76b0SSuyog Pawar     UWORD32 u4_rem_intra_per_scaled;
101*c83a76b0SSuyog Pawar     UWORD32 u4_prev_tgt_ticks = p_vbr_str_prms->u4_tgt_ticks;
102*c83a76b0SSuyog Pawar 
103*c83a76b0SSuyog Pawar     /*
104*c83a76b0SSuyog Pawar         If the target frame rate is changed, recalculate the position of the next I frame based
105*c83a76b0SSuyog Pawar         on the new target frame rate
106*c83a76b0SSuyog Pawar 
107*c83a76b0SSuyog Pawar         LIMITATIONS :
108*c83a76b0SSuyog Pawar         Currently no support is available for dynamic change in source frame rate
109*c83a76b0SSuyog Pawar     */
110*c83a76b0SSuyog Pawar 
111*c83a76b0SSuyog Pawar     u4_rem_intra_per_scaled =
112*c83a76b0SSuyog Pawar         ((p_vbr_str_prms->u4_intra_prd_pos_in_tgt_ticks - p_vbr_str_prms->u4_cur_pos_in_src_ticks) /
113*c83a76b0SSuyog Pawar          u4_prev_tgt_ticks) *
114*c83a76b0SSuyog Pawar         u4_tgt_ticks;
115*c83a76b0SSuyog Pawar 
116*c83a76b0SSuyog Pawar     p_vbr_str_prms->u4_intra_prd_pos_in_tgt_ticks =
117*c83a76b0SSuyog Pawar         u4_rem_intra_per_scaled + p_vbr_str_prms->u4_cur_pos_in_src_ticks;
118*c83a76b0SSuyog Pawar }
119*c83a76b0SSuyog Pawar /******************************************************************************
120*c83a76b0SSuyog Pawar   Function Name   : change_vsp_src_ticks
121*c83a76b0SSuyog Pawar   Description     :
122*c83a76b0SSuyog Pawar   Arguments       : p_vbr_str_prms
123*c83a76b0SSuyog Pawar   Return Values   : void
124*c83a76b0SSuyog Pawar   Revision History:
125*c83a76b0SSuyog Pawar                     Creation
126*c83a76b0SSuyog Pawar *****************************************************************************/
change_vsp_src_ticks(vbr_str_prms_t * p_vbr_str_prms,UWORD32 u4_src_ticks)127*c83a76b0SSuyog Pawar void change_vsp_src_ticks(vbr_str_prms_t *p_vbr_str_prms, UWORD32 u4_src_ticks)
128*c83a76b0SSuyog Pawar {
129*c83a76b0SSuyog Pawar     init_vbv_str_prms(
130*c83a76b0SSuyog Pawar         p_vbr_str_prms,
131*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_intra_frame_int,
132*c83a76b0SSuyog Pawar         u4_src_ticks,
133*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_tgt_ticks,
134*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_frms_in_delay_prd);
135*c83a76b0SSuyog Pawar }
136*c83a76b0SSuyog Pawar /******************************************************************************
137*c83a76b0SSuyog Pawar   Function Name   : change_vsp_fidp
138*c83a76b0SSuyog Pawar   Description     :
139*c83a76b0SSuyog Pawar   Arguments       : p_vbr_str_prms
140*c83a76b0SSuyog Pawar   Return Values   : void
141*c83a76b0SSuyog Pawar   Revision History:
142*c83a76b0SSuyog Pawar                     Creation
143*c83a76b0SSuyog Pawar *****************************************************************************/
change_vsp_fidp(vbr_str_prms_t * p_vbr_str_prms,UWORD32 u4_frms_in_delay_period)144*c83a76b0SSuyog Pawar void change_vsp_fidp(vbr_str_prms_t *p_vbr_str_prms, UWORD32 u4_frms_in_delay_period)
145*c83a76b0SSuyog Pawar {
146*c83a76b0SSuyog Pawar     init_vbv_str_prms(
147*c83a76b0SSuyog Pawar         p_vbr_str_prms,
148*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_intra_frame_int,
149*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_src_ticks,
150*c83a76b0SSuyog Pawar         p_vbr_str_prms->u4_tgt_ticks,
151*c83a76b0SSuyog Pawar         u4_frms_in_delay_period);
152*c83a76b0SSuyog Pawar }
153*c83a76b0SSuyog Pawar #endif /* #if NON_STEADSTATE_CODE */
154