1 /******************************************************************************
2  *
3  * Copyright (C) 2015 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
23 *  iv2.h
24 *
25 * @brief
26 * This file contains all the necessary structure and  enumeration
27 * definitions needed for the Application  Program Interface(API) of the
28 * Ittiam Video codecs  This is version 2 of Ittiam Video API
29 *
30 * @author
31 * Ittiam
32 *
33 * @par List of Functions:
34 *
35 * @remarks
36 *  None
37 *
38 *******************************************************************************
39 */
40 
41 #ifndef _IV2_H_
42 #define _IV2_H_
43 
44 /*****************************************************************************/
45 /* Constant Macros                                                           */
46 /*****************************************************************************/
47 #define IV_MAX_RAW_COMPONENTS 4
48 
49 /*****************************************************************************/
50 /* Typedefs                                                                  */
51 /*****************************************************************************/
52 
53 /*****************************************************************************/
54 /* Enums                                                                     */
55 /*****************************************************************************/
56 
57 
58 /** Function status */
59 typedef enum{
60     IV_STATUS_NA                                = 0x7FFFFFFF,
61     IV_SUCCESS                                  = 0x0,
62     IV_FAIL                                     = 0x1,
63 }IV_STATUS_T;
64 
65 
66 /** Defines the types of memory */
67 typedef enum {
68     IV_NA_MEM_TYPE                              = 0x7FFFFFFF,
69     IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM        = 0x0,
70     IV_EXTERNAL_CACHEABLE_SCRATCH_MEM           = 0x1,
71     IV_EXTERNAL_NONCACHEABLE_PERSISTENT_MEM     = 0x2,
72     IV_EXTERNAL_NONCACHEABLE_SCRATCH_MEM        = 0x3,
73     IV_INTERNAL_CACHEABLE_PERSISTENT_MEM        = 0x10,
74     IV_INTERNAL_CACHEABLE_SCRATCH_MEM           = 0x11,
75     IV_INTERNAL_NONCACHEABLE_PERSISTENT_MEM     = 0x12,
76     IV_INTERNAL_NONCACHEABLE_SCRATCH_MEM        = 0x13,
77 }IV_MEM_TYPE_T;
78 
79 /* The color formats used in video/image codecs */
80 
81 typedef enum {
82     IV_CHROMA_NA                            = 0x7FFFFFFF,
83     IV_YUV_420P                             = 0x0,
84     IV_YUV_420SP_UV                         = 0x1,
85     IV_YUV_420SP_VU                         = 0x2,
86 
87     IV_YUV_422P                             = 0x10,
88     IV_YUV_422IBE                           = 0x11,
89     IV_YUV_422ILE                           = 0x12,
90 
91     IV_YUV_444P                             = 0x20,
92     IV_YUV_411P                             = 0x21,
93 
94     IV_GRAY                                 = 0x30,
95 
96     IV_RGB_565                              = 0x31,
97     IV_RGB_24                               = 0x32,
98     IV_RGBA_8888                            = 0x33
99 }IV_COLOR_FORMAT_T;
100 
101 /** Frame/Field coding types */
102 typedef enum {
103     IV_NA_FRAME                             = 0x7FFFFFFF,
104     IV_I_FRAME                              = 0x0,
105     IV_P_FRAME                              = 0x1,
106     IV_B_FRAME                              = 0x2,
107     IV_IDR_FRAME                            = 0x3,
108     IV_II_FRAME                             = 0x4,
109     IV_IP_FRAME                             = 0x5,
110     IV_IB_FRAME                             = 0x6,
111     IV_PI_FRAME                             = 0x7,
112     IV_PP_FRAME                             = 0x8,
113     IV_PB_FRAME                             = 0x9,
114     IV_BI_FRAME                             = 0xa,
115     IV_BP_FRAME                             = 0xb,
116     IV_BB_FRAME                             = 0xc,
117     IV_MBAFF_I_FRAME                        = 0xd,
118     IV_MBAFF_P_FRAME                        = 0xe,
119     IV_MBAFF_B_FRAME                        = 0xf,
120     IV_MBAFF_IDR_FRAME                      = 0x10,
121     IV_NOT_CODED_FRAME                      = 0x11,
122     IV_FRAMETYPE_DEFAULT                    = IV_I_FRAME
123 }IV_PICTURE_CODING_TYPE_T;
124 
125 /** Field type */
126 typedef enum {
127     IV_NA_FLD                               = 0x7FFFFFFF,
128     IV_TOP_FLD                              = 0x0,
129     IV_BOT_FLD                              = 0x1,
130     IV_FLD_TYPE_DEFAULT                     = IV_TOP_FLD
131 }IV_FLD_TYPE_T;
132 
133 /** Video content type progressive/interlaced etc */
134 typedef enum {
135     IV_CONTENTTYPE_NA                       = 0x7FFFFFFF,
136     IV_PROGRESSIVE                          = 0x0,
137     IV_INTERLACED                           = 0x1,
138     IV_PROGRESSIVE_FRAME                    = 0x2,
139     IV_INTERLACED_FRAME                     = 0x3,
140     IV_INTERLACED_TOPFIELD                  = 0x4,
141     IV_INTERLACED_BOTTOMFIELD               = 0x5,
142     IV_CONTENTTYPE_DEFAULT                  = IV_PROGRESSIVE,
143 }IV_CONTENT_TYPE_T;
144 
145 /** Profile */
146 typedef enum
147 {
148     IV_PROFILE_NA                           = 0x7FFFFFFF,
149     IV_PROFILE_BASE                         = 0x0,
150     IV_PROFILE_MAIN                         = 0x1,
151     IV_PROFILE_HIGH                         = 0x2,
152 
153 
154     IV_PROFILE_SIMPLE                       = 0x100,
155     IV_PROFILE_ADVSIMPLE                    = 0x101,
156     IV_PROFILE_DEFAULT                      = IV_PROFILE_BASE,
157 }IV_PROFILE_T;
158 
159 
160 /** Architecture Enumeration                               */
161 typedef enum
162 {
163     ARCH_NA                 =   0x7FFFFFFF,
164     ARCH_ARM_NONEON         =   0x0,
165     ARCH_ARM_A9Q,
166     ARCH_ARM_A9A,
167     ARCH_ARM_A9,
168     ARCH_ARM_A7,
169     ARCH_ARM_A5,
170     ARCH_ARM_A15,
171     ARCH_ARM_NEONINTR,
172     ARCH_X86_GENERIC,
173     ARCH_X86_SSSE3,
174     ARCH_X86_SSE42,
175     ARCH_ARM_A53,
176     ARCH_ARM_A57,
177     ARCH_ARM_V8_NEON
178 }IV_ARCH_T;
179 
180 /** SOC Enumeration                               */
181 typedef enum
182 {
183     SOC_NA                  = 0x7FFFFFFF,
184     SOC_GENERIC             = 0x0,
185     SOC_HISI_37X
186 }IV_SOC_T;
187 
188 
189 /** API command type */
190 typedef enum {
191     IV_CMD_NA                           = 0x7FFFFFFF,
192     IV_CMD_GET_NUM_MEM_REC              = 0x0,
193     IV_CMD_FILL_NUM_MEM_REC             = 0x1,
194     IV_CMD_RETRIEVE_MEMREC              = 0x2,
195     IV_CMD_INIT                         = 0x3,
196     /* Do not add anything after the following entry */
197     IV_CMD_EXTENSIONS                   = 0x100
198 }IV_API_COMMAND_TYPE_T;
199 
200 /*****************************************************************************/
201 /* Structure Definitions                                                     */
202 /*****************************************************************************/
203 
204 /** This structure defines the handle for the codec instance            */
205 
206 typedef struct{
207     /** size of the structure                                           */
208     UWORD32                                     u4_size;
209     /** Pointer to the API function pointer table of the codec          */
210     void                                        *pv_fxns;
211     /** Pointer to the handle of the codec                              */
212     void                                        *pv_codec_handle;
213 }iv_obj_t;
214 
215 /** This structure defines the memory record holder which will          *
216  * be used by the codec to communicate its memory requirements to the   *
217  * application through appropriate API functions                        */
218 
219 typedef struct {
220     /** size of the structure                                           */
221     UWORD32                                     u4_size;
222     /** Pointer to the memory allocated by the application              */
223     void                                        *pv_base;
224     /** u4_size of the memory to be allocated                           */
225     UWORD32                                     u4_mem_size;
226     /** Alignment of the memory pointer                                 */
227     UWORD32                                     u4_mem_alignment;
228     /** Type of the memory to be allocated                              */
229     IV_MEM_TYPE_T                               e_mem_type;
230 }iv_mem_rec_t;
231 
232 /** This structure defines attributes for the raw buffer                */
233 typedef struct {
234     /** size of the structure                                           */
235     UWORD32                                     u4_size;
236 
237     /** Color format                                                    */
238     IV_COLOR_FORMAT_T                           e_color_fmt;
239 
240     /** Pointer to each component                                       */
241     void                                        *apv_bufs[IV_MAX_RAW_COMPONENTS];
242 
243     /** Width of each component                                         */
244     UWORD32                                     au4_wd[IV_MAX_RAW_COMPONENTS];
245 
246     /** Height of each component                                        */
247     UWORD32                                     au4_ht[IV_MAX_RAW_COMPONENTS];
248 
249     /** Stride of each component                                        */
250     UWORD32                                     au4_strd[IV_MAX_RAW_COMPONENTS];
251 
252 }iv_raw_buf_t;
253 
254 /** This structure defines attributes for the bitstream buffer                */
255 typedef struct
256 {
257     /** size of the structure                                           */
258     UWORD32                                     u4_size;
259 
260     /** Pointer to buffer                                               */
261     void                                        *pv_buf;
262 
263     /** Number of valid bytes in the buffer                             */
264     UWORD32                                     u4_bytes;
265 
266     /** Allocated size of the buffer                                    */
267     UWORD32                                     u4_bufsize;
268 
269 }iv_bits_buf_t;
270 /*****************************************************************************/
271 /*  Get Number of Memory Records                                             */
272 /*****************************************************************************/
273 
274 /** Input structure : Get number of memory records                     */
275 typedef struct {
276     /** size of the structure                                          */
277     UWORD32                                     u4_size;
278 
279     /** Command type                                                   */
280     IV_API_COMMAND_TYPE_T                       e_cmd;
281 }iv_num_mem_rec_ip_t;
282 
283 /** Output structure : Get number of memory records                    */
284 typedef struct{
285     /** size of the structure                                          */
286     UWORD32                                     u4_size;
287 
288     /** Return error code                                              */
289     UWORD32                                     u4_error_code;
290 
291     /** Number of memory records that will be used by the codec        */
292     UWORD32                                     u4_num_mem_rec;
293 }iv_num_mem_rec_op_t;
294 
295 
296 /*****************************************************************************/
297 /*  Fill Memory Records                                                      */
298 /*****************************************************************************/
299 
300 /** Input structure : Fill memory records                              */
301 
302 typedef struct {
303     /** size of the structure                                          */
304     UWORD32                                     u4_size;
305 
306     /** Command type                                                   */
307     IV_API_COMMAND_TYPE_T                       e_cmd;
308 
309     /** Number of memory records                                       */
310     UWORD32                                     u4_num_mem_rec;
311 
312     /** pointer to array of memrecords structures should be filled by codec
313     with details of memory resource requirements */
314     iv_mem_rec_t                                *ps_mem_rec;
315 
316     /** maximum width for which codec should request memory requirements */
317     UWORD32                                     u4_max_wd;
318 
319     /** maximum height for which codec should request memory requirements*/
320     UWORD32                                     u4_max_ht;
321 
322     /** Maximum number of reference frames                               */
323     UWORD32                                     u4_max_ref_cnt;
324 
325     /** Maximum number of reorder frames                                 */
326     UWORD32                                     u4_max_reorder_cnt;
327 
328     /** Maximum level supported                                          */
329     UWORD32                                     u4_max_level;
330 
331     /** Color format that codec supports for input/output                */
332     IV_COLOR_FORMAT_T                           e_color_format;
333 
334     /** Maximum search range to be used in X direction                      */
335     UWORD32                                     u4_max_srch_rng_x;
336 
337     /** Maximum search range to be used in Y direction                      */
338     UWORD32                                     u4_max_srch_rng_y;
339 
340 }iv_fill_mem_rec_ip_t;
341 
342 
343 /** Output structure : Fill memory records                               */
344 typedef struct{
345     /** size of the structure                                            */
346     UWORD32                                     u4_size;
347 
348     /** Return error code                                                */
349     UWORD32                                     u4_error_code;
350 
351     /** no of memory record structures which are filled by codec         */
352     UWORD32                                     u4_num_mem_rec;
353 }iv_fill_mem_rec_op_t;
354 
355 
356 /*****************************************************************************/
357 /*  Retrieve Memory Records                                                  */
358 /*****************************************************************************/
359 
360 /** Input structure : Retrieve memory records                                */
361 
362 typedef struct {
363     /** size of the structure                                          */
364     UWORD32                                     u4_size;
365 
366     /** Command type                                                   */
367     IV_API_COMMAND_TYPE_T                       e_cmd;
368 
369     /** array of structures where codec should fill with all memory  requested earlier */
370     iv_mem_rec_t                                *ps_mem_rec;
371 }iv_retrieve_mem_rec_ip_t;
372 
373 
374 typedef struct{
375     /** size of the structure                                            */
376     UWORD32                                     u4_size;
377 
378     /** Return error code                                                */
379     UWORD32                                     u4_error_code;
380 
381     /** no of memory record structures which are filled by codec         */
382     UWORD32                                     u4_num_mem_rec_filled;
383 }iv_retrieve_mem_rec_op_t;
384 
385 #endif /* _IV2_H_ */
386 
387