xref: /aosp_15_r20/external/libhevc/encoder/est_sad.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 est_sad.h
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    This file contain SAD estimation functions  declarations
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 #ifndef _EST_SAD_H_
36*c83a76b0SSuyog Pawar #define _EST_SAD_H_
37*c83a76b0SSuyog Pawar 
38*c83a76b0SSuyog Pawar /* "est_sad_t->i4_use_est_intra_sad" Flag to control how the I frame SAD is estimated.
39*c83a76b0SSuyog Pawar If set to zero
40*c83a76b0SSuyog Pawar     - it uses the Intra sad calculated by the previous P frame as
41*c83a76b0SSuyog Pawar    the estimated sad for the current I frame
42*c83a76b0SSuyog Pawar else
43*c83a76b0SSuyog Pawar     - it uses the ratio of P frame sads of the previous two GOPS and
44*c83a76b0SSuyog Pawar     scales the I Frame sad with this ratio to estimate the current
45*c83a76b0SSuyog Pawar     I frame SAD
46*c83a76b0SSuyog Pawar */
47*c83a76b0SSuyog Pawar 
48*c83a76b0SSuyog Pawar /* Estimating the Average SAD for the current picture type is done by:
49*c83a76b0SSuyog Pawar 1) if picture_type is I
50*c83a76b0SSuyog Pawar    - Estimated SAD = (n-1)th intra frame interval(ifi) P frame Avg SAD *
51*c83a76b0SSuyog Pawar          ( prev I frame SAD / (n-2)nd intra frame interval(ifi) P frame Avg SAD)
52*c83a76b0SSuyog Pawar    - if only one IFI is encoded use the previous I frame SAD
53*c83a76b0SSuyog Pawar 2) if picture type is P
54*c83a76b0SSuyog Pawar    - Estimate SAD is previous P frame SAD
55*c83a76b0SSuyog Pawar 3) The first P frame in a IFI could use a little better logic to decide the
56*c83a76b0SSuyog Pawar    estimated SAD but currently we assume the last coded P frames SAD */
57*c83a76b0SSuyog Pawar 
58*c83a76b0SSuyog Pawar /*****************************************************************************/
59*c83a76b0SSuyog Pawar /* Structure                                                                 */
60*c83a76b0SSuyog Pawar /*****************************************************************************/
61*c83a76b0SSuyog Pawar typedef struct est_sad_t *est_sad_handle;
62*c83a76b0SSuyog Pawar 
63*c83a76b0SSuyog Pawar /*****************************************************************************/
64*c83a76b0SSuyog Pawar /* Function Declarations                                                     */
65*c83a76b0SSuyog Pawar /*****************************************************************************/
66*c83a76b0SSuyog Pawar WORD32 est_sad_num_fill_use_free_memtab(
67*c83a76b0SSuyog Pawar     est_sad_handle *est_sad, itt_memtab_t *ps_memtab, ITT_FUNC_TYPE_E e_func_type);
68*c83a76b0SSuyog Pawar 
69*c83a76b0SSuyog Pawar void init_est_sad(est_sad_handle est_sad, WORD32 i4_use_est_frame_sad);
70*c83a76b0SSuyog Pawar 
71*c83a76b0SSuyog Pawar UWORD32 get_est_sad(est_sad_handle est_sad, picture_type_e e_pic_type);
72*c83a76b0SSuyog Pawar 
73*c83a76b0SSuyog Pawar void update_actual_sad(est_sad_handle est_sad, UWORD32 u4_actual_sad, picture_type_e e_pic_type);
74*c83a76b0SSuyog Pawar 
75*c83a76b0SSuyog Pawar void update_actual_sad_for_intra(est_sad_handle est_sad, WORD32 i4_intra_frm_cost);
76*c83a76b0SSuyog Pawar 
77*c83a76b0SSuyog Pawar void update_prev_frame_intra_sad(est_sad_handle ps_est_sad, WORD32 i4_intra_frm_sad);
78*c83a76b0SSuyog Pawar 
79*c83a76b0SSuyog Pawar WORD32 get_prev_frame_intra_sad(est_sad_handle ps_est_sad);
80*c83a76b0SSuyog Pawar 
81*c83a76b0SSuyog Pawar void update_prev_frame_sad(est_sad_handle ps_est_sad, WORD32 i4_frm_sad, picture_type_e e_pic_type);
82*c83a76b0SSuyog Pawar 
83*c83a76b0SSuyog Pawar WORD32 get_prev_frame_sad(est_sad_handle ps_est_sad, picture_type_e e_pic_type);
84*c83a76b0SSuyog Pawar 
85*c83a76b0SSuyog Pawar void reset_est_sad(est_sad_handle ps_est_sad);
86*c83a76b0SSuyog Pawar 
87*c83a76b0SSuyog Pawar WORD32 update_ppic_sad(est_sad_handle est_sad, WORD32 i4_est_sad, WORD32 i4_prev_p_sad);
88*c83a76b0SSuyog Pawar #endif
89