xref: /aosp_15_r20/external/libhevc/encoder/rc_sad_acc.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 rc_sad_acc.c
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    This file contain sad accumulator related functions
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 #include <string.h>
40*c83a76b0SSuyog Pawar 
41*c83a76b0SSuyog Pawar /* User include files */
42*c83a76b0SSuyog Pawar #include "ittiam_datatypes.h"
43*c83a76b0SSuyog Pawar #include "mem_req_and_acq.h"
44*c83a76b0SSuyog Pawar #include "rc_common.h"
45*c83a76b0SSuyog Pawar #include "rc_cntrl_param.h"
46*c83a76b0SSuyog Pawar #include "var_q_operator.h"
47*c83a76b0SSuyog Pawar #include "trace_support.h"
48*c83a76b0SSuyog Pawar #include "rc_sad_acc.h"
49*c83a76b0SSuyog Pawar 
50*c83a76b0SSuyog Pawar /* State structure for sad accumulator */
51*c83a76b0SSuyog Pawar typedef struct
52*c83a76b0SSuyog Pawar {
53*c83a76b0SSuyog Pawar     WORD32 ai4_sad[MAX_PIC_TYPE];
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar } sad_acc_t;
56*c83a76b0SSuyog Pawar 
57*c83a76b0SSuyog Pawar #if NON_STEADSTATE_CODE
sad_acc_num_fill_use_free_memtab(sad_acc_handle * pps_sad_acc_handle,itt_memtab_t * ps_memtab,ITT_FUNC_TYPE_E e_func_type)58*c83a76b0SSuyog Pawar WORD32 sad_acc_num_fill_use_free_memtab(
59*c83a76b0SSuyog Pawar     sad_acc_handle *pps_sad_acc_handle, itt_memtab_t *ps_memtab, ITT_FUNC_TYPE_E e_func_type)
60*c83a76b0SSuyog Pawar {
61*c83a76b0SSuyog Pawar     WORD32 i4_mem_tab_idx = 0;
62*c83a76b0SSuyog Pawar     sad_acc_t **pps_sad_acc = (sad_acc_t **)pps_sad_acc_handle;
63*c83a76b0SSuyog Pawar     static sad_acc_t s_sad_acc;
64*c83a76b0SSuyog Pawar 
65*c83a76b0SSuyog Pawar     /* Hack for al alloc, during which we dont have any state memory.
66*c83a76b0SSuyog Pawar       Dereferencing can cause issues */
67*c83a76b0SSuyog Pawar     if(e_func_type == GET_NUM_MEMTAB || e_func_type == FILL_MEMTAB)
68*c83a76b0SSuyog Pawar         (*pps_sad_acc) = &s_sad_acc;
69*c83a76b0SSuyog Pawar 
70*c83a76b0SSuyog Pawar     /*for src rate control state structure*/
71*c83a76b0SSuyog Pawar     if(e_func_type != GET_NUM_MEMTAB)
72*c83a76b0SSuyog Pawar     {
73*c83a76b0SSuyog Pawar         fill_memtab(
74*c83a76b0SSuyog Pawar             &ps_memtab[i4_mem_tab_idx], sizeof(sad_acc_t), MEM_TAB_ALIGNMENT, PERSISTENT, DDR);
75*c83a76b0SSuyog Pawar         use_or_fill_base(&ps_memtab[0], (void **)pps_sad_acc, e_func_type);
76*c83a76b0SSuyog Pawar     }
77*c83a76b0SSuyog Pawar     i4_mem_tab_idx++;
78*c83a76b0SSuyog Pawar 
79*c83a76b0SSuyog Pawar     return (i4_mem_tab_idx);
80*c83a76b0SSuyog Pawar }
81*c83a76b0SSuyog Pawar /******************************************************************************
82*c83a76b0SSuyog Pawar   Function Name   : init_sad_acc
83*c83a76b0SSuyog Pawar   Description     :
84*c83a76b0SSuyog Pawar   Arguments       : ps_sad_acc_handle
85*c83a76b0SSuyog Pawar   Return Values   : void
86*c83a76b0SSuyog Pawar   Revision History:
87*c83a76b0SSuyog Pawar                     Creation
88*c83a76b0SSuyog Pawar *****************************************************************************/
init_sad_acc(sad_acc_handle ps_sad_acc_handle)89*c83a76b0SSuyog Pawar void init_sad_acc(sad_acc_handle ps_sad_acc_handle)
90*c83a76b0SSuyog Pawar {
91*c83a76b0SSuyog Pawar     sad_acc_t *ps_sad_acc = (sad_acc_t *)ps_sad_acc_handle;
92*c83a76b0SSuyog Pawar     WORD32 i;
93*c83a76b0SSuyog Pawar     /* Initialize the array */
94*c83a76b0SSuyog Pawar     for(i = 0; i < MAX_PIC_TYPE; i++)
95*c83a76b0SSuyog Pawar     {
96*c83a76b0SSuyog Pawar         ps_sad_acc->ai4_sad[i] = -1;
97*c83a76b0SSuyog Pawar     }
98*c83a76b0SSuyog Pawar }
99*c83a76b0SSuyog Pawar #endif /* #if NON_STEADSTATE_CODE */
100*c83a76b0SSuyog Pawar /******************************************************************************
101*c83a76b0SSuyog Pawar   Function Name   : sad_acc_put_sad
102*c83a76b0SSuyog Pawar   Description     :
103*c83a76b0SSuyog Pawar   Arguments       : ps_sad_acc_handle
104*c83a76b0SSuyog Pawar   Return Values   : void
105*c83a76b0SSuyog Pawar   Revision History:
106*c83a76b0SSuyog Pawar                     Creation
107*c83a76b0SSuyog Pawar *****************************************************************************/
sad_acc_put_sad(sad_acc_handle ps_sad_acc_handle,WORD32 i4_cur_intra_sad,WORD32 i4_cur_sad,WORD32 i4_cur_pic_type)108*c83a76b0SSuyog Pawar void sad_acc_put_sad(
109*c83a76b0SSuyog Pawar     sad_acc_handle ps_sad_acc_handle,
110*c83a76b0SSuyog Pawar     WORD32 i4_cur_intra_sad,
111*c83a76b0SSuyog Pawar     WORD32 i4_cur_sad,
112*c83a76b0SSuyog Pawar     WORD32 i4_cur_pic_type)
113*c83a76b0SSuyog Pawar {
114*c83a76b0SSuyog Pawar     sad_acc_t *ps_sad_acc = (sad_acc_t *)ps_sad_acc_handle;
115*c83a76b0SSuyog Pawar     ps_sad_acc->ai4_sad[I_PIC] = i4_cur_intra_sad;
116*c83a76b0SSuyog Pawar     ps_sad_acc->ai4_sad[i4_cur_pic_type] = i4_cur_sad;
117*c83a76b0SSuyog Pawar }
118*c83a76b0SSuyog Pawar /******************************************************************************
119*c83a76b0SSuyog Pawar   Function Name   : sad_acc_get_sad
120*c83a76b0SSuyog Pawar   Description     :
121*c83a76b0SSuyog Pawar   Arguments       : ps_sad_acc_handle
122*c83a76b0SSuyog Pawar   Return Values   : void
123*c83a76b0SSuyog Pawar   Revision History:
124*c83a76b0SSuyog Pawar                     Creation
125*c83a76b0SSuyog Pawar *****************************************************************************/
sad_acc_get_sad(sad_acc_handle ps_sad_acc_handle,WORD32 * pi4_sad)126*c83a76b0SSuyog Pawar void sad_acc_get_sad(sad_acc_handle ps_sad_acc_handle, WORD32 *pi4_sad)
127*c83a76b0SSuyog Pawar {
128*c83a76b0SSuyog Pawar     sad_acc_t *ps_sad_acc = (sad_acc_t *)ps_sad_acc_handle;
129*c83a76b0SSuyog Pawar     WORD32 i;
130*c83a76b0SSuyog Pawar     /* Initialize the array */
131*c83a76b0SSuyog Pawar     for(i = 0; i < MAX_PIC_TYPE; i++)
132*c83a76b0SSuyog Pawar     {
133*c83a76b0SSuyog Pawar         pi4_sad[i] = ps_sad_acc->ai4_sad[i];
134*c83a76b0SSuyog Pawar     }
135*c83a76b0SSuyog Pawar }
136