• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
46 extern "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 /*****************************************************************************/
81 IV_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 
90 typedef 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 /*****************************************************************************/
158 typedef 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     /** Get Seq header/seq header extension info */
171     IMPEG2D_CMD_CTL_GET_SEQ_INFO     = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101,
172 
173 } IMPEG2D_CMD_CTL_SUB_CMDS;
174 
175 /*****************************************************************************/
176 /*  Get Number of Memory Records                                             */
177 /*****************************************************************************/
178 
179 typedef struct
180 {
181     iv_num_mem_rec_ip_t s_ivd_num_mem_rec_ip_t;
182 } impeg2d_num_mem_rec_ip_t;
183 
184 typedef struct
185 {
186     iv_num_mem_rec_op_t s_ivd_num_mem_rec_op_t;
187 } impeg2d_num_mem_rec_op_t;
188 
189 /*****************************************************************************/
190 /*  Fill Memory Records                                                      */
191 /*****************************************************************************/
192 
193 typedef struct
194 {
195     iv_fill_mem_rec_ip_t s_ivd_fill_mem_rec_ip_t;
196     /* Flag to enable sharing of reference buffers between decoder
197      and application */
198 
199     UWORD32 u4_share_disp_buf;
200 
201     /* format in which codec has to give out frame data for display */
202     IV_COLOR_FORMAT_T e_output_format;
203 
204     /**
205      * Flag to enable/disable deinterlacing
206      */
207     UWORD32 u4_deinterlace;
208 
209 } impeg2d_fill_mem_rec_ip_t;
210 
211 typedef struct
212 {
213     iv_fill_mem_rec_op_t s_ivd_fill_mem_rec_op_t;
214 } impeg2d_fill_mem_rec_op_t;
215 
216 /*****************************************************************************/
217 /*  Retrieve Memory Records                                                  */
218 /*****************************************************************************/
219 
220 typedef struct
221 {
222     iv_retrieve_mem_rec_ip_t s_ivd_retrieve_mem_rec_ip_t;
223 } impeg2d_retrieve_mem_rec_ip_t;
224 
225 typedef struct
226 {
227     iv_retrieve_mem_rec_op_t s_ivd_retrieve_mem_rec_op_t;
228 } impeg2d_retrieve_mem_rec_op_t;
229 
230 /*****************************************************************************/
231 /*   Initialize decoder                                                      */
232 /*****************************************************************************/
233 
234 typedef struct
235 {
236     ivd_init_ip_t s_ivd_init_ip_t;
237     /* Flag to enable sharing of reference buffers between decoder
238      and application */
239     UWORD32 u4_share_disp_buf;
240 
241     /**
242      * Flag to enable/disable deinterlacing
243      */
244     UWORD32 u4_deinterlace;
245 
246 } impeg2d_init_ip_t;
247 
248 typedef struct
249 {
250     ivd_init_op_t s_ivd_init_op_t;
251 } impeg2d_init_op_t;
252 
253 /*****************************************************************************/
254 /*   Video Decode                                                            */
255 /*****************************************************************************/
256 
257 typedef struct
258 {
259     ivd_video_decode_ip_t s_ivd_video_decode_ip_t;
260 } impeg2d_video_decode_ip_t;
261 
262 typedef struct
263 {
264     ivd_video_decode_op_t s_ivd_video_decode_op_t;
265 } impeg2d_video_decode_op_t;
266 
267 /*****************************************************************************/
268 /*   Get Display Frame                                                       */
269 /*****************************************************************************/
270 
271 typedef struct
272 {
273     ivd_get_display_frame_ip_t s_ivd_get_display_frame_ip_t;
274 } impeg2d_get_display_frame_ip_t;
275 
276 typedef struct
277 {
278     ivd_get_display_frame_op_t s_ivd_get_display_frame_op_t;
279 } impeg2d_get_display_frame_op_t;
280 
281 /*****************************************************************************/
282 /*   Set Display Frame                                                       */
283 /*****************************************************************************/
284 typedef struct
285 {
286     ivd_set_display_frame_ip_t s_ivd_set_display_frame_ip_t;
287 } impeg2d_set_display_frame_ip_t;
288 
289 typedef struct
290 {
291     ivd_set_display_frame_op_t s_ivd_set_display_frame_op_t;
292 } impeg2d_set_display_frame_op_t;
293 
294 /*****************************************************************************/
295 /*   Release Display Buffers                                                 */
296 /*****************************************************************************/
297 
298 typedef struct
299 {
300     ivd_rel_display_frame_ip_t s_ivd_rel_display_frame_ip_t;
301 } impeg2d_rel_display_frame_ip_t;
302 
303 typedef struct
304 {
305     ivd_rel_display_frame_op_t s_ivd_rel_display_frame_op_t;
306 } impeg2d_rel_display_frame_op_t;
307 
308 /*****************************************************************************/
309 /*   Video control  Flush                                                    */
310 /*****************************************************************************/
311 
312 typedef struct
313 {
314     ivd_ctl_flush_ip_t s_ivd_ctl_flush_ip_t;
315 } impeg2d_ctl_flush_ip_t;
316 
317 typedef struct
318 {
319     ivd_ctl_flush_op_t s_ivd_ctl_flush_op_t;
320 } impeg2d_ctl_flush_op_t;
321 
322 /*****************************************************************************/
323 /*   Video control reset                                                     */
324 /*****************************************************************************/
325 
326 typedef struct
327 {
328     ivd_ctl_reset_ip_t s_ivd_ctl_reset_ip_t;
329 } impeg2d_ctl_reset_ip_t;
330 
331 typedef struct
332 {
333     ivd_ctl_reset_op_t s_ivd_ctl_reset_op_t;
334 } impeg2d_ctl_reset_op_t;
335 
336 /*****************************************************************************/
337 /*   Video control  Set Params                                               */
338 /*****************************************************************************/
339 
340 typedef struct
341 {
342     ivd_ctl_set_config_ip_t s_ivd_ctl_set_config_ip_t;
343 } impeg2d_ctl_set_config_ip_t;
344 
345 typedef struct
346 {
347     ivd_ctl_set_config_op_t s_ivd_ctl_set_config_op_t;
348 } impeg2d_ctl_set_config_op_t;
349 
350 /*****************************************************************************/
351 /*   Video control:Get Buf Info                                              */
352 /*****************************************************************************/
353 
354 typedef struct
355 {
356     ivd_ctl_getbufinfo_ip_t s_ivd_ctl_getbufinfo_ip_t;
357 } impeg2d_ctl_getbufinfo_ip_t;
358 
359 typedef struct
360 {
361     ivd_ctl_getbufinfo_op_t s_ivd_ctl_getbufinfo_op_t;
362 } impeg2d_ctl_getbufinfo_op_t;
363 
364 /*****************************************************************************/
365 /*   Video control:Getstatus Call                                            */
366 /*****************************************************************************/
367 
368 typedef struct
369 {
370     ivd_ctl_getstatus_ip_t s_ivd_ctl_getstatus_ip_t;
371 } impeg2d_ctl_getstatus_ip_t;
372 
373 typedef struct
374 {
375     ivd_ctl_getstatus_op_t s_ivd_ctl_getstatus_op_t;
376 } impeg2d_ctl_getstatus_op_t;
377 
378 /*****************************************************************************/
379 /*   Video control:Get Version Info                                          */
380 /*****************************************************************************/
381 
382 typedef struct
383 {
384     ivd_ctl_getversioninfo_ip_t s_ivd_ctl_getversioninfo_ip_t;
385 } impeg2d_ctl_getversioninfo_ip_t;
386 
387 typedef struct
388 {
389     ivd_ctl_getversioninfo_op_t s_ivd_ctl_getversioninfo_op_t;
390 } impeg2d_ctl_getversioninfo_op_t;
391 
392 /*****************************************************************************/
393 /*   Video control:Disable Qpel                                              */
394 /*****************************************************************************/
395 
396 typedef struct
397 {
398     UWORD32 u4_size;
399     IVD_API_COMMAND_TYPE_T e_cmd;
400     IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
401     UWORD32 u4_num_cores;
402 } impeg2d_ctl_set_num_cores_ip_t;
403 
404 typedef struct
405 {
406     UWORD32 u4_size;
407     UWORD32 u4_error_code;
408 } impeg2d_ctl_set_num_cores_op_t;
409 
410 typedef struct
411 {
412     /**
413      * size
414      */
415     UWORD32 u4_size;
416     /**
417      * cmd
418      */
419     IVD_API_COMMAND_TYPE_T e_cmd;
420     /**
421      * sub cmd
422      */
423     IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
424     /**
425      * Processor type
426      */
427     UWORD32 u4_arch;
428     /**
429      * SOC type
430      */
431     UWORD32 u4_soc;
432 
433     /**
434      * num_cores
435      */
436     UWORD32 u4_num_cores;
437 
438 } impeg2d_ctl_set_processor_ip_t;
439 
440 typedef struct
441 {
442     /**
443      * size
444      */
445     UWORD32 u4_size;
446     /**
447      * error_code
448      */
449     UWORD32 u4_error_code;
450 } impeg2d_ctl_set_processor_op_t;
451 
452 typedef struct
453 {
454 
455     /**
456      * size
457      */
458     UWORD32 u4_size;
459 
460     /**
461      * cmd
462      */
463     IVD_API_COMMAND_TYPE_T e_cmd;
464 
465     /**
466      * sub cmd
467      */
468     IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
469 } impeg2d_ctl_get_frame_dimensions_ip_t;
470 
471 typedef struct
472 {
473 
474     /**
475      * size
476      */
477     UWORD32 u4_size;
478 
479     /**
480      * error_code
481      */
482     UWORD32 u4_error_code;
483 
484     /**
485      * x_offset[3]
486      */
487     UWORD32 u4_x_offset[3];
488 
489     /**
490      * y_offset[3]
491      */
492     UWORD32 u4_y_offset[3];
493 
494     /**
495      * disp_wd[3]
496      */
497     UWORD32 u4_disp_wd[3];
498 
499     /**
500      * disp_ht[3]
501      */
502     UWORD32 u4_disp_ht[3];
503 
504     /**
505      * buffer_wd[3]
506      */
507     UWORD32 u4_buffer_wd[3];
508 
509     /**
510      * buffer_ht[3]
511      */
512     UWORD32 u4_buffer_ht[3];
513 } impeg2d_ctl_get_frame_dimensions_op_t;
514 
515 typedef struct
516 {
517     /**
518      * size
519      */
520     UWORD32 u4_size;
521 
522     /**
523      * cmd
524      */
525     IVD_API_COMMAND_TYPE_T e_cmd;
526 
527     /**
528      * sub cmd
529      */
530     IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
531 } impeg2d_ctl_get_seq_info_ip_t;
532 
533 typedef struct
534 {
535     /**
536      * size
537      */
538     UWORD32 u4_size;
539 
540     /**
541      * error_code
542      */
543     UWORD32 u4_error_code;
544 
545     /**
546      * aspect_ratio_information
547      */
548     UWORD8 u1_aspect_ratio_information;
549 
550     /**
551      * frame_rate_code
552      */
553     UWORD8 u1_frame_rate_code;
554 
555     /**
556      * frame_rate_extension_n
557      */
558     UWORD8 u1_frame_rate_extension_n;
559 
560     /**
561      * frame_rate_extension_d
562      */
563     UWORD8 u1_frame_rate_extension_d;
564 
565     /**
566      * video_format
567      */
568     UWORD8 u1_video_format;
569 
570     /**
571      * colour_primaries
572      */
573     UWORD8 u1_colour_primaries;
574 
575     /**
576      * transfer_characteristics
577      */
578     UWORD8 u1_transfer_characteristics;
579 
580     /**
581      * matrix_coefficients
582      */
583     UWORD8 u1_matrix_coefficients;
584 
585     /**
586      * display_horizontal_size
587      */
588     UWORD16 u2_display_horizontal_size;
589 
590     /**
591      * display_vertical_size
592      */
593     UWORD16 u2_display_vertical_size;
594 
595 } impeg2d_ctl_get_seq_info_op_t;
596 #ifdef __cplusplus
597 } /* closing brace for extern "C" */
598 #endif
599 
600 #endif /* __IMPEG2D_H__ */
601