• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  * Copyright (C) 2018 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19 */
20 /*!
21 ******************************************************************************
22 * \file itt_video_api.h
23 *
24 * \brief
25 *    This file contains the necessary structure and enumeration definitions
26 *    needed for the Application Program Interface(API)
27 *
28 * \date
29 *    18 09 2010
30 *
31 * \author
32 *    Ittiam
33 *
34 ******************************************************************************
35 */
36 #ifndef _ITT_VIDEO_API_H_
37 #define _ITT_VIDEO_API_H_
38 
39 /*****************************************************************************/
40 /* Constant Macros                                                           */
41 /*****************************************************************************/
42 
43 /*****************************************************************************/
44 /* Typedefs                                                                  */
45 /*****************************************************************************/
46 
47 /*****************************************************************************/
48 /* Enums                                                                     */
49 /*****************************************************************************/
50 
51 /** @brief IV_API_CALL_STATUS_T: This is only to return the FAIL/PASS status to the
52  *         application for the current API call
53  */
54 
55 typedef enum
56 {
57     IV_FAIL = 0xFFFFFFFF,
58     IV_SUCCESS = 0
59 } IV_API_CALL_STATUS_T;
60 
61 typedef enum
62 {
63     ARCH_NA = 0x7FFFFFFF,
64     ARCH_ARM_NONEON = 0x0,
65     ARCH_ARM_V8_NEON,
66     ARCH_ARM_A9Q,
67     ARCH_ARM_A7,
68     ARCH_ARM_A5,
69     ARCH_ARM_NEONINTR,
70     ARCH_X86_GENERIC,
71     ARCH_X86_SSSE3,
72     ARCH_X86_SSE4,
73     ARCH_X86_AVX,
74     ARCH_X86_AVX2
75 } IV_ARCH_T;
76 
77 /** @brief IV_MEM_TYPE_T: This Enumeration defines the type of memory (Internal/Ext
78  *         -ernal) along with the cacheable/non-cacheable attributes
79  *        Additional memtypes added ( Normal, Numa_Node0, Numa_node1)
80  */
81 
82 typedef enum
83 {
84     IV_NA_MEM_TYPE = 0xFFFFFFFF,
85     IV_INTERNAL_CACHEABLE_PERSISTENT_MEM = 0x1,
86     IV_INTERNAL_CACHEABLE_SCRATCH_MEM = 0x2,
87     IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM = 0x3,
88     IV_EXTERNAL_CACHEABLE_SCRATCH_MEM = 0x4,
89     IV_INTERNAL_NONCACHEABLE_PERSISTENT_MEM = 0x5,
90     IV_INTERNAL_NONCACHEABLE_SCRATCH_MEM = 0x6,
91     IV_EXTERNAL_NONCACHEABLE_PERSISTENT_MEM = 0x7,
92     IV_EXTERNAL_NONCACHEABLE_SCRATCH_MEM = 0x8,
93 
94     IV_EXT_CACHEABLE_NORMAL_MEM = 0x9,
95     IV_EXT_CACHEABLE_NUMA_NODE0_MEM = 0xA,
96     IV_EXT_CACHEABLE_NUMA_NODE1_MEM = 0xB,
97 
98 } IV_MEM_TYPE_T;
99 
100 /** @brief IV_COLOR_FORMAT_T: This enumeration lists all the color formats which
101  *         finds usage in video/image codecs
102  */
103 
104 typedef enum
105 {
106     IV_CHROMA_NA = 0xFFFFFFFF,
107     IV_YUV_420P = 0x1,
108     IV_YUV_422P = 0x2,
109     IV_420_UV_INTL = 0x3,
110     IV_YUV_422IBE = 0x4,
111     IV_YUV_422ILE = 0x5,
112     IV_YUV_444P = 0x6,
113     IV_YUV_411P = 0x7,
114     IV_GRAY = 0x8,
115     IV_RGB_565 = 0x9,
116     IV_RGB_24 = 0xa,
117     IV_YUV_420SP_UV = 0xb,
118     IV_YUV_420SP_VU = 0xc,
119     IV_YUV_422SP_UV = 0xd,
120     IV_YUV_422SP_VU = 0xe
121 
122 } IV_COLOR_FORMAT_T;
123 
124 /** @brief IV_PICTURE_CODING_TYPE_T: VOP/Frame coding type Enumeration    */
125 
126 typedef enum
127 {
128     IV_NA_FRAME = 0xFFFFFFFF,
129     IV_I_FRAME = 0x0,
130     IV_P_FRAME = 0x1,
131     IV_B_FRAME = 0x2,
132     IV_IDR_FRAME = 0x3,
133     IV_II_FRAME = 0x4,
134     IV_IP_FRAME = 0x5,
135     IV_IB_FRAME = 0x6,
136     IV_PI_FRAME = 0x7,
137     IV_PP_FRAME = 0x8,
138     IV_PB_FRAME = 0x9,
139     IV_BI_FRAME = 0xa,
140     IV_BP_FRAME = 0xb,
141     IV_BB_FRAME = 0xc,
142     IV_MBAFF_I_FRAME = 0xd,
143     IV_MBAFF_P_FRAME = 0xe,
144     IV_MBAFF_B_FRAME = 0xf,
145     IV_MBAFF_IDR_FRAME = 0x10,
146     IV_NOT_CODED_FRAME = 0x11,
147     IV_FRAMETYPE_DEFAULT = IV_I_FRAME
148 } IV_PICTURE_CODING_TYPE_T;
149 
150 /* @brief IV_FLD_TYPE_T: field type Enumeration */
151 
152 typedef enum
153 {
154     IV_NA_FLD = 0xFFFFFFFF,
155     IV_TOP_FLD = 0x0,
156     IV_BOT_FLD = 0x1,
157     IV_FLD_TYPE_DEFAULT = IV_TOP_FLD
158 } IV_FLD_TYPE_T;
159 
160 /* @brief IV_CONTENT_TYPE_T: Video content type */
161 
162 typedef enum
163 {
164     IV_CONTENTTYPE_NA = -1,
165     IV_PROGRESSIVE = 0x0,
166     IV_INTERLACED = 0x1,
167     IV_PROGRESSIVE_FRAME = 0x2,
168     IV_INTERLACED_FRAME = 0x3,
169     IV_INTERLACED_TOPFIELD = 0x4,
170     IV_INTERLACED_BOTTOMFIELD = 0x5,
171     IV_CONTENTTYPE_DEFAULT = IV_PROGRESSIVE,
172 } IV_CONTENT_TYPE_T;
173 
174 /*****************************************************************************/
175 /* Structure                                                                 */
176 /*****************************************************************************/
177 
178 /* @brief iv_mem_rec_t: This structure defines the memory record holder which will
179  * be used by the modules to communicate its memory requirements to the
180  * memory manager through appropriate API functions
181  */
182 
183 typedef struct
184 {
185     /** i4_size of the structure : used for verison tracking */
186     WORD32 i4_size;
187 
188     /** Pointer to the memory allocated by the memory manager */
189     void *pv_base;
190 
191     /** size of the memory to be allocated */
192     WORD32 i4_mem_size;
193 
194     /** Alignment of the memory pointer */
195     WORD32 i4_mem_alignment;
196 
197     /** Nature of the memory to be allocated */
198     IV_MEM_TYPE_T e_mem_type;
199 
200 } iv_mem_rec_t;
201 
202 /* @brief iv_input_bufs_req_t: This structure contains the parameters
203  * related to input (data and control) buffer requirements of the codec.
204  * Application can call the memory query API to get these requirements
205  */
206 
207 typedef struct
208 {
209     /** i4_size of the structure : used for verison tracking */
210     WORD32 i4_size;
211 
212     /** Minimum sets of input buffers required for the codec */
213     WORD32 i4_min_num_yuv_bufs;
214 
215     /** YUV format of the input */
216     WORD32 i4_yuv_format;
217 
218     /** Minimum Size in bytes of Luma input buffer */
219     WORD32 i4_min_size_y_buf;
220 
221     /** Minimum Size in bytes of CB-CR input buffer .
222      * if input format is Semiplanar then size will include
223      * both Cb and Cr requirements
224      */
225     WORD32 i4_min_size_uv_buf;
226 
227     /** Minimum sets of Synchoronus command buffers
228      *  required for the codec
229      */
230     WORD32 i4_min_num_synch_ctrl_bufs;
231 
232     /** Minimum size of the Synchoronus command buffer */
233     WORD32 i4_min_size_synch_ctrl_bufs;
234 
235     /** Minimum sets of Asynchoronus command buffers
236      *  required for the codec
237      */
238     WORD32 i4_min_num_asynch_ctrl_bufs;
239 
240     /** Minimum size of the Asynchoronus command buffer */
241     WORD32 i4_min_size_asynch_ctrl_bufs;
242 
243 } iv_input_bufs_req_t;
244 
245 /* @brief iv_output_bufs_req_t: This structure contains the parameters
246  * related to output (data and control) buffer requirements for a
247  * given target resolution of the codec
248  */
249 
250 typedef struct
251 {
252     /** i4_size of the structure : used for verison tracking */
253     WORD32 i4_size;
254 
255     /** Minimum sets of output buffers required for the codec */
256     WORD32 i4_min_num_out_bufs;
257 
258     /** Minimum Size in bytes of bitstream buffer */
259     WORD32 i4_min_size_bitstream_buf;
260 
261 } iv_output_bufs_req_t;
262 
263 /* @brief iv_recon_bufs_req_t: This structure contains the parameters
264  * related to recon buffer requirements for a
265  * given target resolution of the codec
266  */
267 
268 typedef struct
269 {
270     /** i4_size of the structure : used for verison tracking */
271     WORD32 i4_size;
272 
273     /** Minimum sets of recon buffers required for the codec */
274     WORD32 i4_min_num_recon_bufs;
275 
276     /** Minimum Size in bytes of Luma input buffer */
277     WORD32 i4_min_size_y_buf;
278 
279     /** Minimum Size in bytes of CB-CR input buffer .
280      * if input format is Semiplanar then size will include
281      * both Cb and Cr requirements
282      */
283     WORD32 i4_min_size_uv_buf;
284 
285 } iv_recon_bufs_req_t;
286 
287 /* @brief iv_input_data_ctrl_buffs_desc_t: This structure contains the parameters
288  * related to input (data and sync control) buffers
289  * application should allocate these buffers and pass to the codec
290  */
291 
292 typedef struct
293 {
294     /** i4_size of the structure : used for verison tracking */
295     WORD32 i4_size;
296 
297     /** Number of sets of input buffers allocated by application */
298     WORD32 i4_num_yuv_bufs;
299 
300     /** Size in bytes of each Luma input buffers passed */
301     WORD32 i4_size_y_buf;
302 
303     /** Pointer to array of input Luma buffer pointers  */
304     void **ppv_y_buf;
305 
306     /** Size in bytes of each CB-CR input buffer passed.
307      * if input format is Semiplanar then size should include
308      * both Cb and Cr requirements
309      */
310     WORD32 i4_size_uv_buf;
311 
312     /** Pointer to array of input Chroma Cb buffer pointers  */
313     void **ppv_u_buf;
314 
315     /** Pointer to array of input Chroma Cr buffer pointers
316       * Applicalbe if input format is planar
317       */
318     void **ppv_v_buf;
319 
320     /** Number of sets of sync control buffers allocated by application */
321     WORD32 i4_num_synch_ctrl_bufs;
322 
323     /** Size of the each Synchoronus command buffer passed*/
324     WORD32 i4_size_synch_ctrl_bufs;
325 
326     /** Pointer to array of input sync command buffer pointers  */
327     void **ppv_synch_ctrl_bufs;
328 
329 } iv_input_data_ctrl_buffs_desc_t;
330 
331 /* @brief iv_input_asynch_ctrl_buffs_desc_t: This structure contains the parameters
332  * related to input async control buffers
333  * application should allocate these buffers and pass to the codec
334  */
335 
336 typedef struct
337 {
338     /** i4_size of the structure : used for verison tracking */
339     WORD32 i4_size;
340 
341     /** Number of sets of async control buffers allocated by application */
342     WORD32 i4_num_asynch_ctrl_bufs;
343 
344     /** Size of each Asynchoronus command buffer */
345     WORD32 i4_size_asynch_ctrl_bufs;
346 
347     /** Pointer to array of async command buffer pointers  */
348     void **ppv_asynch_ctrl_bufs;
349 
350 } iv_input_asynch_ctrl_buffs_desc_t;
351 
352 /* @brief iv_output_data_buffs_desc_t: This structure contains the parameters
353  * related to output  data buffers for a given resolution layer
354  * application should allocate these buffers and pass to the codec
355  */
356 
357 typedef struct
358 {
359     /** i4_size of the structure : used for verison tracking */
360     WORD32 i4_size;
361 
362     /** Number of sets of output buffers allocated by application */
363     WORD32 i4_num_bitstream_bufs;
364 
365     /** Size in bytes of each bitstream buffer passed */
366     WORD32 i4_size_bitstream_buf;
367 
368     /** Pointer to array of output buffer pointers  */
369     void **ppv_bitstream_bufs;
370 
371 } iv_output_data_buffs_desc_t;
372 
373 /* @brief iv_output_status_buffs_desc_t: This structure contains the parameters
374  * related to output control acknowledgement buffers
375  * application should allocate these buffers and pass to the codec
376  */
377 
378 typedef struct
379 {
380     /** i4_size of the structure : used for verison tracking */
381     WORD32 i4_size;
382 
383     /** Number of sets of async control ack buffers allocated by application */
384     WORD32 i4_num_asynch_status_bufs;
385 
386     /** Size of each Asynchoronus command acknowledge buffer passed */
387     WORD32 i4_size_asynch_status_bufs;
388 
389     /** Pointer to array of async command ack buffer pointers  */
390     void **ppv_asynch_status_bufs;
391 
392 } iv_output_status_buffs_desc_t;
393 
394 /* @brief iv_recon_data_buffs_desc_t: This structure contains the parameters
395  * related to recon data buffers
396  * application should allocate these buffers and pass to the codec
397  */
398 
399 typedef struct
400 {
401     /** i4_size of the structure : used for verison tracking */
402     WORD32 i4_size;
403 
404     /** Number of sets of recon buffers allocated by application */
405     WORD32 i4_num_recon_bufs;
406 
407     /** Size in bytes of each Luma recon buffers passed */
408     WORD32 i4_size_y_buf;
409 
410     /** Pointer to array of recon Luma buffer pointers  */
411     void **ppv_y_buf;
412 
413     /** Size in bytes of each CB-CR recon buffer passed.
414      * if input format is Semiplanar then size should include
415      * both Cb and Cr requirements
416      */
417     WORD32 i4_size_uv_buf;
418 
419     /** Pointer to array of recon Chroma Cb buffer pointers  */
420     void **ppv_u_buf;
421 
422     /** Pointer to array of recon Chroma Cr buffer pointers
423       * Applicalbe if input format is planar
424       */
425     void **ppv_v_buf;
426 
427 } iv_recon_data_buffs_desc_t;
428 
429 /* @brief IV_YUV_BUF_T: This structure defines attributes
430  *        for the input yuv buffer
431  */
432 typedef struct
433 {
434     /** i4_size of the structure */
435     WORD32 i4_size;
436 
437     /** Pointer to Luma (Y) Buffer  */
438     void *pv_y_buf;
439 
440     /** Pointer to Chroma (Cb) Buffer  */
441     void *pv_u_buf;
442 
443     /** Pointer to Chroma (Cr) Buffer */
444     void *pv_v_buf;
445 
446     /** Width of the Luma (Y) Buffer in pixels */
447     WORD32 i4_y_wd;
448 
449     /** Height of the Luma (Y) Buffer in pixels */
450     WORD32 i4_y_ht;
451 
452     /** Stride/Pitch of the Luma (Y) Buffer */
453     WORD32 i4_y_strd;
454 
455     /** Width of the Chroma (Cb / Cr) Buffer in pixels */
456     WORD32 i4_uv_wd;
457 
458     /** Height of the Chroma (Cb / Cr) Buffer in pixels */
459     WORD32 i4_uv_ht;
460 
461     /** Stride/Pitch of the Chroma (Cb / Cr) Buffer */
462     WORD32 i4_uv_strd;
463 
464 } iv_yuv_buf_t;
465 
466 #endif /* _ITT_VIDEO_API_H_ */
467