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 Name         : impeg2d.h                                        */
23/*                                                                           */
24/*  Description       : This file contains all the necessary structure and   */
25/*                      enumeration definitions needed for the Application   */
26/*                      Program Interface(API) of the Ittiam MPEG2 ASP       */
27/*                      Decoder on Cortex A8 - Neon platform                 */
28/*                                                                           */
29/*  List of Functions : impeg2d_api_function                             */
30/*                                                                           */
31/*  Issues / Problems : None                                                 */
32/*                                                                           */
33/*  Revision History  :                                                      */
34/*                                                                           */
35/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
36/*         26 08 2010   100239(RCY)     Draft                                */
37/*                                                                           */
38/*****************************************************************************/
39
40#ifndef __IMPEG2D_H__
41#define __IMPEG2D_H__
42
43#include "iv.h"
44#include "ivd.h"
45#ifdef __cplusplus
46extern "C"
47{
48#endif
49
50/*****************************************************************************/
51/* Constant Macros                                                           */
52/*****************************************************************************/
53#define EXPORT_MPEG2DEC_FULLCODEC_MEM_RECORDS   22
54
55/*****************************************************************************/
56/* Function Macros                                                           */
57/*****************************************************************************/
58#define IS_IVD_CONCEALMENT_APPLIED(x)           (x & (1 << IVD_APPLIEDCONCEALMENT))
59#define IS_IVD_INSUFFICIENTDATA_ERROR(x)        (x & (1 << IVD_INSUFFICIENTDATA))
60#define IS_IVD_CORRUPTEDDATA_ERROR(x)           (x & (1 << IVD_CORRUPTEDDATA))
61#define IS_IVD_CORRUPTEDHEADER_ERROR(x)         (x & (1 << IVD_CORRUPTEDHEADER))
62#define IS_IVD_UNSUPPORTEDINPUT_ERROR(x)        (x & (1 << IVD_UNSUPPORTEDINPUT))
63#define IS_IVD_UNSUPPORTEDPARAM_ERROR(x)        (x & (1 << IVD_UNSUPPORTEDPARAM))
64#define IS_IVD_FATAL_ERROR(x)                   (x & (1 << IVD_FATALERROR))
65#define IS_IVD_INVALID_BITSTREAM_ERROR(x)       (x & (1 << IVD_INVALID_BITSTREAM))
66#define IS_IVD_INCOMPLETE_BITSTREAM_ERROR(x)    (x & (1 << IVD_INCOMPLETE_BITSTREAM))
67
68#define SET_IVD_CONCEALMENT_APPLIED(x)          ((x) |= (x) | (1 << IVD_APPLIEDCONCEALMENT))
69#define SET_IVD_INSUFFICIENTDATA_ERROR(x)       ((x) |= (x) | (1 << IVD_INSUFFICIENTDATA))
70#define SET_IVD_CORRUPTEDDATA_ERROR(x)          ((x) |= (x) | (1 << IVD_CORRUPTEDDATA))
71#define SET_IVD_CORRUPTEDHEADER_ERROR(x)        ((x) |= (x) | (1 << IVD_CORRUPTEDHEADER))
72#define SET_IVD_UNSUPPORTEDINPUT_ERROR(x)       ((x) |= (x) | (1 << IVD_UNSUPPORTEDINPUT))
73#define SET_IVD_UNSUPPORTEDPARAM_ERROR(x)       ((x) |= (x) | (1 << IVD_UNSUPPORTEDPARAM))
74#define SET_IVD_FATAL_ERROR(x)                  ((x) |= (x) | (1 << IVD_FATALERROR))
75#define SET_IVD_INVALID_BITSTREAM_ERROR(x)      ((x) |= (x) | (1 << IVD_INVALID_BITSTREAM))
76#define SET_IVD_INCOMPLETE_BITSTREAM_ERROR(x)   ((x) |= (x) | (1 << IVD_INCOMPLETE_BITSTREAM))
77
78/*****************************************************************************/
79/* API Function Prototype                                                    */
80/*****************************************************************************/
81IV_API_CALL_STATUS_T impeg2d_api_function(iv_obj_t *ps_handle,
82                                          void *pv_api_ip,
83                                          void *pv_api_op);
84
85/*****************************************************************************/
86/* Enums                                                                     */
87/*****************************************************************************/
88/* Codec Error codes for MPEG2 ASP Decoder                                   */
89
90typedef enum
91{
92
93    IMPEG2D_UNKNOWN_ERROR = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1,
94    /* API calls without init call */
95    IMPEG2D_INIT_NOT_DONE,
96    /* Query number of Memory Records API */
97    IMPEG2D_QUERY_NUM_MEM_REC_FAIL,
98
99    /* Fill Memory Records API */
100    IMPEG2D_FILL_NUM_MEM_REC_NOT_SUFFICIENT,
101
102    /* Initialize Decoder API */
103    IMPEG2D_INIT_DEC_SCR_MEM_INSUFFICIENT,
104    IMPEG2D_INIT_DEC_PER_MEM_INSUFFICIENT,
105    IMPEG2D_INIT_NUM_MEM_REC_NOT_SUFFICIENT,
106    IMPEG2D_INIT_CHROMA_FORMAT_HEIGHT_ERROR,
107
108    /* Decode Sequence Header API */
109    IMPEG2D_FRM_HDR_START_CODE_NOT_FOUND,
110    IMPEG2D_FRM_HDR_MARKER_BIT_NOT_FOUND,
111    IMPEG2D_PROF_LEVEL_NOT_SUPPORTED,
112    IMPEG2D_FMT_NOT_SUPPORTED,
113    IMPEG2D_SCALABILITIY_NOT_SUPPORTED,
114    IMPEG2D_PIC_SIZE_NOT_SUPPORTED,
115
116    /* Search for start code API */
117    //IMPEG2D_SEARCH_START_CODE_FAIL         ,
118    /* Decode Video Frame API    */
119    IMPEG2D_START_CODE_NOT_FOUND,
120    IMPEG2D_MARKER_BIT_NOT_FOUND,
121    IMPEG2D_INVALID_STUFFING,
122    IMPEG2D_PROFILE_LEVEL_NOT_SUP,
123    IMPEG2D_CHROMA_FMT_NOT_SUP,
124    IMPEG2D_SCALABLITY_NOT_SUP,
125    IMPEG2D_FRM_HDR_DECODE_ERR,
126    IMPEG2D_MB_HDR_DECODE_ERR,
127    IMPEG2D_MB_TEX_DECODE_ERR,
128    IMPEG2D_INCORRECT_QUANT_MATRIX,
129    IMPEG2D_INVALID_SKIP_MB,
130    IMPEG2D_NOT_SUPPORTED_ERR,
131    IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR,
132    IMPEG2D_INVALID_PIC_TYPE,
133    IMPEG2D_INVALID_HUFFMAN_CODE,
134    IMPEG2D_NO_FREE_BUF_ERR,
135
136    /* slice header errors */
137    IMPEG2D_INVALID_VERT_SIZE,
138    IMPEG2D_MB_DATA_DECODE_ERR,
139
140    /* Get Display Frame API */
141    IMPEG2D_GET_DISP_FRM_FAIL,
142
143    /* Sample Version limitation */
144    IMPEG2D_SAMPLE_VERSION_LIMIT_ERR,
145    /**
146     * Width/height greater than max width and max height
147     */
148    IMPEG2D_UNSUPPORTED_DIMENSIONS,
149
150    /* Unknown API Command */
151    IMPEG2D_UNKNOWN_API_COMMAND
152
153} IMPEG2D_ERROR_CODES_T;
154
155/*****************************************************************************/
156/* Extended Structures                                                       */
157/*****************************************************************************/
158typedef enum
159{
160    /** Set number of cores/threads to be used */
161    IMPEG2D_CMD_CTL_SET_NUM_CORES = IVD_CMD_CTL_CODEC_SUBCMD_START,
162
163    /** Set processor details */
164    IMPEG2D_CMD_CTL_SET_PROCESSOR = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x001,
165
166    /** Get display buffer dimensions */
167    IMPEG2D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START
168                    + 0x100,
169
170} IMPEG2D_CMD_CTL_SUB_CMDS;
171
172/*****************************************************************************/
173/*  Get Number of Memory Records                                             */
174/*****************************************************************************/
175
176typedef struct
177{
178    iv_num_mem_rec_ip_t s_ivd_num_mem_rec_ip_t;
179} impeg2d_num_mem_rec_ip_t;
180
181typedef struct
182{
183    iv_num_mem_rec_op_t s_ivd_num_mem_rec_op_t;
184} impeg2d_num_mem_rec_op_t;
185
186/*****************************************************************************/
187/*  Fill Memory Records                                                      */
188/*****************************************************************************/
189
190typedef struct
191{
192    iv_fill_mem_rec_ip_t s_ivd_fill_mem_rec_ip_t;
193    /* Flag to enable sharing of reference buffers between decoder
194     and application */
195
196    UWORD32 u4_share_disp_buf;
197
198    /* format in which codec has to give out frame data for display */
199    IV_COLOR_FORMAT_T e_output_format;
200
201} impeg2d_fill_mem_rec_ip_t;
202
203typedef struct
204{
205    iv_fill_mem_rec_op_t s_ivd_fill_mem_rec_op_t;
206} impeg2d_fill_mem_rec_op_t;
207
208/*****************************************************************************/
209/*  Retrieve Memory Records                                                  */
210/*****************************************************************************/
211
212typedef struct
213{
214    iv_retrieve_mem_rec_ip_t s_ivd_retrieve_mem_rec_ip_t;
215} impeg2d_retrieve_mem_rec_ip_t;
216
217typedef struct
218{
219    iv_retrieve_mem_rec_op_t s_ivd_retrieve_mem_rec_op_t;
220} impeg2d_retrieve_mem_rec_op_t;
221
222/*****************************************************************************/
223/*   Initialize decoder                                                      */
224/*****************************************************************************/
225
226typedef struct
227{
228    ivd_init_ip_t s_ivd_init_ip_t;
229    /* Flag to enable sharing of reference buffers between decoder
230     and application */
231    UWORD32 u4_share_disp_buf;
232
233} impeg2d_init_ip_t;
234
235typedef struct
236{
237    ivd_init_op_t s_ivd_init_op_t;
238} impeg2d_init_op_t;
239
240/*****************************************************************************/
241/*   Video Decode                                                            */
242/*****************************************************************************/
243
244typedef struct
245{
246    ivd_video_decode_ip_t s_ivd_video_decode_ip_t;
247} impeg2d_video_decode_ip_t;
248
249typedef struct
250{
251    ivd_video_decode_op_t s_ivd_video_decode_op_t;
252} impeg2d_video_decode_op_t;
253
254/*****************************************************************************/
255/*   Get Display Frame                                                       */
256/*****************************************************************************/
257
258typedef struct
259{
260    ivd_get_display_frame_ip_t s_ivd_get_display_frame_ip_t;
261} impeg2d_get_display_frame_ip_t;
262
263typedef struct
264{
265    ivd_get_display_frame_op_t s_ivd_get_display_frame_op_t;
266} impeg2d_get_display_frame_op_t;
267
268/*****************************************************************************/
269/*   Set Display Frame                                                       */
270/*****************************************************************************/
271typedef struct
272{
273    ivd_set_display_frame_ip_t s_ivd_set_display_frame_ip_t;
274} impeg2d_set_display_frame_ip_t;
275
276typedef struct
277{
278    ivd_set_display_frame_op_t s_ivd_set_display_frame_op_t;
279} impeg2d_set_display_frame_op_t;
280
281/*****************************************************************************/
282/*   Release Display Buffers                                                 */
283/*****************************************************************************/
284
285typedef struct
286{
287    ivd_rel_display_frame_ip_t s_ivd_rel_display_frame_ip_t;
288} impeg2d_rel_display_frame_ip_t;
289
290typedef struct
291{
292    ivd_rel_display_frame_op_t s_ivd_rel_display_frame_op_t;
293} impeg2d_rel_display_frame_op_t;
294
295/*****************************************************************************/
296/*   Video control  Flush                                                    */
297/*****************************************************************************/
298
299typedef struct
300{
301    ivd_ctl_flush_ip_t s_ivd_ctl_flush_ip_t;
302} impeg2d_ctl_flush_ip_t;
303
304typedef struct
305{
306    ivd_ctl_flush_op_t s_ivd_ctl_flush_op_t;
307} impeg2d_ctl_flush_op_t;
308
309/*****************************************************************************/
310/*   Video control reset                                                     */
311/*****************************************************************************/
312
313typedef struct
314{
315    ivd_ctl_reset_ip_t s_ivd_ctl_reset_ip_t;
316} impeg2d_ctl_reset_ip_t;
317
318typedef struct
319{
320    ivd_ctl_reset_op_t s_ivd_ctl_reset_op_t;
321} impeg2d_ctl_reset_op_t;
322
323/*****************************************************************************/
324/*   Video control  Set Params                                               */
325/*****************************************************************************/
326
327typedef struct
328{
329    ivd_ctl_set_config_ip_t s_ivd_ctl_set_config_ip_t;
330} impeg2d_ctl_set_config_ip_t;
331
332typedef struct
333{
334    ivd_ctl_set_config_op_t s_ivd_ctl_set_config_op_t;
335} impeg2d_ctl_set_config_op_t;
336
337/*****************************************************************************/
338/*   Video control:Get Buf Info                                              */
339/*****************************************************************************/
340
341typedef struct
342{
343    ivd_ctl_getbufinfo_ip_t s_ivd_ctl_getbufinfo_ip_t;
344} impeg2d_ctl_getbufinfo_ip_t;
345
346typedef struct
347{
348    ivd_ctl_getbufinfo_op_t s_ivd_ctl_getbufinfo_op_t;
349} impeg2d_ctl_getbufinfo_op_t;
350
351/*****************************************************************************/
352/*   Video control:Getstatus Call                                            */
353/*****************************************************************************/
354
355typedef struct
356{
357    ivd_ctl_getstatus_ip_t s_ivd_ctl_getstatus_ip_t;
358} impeg2d_ctl_getstatus_ip_t;
359
360typedef struct
361{
362    ivd_ctl_getstatus_op_t s_ivd_ctl_getstatus_op_t;
363} impeg2d_ctl_getstatus_op_t;
364
365/*****************************************************************************/
366/*   Video control:Get Version Info                                          */
367/*****************************************************************************/
368
369typedef struct
370{
371    ivd_ctl_getversioninfo_ip_t s_ivd_ctl_getversioninfo_ip_t;
372} impeg2d_ctl_getversioninfo_ip_t;
373
374typedef struct
375{
376    ivd_ctl_getversioninfo_op_t s_ivd_ctl_getversioninfo_op_t;
377} impeg2d_ctl_getversioninfo_op_t;
378
379/*****************************************************************************/
380/*   Video control:Disable Qpel                                              */
381/*****************************************************************************/
382
383typedef struct
384{
385    UWORD32 u4_size;
386    IVD_API_COMMAND_TYPE_T e_cmd;
387    IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
388    UWORD32 u4_num_cores;
389} impeg2d_ctl_set_num_cores_ip_t;
390
391typedef struct
392{
393    UWORD32 u4_size;
394    UWORD32 u4_error_code;
395} impeg2d_ctl_set_num_cores_op_t;
396
397typedef struct
398{
399    /**
400     * size
401     */
402    UWORD32 u4_size;
403    /**
404     * cmd
405     */
406    IVD_API_COMMAND_TYPE_T e_cmd;
407    /**
408     * sub cmd
409     */
410    IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
411    /**
412     * Processor type
413     */
414    UWORD32 u4_arch;
415    /**
416     * SOC type
417     */
418    UWORD32 u4_soc;
419
420    /**
421     * num_cores
422     */
423    UWORD32 u4_num_cores;
424
425} impeg2d_ctl_set_processor_ip_t;
426
427typedef struct
428{
429    /**
430     * size
431     */
432    UWORD32 u4_size;
433    /**
434     * error_code
435     */
436    UWORD32 u4_error_code;
437} impeg2d_ctl_set_processor_op_t;
438
439typedef struct
440{
441
442    /**
443     * size
444     */
445    UWORD32 u4_size;
446
447    /**
448     * cmd
449     */
450    IVD_API_COMMAND_TYPE_T e_cmd;
451
452    /**
453     * sub cmd
454     */
455    IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
456} impeg2d_ctl_get_frame_dimensions_ip_t;
457
458typedef struct
459{
460
461    /**
462     * size
463     */
464    UWORD32 u4_size;
465
466    /**
467     * error_code
468     */
469    UWORD32 u4_error_code;
470
471    /**
472     * x_offset[3]
473     */
474    UWORD32 u4_x_offset[3];
475
476    /**
477     * y_offset[3]
478     */
479    UWORD32 u4_y_offset[3];
480
481    /**
482     * disp_wd[3]
483     */
484    UWORD32 u4_disp_wd[3];
485
486    /**
487     * disp_ht[3]
488     */
489    UWORD32 u4_disp_ht[3];
490
491    /**
492     * buffer_wd[3]
493     */
494    UWORD32 u4_buffer_wd[3];
495
496    /**
497     * buffer_ht[3]
498     */
499    UWORD32 u4_buffer_ht[3];
500} impeg2d_ctl_get_frame_dimensions_op_t;
501
502#ifdef __cplusplus
503} /* closing brace for extern "C" */
504#endif
505
506#endif /* __IMPEG2D_H__ */
507