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 ihevce_multi_thrd_structs.h 23*c83a76b0SSuyog Pawar * 24*c83a76b0SSuyog Pawar * \brief 25*c83a76b0SSuyog Pawar * This file contains structure definations of multi thread based processing 26*c83a76b0SSuyog Pawar * 27*c83a76b0SSuyog Pawar * \date 28*c83a76b0SSuyog Pawar * 18/09/2012 29*c83a76b0SSuyog Pawar * 30*c83a76b0SSuyog Pawar * \author 31*c83a76b0SSuyog Pawar * Ittiam 32*c83a76b0SSuyog Pawar * 33*c83a76b0SSuyog Pawar ****************************************************************************** 34*c83a76b0SSuyog Pawar */ 35*c83a76b0SSuyog Pawar 36*c83a76b0SSuyog Pawar #ifndef _IHEVCE_MULTI_THRD_STRUCTS_H_ 37*c83a76b0SSuyog Pawar #define _IHEVCE_MULTI_THRD_STRUCTS_H_ 38*c83a76b0SSuyog Pawar 39*c83a76b0SSuyog Pawar /*****************************************************************************/ 40*c83a76b0SSuyog Pawar /* File Includes */ 41*c83a76b0SSuyog Pawar /*****************************************************************************/ 42*c83a76b0SSuyog Pawar 43*c83a76b0SSuyog Pawar /*****************************************************************************/ 44*c83a76b0SSuyog Pawar /* Constant Macros */ 45*c83a76b0SSuyog Pawar /*****************************************************************************/ 46*c83a76b0SSuyog Pawar /** Maximum number of modules on whose outputs any module's inputs are dependent */ 47*c83a76b0SSuyog Pawar #define MAX_IN_DEP 80 48*c83a76b0SSuyog Pawar 49*c83a76b0SSuyog Pawar /** Maximum number of modules whose inputs are dependent on any module's outputs */ 50*c83a76b0SSuyog Pawar #define MAX_OUT_DEP 80 51*c83a76b0SSuyog Pawar 52*c83a76b0SSuyog Pawar /*****************************************************************************/ 53*c83a76b0SSuyog Pawar /* Function Macros */ 54*c83a76b0SSuyog Pawar /*****************************************************************************/ 55*c83a76b0SSuyog Pawar 56*c83a76b0SSuyog Pawar /*****************************************************************************/ 57*c83a76b0SSuyog Pawar /* Typedefs */ 58*c83a76b0SSuyog Pawar /*****************************************************************************/ 59*c83a76b0SSuyog Pawar 60*c83a76b0SSuyog Pawar /*****************************************************************************/ 61*c83a76b0SSuyog Pawar /* Enums */ 62*c83a76b0SSuyog Pawar /*****************************************************************************/ 63*c83a76b0SSuyog Pawar 64*c83a76b0SSuyog Pawar typedef enum 65*c83a76b0SSuyog Pawar { 66*c83a76b0SSuyog Pawar ME_JOB_ENC_LYR = 0, 67*c83a76b0SSuyog Pawar ENC_LOOP_JOB, 68*c83a76b0SSuyog Pawar ENC_LOOP_JOB1, 69*c83a76b0SSuyog Pawar ENC_LOOP_JOB2, 70*c83a76b0SSuyog Pawar ENC_LOOP_JOB3, 71*c83a76b0SSuyog Pawar ENC_LOOP_JOB4, //MBR: enc_loop job instance created for each bit-rate. 72*c83a76b0SSuyog Pawar //change instances based on IHEVCE_MAX_NUM_BITRATES 73*c83a76b0SSuyog Pawar 74*c83a76b0SSuyog Pawar NUM_ENC_JOBS_QUES, 75*c83a76b0SSuyog Pawar 76*c83a76b0SSuyog Pawar } HEVCE_ENC_JOB_TYPES_T; 77*c83a76b0SSuyog Pawar 78*c83a76b0SSuyog Pawar typedef enum 79*c83a76b0SSuyog Pawar { 80*c83a76b0SSuyog Pawar DECOMP_JOB_LYR0 = 0, 81*c83a76b0SSuyog Pawar DECOMP_JOB_LYR1, 82*c83a76b0SSuyog Pawar DECOMP_JOB_LYR2, 83*c83a76b0SSuyog Pawar DECOMP_JOB_LYR3, 84*c83a76b0SSuyog Pawar ME_JOB_LYR4, 85*c83a76b0SSuyog Pawar ME_JOB_LYR3, 86*c83a76b0SSuyog Pawar ME_JOB_LYR2, 87*c83a76b0SSuyog Pawar ME_JOB_LYR1, 88*c83a76b0SSuyog Pawar IPE_JOB_LYR0, 89*c83a76b0SSuyog Pawar 90*c83a76b0SSuyog Pawar NUM_PRE_ENC_JOBS_QUES, 91*c83a76b0SSuyog Pawar 92*c83a76b0SSuyog Pawar } HEVCE_PRE_ENC_JOB_TYPES_T; 93*c83a76b0SSuyog Pawar 94*c83a76b0SSuyog Pawar /*****************************************************************************/ 95*c83a76b0SSuyog Pawar /* Structure */ 96*c83a76b0SSuyog Pawar /*****************************************************************************/ 97*c83a76b0SSuyog Pawar 98*c83a76b0SSuyog Pawar /** 99*c83a76b0SSuyog Pawar ****************************************************************************** 100*c83a76b0SSuyog Pawar * @brief IPE Job parameters structure 101*c83a76b0SSuyog Pawar ****************************************************************************** 102*c83a76b0SSuyog Pawar */ 103*c83a76b0SSuyog Pawar typedef struct 104*c83a76b0SSuyog Pawar { 105*c83a76b0SSuyog Pawar /*!< Index of the CTB Row */ 106*c83a76b0SSuyog Pawar WORD32 i4_ctb_row_no; 107*c83a76b0SSuyog Pawar 108*c83a76b0SSuyog Pawar } ipe_job_node_t; 109*c83a76b0SSuyog Pawar 110*c83a76b0SSuyog Pawar /** 111*c83a76b0SSuyog Pawar ****************************************************************************** 112*c83a76b0SSuyog Pawar * @brief ME Job parameters structure 113*c83a76b0SSuyog Pawar ****************************************************************************** 114*c83a76b0SSuyog Pawar */ 115*c83a76b0SSuyog Pawar typedef struct 116*c83a76b0SSuyog Pawar { 117*c83a76b0SSuyog Pawar /** Index of the Vertical unit Row */ 118*c83a76b0SSuyog Pawar WORD32 i4_vert_unit_row_no; 119*c83a76b0SSuyog Pawar WORD32 i4_tile_col_idx; 120*c83a76b0SSuyog Pawar 121*c83a76b0SSuyog Pawar } me_job_node_t; 122*c83a76b0SSuyog Pawar 123*c83a76b0SSuyog Pawar /** 124*c83a76b0SSuyog Pawar ****************************************************************************** 125*c83a76b0SSuyog Pawar * @brief Encode Loop Job parameters structure 126*c83a76b0SSuyog Pawar ****************************************************************************** 127*c83a76b0SSuyog Pawar */ 128*c83a76b0SSuyog Pawar typedef struct 129*c83a76b0SSuyog Pawar { 130*c83a76b0SSuyog Pawar /** Index of the CTB Row */ 131*c83a76b0SSuyog Pawar WORD32 i4_ctb_row_no; 132*c83a76b0SSuyog Pawar WORD32 i4_tile_col_idx; 133*c83a76b0SSuyog Pawar WORD32 i4_bitrate_instance_no; 134*c83a76b0SSuyog Pawar 135*c83a76b0SSuyog Pawar } enc_loop_job_node_t; 136*c83a76b0SSuyog Pawar 137*c83a76b0SSuyog Pawar /** 138*c83a76b0SSuyog Pawar ****************************************************************************** 139*c83a76b0SSuyog Pawar * @brief Decomposition Job parameters structure 140*c83a76b0SSuyog Pawar ****************************************************************************** 141*c83a76b0SSuyog Pawar */ 142*c83a76b0SSuyog Pawar typedef struct 143*c83a76b0SSuyog Pawar { 144*c83a76b0SSuyog Pawar /** Index of the Vertical unit Row */ 145*c83a76b0SSuyog Pawar WORD32 i4_vert_unit_row_no; 146*c83a76b0SSuyog Pawar 147*c83a76b0SSuyog Pawar } decomp_job_node_t; 148*c83a76b0SSuyog Pawar 149*c83a76b0SSuyog Pawar /** 150*c83a76b0SSuyog Pawar ****************************************************************************** 151*c83a76b0SSuyog Pawar * @brief Union Job parameters structure 152*c83a76b0SSuyog Pawar ****************************************************************************** 153*c83a76b0SSuyog Pawar */ 154*c83a76b0SSuyog Pawar typedef union /* Make sure that the size is a multiple of 4 */ 155*c83a76b0SSuyog Pawar { 156*c83a76b0SSuyog Pawar ipe_job_node_t s_ipe_job_info; 157*c83a76b0SSuyog Pawar 158*c83a76b0SSuyog Pawar me_job_node_t s_me_job_info; 159*c83a76b0SSuyog Pawar 160*c83a76b0SSuyog Pawar enc_loop_job_node_t s_enc_loop_job_info; 161*c83a76b0SSuyog Pawar 162*c83a76b0SSuyog Pawar decomp_job_node_t s_decomp_job_info; 163*c83a76b0SSuyog Pawar 164*c83a76b0SSuyog Pawar } job_info_t; 165*c83a76b0SSuyog Pawar 166*c83a76b0SSuyog Pawar /** 167*c83a76b0SSuyog Pawar ****************************************************************************** 168*c83a76b0SSuyog Pawar * @brief Job Queue Element parameters structure 169*c83a76b0SSuyog Pawar ****************************************************************************** 170*c83a76b0SSuyog Pawar */ 171*c83a76b0SSuyog Pawar typedef struct 172*c83a76b0SSuyog Pawar { 173*c83a76b0SSuyog Pawar /** Array of flags indicating the input dependencies of the module. 174*c83a76b0SSuyog Pawar * Flag set to 0 indicates that the input dependency is resolved. 175*c83a76b0SSuyog Pawar * Processing can start only after all the flags are 0. 176*c83a76b0SSuyog Pawar * 177*c83a76b0SSuyog Pawar * This has to be the first element of the array, MAX_IN_DEP has to be multiple of 4 178*c83a76b0SSuyog Pawar */ 179*c83a76b0SSuyog Pawar UWORD8 au1_in_dep[MAX_IN_DEP]; 180*c83a76b0SSuyog Pawar 181*c83a76b0SSuyog Pawar /** Pointer to the next link in the job queue */ 182*c83a76b0SSuyog Pawar void *pv_next; 183*c83a76b0SSuyog Pawar 184*c83a76b0SSuyog Pawar /** Job information ctxt of the module */ 185*c83a76b0SSuyog Pawar job_info_t s_job_info; 186*c83a76b0SSuyog Pawar 187*c83a76b0SSuyog Pawar /** Array of offsets for the output dependencies' pointers. 188*c83a76b0SSuyog Pawar * Indicates the location where the dependency flag needs to 189*c83a76b0SSuyog Pawar * be set after the processing of the current NMB/row/slice 190*c83a76b0SSuyog Pawar */ 191*c83a76b0SSuyog Pawar UWORD32 au4_out_ofsts[MAX_OUT_DEP]; 192*c83a76b0SSuyog Pawar 193*c83a76b0SSuyog Pawar /** Number of input dependencies to be checked before starting current task */ 194*c83a76b0SSuyog Pawar WORD32 i4_num_input_dep; 195*c83a76b0SSuyog Pawar 196*c83a76b0SSuyog Pawar /** Number of output dependencies to be updated after finishing current task */ 197*c83a76b0SSuyog Pawar WORD32 i4_num_output_dep; 198*c83a76b0SSuyog Pawar 199*c83a76b0SSuyog Pawar /** indicates what type of task is to be executed 200*c83a76b0SSuyog Pawar * [ME_JOB for layer 0,ENC_LOOP_JOB] are valid 201*c83a76b0SSuyog Pawar * -1 will be set if this hob task type is irrelevant 202*c83a76b0SSuyog Pawar */ 203*c83a76b0SSuyog Pawar HEVCE_ENC_JOB_TYPES_T i4_task_type; 204*c83a76b0SSuyog Pawar 205*c83a76b0SSuyog Pawar /** indicates what type of task is to be executed 206*c83a76b0SSuyog Pawar * [ME_JOB for coarse and refine layers, DECOMP Jobs and IPE JOB] are valid 207*c83a76b0SSuyog Pawar * -1 will be set if this hob task type is irrelevant 208*c83a76b0SSuyog Pawar */ 209*c83a76b0SSuyog Pawar HEVCE_PRE_ENC_JOB_TYPES_T i4_pre_enc_task_type; 210*c83a76b0SSuyog Pawar 211*c83a76b0SSuyog Pawar } job_queue_t; 212*c83a76b0SSuyog Pawar 213*c83a76b0SSuyog Pawar /** 214*c83a76b0SSuyog Pawar ****************************************************************************** 215*c83a76b0SSuyog Pawar * @brief Job Queue Handle structure 216*c83a76b0SSuyog Pawar ****************************************************************************** 217*c83a76b0SSuyog Pawar */ 218*c83a76b0SSuyog Pawar typedef struct 219*c83a76b0SSuyog Pawar { 220*c83a76b0SSuyog Pawar /** Pointer to the next link in the job queue */ 221*c83a76b0SSuyog Pawar void *pv_next; 222*c83a76b0SSuyog Pawar 223*c83a76b0SSuyog Pawar } job_queue_handle_t; 224*c83a76b0SSuyog Pawar 225*c83a76b0SSuyog Pawar /*****************************************************************************/ 226*c83a76b0SSuyog Pawar /* Extern Variable Declarations */ 227*c83a76b0SSuyog Pawar /*****************************************************************************/ 228*c83a76b0SSuyog Pawar 229*c83a76b0SSuyog Pawar /*****************************************************************************/ 230*c83a76b0SSuyog Pawar /* Extern Function Declarations */ 231*c83a76b0SSuyog Pawar /*****************************************************************************/ 232*c83a76b0SSuyog Pawar 233*c83a76b0SSuyog Pawar #endif /* _IHEVCE_MULTI_THRD_STRUCTS_H_ */ 234