/****************************************************************************** * * 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 ihevce_plugin_priv.h * * \brief * This file contains sample application definations and structures * * \date * 15/04/2014 * * \author * Ittiam * * * List of Functions * * ****************************************************************************** */ #ifndef _IHEVCE_PLUGIN_PRIV_H_ #define _IHEVCE_PLUGIN_PRIV_H_ /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ /*****************************************************************************/ /* Constant Macros */ /*****************************************************************************/ #define XTRA_INP_DATA_BUFS 0 #define MAX_NUM_INP_DATA_BUFS MAX_SUB_GOP_SIZE + NUM_LAP2_LOOK_AHEAD #define MAX_NUM_INP_CTRL_SYNC_BUFS MAX_NUM_INP_DATA_BUFS #define MAX_NUM_INP_CTRL_ASYNC_BUFS 5 #define XTRA_OUT_DATA_BUFS 0 #define MAX_NUM_OUT_DATA_BUFS (16 + XTRA_OUT_DATA_BUFS) #define MAX_NUM_OUT_CTRL_ASYNC_BUFS 16 #define MAX_NUM_RECON_DATA_BUFS 64 /** Queue from Master to Slave for MBR/MRES cases **/ #define MBR_M2S_QUEUE 200 /*****************************************************************************/ /* Function Macros */ /*****************************************************************************/ #define SET_CTB_ALIGN(x, y) ((((x) & ((y)-1)) == 0) ? 0 : (y) - ((x) & ((y)-1))) /*****************************************************************************/ /* Typedefs */ /*****************************************************************************/ /*****************************************************************************/ /* Enums */ /*****************************************************************************/ /*****************************************************************************/ /* Structure */ /*****************************************************************************/ /** * @brief Store output buffer parameters */ typedef struct { UWORD8 *pu1_bs_buffer; WORD32 i4_bytes_generated; WORD32 i4_is_key_frame; ULWORD64 u8_pts; LWORD64 i8_dts; } bitstream_buf_t; /** * @brief Store buffer queue parameters */ typedef struct { /******* Buffer q indexes *******/ WORD32 i4_q_rd_idx; WORD32 i4_q_wr_idx; WORD32 i4_quit; WORD32 i4_q_size; /******* Semaphore Handles ******/ void *pv_q_deq_sem_handle; void *pv_rel_free_sem_handle; } queue_t; /** * @brief Datatype of global pointer used for data sharing * across encoder nodes. */ typedef struct { queue_t s_queue_params; bitstream_buf_t bs_buf_nodes[MBR_M2S_QUEUE]; WORD32 i4_slave_inst_done; } ihevce_mbr_mres_handle_t; typedef struct { WORD32 i4_idx; UWORD8 *pu1_buf; WORD32 i4_is_free; WORD32 i4_is_prod; WORD32 i4_timestamp_low; WORD32 i4_timestamp_high; WORD32 i4_bytes_gen; WORD32 i4_is_key_frame; WORD32 i4_buf_size; WORD32 i4_end_flag; } out_buf_ctxt_t; typedef struct { ULWORD64 u8_total_bits; UWORD32 u4_num_frms_enc; /* mutex controlling the out strm buf b/w appln and encoder */ void *pv_app_out_strm_buf_mutex_hdl; void *pv_app_out_strm_buf_cond_var_hdl; } out_strm_prms_t; typedef struct { void *pv_mem_mngr_handle; /*!< memory manager handle */ WORD32 ai4_out_strm_end_flag[IHEVCE_MAX_NUM_RESOLUTIONS] [IHEVCE_MAX_NUM_BITRATES]; /*!< end of strm processing */ out_strm_prms_t as_out_strm_prms[IHEVCE_MAX_NUM_RESOLUTIONS] [IHEVCE_MAX_NUM_BITRATES]; /*!< to store out strm related prms */ } app_ctxt_t; typedef struct { /*!< Static paramters same memory pointer will be passed to processing interface layer */ ihevce_static_cfg_params_t *ps_static_cfg_prms; /*!< Osal Handle */ void *pv_osal_handle; /*!< Call back API for freeing */ void (*ihevce_mem_free)(void *pv_handle, void *pv_mem); /*!< Call back API to be called during allocation */ void *(*ihevce_mem_alloc)(void *pv_handle, UWORD32 u4_size); /** App context memory */ app_ctxt_t s_app_ctxt; /** semaphore handle for Input data proc thread */ void *pv_app_inp_ctrl_sem_hdl; /** semaphore handle for Output data proc thread */ void *pv_app_out_sts_sem_hdl; /** Pointer to HLE interface ctxt */ void *pv_hle_interface_ctxt; /** Memtab of input buffers */ iv_mem_rec_t s_memtab_inp_data_buf; /** Memtab of input command buffers */ iv_mem_rec_t s_memtab_inp_sync_ctrl_buf; /** Array of memtabs of outptu buffers */ iv_mem_rec_t as_memtab_out_data_buf[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; /* pointer to async command input buffer */ UWORD8 *pu1_inp_async_ctrl_buf; /* pointer to async command output buffer*/ UWORD8 *pu1_out_ctrl_buf; /* HLE thread handle */ void *pv_hle_thread_hdl; /* flag to indicate that flush mode is ON */ WORD32 i4_flush_mode_on; /* field id for interlaced case */ WORD32 i4_field_id; /* frame stride of input buffers */ WORD32 i4_frm_stride; /* flag to indicate Output end status */ WORD32 ai4_out_end_flag[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; /* output buffer context */ out_buf_ctxt_t aaas_out_bufs[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES] [MAX_NUM_OUT_DATA_BUFS + 1]; /* Num Output buffers */ WORD32 i4_num_out_bufs; /* Free outbuf idx */ WORD32 ai4_free_out_buf_idx[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; /* Out produced idx */ WORD32 i4_prod_out_buf_idx; /* DTS for output population */ LWORD64 i8_dts; /* Flag used for flushing in case of EVAL version */ WORD32 i4_internal_flush; ULWORD64 u8_num_frames_encoded; /* Count no of frames queued */ ULWORD64 u8_num_frames_queued; /** Structure which contains params to be shared across different FFMPEG instances **/ ihevce_mbr_mres_handle_t *ps_mbr_mres_handle[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; /* Dynamic change in bitrate detecting mechnaism related vaiables */ WORD32 ai4_old_bitrate[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; } plugin_ctxt_t; /*****************************************************************************/ /* Extern Variable Declarations */ /*****************************************************************************/ /*****************************************************************************/ /* Extern Function Declarations */ /*****************************************************************************/ #endif /* _IHEVCE_PLUGIN_PRIV_H_ */