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_hle_interface.h 23*c83a76b0SSuyog Pawar * 24*c83a76b0SSuyog Pawar * \brief 25*c83a76b0SSuyog Pawar * This file contains infertace prototypes of High level encoder interafce 26*c83a76b0SSuyog Pawar * structure and interface functions. 27*c83a76b0SSuyog Pawar * 28*c83a76b0SSuyog Pawar * \date 29*c83a76b0SSuyog Pawar * 18/09/2012 30*c83a76b0SSuyog Pawar * 31*c83a76b0SSuyog Pawar * \author 32*c83a76b0SSuyog Pawar * Ittiam 33*c83a76b0SSuyog Pawar * 34*c83a76b0SSuyog Pawar ****************************************************************************** 35*c83a76b0SSuyog Pawar */ 36*c83a76b0SSuyog Pawar 37*c83a76b0SSuyog Pawar #ifndef _IHEVCE_HLE_INTERFACE_H_ 38*c83a76b0SSuyog Pawar #define _IHEVCE_HLE_INTERFACE_H_ 39*c83a76b0SSuyog Pawar 40*c83a76b0SSuyog Pawar #include "ihevce_profile.h" 41*c83a76b0SSuyog Pawar 42*c83a76b0SSuyog Pawar /*****************************************************************************/ 43*c83a76b0SSuyog Pawar /* Constant Macros */ 44*c83a76b0SSuyog Pawar /*****************************************************************************/ 45*c83a76b0SSuyog Pawar #define IHEVCE_DLL 46*c83a76b0SSuyog Pawar 47*c83a76b0SSuyog Pawar #define DUMP_MBR_MULTI_RES_INFO 0 48*c83a76b0SSuyog Pawar 49*c83a76b0SSuyog Pawar #define DUMP_RC_2_PASS_DATA_BINARY_APP 1 50*c83a76b0SSuyog Pawar /*print attributes */ 51*c83a76b0SSuyog Pawar 52*c83a76b0SSuyog Pawar /*print everything on console */ 53*c83a76b0SSuyog Pawar #define PRINTF(v, x, y, ...) ps_sys_api->ihevce_printf(v, __VA_ARGS__) 54*c83a76b0SSuyog Pawar 55*c83a76b0SSuyog Pawar #define FPRINTF(v, fp, x, y, ...) \ 56*c83a76b0SSuyog Pawar if(NULL != fp) \ 57*c83a76b0SSuyog Pawar { \ 58*c83a76b0SSuyog Pawar ps_sys_api->s_file_io_api.ihevce_fprintf(v, fp, __VA_ARGS__); \ 59*c83a76b0SSuyog Pawar } 60*c83a76b0SSuyog Pawar 61*c83a76b0SSuyog Pawar /* Semaphore attribute */ 62*c83a76b0SSuyog Pawar #define SEM_START_VALUE 1 63*c83a76b0SSuyog Pawar #define THREAD_STACK_SIZE 0x80000 64*c83a76b0SSuyog Pawar 65*c83a76b0SSuyog Pawar /*****************************************************************************/ 66*c83a76b0SSuyog Pawar /* Function Macros */ 67*c83a76b0SSuyog Pawar /*****************************************************************************/ 68*c83a76b0SSuyog Pawar 69*c83a76b0SSuyog Pawar /*****************************************************************************/ 70*c83a76b0SSuyog Pawar /* Typedefs */ 71*c83a76b0SSuyog Pawar /*****************************************************************************/ 72*c83a76b0SSuyog Pawar 73*c83a76b0SSuyog Pawar /*****************************************************************************/ 74*c83a76b0SSuyog Pawar /* Enums */ 75*c83a76b0SSuyog Pawar /*****************************************************************************/ 76*c83a76b0SSuyog Pawar typedef enum 77*c83a76b0SSuyog Pawar { 78*c83a76b0SSuyog Pawar BUFF_QUE_NON_BLOCKING_MODE = 0, 79*c83a76b0SSuyog Pawar 80*c83a76b0SSuyog Pawar BUFF_QUE_BLOCKING_MODE 81*c83a76b0SSuyog Pawar 82*c83a76b0SSuyog Pawar } BUFF_QUE_MODES_T; 83*c83a76b0SSuyog Pawar 84*c83a76b0SSuyog Pawar /*****************************************************************************/ 85*c83a76b0SSuyog Pawar /* Structure */ 86*c83a76b0SSuyog Pawar /*****************************************************************************/ 87*c83a76b0SSuyog Pawar /** 88*c83a76b0SSuyog Pawar * @brief Structure to describe Process interface parameters of Encoder 89*c83a76b0SSuyog Pawar */ 90*c83a76b0SSuyog Pawar typedef struct 91*c83a76b0SSuyog Pawar { 92*c83a76b0SSuyog Pawar /** 93*c83a76b0SSuyog Pawar * Size for version tracking purpose 94*c83a76b0SSuyog Pawar */ 95*c83a76b0SSuyog Pawar WORD32 i4_size; 96*c83a76b0SSuyog Pawar 97*c83a76b0SSuyog Pawar /** 98*c83a76b0SSuyog Pawar * Flag to communicate that HLE thread int are done 99*c83a76b0SSuyog Pawar */ 100*c83a76b0SSuyog Pawar WORD32 i4_hle_init_done; 101*c83a76b0SSuyog Pawar 102*c83a76b0SSuyog Pawar /** 103*c83a76b0SSuyog Pawar * Error code communciate any error during create stage 104*c83a76b0SSuyog Pawar */ 105*c83a76b0SSuyog Pawar WORD32 i4_error_code; 106*c83a76b0SSuyog Pawar 107*c83a76b0SSuyog Pawar /** 108*c83a76b0SSuyog Pawar * GPU memory accumalator 109*c83a76b0SSuyog Pawar */ 110*c83a76b0SSuyog Pawar WORD32 i4_gpu_mem_size; 111*c83a76b0SSuyog Pawar 112*c83a76b0SSuyog Pawar /** 113*c83a76b0SSuyog Pawar * OSAL handle 114*c83a76b0SSuyog Pawar */ 115*c83a76b0SSuyog Pawar void *pv_osal_handle; 116*c83a76b0SSuyog Pawar 117*c83a76b0SSuyog Pawar /** 118*c83a76b0SSuyog Pawar * Encoder Handle 119*c83a76b0SSuyog Pawar */ 120*c83a76b0SSuyog Pawar void *apv_enc_hdl[IHEVCE_MAX_NUM_RESOLUTIONS]; 121*c83a76b0SSuyog Pawar 122*c83a76b0SSuyog Pawar /** 123*c83a76b0SSuyog Pawar * Static parameters structure 124*c83a76b0SSuyog Pawar */ 125*c83a76b0SSuyog Pawar ihevce_static_cfg_params_t *ps_static_cfg_prms; 126*c83a76b0SSuyog Pawar 127*c83a76b0SSuyog Pawar /** 128*c83a76b0SSuyog Pawar * Memory Manager handle 129*c83a76b0SSuyog Pawar */ 130*c83a76b0SSuyog Pawar void *pv_mem_mgr_hdl; 131*c83a76b0SSuyog Pawar 132*c83a76b0SSuyog Pawar /** 133*c83a76b0SSuyog Pawar * Input Buffer callback handle 134*c83a76b0SSuyog Pawar */ 135*c83a76b0SSuyog Pawar void *pv_inp_cb_handle; 136*c83a76b0SSuyog Pawar 137*c83a76b0SSuyog Pawar /** 138*c83a76b0SSuyog Pawar * Ouput Buffer callback handle 139*c83a76b0SSuyog Pawar */ 140*c83a76b0SSuyog Pawar void *pv_out_cb_handle; 141*c83a76b0SSuyog Pawar 142*c83a76b0SSuyog Pawar /** 143*c83a76b0SSuyog Pawar * Ouput Recon Buffer callback handle 144*c83a76b0SSuyog Pawar */ 145*c83a76b0SSuyog Pawar void *pv_recon_cb_handle; 146*c83a76b0SSuyog Pawar 147*c83a76b0SSuyog Pawar /** 148*c83a76b0SSuyog Pawar * Call back API to be called while the buffer for bitstream filling is done 149*c83a76b0SSuyog Pawar */ 150*c83a76b0SSuyog Pawar IV_API_CALL_STATUS_T (*ihevce_output_strm_fill_done) 151*c83a76b0SSuyog Pawar (void *pv_out_cb_handle, void *pv_curr_out, WORD32 i4_bitrate_instance, WORD32 i4_res_instance); 152*c83a76b0SSuyog Pawar 153*c83a76b0SSuyog Pawar /** 154*c83a76b0SSuyog Pawar * Call back API to be called while the buffer for recon filling is done 155*c83a76b0SSuyog Pawar */ 156*c83a76b0SSuyog Pawar IV_API_CALL_STATUS_T (*ihevce_output_recon_fill_done) 157*c83a76b0SSuyog Pawar (void *pv_recon_cb_handle, 158*c83a76b0SSuyog Pawar void *pv_curr_out, 159*c83a76b0SSuyog Pawar WORD32 i4_bitrate_instance, 160*c83a76b0SSuyog Pawar WORD32 i4_res_instance); 161*c83a76b0SSuyog Pawar 162*c83a76b0SSuyog Pawar /** 163*c83a76b0SSuyog Pawar * Call back API to be called while freeing the input buffer 164*c83a76b0SSuyog Pawar */ 165*c83a76b0SSuyog Pawar IV_API_CALL_STATUS_T (*ihevce_set_free_input_buff) 166*c83a76b0SSuyog Pawar (void *pv_inp_cb_handle, iv_input_data_ctrl_buffs_t *ps_input_buf); 167*c83a76b0SSuyog Pawar 168*c83a76b0SSuyog Pawar /** 169*c83a76b0SSuyog Pawar * Call back API to be called during allocation using memory manager 170*c83a76b0SSuyog Pawar */ 171*c83a76b0SSuyog Pawar void (*ihevce_mem_alloc)( 172*c83a76b0SSuyog Pawar void *pv_mem_mgr_hdl, ihevce_sys_api_t *ps_sys_api, iv_mem_rec_t *ps_memtab); 173*c83a76b0SSuyog Pawar 174*c83a76b0SSuyog Pawar /** 175*c83a76b0SSuyog Pawar * Call back API for freeing using memory manager 176*c83a76b0SSuyog Pawar */ 177*c83a76b0SSuyog Pawar void (*ihevce_mem_free)(void *pv_mem_mgr_hdl, iv_mem_rec_t *ps_memtab); 178*c83a76b0SSuyog Pawar 179*c83a76b0SSuyog Pawar /* create or run time input buffer allocation, 1: create time 0: run time*/ 180*c83a76b0SSuyog Pawar WORD32 i4_create_time_input_allocation; 181*c83a76b0SSuyog Pawar 182*c83a76b0SSuyog Pawar /* create or run time output buffer allocation, 1: create time 0: run time*/ 183*c83a76b0SSuyog Pawar WORD32 i4_create_time_output_allocation; 184*c83a76b0SSuyog Pawar 185*c83a76b0SSuyog Pawar /*Cores per resolution*/ 186*c83a76b0SSuyog Pawar WORD32 ai4_num_core_per_res[IHEVCE_MAX_NUM_RESOLUTIONS]; 187*c83a76b0SSuyog Pawar 188*c83a76b0SSuyog Pawar /** 189*c83a76b0SSuyog Pawar * Error Handling callback handle 190*c83a76b0SSuyog Pawar */ 191*c83a76b0SSuyog Pawar void *pv_cmd_err_cb_handle; 192*c83a76b0SSuyog Pawar 193*c83a76b0SSuyog Pawar /** 194*c83a76b0SSuyog Pawar * Call back API to be called when errors need to be reported 195*c83a76b0SSuyog Pawar */ 196*c83a76b0SSuyog Pawar IV_API_CALL_STATUS_T (*ihevce_cmds_error_report) 197*c83a76b0SSuyog Pawar (void *pv_cmd_err_cb_handle, WORD32 i4_error_code, WORD32 i4_cmd_type, WORD32 i4_buf_id); 198*c83a76b0SSuyog Pawar 199*c83a76b0SSuyog Pawar /** 200*c83a76b0SSuyog Pawar * Flag to indicate if ECU is enabled/disabled 201*c83a76b0SSuyog Pawar */ 202*c83a76b0SSuyog Pawar WORD32 i4_p6_opt_enabled; 203*c83a76b0SSuyog Pawar 204*c83a76b0SSuyog Pawar /** 205*c83a76b0SSuyog Pawar * profile stats 206*c83a76b0SSuyog Pawar */ 207*c83a76b0SSuyog Pawar profile_database_t profile_hle; 208*c83a76b0SSuyog Pawar profile_database_t profile_pre_enc_l1l2[IHEVCE_MAX_NUM_RESOLUTIONS]; 209*c83a76b0SSuyog Pawar profile_database_t profile_pre_enc_l0ipe[IHEVCE_MAX_NUM_RESOLUTIONS]; 210*c83a76b0SSuyog Pawar profile_database_t profile_enc_me[IHEVCE_MAX_NUM_RESOLUTIONS]; 211*c83a76b0SSuyog Pawar profile_database_t profile_enc[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; 212*c83a76b0SSuyog Pawar profile_database_t profile_entropy[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; 213*c83a76b0SSuyog Pawar 214*c83a76b0SSuyog Pawar } ihevce_hle_ctxt_t; 215*c83a76b0SSuyog Pawar 216*c83a76b0SSuyog Pawar /** 217*c83a76b0SSuyog Pawar ****************************************************************************** 218*c83a76b0SSuyog Pawar * @brief Indivisual Thread context structure 219*c83a76b0SSuyog Pawar ****************************************************************************** 220*c83a76b0SSuyog Pawar */ 221*c83a76b0SSuyog Pawar typedef struct 222*c83a76b0SSuyog Pawar { 223*c83a76b0SSuyog Pawar /** Unique Id associated with every frame processing thread */ 224*c83a76b0SSuyog Pawar WORD32 i4_thrd_id; 225*c83a76b0SSuyog Pawar 226*c83a76b0SSuyog Pawar /** pointer to encoder context structure */ 227*c83a76b0SSuyog Pawar void *pv_enc_ctxt; 228*c83a76b0SSuyog Pawar 229*c83a76b0SSuyog Pawar /** pointer to the hle context structure */ 230*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt; 231*c83a76b0SSuyog Pawar 232*c83a76b0SSuyog Pawar } frm_proc_thrd_ctxt_t; 233*c83a76b0SSuyog Pawar 234*c83a76b0SSuyog Pawar /*****************************************************************************/ 235*c83a76b0SSuyog Pawar /* Extern Variable Declarations */ 236*c83a76b0SSuyog Pawar /*****************************************************************************/ 237*c83a76b0SSuyog Pawar 238*c83a76b0SSuyog Pawar /*****************************************************************************/ 239*c83a76b0SSuyog Pawar /* Extern Function Declarations */ 240*c83a76b0SSuyog Pawar /*****************************************************************************/ 241*c83a76b0SSuyog Pawar 242*c83a76b0SSuyog Pawar /** Create API 243*c83a76b0SSuyog Pawar * 244*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 245*c83a76b0SSuyog Pawar * It is assumed that application before calling this API 246*c83a76b0SSuyog Pawar * has initialized with correct pointers for following 247*c83a76b0SSuyog Pawar * - pv_osal_handle 248*c83a76b0SSuyog Pawar * - pv_app_sem_handle 249*c83a76b0SSuyog Pawar * - ps_static_cfg_prms 250*c83a76b0SSuyog Pawar * - ihevce_mem_alloc 251*c83a76b0SSuyog Pawar * - ihevce_mem_free 252*c83a76b0SSuyog Pawar * 253*c83a76b0SSuyog Pawar * Encoder after initilaization would store the encoder handle in 254*c83a76b0SSuyog Pawar * - pv_enc_hdl 255*c83a76b0SSuyog Pawar * 256*c83a76b0SSuyog Pawar * Create Return status (success or fail) is returned 257*c83a76b0SSuyog Pawar */ 258*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T ihevce_hle_interface_create(ihevce_hle_ctxt_t *ps_hle_ctxt); 259*c83a76b0SSuyog Pawar 260*c83a76b0SSuyog Pawar /** Query IO buffers requirements API 261*c83a76b0SSuyog Pawar * 262*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 263*c83a76b0SSuyog Pawar * ps_input_bufs_req : memory to store input buffer requirements 264*c83a76b0SSuyog Pawar * ps_output_bufs_req : memory to store output buffer requirements 265*c83a76b0SSuyog Pawar * 266*c83a76b0SSuyog Pawar * Should be called only after a sucessfull create of codec instance 267*c83a76b0SSuyog Pawar * 268*c83a76b0SSuyog Pawar * Return status (success or fail) is returned 269*c83a76b0SSuyog Pawar */ 270*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T ihevce_query_io_buf_req( 271*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, 272*c83a76b0SSuyog Pawar iv_input_bufs_req_t *ps_input_bufs_req, 273*c83a76b0SSuyog Pawar iv_res_layer_output_bufs_req_t *ps_res_layer_output_bufs_req, 274*c83a76b0SSuyog Pawar iv_res_layer_recon_bufs_req_t *ps_res_layer_recon_bufs_req); 275*c83a76b0SSuyog Pawar 276*c83a76b0SSuyog Pawar /** Create buffer ports for procesing API 277*c83a76b0SSuyog Pawar * 278*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 279*c83a76b0SSuyog Pawar * ps_input_data_ctrl_buffs_desc : 280*c83a76b0SSuyog Pawar * Pointer to Input (data/control) buffers details memory 281*c83a76b0SSuyog Pawar * ps_input_asynch_ctrl_buffs_desc : 282*c83a76b0SSuyog Pawar * Pointer to Input async control buffers details memory 283*c83a76b0SSuyog Pawar * ps_output_data_buffs_desc : 284*c83a76b0SSuyog Pawar * Pointer to output data buffers details memory 285*c83a76b0SSuyog Pawar * ps_output_status_buffs_desc: 286*c83a76b0SSuyog Pawar * Pointer to outtput async control buffers details memory 287*c83a76b0SSuyog Pawar * 288*c83a76b0SSuyog Pawar * Return status (success or fail) is returned 289*c83a76b0SSuyog Pawar */ 290*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T ihevce_create_ports( 291*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, 292*c83a76b0SSuyog Pawar iv_input_data_ctrl_buffs_desc_t *ps_input_data_ctrl_buffs_desc, 293*c83a76b0SSuyog Pawar iv_input_asynch_ctrl_buffs_desc_t *ps_input_asynch_ctrl_buffs_desc, 294*c83a76b0SSuyog Pawar iv_res_layer_output_data_buffs_desc_t *ps_mres_output_data_buffs_desc, 295*c83a76b0SSuyog Pawar iv_res_layer_recon_data_buffs_desc_t *ps_mres_recon_data_buffs_desc); 296*c83a76b0SSuyog Pawar 297*c83a76b0SSuyog Pawar /** Processing interface layer thread API 298*c83a76b0SSuyog Pawar * 299*c83a76b0SSuyog Pawar * This is the entry point for this thread 300*c83a76b0SSuyog Pawar * pointer to ihevce_hle_ctxt_t has to be passed 301*c83a76b0SSuyog Pawar * to this function as the argument 302*c83a76b0SSuyog Pawar * 303*c83a76b0SSuyog Pawar * return should be a exit code (0) 304*c83a76b0SSuyog Pawar */ 305*c83a76b0SSuyog Pawar IHEVCE_DLL WORD32 ihevce_hle_interface_thrd(void *pv_proc_intf_ctxt); 306*c83a76b0SSuyog Pawar 307*c83a76b0SSuyog Pawar /** Get version API 308*c83a76b0SSuyog Pawar * 309*c83a76b0SSuyog Pawar * This is API to return the version number of the encoder 310*c83a76b0SSuyog Pawar * 311*c83a76b0SSuyog Pawar * returns the version number string 312*c83a76b0SSuyog Pawar */ 313*c83a76b0SSuyog Pawar IHEVCE_DLL const char *ihevce_get_encoder_version(void); 314*c83a76b0SSuyog Pawar 315*c83a76b0SSuyog Pawar /** Validate Encoder parameters 316*c83a76b0SSuyog Pawar * 317*c83a76b0SSuyog Pawar * This is API to return the version number of the encoder 318*c83a76b0SSuyog Pawar * 319*c83a76b0SSuyog Pawar * returns the version number string 320*c83a76b0SSuyog Pawar */ 321*c83a76b0SSuyog Pawar IHEVCE_DLL WORD32 ihevce_validate_encoder_parameters(ihevce_static_cfg_params_t *ps_static_cfg_prms); 322*c83a76b0SSuyog Pawar 323*c83a76b0SSuyog Pawar /** Get free input frame data buffer API 324*c83a76b0SSuyog Pawar * 325*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 326*c83a76b0SSuyog Pawar * pi4_buff_id : pointer to store the buffer id of the buffer returned. 327*c83a76b0SSuyog Pawar * i4_blocking_mode : Blocking mode to control if the the API should wait 328*c83a76b0SSuyog Pawar * for a free buffer to be available and then 329*c83a76b0SSuyog Pawar * return with a valid buffer @sa BUFF_QUE_MODES_T 330*c83a76b0SSuyog Pawar * returns NULL if no free buffer is present in queue (if non blocking mode) 331*c83a76b0SSuyog Pawar */ 332*c83a76b0SSuyog Pawar IHEVCE_DLL void *ihevce_q_get_free_inp_data_buff( 333*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, WORD32 *pi4_buff_id, WORD32 i4_blocking_mode); 334*c83a76b0SSuyog Pawar 335*c83a76b0SSuyog Pawar /** Get free input control data buffer API 336*c83a76b0SSuyog Pawar * 337*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 338*c83a76b0SSuyog Pawar * pi4_buff_id : pointer to store the buffer id of the buffer returned. 339*c83a76b0SSuyog Pawar * i4_blocking_mode : Blocking mode to control if the the API should wait 340*c83a76b0SSuyog Pawar * for a free buffer to be available and then 341*c83a76b0SSuyog Pawar * return with a valid buffer @sa BUFF_QUE_MODES_T 342*c83a76b0SSuyog Pawar * returns NULL if no free buffer is present in queue (if non blocking mode) 343*c83a76b0SSuyog Pawar */ 344*c83a76b0SSuyog Pawar IHEVCE_DLL void *ihevce_q_get_free_inp_ctrl_buff( 345*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, WORD32 *pi4_buff_id, WORD32 i4_blocking_mode); 346*c83a76b0SSuyog Pawar 347*c83a76b0SSuyog Pawar IHEVCE_DLL void *ihevce_q_get_free_out_strm_buff( 348*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, 349*c83a76b0SSuyog Pawar WORD32 *pi4_buff_id, 350*c83a76b0SSuyog Pawar WORD32 i4_blocking_mode, 351*c83a76b0SSuyog Pawar WORD32 i4_bitrate_instance, 352*c83a76b0SSuyog Pawar WORD32 i4_res_instance); 353*c83a76b0SSuyog Pawar 354*c83a76b0SSuyog Pawar IHEVCE_DLL void *ihevce_q_get_free_out_recon_buff( 355*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, 356*c83a76b0SSuyog Pawar WORD32 *pi4_buff_id, 357*c83a76b0SSuyog Pawar WORD32 i4_blocking_mode, 358*c83a76b0SSuyog Pawar WORD32 i4_bitrate_instance, 359*c83a76b0SSuyog Pawar WORD32 i4_res_instance); 360*c83a76b0SSuyog Pawar 361*c83a76b0SSuyog Pawar /** Set Input frame data buffer as produced API 362*c83a76b0SSuyog Pawar * 363*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 364*c83a76b0SSuyog Pawar * i4_buff_id : buffer id of the buffer returned during get free buf. 365*c83a76b0SSuyog Pawar */ 366*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T 367*c83a76b0SSuyog Pawar ihevce_q_set_inp_data_buff_prod(ihevce_hle_ctxt_t *ps_hle_ctxt, WORD32 i4_buff_id); 368*c83a76b0SSuyog Pawar 369*c83a76b0SSuyog Pawar /** Set Input control data buffer as produced API 370*c83a76b0SSuyog Pawar * 371*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 372*c83a76b0SSuyog Pawar * i4_buff_id : buffer id of the buffer returned during get free buf. 373*c83a76b0SSuyog Pawar */ 374*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T 375*c83a76b0SSuyog Pawar ihevce_q_set_inp_ctrl_buff_prod(ihevce_hle_ctxt_t *ps_hle_ctxt, WORD32 i4_buff_id); 376*c83a76b0SSuyog Pawar 377*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T ihevce_q_set_out_strm_buff_prod( 378*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, 379*c83a76b0SSuyog Pawar WORD32 i4_buff_id, 380*c83a76b0SSuyog Pawar WORD32 i4_bitrate_instance_id, 381*c83a76b0SSuyog Pawar WORD32 i4_resolution_id); 382*c83a76b0SSuyog Pawar 383*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T ihevce_q_set_out_recon_buff_prod( 384*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, 385*c83a76b0SSuyog Pawar WORD32 i4_buff_id, 386*c83a76b0SSuyog Pawar WORD32 i4_bitrate_instance_id, 387*c83a76b0SSuyog Pawar WORD32 i4_resolution_id); 388*c83a76b0SSuyog Pawar 389*c83a76b0SSuyog Pawar /** Get next filled recon data buffer API 390*c83a76b0SSuyog Pawar * 391*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 392*c83a76b0SSuyog Pawar * pi4_buff_id : pointer to store the buffer id of the buffer returned. 393*c83a76b0SSuyog Pawar * i4_blocking_mode : Blocking mode to control if the the API should wait 394*c83a76b0SSuyog Pawar * for a produced buffer to be available and then 395*c83a76b0SSuyog Pawar * return with a valid buffer @sa BUFF_QUE_MODES_T 396*c83a76b0SSuyog Pawar * returns NULL if no produced buffer is present in queue (if non blocking mode) 397*c83a76b0SSuyog Pawar */ 398*c83a76b0SSuyog Pawar IHEVCE_DLL void *ihevce_q_get_filled_recon_buff( 399*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, 400*c83a76b0SSuyog Pawar WORD32 *pi4_buff_id, 401*c83a76b0SSuyog Pawar WORD32 i4_blocking_mode, 402*c83a76b0SSuyog Pawar WORD32 i4_bitrate_instance_id, 403*c83a76b0SSuyog Pawar WORD32 i4_resolution_id); 404*c83a76b0SSuyog Pawar 405*c83a76b0SSuyog Pawar /** Release/ Free recon buffer buffer API 406*c83a76b0SSuyog Pawar * 407*c83a76b0SSuyog Pawar * ps_hle_ctxt : Pointer to high level encoder context. 408*c83a76b0SSuyog Pawar * i4_buff_id : buffer id of the buffer returned during get next buf. 409*c83a76b0SSuyog Pawar */ 410*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T ihevce_q_rel_recon_buf( 411*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, 412*c83a76b0SSuyog Pawar WORD32 i4_buff_id, 413*c83a76b0SSuyog Pawar WORD32 i4_bitrate_instance_id, 414*c83a76b0SSuyog Pawar WORD32 i4_resolution_id); 415*c83a76b0SSuyog Pawar 416*c83a76b0SSuyog Pawar /** Delete API 417*c83a76b0SSuyog Pawar * 418*c83a76b0SSuyog Pawar * Should be called only after the high level encoder thread exits or returns 419*c83a76b0SSuyog Pawar */ 420*c83a76b0SSuyog Pawar IHEVCE_DLL IV_API_CALL_STATUS_T ihevce_hle_interface_delete(ihevce_hle_ctxt_t *ps_hle_ctxt); 421*c83a76b0SSuyog Pawar 422*c83a76b0SSuyog Pawar /** Trace API 423*c83a76b0SSuyog Pawar * 424*c83a76b0SSuyog Pawar * Open and Close trace file pointer. 425*c83a76b0SSuyog Pawar */ 426*c83a76b0SSuyog Pawar IHEVCE_DLL WORD32 ihevce_trace_init(UWORD8 *pu1_file_name); 427*c83a76b0SSuyog Pawar 428*c83a76b0SSuyog Pawar IHEVCE_DLL WORD32 ihevce_trace_deinit(void); 429*c83a76b0SSuyog Pawar 430*c83a76b0SSuyog Pawar /** Header API 431*c83a76b0SSuyog Pawar * 432*c83a76b0SSuyog Pawar * Get sequence headers asynchronously 433*c83a76b0SSuyog Pawar */ 434*c83a76b0SSuyog Pawar WORD32 ihevce_entropy_encode_header( 435*c83a76b0SSuyog Pawar ihevce_hle_ctxt_t *ps_hle_ctxt, WORD32 i4_bitrate_instance_id, WORD32 i4_resolution_id); 436*c83a76b0SSuyog Pawar 437*c83a76b0SSuyog Pawar #endif /* _IHEVCE_HLE_INTERFACE_H_ */ 438