xref: /aosp_15_r20/external/libhevc/encoder/ihevce_plugin_priv.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
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_plugin_priv.h
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    This file contains sample application definations and structures
26*c83a76b0SSuyog Pawar *
27*c83a76b0SSuyog Pawar * \date
28*c83a76b0SSuyog Pawar *    15/04/2014
29*c83a76b0SSuyog Pawar *
30*c83a76b0SSuyog Pawar * \author
31*c83a76b0SSuyog Pawar *    Ittiam
32*c83a76b0SSuyog Pawar *
33*c83a76b0SSuyog Pawar *
34*c83a76b0SSuyog Pawar * List of Functions
35*c83a76b0SSuyog Pawar *
36*c83a76b0SSuyog Pawar *
37*c83a76b0SSuyog Pawar ******************************************************************************
38*c83a76b0SSuyog Pawar */
39*c83a76b0SSuyog Pawar #ifndef _IHEVCE_PLUGIN_PRIV_H_
40*c83a76b0SSuyog Pawar #define _IHEVCE_PLUGIN_PRIV_H_
41*c83a76b0SSuyog Pawar 
42*c83a76b0SSuyog Pawar /*****************************************************************************/
43*c83a76b0SSuyog Pawar /* File Includes                                                             */
44*c83a76b0SSuyog Pawar /*****************************************************************************/
45*c83a76b0SSuyog Pawar 
46*c83a76b0SSuyog Pawar /*****************************************************************************/
47*c83a76b0SSuyog Pawar /* Constant Macros                                                           */
48*c83a76b0SSuyog Pawar /*****************************************************************************/
49*c83a76b0SSuyog Pawar 
50*c83a76b0SSuyog Pawar #define XTRA_INP_DATA_BUFS 0
51*c83a76b0SSuyog Pawar #define MAX_NUM_INP_DATA_BUFS MAX_SUB_GOP_SIZE + NUM_LAP2_LOOK_AHEAD
52*c83a76b0SSuyog Pawar #define MAX_NUM_INP_CTRL_SYNC_BUFS MAX_NUM_INP_DATA_BUFS
53*c83a76b0SSuyog Pawar #define MAX_NUM_INP_CTRL_ASYNC_BUFS 5
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar #define XTRA_OUT_DATA_BUFS 0
56*c83a76b0SSuyog Pawar #define MAX_NUM_OUT_DATA_BUFS (16 + XTRA_OUT_DATA_BUFS)
57*c83a76b0SSuyog Pawar #define MAX_NUM_OUT_CTRL_ASYNC_BUFS 16
58*c83a76b0SSuyog Pawar 
59*c83a76b0SSuyog Pawar #define MAX_NUM_RECON_DATA_BUFS 64
60*c83a76b0SSuyog Pawar 
61*c83a76b0SSuyog Pawar /** Queue from Master to Slave for MBR/MRES cases **/
62*c83a76b0SSuyog Pawar #define MBR_M2S_QUEUE 200
63*c83a76b0SSuyog Pawar 
64*c83a76b0SSuyog Pawar /*****************************************************************************/
65*c83a76b0SSuyog Pawar /* Typedefs                                                                  */
66*c83a76b0SSuyog Pawar /*****************************************************************************/
67*c83a76b0SSuyog Pawar 
68*c83a76b0SSuyog Pawar /*****************************************************************************/
69*c83a76b0SSuyog Pawar /* Enums                                                                     */
70*c83a76b0SSuyog Pawar /*****************************************************************************/
71*c83a76b0SSuyog Pawar 
72*c83a76b0SSuyog Pawar /*****************************************************************************/
73*c83a76b0SSuyog Pawar /* Structure                                                                 */
74*c83a76b0SSuyog Pawar /*****************************************************************************/
75*c83a76b0SSuyog Pawar 
76*c83a76b0SSuyog Pawar /**
77*c83a76b0SSuyog Pawar *  @brief  Store output buffer parameters
78*c83a76b0SSuyog Pawar */
79*c83a76b0SSuyog Pawar typedef struct
80*c83a76b0SSuyog Pawar {
81*c83a76b0SSuyog Pawar     UWORD8 *pu1_bs_buffer;
82*c83a76b0SSuyog Pawar     WORD32 i4_bytes_generated;
83*c83a76b0SSuyog Pawar     WORD32 i4_is_key_frame;
84*c83a76b0SSuyog Pawar     ULWORD64 u8_pts;
85*c83a76b0SSuyog Pawar     LWORD64 i8_dts;
86*c83a76b0SSuyog Pawar } bitstream_buf_t;
87*c83a76b0SSuyog Pawar 
88*c83a76b0SSuyog Pawar /**
89*c83a76b0SSuyog Pawar *  @brief  Store buffer queue parameters
90*c83a76b0SSuyog Pawar */
91*c83a76b0SSuyog Pawar typedef struct
92*c83a76b0SSuyog Pawar {
93*c83a76b0SSuyog Pawar     /******* Buffer q indexes *******/
94*c83a76b0SSuyog Pawar     WORD32 i4_q_rd_idx;
95*c83a76b0SSuyog Pawar     WORD32 i4_q_wr_idx;
96*c83a76b0SSuyog Pawar     WORD32 i4_quit;
97*c83a76b0SSuyog Pawar     WORD32 i4_q_size;
98*c83a76b0SSuyog Pawar 
99*c83a76b0SSuyog Pawar     /******* Semaphore Handles ******/
100*c83a76b0SSuyog Pawar     void *pv_q_deq_sem_handle;
101*c83a76b0SSuyog Pawar     void *pv_rel_free_sem_handle;
102*c83a76b0SSuyog Pawar } queue_t;
103*c83a76b0SSuyog Pawar 
104*c83a76b0SSuyog Pawar /**
105*c83a76b0SSuyog Pawar *  @brief  Datatype of global pointer used for data sharing
106*c83a76b0SSuyog Pawar *          across encoder nodes.
107*c83a76b0SSuyog Pawar */
108*c83a76b0SSuyog Pawar 
109*c83a76b0SSuyog Pawar typedef struct
110*c83a76b0SSuyog Pawar {
111*c83a76b0SSuyog Pawar     queue_t s_queue_params;
112*c83a76b0SSuyog Pawar     bitstream_buf_t bs_buf_nodes[MBR_M2S_QUEUE];
113*c83a76b0SSuyog Pawar     WORD32 i4_slave_inst_done;
114*c83a76b0SSuyog Pawar 
115*c83a76b0SSuyog Pawar } ihevce_mbr_mres_handle_t;
116*c83a76b0SSuyog Pawar 
117*c83a76b0SSuyog Pawar typedef struct
118*c83a76b0SSuyog Pawar {
119*c83a76b0SSuyog Pawar     WORD32 i4_idx;
120*c83a76b0SSuyog Pawar 
121*c83a76b0SSuyog Pawar     UWORD8 *pu1_buf;
122*c83a76b0SSuyog Pawar 
123*c83a76b0SSuyog Pawar     WORD32 i4_is_free;
124*c83a76b0SSuyog Pawar 
125*c83a76b0SSuyog Pawar     WORD32 i4_is_prod;
126*c83a76b0SSuyog Pawar 
127*c83a76b0SSuyog Pawar     WORD32 i4_timestamp_low;
128*c83a76b0SSuyog Pawar 
129*c83a76b0SSuyog Pawar     WORD32 i4_timestamp_high;
130*c83a76b0SSuyog Pawar 
131*c83a76b0SSuyog Pawar     WORD32 i4_bytes_gen;
132*c83a76b0SSuyog Pawar 
133*c83a76b0SSuyog Pawar     WORD32 i4_is_key_frame;
134*c83a76b0SSuyog Pawar 
135*c83a76b0SSuyog Pawar     WORD32 i4_buf_size;
136*c83a76b0SSuyog Pawar 
137*c83a76b0SSuyog Pawar     WORD32 i4_end_flag;
138*c83a76b0SSuyog Pawar 
139*c83a76b0SSuyog Pawar } out_buf_ctxt_t;
140*c83a76b0SSuyog Pawar 
141*c83a76b0SSuyog Pawar typedef struct
142*c83a76b0SSuyog Pawar {
143*c83a76b0SSuyog Pawar     ULWORD64 u8_total_bits;
144*c83a76b0SSuyog Pawar 
145*c83a76b0SSuyog Pawar     UWORD32 u4_num_frms_enc;
146*c83a76b0SSuyog Pawar 
147*c83a76b0SSuyog Pawar     /* mutex controlling the out strm buf b/w appln and encoder */
148*c83a76b0SSuyog Pawar     void *pv_app_out_strm_buf_mutex_hdl;
149*c83a76b0SSuyog Pawar 
150*c83a76b0SSuyog Pawar     void *pv_app_out_strm_buf_cond_var_hdl;
151*c83a76b0SSuyog Pawar 
152*c83a76b0SSuyog Pawar } out_strm_prms_t;
153*c83a76b0SSuyog Pawar 
154*c83a76b0SSuyog Pawar typedef struct
155*c83a76b0SSuyog Pawar {
156*c83a76b0SSuyog Pawar     void *pv_mem_mngr_handle; /*!< memory manager handle */
157*c83a76b0SSuyog Pawar 
158*c83a76b0SSuyog Pawar     WORD32 ai4_out_strm_end_flag[IHEVCE_MAX_NUM_RESOLUTIONS]
159*c83a76b0SSuyog Pawar                                 [IHEVCE_MAX_NUM_BITRATES]; /*!< end of strm processing */
160*c83a76b0SSuyog Pawar 
161*c83a76b0SSuyog Pawar     out_strm_prms_t as_out_strm_prms[IHEVCE_MAX_NUM_RESOLUTIONS]
162*c83a76b0SSuyog Pawar                                     [IHEVCE_MAX_NUM_BITRATES]; /*!< to store out strm related prms */
163*c83a76b0SSuyog Pawar 
164*c83a76b0SSuyog Pawar } app_ctxt_t;
165*c83a76b0SSuyog Pawar 
166*c83a76b0SSuyog Pawar typedef struct
167*c83a76b0SSuyog Pawar {
168*c83a76b0SSuyog Pawar     /*!< Static paramters same memory pointer will be passed to
169*c83a76b0SSuyog Pawar          processing interface layer */
170*c83a76b0SSuyog Pawar     ihevce_static_cfg_params_t *ps_static_cfg_prms;
171*c83a76b0SSuyog Pawar 
172*c83a76b0SSuyog Pawar     /*!< Osal Handle */
173*c83a76b0SSuyog Pawar     void *pv_osal_handle;
174*c83a76b0SSuyog Pawar 
175*c83a76b0SSuyog Pawar     /*!< Call back API for freeing */
176*c83a76b0SSuyog Pawar     void (*ihevce_mem_free)(void *pv_handle, void *pv_mem);
177*c83a76b0SSuyog Pawar 
178*c83a76b0SSuyog Pawar     /*!< Call back API to be called during allocation */
179*c83a76b0SSuyog Pawar     void *(*ihevce_mem_alloc)(void *pv_handle, UWORD32 u4_size);
180*c83a76b0SSuyog Pawar 
181*c83a76b0SSuyog Pawar     /** App context memory */
182*c83a76b0SSuyog Pawar     app_ctxt_t s_app_ctxt;
183*c83a76b0SSuyog Pawar 
184*c83a76b0SSuyog Pawar     /** semaphore handle for Input data proc thread */
185*c83a76b0SSuyog Pawar     void *pv_app_inp_ctrl_sem_hdl;
186*c83a76b0SSuyog Pawar 
187*c83a76b0SSuyog Pawar     /** semaphore handle for Output data proc thread */
188*c83a76b0SSuyog Pawar     void *pv_app_out_sts_sem_hdl;
189*c83a76b0SSuyog Pawar 
190*c83a76b0SSuyog Pawar     /** Pointer to HLE interface ctxt */
191*c83a76b0SSuyog Pawar     void *pv_hle_interface_ctxt;
192*c83a76b0SSuyog Pawar 
193*c83a76b0SSuyog Pawar     /** Memtab of input buffers */
194*c83a76b0SSuyog Pawar     iv_mem_rec_t s_memtab_inp_data_buf;
195*c83a76b0SSuyog Pawar 
196*c83a76b0SSuyog Pawar     /** Memtab of input command buffers */
197*c83a76b0SSuyog Pawar     iv_mem_rec_t s_memtab_inp_sync_ctrl_buf;
198*c83a76b0SSuyog Pawar 
199*c83a76b0SSuyog Pawar     /** Array of memtabs of outptu buffers */
200*c83a76b0SSuyog Pawar     iv_mem_rec_t as_memtab_out_data_buf[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES];
201*c83a76b0SSuyog Pawar 
202*c83a76b0SSuyog Pawar     /* pointer to async command input buffer */
203*c83a76b0SSuyog Pawar     UWORD8 *pu1_inp_async_ctrl_buf;
204*c83a76b0SSuyog Pawar 
205*c83a76b0SSuyog Pawar     /* pointer to async command output buffer*/
206*c83a76b0SSuyog Pawar     UWORD8 *pu1_out_ctrl_buf;
207*c83a76b0SSuyog Pawar 
208*c83a76b0SSuyog Pawar     /* HLE thread handle */
209*c83a76b0SSuyog Pawar     void *pv_hle_thread_hdl;
210*c83a76b0SSuyog Pawar 
211*c83a76b0SSuyog Pawar     /* flag to indicate that flush mode is ON */
212*c83a76b0SSuyog Pawar     WORD32 i4_flush_mode_on;
213*c83a76b0SSuyog Pawar 
214*c83a76b0SSuyog Pawar     /* field id for interlaced case */
215*c83a76b0SSuyog Pawar     WORD32 i4_field_id;
216*c83a76b0SSuyog Pawar 
217*c83a76b0SSuyog Pawar     /* frame stride of input buffers */
218*c83a76b0SSuyog Pawar     WORD32 i4_frm_stride;
219*c83a76b0SSuyog Pawar 
220*c83a76b0SSuyog Pawar     /* flag to indicate Output end status */
221*c83a76b0SSuyog Pawar     WORD32 ai4_out_end_flag[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES];
222*c83a76b0SSuyog Pawar 
223*c83a76b0SSuyog Pawar     /* output buffer context */
224*c83a76b0SSuyog Pawar     out_buf_ctxt_t aaas_out_bufs[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]
225*c83a76b0SSuyog Pawar                                 [MAX_NUM_OUT_DATA_BUFS + 1];
226*c83a76b0SSuyog Pawar 
227*c83a76b0SSuyog Pawar     /* Num Output buffers */
228*c83a76b0SSuyog Pawar     WORD32 i4_num_out_bufs;
229*c83a76b0SSuyog Pawar 
230*c83a76b0SSuyog Pawar     /* Free outbuf idx */
231*c83a76b0SSuyog Pawar     WORD32 ai4_free_out_buf_idx[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES];
232*c83a76b0SSuyog Pawar 
233*c83a76b0SSuyog Pawar     /* Out produced idx */
234*c83a76b0SSuyog Pawar     WORD32 i4_prod_out_buf_idx;
235*c83a76b0SSuyog Pawar 
236*c83a76b0SSuyog Pawar     /* DTS for output population */
237*c83a76b0SSuyog Pawar     LWORD64 i8_dts;
238*c83a76b0SSuyog Pawar 
239*c83a76b0SSuyog Pawar     /* Flag used for flushing in case of EVAL version */
240*c83a76b0SSuyog Pawar     WORD32 i4_internal_flush;
241*c83a76b0SSuyog Pawar 
242*c83a76b0SSuyog Pawar     ULWORD64 u8_num_frames_encoded;
243*c83a76b0SSuyog Pawar 
244*c83a76b0SSuyog Pawar     /* Count no of frames queued */
245*c83a76b0SSuyog Pawar     ULWORD64 u8_num_frames_queued;
246*c83a76b0SSuyog Pawar 
247*c83a76b0SSuyog Pawar     /** Structure which contains params to be shared across different FFMPEG instances **/
248*c83a76b0SSuyog Pawar     ihevce_mbr_mres_handle_t
249*c83a76b0SSuyog Pawar         *ps_mbr_mres_handle[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES];
250*c83a76b0SSuyog Pawar 
251*c83a76b0SSuyog Pawar     /* Dynamic change in bitrate detecting mechnaism related vaiables */
252*c83a76b0SSuyog Pawar     WORD32 ai4_old_bitrate[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES];
253*c83a76b0SSuyog Pawar 
254*c83a76b0SSuyog Pawar } plugin_ctxt_t;
255*c83a76b0SSuyog Pawar 
256*c83a76b0SSuyog Pawar /*****************************************************************************/
257*c83a76b0SSuyog Pawar /* Extern Variable Declarations                                              */
258*c83a76b0SSuyog Pawar /*****************************************************************************/
259*c83a76b0SSuyog Pawar 
260*c83a76b0SSuyog Pawar /*****************************************************************************/
261*c83a76b0SSuyog Pawar /* Extern Function Declarations                                              */
262*c83a76b0SSuyog Pawar /*****************************************************************************/
263*c83a76b0SSuyog Pawar 
264*c83a76b0SSuyog Pawar #endif /* _IHEVCE_PLUGIN_PRIV_H_ */
265