1*495ae853SAndroid Build Coastguard Worker /****************************************************************************** 2*495ae853SAndroid Build Coastguard Worker * 3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project 4*495ae853SAndroid Build Coastguard Worker * 5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at: 8*495ae853SAndroid Build Coastguard Worker * 9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*495ae853SAndroid Build Coastguard Worker * 11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*495ae853SAndroid Build Coastguard Worker * limitations under the License. 16*495ae853SAndroid Build Coastguard Worker * 17*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*495ae853SAndroid Build Coastguard Worker */ 20*495ae853SAndroid Build Coastguard Worker 21*495ae853SAndroid Build Coastguard Worker /** 22*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 23*495ae853SAndroid Build Coastguard Worker * @file 24*495ae853SAndroid Build Coastguard Worker * isvce_downscaler.h 25*495ae853SAndroid Build Coastguard Worker * 26*495ae853SAndroid Build Coastguard Worker * @brief 27*495ae853SAndroid Build Coastguard Worker * Contains downscaler functions required by the SVC encoder 28*495ae853SAndroid Build Coastguard Worker * 29*495ae853SAndroid Build Coastguard Worker * @author 30*495ae853SAndroid Build Coastguard Worker * ittiam 31*495ae853SAndroid Build Coastguard Worker * 32*495ae853SAndroid Build Coastguard Worker * @par List of Functions: 33*495ae853SAndroid Build Coastguard Worker * - isvce_get_downscaler_data_size() 34*495ae853SAndroid Build Coastguard Worker * - isvce_get_downscaler_padding_dims() 35*495ae853SAndroid Build Coastguard Worker * - isvce_isvce_process_ctxt_t_downscaler() 36*495ae853SAndroid Build Coastguard Worker * - isvce_get_downscaler_normalized_filtered_pixel() 37*495ae853SAndroid Build Coastguard Worker * - isvce_horizontal_downscale_and_transpose() 38*495ae853SAndroid Build Coastguard Worker * - isvce_process_downscaler() 39*495ae853SAndroid Build Coastguard Worker * - isvce_initialize_downscaler() 40*495ae853SAndroid Build Coastguard Worker * 41*495ae853SAndroid Build Coastguard Worker * @remarks 42*495ae853SAndroid Build Coastguard Worker * None 43*495ae853SAndroid Build Coastguard Worker * 44*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 45*495ae853SAndroid Build Coastguard Worker */ 46*495ae853SAndroid Build Coastguard Worker 47*495ae853SAndroid Build Coastguard Worker #ifndef _ISVCE_DOWNSCALER_H_ 48*495ae853SAndroid Build Coastguard Worker #define _ISVCE_DOWNSCALER_H_ 49*495ae853SAndroid Build Coastguard Worker 50*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h" 51*495ae853SAndroid Build Coastguard Worker #include "iv2.h" 52*495ae853SAndroid Build Coastguard Worker #include "isvc_defs.h" 53*495ae853SAndroid Build Coastguard Worker #include "isvc_structs.h" 54*495ae853SAndroid Build Coastguard Worker #include "isvce_defs.h" 55*495ae853SAndroid Build Coastguard Worker 56*495ae853SAndroid Build Coastguard Worker typedef struct 57*495ae853SAndroid Build Coastguard Worker { 58*495ae853SAndroid Build Coastguard Worker /** 59*495ae853SAndroid Build Coastguard Worker * pointer to the state of downscaler 60*495ae853SAndroid Build Coastguard Worker */ 61*495ae853SAndroid Build Coastguard Worker void *pv_scaler_state; 62*495ae853SAndroid Build Coastguard Worker 63*495ae853SAndroid Build Coastguard Worker /** 64*495ae853SAndroid Build Coastguard Worker * scaling factor between the dimensions of two consecutive SVC layers 65*495ae853SAndroid Build Coastguard Worker */ 66*495ae853SAndroid Build Coastguard Worker DOUBLE d_scaling_factor; 67*495ae853SAndroid Build Coastguard Worker 68*495ae853SAndroid Build Coastguard Worker /** 69*495ae853SAndroid Build Coastguard Worker * Num spatial layers 70*495ae853SAndroid Build Coastguard Worker */ 71*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_spatial_layers; 72*495ae853SAndroid Build Coastguard Worker 73*495ae853SAndroid Build Coastguard Worker } downscaler_ctxt_t; 74*495ae853SAndroid Build Coastguard Worker 75*495ae853SAndroid Build Coastguard Worker typedef struct 76*495ae853SAndroid Build Coastguard Worker { 77*495ae853SAndroid Build Coastguard Worker UWORD8 u1_left_pad_size; 78*495ae853SAndroid Build Coastguard Worker 79*495ae853SAndroid Build Coastguard Worker UWORD8 u1_right_pad_size; 80*495ae853SAndroid Build Coastguard Worker 81*495ae853SAndroid Build Coastguard Worker UWORD8 u1_top_pad_size; 82*495ae853SAndroid Build Coastguard Worker 83*495ae853SAndroid Build Coastguard Worker UWORD8 u1_bottom_pad_size; 84*495ae853SAndroid Build Coastguard Worker 85*495ae853SAndroid Build Coastguard Worker } padding_dims_t; 86*495ae853SAndroid Build Coastguard Worker 87*495ae853SAndroid Build Coastguard Worker /** 88*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 89*495ae853SAndroid Build Coastguard Worker * 90*495ae853SAndroid Build Coastguard Worker * @brief 91*495ae853SAndroid Build Coastguard Worker * initializes the downscaler context 92*495ae853SAndroid Build Coastguard Worker * 93*495ae853SAndroid Build Coastguard Worker * @par Description: 94*495ae853SAndroid Build Coastguard Worker * initializes the downscaler context for the given scaling factor 95*495ae853SAndroid Build Coastguard Worker * with padding size, filter size, etc. 96*495ae853SAndroid Build Coastguard Worker * 97*495ae853SAndroid Build Coastguard Worker * @param[in] ps_scaler 98*495ae853SAndroid Build Coastguard Worker * pointer downscaler context 99*495ae853SAndroid Build Coastguard Worker * 100*495ae853SAndroid Build Coastguard Worker * @param[in] ps_mem_rec 101*495ae853SAndroid Build Coastguard Worker * pointer to memory allocated to downscaler process 102*495ae853SAndroid Build Coastguard Worker * 103*495ae853SAndroid Build Coastguard Worker * @param[in] d_scaling_factor 104*495ae853SAndroid Build Coastguard Worker * scaling reatio of width/ height between two consecutive SVC layers 105*495ae853SAndroid Build Coastguard Worker * 106*495ae853SAndroid Build Coastguard Worker * @param[in] u1_num_spatial_layers 107*495ae853SAndroid Build Coastguard Worker * scaling reatio of width/ height between two consecutive SVC layers 108*495ae853SAndroid Build Coastguard Worker * 109*495ae853SAndroid Build Coastguard Worker * @param[in] u4_wd 110*495ae853SAndroid Build Coastguard Worker * width of the input 111*495ae853SAndroid Build Coastguard Worker * 112*495ae853SAndroid Build Coastguard Worker * @param[in] u4_ht 113*495ae853SAndroid Build Coastguard Worker * height of the input 114*495ae853SAndroid Build Coastguard Worker * 115*495ae853SAndroid Build Coastguard Worker * @param[in] e_arch 116*495ae853SAndroid Build Coastguard Worker * architecure type 117*495ae853SAndroid Build Coastguard Worker * 118*495ae853SAndroid Build Coastguard Worker * @returns 119*495ae853SAndroid Build Coastguard Worker * 120*495ae853SAndroid Build Coastguard Worker * @remarks 121*495ae853SAndroid Build Coastguard Worker * when ARM intrinsics are added, update should be done here 122*495ae853SAndroid Build Coastguard Worker * 123*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 124*495ae853SAndroid Build Coastguard Worker */ 125*495ae853SAndroid Build Coastguard Worker 126*495ae853SAndroid Build Coastguard Worker extern void isvce_initialize_downscaler(downscaler_ctxt_t *ps_scaler, iv_mem_rec_t *ps_mem_rec, 127*495ae853SAndroid Build Coastguard Worker DOUBLE d_scaling_factor, UWORD8 u1_num_spatial_layers, 128*495ae853SAndroid Build Coastguard Worker UWORD32 u4_in_width, UWORD32 u4_in_height, 129*495ae853SAndroid Build Coastguard Worker IV_ARCH_T e_arch); 130*495ae853SAndroid Build Coastguard Worker 131*495ae853SAndroid Build Coastguard Worker /** 132*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 133*495ae853SAndroid Build Coastguard Worker * 134*495ae853SAndroid Build Coastguard Worker * @brief 135*495ae853SAndroid Build Coastguard Worker * gets the memory size required for downscaler 136*495ae853SAndroid Build Coastguard Worker * 137*495ae853SAndroid Build Coastguard Worker * @par Description: 138*495ae853SAndroid Build Coastguard Worker * returns the memory required by the downscaler context and state structs 139*495ae853SAndroid Build Coastguard Worker * for allocation. 140*495ae853SAndroid Build Coastguard Worker * 141*495ae853SAndroid Build Coastguard Worker * @returns 142*495ae853SAndroid Build Coastguard Worker * 143*495ae853SAndroid Build Coastguard Worker * @remarks 144*495ae853SAndroid Build Coastguard Worker * 145*495ae853SAndroid Build Coastguard Worker * 146*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 147*495ae853SAndroid Build Coastguard Worker */ 148*495ae853SAndroid Build Coastguard Worker 149*495ae853SAndroid Build Coastguard Worker extern UWORD32 isvce_get_downscaler_data_size(UWORD8 u1_num_spatial_layers, DOUBLE d_scaling_factor, 150*495ae853SAndroid Build Coastguard Worker UWORD32 u4_width, UWORD32 u4_height); 151*495ae853SAndroid Build Coastguard Worker 152*495ae853SAndroid Build Coastguard Worker /** 153*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 154*495ae853SAndroid Build Coastguard Worker * 155*495ae853SAndroid Build Coastguard Worker * @brief 156*495ae853SAndroid Build Coastguard Worker * processes downscaler 157*495ae853SAndroid Build Coastguard Worker * 158*495ae853SAndroid Build Coastguard Worker * @par Description: 159*495ae853SAndroid Build Coastguard Worker * calls the function for padding and scaling 160*495ae853SAndroid Build Coastguard Worker * 161*495ae853SAndroid Build Coastguard Worker * @param[in] ps_scaler 162*495ae853SAndroid Build Coastguard Worker * pointer to downdownscaler context 163*495ae853SAndroid Build Coastguard Worker * 164*495ae853SAndroid Build Coastguard Worker * @param[in] ps_src_buf_props 165*495ae853SAndroid Build Coastguard Worker * pointer to source buffer props struct 166*495ae853SAndroid Build Coastguard Worker * 167*495ae853SAndroid Build Coastguard Worker * @param[in] u4_blk_wd 168*495ae853SAndroid Build Coastguard Worker * width of the block to be processed 169*495ae853SAndroid Build Coastguard Worker * 170*495ae853SAndroid Build Coastguard Worker * @param[in] u4_blk_ht 171*495ae853SAndroid Build Coastguard Worker * height of the block to be processed 172*495ae853SAndroid Build Coastguard Worker * 173*495ae853SAndroid Build Coastguard Worker * @returns 174*495ae853SAndroid Build Coastguard Worker * 175*495ae853SAndroid Build Coastguard Worker * @remarks 176*495ae853SAndroid Build Coastguard Worker * 177*495ae853SAndroid Build Coastguard Worker * 178*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 179*495ae853SAndroid Build Coastguard Worker */ 180*495ae853SAndroid Build Coastguard Worker 181*495ae853SAndroid Build Coastguard Worker extern void isvce_process_downscaler(downscaler_ctxt_t *ps_scaler, 182*495ae853SAndroid Build Coastguard Worker yuv_buf_props_t *ps_src_buf_props, 183*495ae853SAndroid Build Coastguard Worker yuv_buf_props_t *ps_dst_buf_props, UWORD32 u4_blk_wd, 184*495ae853SAndroid Build Coastguard Worker UWORD32 u4_blk_ht); 185*495ae853SAndroid Build Coastguard Worker 186*495ae853SAndroid Build Coastguard Worker /** 187*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 188*495ae853SAndroid Build Coastguard Worker * 189*495ae853SAndroid Build Coastguard Worker * @brief 190*495ae853SAndroid Build Coastguard Worker * gets the padding size required for filtering 191*495ae853SAndroid Build Coastguard Worker * 192*495ae853SAndroid Build Coastguard Worker * @par Description: 193*495ae853SAndroid Build Coastguard Worker * gets the padding size required for filtering 194*495ae853SAndroid Build Coastguard Worker * 195*495ae853SAndroid Build Coastguard Worker * @returns 196*495ae853SAndroid Build Coastguard Worker * 197*495ae853SAndroid Build Coastguard Worker * @remarks 198*495ae853SAndroid Build Coastguard Worker * 199*495ae853SAndroid Build Coastguard Worker * 200*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 201*495ae853SAndroid Build Coastguard Worker */ 202*495ae853SAndroid Build Coastguard Worker 203*495ae853SAndroid Build Coastguard Worker extern void isvce_get_downscaler_padding_dims(padding_dims_t *ps_pad_dims); 204*495ae853SAndroid Build Coastguard Worker 205*495ae853SAndroid Build Coastguard Worker #endif 206