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*  iv.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 and Image  codecs
29*
30* @author
31*  100239(RCY)
32*
33* @par List of Functions:
34*
35* @remarks
36*  None
37*
38*******************************************************************************
39*/
40
41
42#ifndef _IV_H
43#define _IV_H
44
45/*****************************************************************************/
46/* Constant Macros                                                           */
47/*****************************************************************************/
48
49
50/*****************************************************************************/
51/* Typedefs                                                                  */
52/*****************************************************************************/
53
54/*****************************************************************************/
55/* Enums                                                                     */
56/*****************************************************************************/
57
58
59/* IV_API_CALL_STATUS_T:This is only to return the FAIL/PASS status to the  */
60/* application for the current API call                                     */
61
62typedef enum{
63    IV_STATUS_NA                                = 0x7FFFFFFF,
64    IV_SUCCESS                                  = 0x0,
65    IV_FAIL                                     = 0x1,
66}IV_API_CALL_STATUS_T;
67
68/* IV_MEM_TYPE_T: This Enumeration defines the type of memory (Internal/Ext */
69/* -ernal) along with the cacheable/non-cacheable attributes                */
70
71typedef enum {
72    IV_NA_MEM_TYPE                              = 0x7FFFFFFF,
73    IV_INTERNAL_CACHEABLE_PERSISTENT_MEM        = 0x1,
74    IV_INTERNAL_CACHEABLE_SCRATCH_MEM           = 0x2,
75    IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM        = 0x3,
76    IV_EXTERNAL_CACHEABLE_SCRATCH_MEM           = 0x4,
77    IV_INTERNAL_NONCACHEABLE_PERSISTENT_MEM     = 0x5,
78    IV_INTERNAL_NONCACHEABLE_SCRATCH_MEM        = 0x6,
79    IV_EXTERNAL_NONCACHEABLE_PERSISTENT_MEM     = 0x7,
80    IV_EXTERNAL_NONCACHEABLE_SCRATCH_MEM        = 0x8
81}IV_MEM_TYPE_T;
82
83/* IV_COLOR_FORMAT_T: This enumeration lists all the color formats which    */
84/* finds usage in video/image codecs                                        */
85
86typedef enum {
87    IV_CHROMA_NA                            = 0x7FFFFFFF,
88    IV_YUV_420P                             = 0x1,
89    IV_YUV_422P                             = 0x2,
90    IV_420_UV_INTL                          = 0x3,
91    IV_YUV_422IBE                           = 0x4,
92    IV_YUV_422ILE                           = 0x5,
93    IV_YUV_444P                             = 0x6,
94    IV_YUV_411P                             = 0x7,
95    IV_GRAY                                 = 0x8,
96    IV_RGB_565                              = 0x9,
97    IV_RGB_24                               = 0xa,
98    IV_YUV_420SP_UV                         = 0xb,
99    IV_YUV_420SP_VU                         = 0xc,
100    IV_RGBA_8888                            = 0xd
101}IV_COLOR_FORMAT_T;
102
103/* IV_PICTURE_CODING_TYPE_T: VOP/Frame coding type Enumeration              */
104
105typedef enum {
106    IV_NA_FRAME                             = 0x7FFFFFFF,
107    IV_I_FRAME                              = 0x0,
108    IV_P_FRAME                              = 0x1,
109    IV_B_FRAME                              = 0x2,
110    IV_IDR_FRAME                            = 0x3,
111    IV_II_FRAME                             = 0x4,
112    IV_IP_FRAME                             = 0x5,
113    IV_IB_FRAME                             = 0x6,
114    IV_PI_FRAME                             = 0x7,
115    IV_PP_FRAME                             = 0x8,
116    IV_PB_FRAME                             = 0x9,
117    IV_BI_FRAME                             = 0xa,
118    IV_BP_FRAME                             = 0xb,
119    IV_BB_FRAME                             = 0xc,
120    IV_MBAFF_I_FRAME                        = 0xd,
121    IV_MBAFF_P_FRAME                        = 0xe,
122    IV_MBAFF_B_FRAME                        = 0xf,
123    IV_MBAFF_IDR_FRAME                      = 0x10,
124    IV_NOT_CODED_FRAME                      = 0x11,
125    IV_FRAMETYPE_DEFAULT                    = IV_I_FRAME
126}IV_PICTURE_CODING_TYPE_T;
127
128/* IV_FLD_TYPE_T: field type Enumeration                                    */
129
130typedef enum {
131    IV_NA_FLD                               = 0x7FFFFFFF,
132    IV_TOP_FLD                              = 0x0,
133    IV_BOT_FLD                              = 0x1,
134    IV_FLD_TYPE_DEFAULT                     = IV_TOP_FLD
135}IV_FLD_TYPE_T;
136
137/* IV_CONTENT_TYPE_T: Video content type                                     */
138
139typedef enum {
140    IV_CONTENTTYPE_NA                       = 0x7FFFFFFF,
141    IV_PROGRESSIVE                          = 0x0,
142    IV_INTERLACED                           = 0x1,
143    IV_PROGRESSIVE_FRAME                    = 0x2,
144    IV_INTERLACED_FRAME                     = 0x3,
145    IV_INTERLACED_TOPFIELD                  = 0x4,
146    IV_INTERLACED_BOTTOMFIELD               = 0x5,
147    IV_CONTENTTYPE_DEFAULT                  = IV_PROGRESSIVE,
148}IV_CONTENT_TYPE_T;
149
150/* IV_API_COMMAND_TYPE_T:API command type                                   */
151typedef enum {
152    IV_CMD_NA                           = 0x7FFFFFFF,
153    IV_CMD_GET_NUM_MEM_REC              = 0x0,
154    IV_CMD_FILL_NUM_MEM_REC             = 0x1,
155    IV_CMD_RETRIEVE_MEMREC              = 0x2,
156    IV_CMD_INIT                         = 0x3,
157    IV_CMD_DUMMY_ELEMENT                = 0x4,
158}IV_API_COMMAND_TYPE_T;
159
160/*****************************************************************************/
161/* Structure                                                                 */
162/*****************************************************************************/
163
164/* IV_OBJ_T: This structure defines the handle for the codec instance        */
165
166typedef struct{
167    /**
168     * u4_size of the structure
169     */
170    UWORD32                                     u4_size;
171
172    /**
173     * Pointer to the API function pointer table of the codec
174     */
175    void                                        *pv_fxns;
176
177    /**
178     * Pointer to the handle of the codec
179     */
180    void                                        *pv_codec_handle;
181}iv_obj_t;
182
183/* iv_mem_rec_t: This structure defines the memory record holder which will  */
184/* be used by the codec to communicate its memory requirements to the        */
185/* application through appropriate API functions                             */
186
187typedef struct {
188    /**
189     * u4_size of the structure
190     */
191    UWORD32                                     u4_size;
192
193    /**
194     * Pointer to the memory allocated by the application
195     */
196    void                                        *pv_base;
197
198    /**
199     * u4_size of the memory to be allocated
200     */
201    UWORD32                                     u4_mem_size;
202
203    /**
204     * Alignment of the memory pointer
205     */
206    UWORD32                                     u4_mem_alignment;
207    /**
208     * Nature of the memory to be allocated
209     */
210    IV_MEM_TYPE_T                               e_mem_type;
211}iv_mem_rec_t;
212
213/* IV_YUV_BUF_T: This structure defines attributes for the yuv buffer        */
214
215typedef struct {
216    /**
217     * u4_size of the structure
218     */
219    UWORD32                                     u4_size;
220
221    /**
222     * Pointer to Luma (Y) Buffer
223     */
224
225    void                                        *pv_y_buf;
226    /**
227     * Pointer to Chroma (Cb) Buffer
228     */
229    void                                        *pv_u_buf;
230
231    /**
232     * Pointer to Chroma (Cr) Buffer
233     */
234    void                                        *pv_v_buf;
235
236    /**
237     * Width of the Luma (Y) Buffer
238     */
239    UWORD32                                     u4_y_wd;
240
241    /**
242     * Height of the Luma (Y) Buffer
243     */
244    UWORD32                                     u4_y_ht;
245
246    /**
247     * Stride/Pitch of the Luma (Y) Buffer
248     */
249    UWORD32                                     u4_y_strd;
250
251    /**
252     * Width of the Chroma (Cb) Buffer
253     */
254    UWORD32                                     u4_u_wd;
255
256    /**
257     * Height of the Chroma (Cb) Buffer
258     */
259    UWORD32                                     u4_u_ht;
260
261    /**
262     * Stride/Pitch of the Chroma (Cb) Buffer
263     */
264    UWORD32                                     u4_u_strd;
265
266    /**
267     * Width of the Chroma (Cr) Buffer
268     */
269    UWORD32                                     u4_v_wd;
270
271    /**
272     * Height of the Chroma (Cr) Buffer
273     */
274    UWORD32                                     u4_v_ht;
275
276    /**
277     * Stride/Pitch of the Chroma (Cr) Buffer
278     */
279    UWORD32                                     u4_v_strd;
280}iv_yuv_buf_t;
281
282/*****************************************************************************/
283/*  Get Number of Memory Records                                             */
284/*****************************************************************************/
285
286/* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_GET_NUM_MEM_REC                     */
287
288
289typedef struct {
290    /**
291     * u4_size of the structure
292     */
293    UWORD32                                     u4_size;
294
295    /**
296     * cmd
297     */
298    IV_API_COMMAND_TYPE_T                       e_cmd;
299}iv_num_mem_rec_ip_t;
300
301
302typedef struct{
303    /**
304     * u4_size of the structure
305     */
306    UWORD32                                     u4_size;
307
308    /**
309     * error code
310     */
311    UWORD32                                     u4_error_code;
312
313    /**
314     * num_mem_rec
315     */
316    UWORD32                                     u4_num_mem_rec;
317}iv_num_mem_rec_op_t;
318
319
320/*****************************************************************************/
321/*  Fill Memory Records                                                      */
322/*****************************************************************************/
323
324/* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_FILL_NUM_MEM_REC                    */
325
326
327typedef struct {
328    /**
329     * u4_size of the structure
330     */
331    UWORD32                                     u4_size;
332
333    /**
334     * cmd
335     */
336    IV_API_COMMAND_TYPE_T                       e_cmd;
337
338    /**
339     * pointer to array of memrecords structures should be filled by codec
340    with details of memory resource requirements
341     */
342    iv_mem_rec_t                                *pv_mem_rec_location;
343
344    /**
345     * maximum width for which codec should request memory requirements
346     */
347    UWORD32                                     u4_max_frm_wd;
348
349    /**
350     * maximum height for which codec should request memory requirements
351     */
352    UWORD32                                     u4_max_frm_ht;
353}iv_fill_mem_rec_ip_t;
354
355
356typedef struct{
357    /**
358     * u4_size of the structure
359     */
360    UWORD32                                     u4_size;
361
362    /**
363     * error_code
364     */
365    UWORD32                                     u4_error_code;
366
367    /**
368     * no of memory record structures which are filled by codec
369     */
370    UWORD32                                     u4_num_mem_rec_filled;
371}iv_fill_mem_rec_op_t;
372
373
374/*****************************************************************************/
375/*  Retrieve Memory Records                                                  */
376/*****************************************************************************/
377
378/* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_RETRIEVE_MEMREC                     */
379
380
381
382typedef struct {
383    /**
384     * u4_size of the structure
385     */
386    UWORD32                                     u4_size;
387
388    /**
389     * cmd
390     */
391    IV_API_COMMAND_TYPE_T                       e_cmd;
392
393    /**
394     * array of structures where codec should fill with all resources(memory) with it
395     */
396    iv_mem_rec_t                                *pv_mem_rec_location;
397}iv_retrieve_mem_rec_ip_t;
398
399
400typedef struct{
401    /**
402     * u4_size of the structure
403     */
404    UWORD32                                     u4_size;
405
406    /**
407     * error_code
408     */
409    UWORD32                                     u4_error_code;
410
411    /**
412     * no of memory records filled by codec
413     */
414    UWORD32                                     u4_num_mem_rec_filled;
415}iv_retrieve_mem_rec_op_t;
416
417
418
419#endif /* _IV_H */
420
421