/****************************************************************************** * * 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_sad_acc.c * * \brief * This file contain sad accumulator related functions * * \date * * \author * ittiam * ****************************************************************************** */ /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ /* System include files */ #include #include /* User include files */ #include "ittiam_datatypes.h" #include "mem_req_and_acq.h" #include "rc_common.h" #include "rc_cntrl_param.h" #include "var_q_operator.h" #include "trace_support.h" #include "rc_sad_acc.h" /* State structure for sad accumulator */ typedef struct { WORD32 ai4_sad[MAX_PIC_TYPE]; } sad_acc_t; #if NON_STEADSTATE_CODE WORD32 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) { WORD32 i4_mem_tab_idx = 0; sad_acc_t **pps_sad_acc = (sad_acc_t **)pps_sad_acc_handle; static sad_acc_t s_sad_acc; /* Hack for al alloc, during which we dont have any state memory. Dereferencing can cause issues */ if(e_func_type == GET_NUM_MEMTAB || e_func_type == FILL_MEMTAB) (*pps_sad_acc) = &s_sad_acc; /*for src rate control state structure*/ if(e_func_type != GET_NUM_MEMTAB) { fill_memtab( &ps_memtab[i4_mem_tab_idx], sizeof(sad_acc_t), MEM_TAB_ALIGNMENT, PERSISTENT, DDR); use_or_fill_base(&ps_memtab[0], (void **)pps_sad_acc, e_func_type); } i4_mem_tab_idx++; return (i4_mem_tab_idx); } /****************************************************************************** Function Name : init_sad_acc Description : Arguments : ps_sad_acc_handle Return Values : void Revision History: Creation *****************************************************************************/ void init_sad_acc(sad_acc_handle ps_sad_acc_handle) { sad_acc_t *ps_sad_acc = (sad_acc_t *)ps_sad_acc_handle; WORD32 i; /* Initialize the array */ for(i = 0; i < MAX_PIC_TYPE; i++) { ps_sad_acc->ai4_sad[i] = -1; } } #endif /* #if NON_STEADSTATE_CODE */ /****************************************************************************** Function Name : sad_acc_put_sad Description : Arguments : ps_sad_acc_handle Return Values : void Revision History: Creation *****************************************************************************/ void 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) { sad_acc_t *ps_sad_acc = (sad_acc_t *)ps_sad_acc_handle; ps_sad_acc->ai4_sad[I_PIC] = i4_cur_intra_sad; ps_sad_acc->ai4_sad[i4_cur_pic_type] = i4_cur_sad; } /****************************************************************************** Function Name : sad_acc_get_sad Description : Arguments : ps_sad_acc_handle Return Values : void Revision History: Creation *****************************************************************************/ void sad_acc_get_sad(sad_acc_handle ps_sad_acc_handle, WORD32 *pi4_sad) { sad_acc_t *ps_sad_acc = (sad_acc_t *)ps_sad_acc_handle; WORD32 i; /* Initialize the array */ for(i = 0; i < MAX_PIC_TYPE; i++) { pi4_sad[i] = ps_sad_acc->ai4_sad[i]; } }