Updated Ducati header files (codecs and XDC tools)
[gstreamer-omap:libdce.git] / packages / ivahd_codecs / ti / sdo / codecs / h264dec / ih264vdec.h
1 /*
2 *******************************************************************************
3  * HDVICP2.0 Based H.264 HP Decoder
4  *
5  * "HDVICP2.0 Based H.264 HP Decoder" is a software module developed on TI's
6  *  HDVICP2 based SOCs. This module is capable of decoding a compressed
7  *  high/main/baseline profile H.264 bit-stream into a YUV 4:2:0 Raw video.
8  *  Based on "ISO/IEC 14496-10".
9  * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
10  * ALL RIGHTS RESERVED
11 *******************************************************************************
12 */
13
14 /**
15 *******************************************************************************
16  * @file ih264vdec.h
17  *
18  * @brief  H264VDEC Interface Header file.
19  *
20  *         This File contains the interface structures and Macro definition
21  *         required for integrating the H264VDEC.
22  *
23  * @author: Pavan Shastry (pavanvs@ti.com)
24  *
25  * @version 0.1 (Jan 2008) : Base version borrowed from DSP RnD
26  * @version 0.2 (Oct 2009) : Code commenting/cleanup.
27  *                           [Keshav]
28  * @version 0.3 (Sep 2010) : Added new structure IH264VDEC_SeiFramePacking
29  *                            and also added the new element frame_packing
30  *                            to the structure IH264VDEC_SeiMessages
31  *                            [Ramkumar]
32  * @version 0.4 (Sep 2010) : Added review comments and added one new default
33  *                           dynemic parameter [Ashish  Singh ]
34  * @version 0.5 (Nov 2010) : Added new elements in status and params for
35  *                           debug trace [Resmi]
36  * @version 0.6 (Nov 2010) : Changes for indicating gaps in frame_num to app
37  *                           [Resmi]
38  * @version 0.7 (Dec 2010) : Extending the create param structure to accomodate
39  *                           configurability feature for the detection
40  *                           of CABAC and IPCM alignment errors.
41  *                           [Ramakrishna Adireddy]
42  * @version 0.8 (Dec 2010) : Extending the array size for registered and
43  *                           un-registered SEI and added a flag in each SEI
44  *                           message to indicate the overflow.
45  *                           [Ramakrishna Adireddy]
46  * @version 0.9 (Jan 2011) : Added new common str for storing up the Data
47  *                           elements required by SVC decoder
48  *                           [Ashish]
49  * @version 1.0(June 2011) : Added enableDualOutput param and enum for dualYuv
50  *                           support.
51  *                           [Vijay Kumar Yadav]
52  * @version 1.1(June 2011) : Added parameter required for dualYuv EC.
53  *                           [Vijay]
54  * @version 1.2 (Oct 2011) : Gaps in frame number enhancements
55  *                           [Ramakrishna Adireddy]
56  * @version 1.3 (Oct 2011) : Added WaterMark parameters.
57  *                           [Suresh Reddy]
58  * @version 1.4 (July 2012): Added new create time param to support decoding
59  *                           of specific frame types as requested by
60  *                           application [Mahantesh]
61 ******************************************************************************
62 */
63 #ifndef IH264VDEC_
64 #define IH264VDEC_
65
66 #include <ti/xdais/ialg.h>
67 #include <ti/xdais/dm/ividdec3.h>
68
69 #define IH264VDEC_MAX_LENGTH_PROCESS_LIST (24)
70
71 /**
72  ******************************************************************************
73  *  @struct IH264VDEC_Obj
74  *
75  *  @brief  Module\92s object definition. This structure must be the first field
76  *          of all H264VDEC instance objects
77  *
78  *  @param  fxns : Structure type defining all functions necessary to
79  *                 implement the IH264VDEC interface.
80  ******************************************************************************
81 */
82 typedef struct IH264VDEC_Obj
83 {
84   struct IH264VDEC_Fxns *fxns;
85 } IH264VDEC_Obj;
86
87 /**
88  ******************************************************************************
89  *  @struct IH264VDEC_Status
90  *
91  *  @brief  This structure defines parameters that describe the status of the
92  *          H264 Decoder and any other implementation specific parameters.
93  *          The status parameters are defined in the XDM data structure,
94  *          IVIDDEC3_Status
95  *
96  *  @param  viddec3Status : XDM Base class status structure (see ividdec3.h)
97  *
98  *  @param  svcTargetLayerDID : SVC Spatial target layer ID,need to set if svc
99  *                codec flag is on else default set to 0.
100  *
101  *  @param  svcTargetLayerQID : SVC Quality target layer ID,need to set if svc
102  *                codec flag is on else default set to 0.
103  *
104  *
105  *  @param  svcTargetLayerTID : SVC Temporal target layer ID,need to set if svc
106  *                codec flag is on else default set to 0.
107  *
108  *  @param  debugTraceLevel:  This parameter reports the debug trace level
109  *                            configured for the codec
110  *
111  *  @param  lastNFramesToLog:  This parameter reports the number of last N
112  *                             pictures for which history has been maintained
113  *
114  *  @param  extMemoryDebugTraceAddr:  This parameter reports the external
115  *                             memory address (as seen by M3) where debug trace
116  *                             information is being dumped
117  *
118  *  @param  extMemoryDebugTraceSize:  This parameter reports the external
119  *                             memory buffer size(in bytes) where debug trace
120  *                             information is being dumped
121  *
122  *  @param  gapInFrameNum:  This parameter reports the gap in frame_num
123  *                          observed in the current frame. It is overloaded
124  *                          with details of two things.
125  *                          LSB 1-bit [0:0]: Indicates whether SPS allows frame
126  *                                           num gaps.
127  *                          Rest 31-bits [31:1]: Indicates the gap observed
128  *
129  *  @param  spsMaxRefFrames:  This parameter reports max reference frames
130  *                           that get used for decoding of a given stream.
131  *                           If SPS is not parsed, this gives out the value
132  *                           based on level & resolution set in create time
133  *                           params. Otherwise, it gives out the parsed value
134  *
135  *  @param enableDualOutput  :  This Parameter tells whether Dual output is
136  *                             enable or not. If enable then application needs
137  *                             to provide two extra buffer (one for DualLuma
138  *                             and another for DualChroma.
139  *
140  *  @param reserved[2]      :  Left reserve for future purpose
141  *
142  ******************************************************************************
143 */
144 typedef struct IH264VDEC_Status
145 {
146   IVIDDEC3_Status viddec3Status;
147   XDAS_Int32  svcTargetLayerDID;
148   XDAS_Int32  svcTargetLayerTID;
149   XDAS_Int32  svcTargetLayerQID;
150   XDAS_UInt32 debugTraceLevel;
151   XDAS_UInt32 lastNFramesToLog;
152   XDAS_UInt32 *extMemoryDebugTraceAddr;
153   XDAS_UInt32 extMemoryDebugTraceSize;
154   XDAS_UInt32 gapInFrameNum;
155   XDAS_UInt32 spsMaxRefFrames;
156   XDAS_UInt32 enableDualOutput;
157   XDAS_UInt32 reserved[2];
158 } IH264VDEC_Status;
159
160  /**
161  ******************************************************************************
162  *  @struct IH264VDEC_Params
163  *
164  *  @brief  This structure defines the creation parameters for all H264VDEC
165  *          objects. This structure includes the xdm baseclass creation
166  *          parameters and any other implementation specific parameters for
167  *          H264 Decoder instance object.
168  *
169  *  @param  viddec3Params :  XDM Baselass create time parameters.
170  *                              (see ividdec3.h)
171  *  @param  dpbSizeInFrames:   Number of frames required by the DPB
172  *                             (Decoded Picture Buffer). This is the DPB size
173  *                             in number of frames. Also, See the enum
174  *                             IH264VDEC_dpbNumFrames.
175  *  @param  pConstantMemory :  This pointer points to the the memory area where
176  *                             constants are located. Default value is NULL in
177  *                             which case, codec puts the constants in a
178  *                             default section.
179  *                             It has to be in DDR addressable space by
180  *                             vDMA. This is useful to allow relocatable
181  *                             constants for the applications which doesn't use
182  *                             M3 as host. Actual memory controller/allocator
183  *                             is on another master processor.
184  *                             If this is set to NULL then decoder assumes
185  *                             that all constants are pointed by symbol
186  *                             H264VDEC_TI_ConstData
187  *
188  *  @param  bitStreamFormat :  Input bit stream format. Input bits stream can
189  *                             be IH264VDEC_NAL_UNIT_FORMAT or
190  *                             IH264VDEC_BYTE_STREAM_FORMAT. See the enum
191  *                             IH264VDEC_bitStreamFormat for details.
192  *                             The decoder supports IH264VDEC_BYTE_STREAM_FORMAT
193  *                             in both datasync mode and non datasync mode
194  *                             (i.e inputDataMode = IVIDEO_ENTIREFRAME).
195  *                             But the IH264VDEC_NAL_UNIT_FORMAT is supported
196  *                             only in datasync mode, i.e only when
197  *                             inputDataMode = IH264VDEC_NALUNIT_SLICEMODE.
198  *
199  *  @param  errConcealmentMode : If this is set to 1, it means that the YUV
200  *                              buffer passed in current process call needs
201  *                              concealment. If this is set to 0, it means that
202  *                              the YUV buffer passed in current process call
203  *                              does not concealment. Note that whether decoder
204  *                              actually performed the concealment or not is
205  *                              indicated by XDM_APPLIEDCONCEALMENT bit in
206  *                              extended error field
207  *
208  *  @param  temporalDirModePred: Parameter to enable/disable temporal direct
209  *                               Prediction mode. 0: Disable, 1:Enable
210  *                               If this Parameter is disabled set to 0), and
211  *                               if the B slice uses temporal direct mode,
212  *                               then the codec returns error for that slice.
213  *
214  *  @param svcExtensionFlag  : If required to decode SVC streams , set flag
215  *                             ON else default set to IH264SVCVDEC_EXT_FLAG
216  *
217  *  @param  svcTargetLayerDID : SVC Spatial target layer ID,need to read if svc
218  *                codec flag (svcExtensionFlag)is on else default
219  *                set to IH264SVCVDEC_TARGET_DEFAULT_DID.
220  *
221  *  @param  svcTargetLayerQID : SVC Quality target layer ID,need to read if svc
222  *                codec flag  (svcExtensionFlag) is on else default
223  *                set to IH264SVCVDEC_TARGET_DEFAULT_QID.
224  *
225  *
226  *  @param  svcTargetLayerTID : SVC Temporal target layer ID,need to read if svc
227  *                codec flag  (svcExtensionFlag)is on else default
228  *                set to IH264SVCVDEC_TARGET_DEFAULT_TID.
229  *
230  *  @param presetLevelIdc   : Level to which decoder has to be configured by the
231  *                            application
232  *
233  *  @param presetProfileIdc : Profile to which decoder has to be configured by
234  *                            the application. Currently unused inside codec.
235  *
236  *  @param  detectCabacAlignErr: This parameter configures the cabac alignment
237  *                               error detection
238  *
239  *  @param  detectIPCMAlignErr: This parameter configures the IPCM alignment
240  *                              error detection
241  *
242  *  @param  debugTraceLevel:  This parameter configures the debug trace level
243  *                            for the codec
244  *
245  *  @param  lastNFramesToLog:  This parameter configures the codec to maintain
246  *                             a history of last N frames/pictures
247  *
248  *  @param enableDualOutput  :  This Parameter tells whether Dual output is
249  *                             enable or not. If enable then application needs
250  *                             to provide two extra buffer (one for DualLuma
251  *                             and another for DualChroma.
252  *
253  *  @param processCallLevel : Flag to select field/frame level process call
254  *
255  *  @param enableWatermark  :  This Parameter tells whether watermark is
256  *                             enabled or not.
257  *
258  *  @param decodeFrameType : Flag to decoder from application to request
259  *                           decoding of only I & IDR or IP or all frame types.
260  *                           Setting of IVIDDEC3_DynamicParams::frameSkipMode =
261  *                           IVIDEO_SKIP_PB or IVIDEO_SKIP_B could have been
262  *                           used for this purpose but it is defined at dynamic
263  *                           level, whereas the intention of this parameter is
264  *                           to have create time indication to codec for lesser
265  *                           memory foot print request. Hence this new parameter
266  *                           is defined.
267  ******************************************************************************
268 */
269 typedef struct IH264VDEC_Params
270 {
271   IVIDDEC3_Params viddec3Params;
272   XDAS_Int32      dpbSizeInFrames;
273   XDAS_Int32      pConstantMemory;
274   XDAS_Int32      bitStreamFormat;
275   XDAS_UInt32     errConcealmentMode;
276   XDAS_Int32      temporalDirModePred;
277   XDAS_UInt32     svcExtensionFlag;
278   XDAS_Int32      svcTargetLayerDID;
279   XDAS_Int32      svcTargetLayerTID;
280   XDAS_Int32      svcTargetLayerQID;
281   XDAS_Int32      presetLevelIdc;
282   XDAS_Int32      presetProfileIdc;
283   XDAS_UInt32     detectCabacAlignErr;
284   XDAS_UInt32     detectIPCMAlignErr;
285   XDAS_UInt32     debugTraceLevel;
286   XDAS_UInt32     lastNFramesToLog;
287   XDAS_UInt32     enableDualOutput;
288   XDAS_Int32      processCallLevel;
289   XDAS_UInt32     enableWatermark;
290   XDAS_UInt32     decodeFrameType;
291 } IH264VDEC_Params;
292 /**
293  ******************************************************************************
294  *  @struct IH264VDEC_DynamicParams
295  *
296  *  @brief  This structure defines the run-time parameters and any other
297  *          implementation specific parameters for an H.264 instance object.
298  *          The base run-time parameters are defined in the XDM data structure,
299  *          IVIDDEC3_DynamicParams.
300  *
301  *  @param  viddec3DynamicParams : XDM Base class dynamic structure
302  *                                 (see ividdec3.h)
303  *
304  *  @param  deblockFilterMode : indicates the mode of deblocking filter
305  *                              (see enum IH264VDEC_deblockFilterMode)
306  *
307  *  @param  svcTargetLayerDID : SVC Spatial target layer ID,need to read if svc
308  *                codec flag is on else default set to
309  *                IH264SVCVDEC_TARGET_DEFAULT_DID.
310  *
311  *  @param  svcTargetLayerQID : SVC Quality target layer ID,need to read if svc
312  *                codec flag is on else default set to
313  *                IH264SVCVDEC_TARGET_DEFAULT_QID.
314  *
315  *
316  *  @param  svcTargetLayerTID : SVC Temporal target layer ID,need to read if svc
317  *                codec flag is on else default set to
318  *                IH264SVCVDEC_TARGET_DEFAULT_TID.
319  *
320  *  @param  svcELayerDecode   : Flag to set for enhancement layer decode,
321  *                              defaultvalue is IH264VDEC_DISABLE_ELAYERDECODE
322  *
323  *  @param reserved[3]      :  Left reserve for future purpose
324  *
325  ******************************************************************************
326 */
327 typedef struct IH264VDEC_DynamicParams
328 {
329   IVIDDEC3_DynamicParams viddec3DynamicParams;
330   XDAS_Int32     deblockFilterMode;
331   XDAS_Int32      svcTargetLayerDID;
332   XDAS_Int32      svcTargetLayerTID;
333   XDAS_Int32      svcTargetLayerQID;
334   XDAS_Int32      svcELayerDecode;
335   XDAS_Int32      reserved[3];
336 } IH264VDEC_DynamicParams;
337
338 /**
339  ******************************************************************************
340  *  @struct IH264VDEC_InArgs
341  *
342  *  @brief  This structure defines the run-time input arguments for an H264
343  *          instance object (IH264VDEC::process)
344  *
345  *  @param  viddec3InArgs : XDM Base class InArgs structure  (see ividdec3.h)
346  *
347  *  @param  lateAcquireArg : XDM Base class InArgs structure  (see ividdec3.h)
348  ******************************************************************************
349 */
350 typedef struct IH264VDEC_InArgs
351 {
352   IVIDDEC3_InArgs viddec3InArgs;
353   XDAS_Int32 lateAcquireArg;
354 } IH264VDEC_InArgs;
355 /**
356  ******************************************************************************
357  *  @struct IH264VDEC_OutArgs
358  *
359  *  @brief  This structure defines the run time output arguments for
360  *          IH264VDEC::process function
361  *
362  *  @param  viddec3OutArgs : XDM Base class OutArgs structure  (see ividdec3.h)
363  *
364  *  @param  decryptedKey : This variable contains watermark decrypted key.
365  ******************************************************************************
366 */
367 typedef struct IH264VDEC_OutArgs
368 {
369   IVIDDEC3_OutArgs viddec3OutArgs;
370   XDAS_UInt32 decryptedKey;
371 } IH264VDEC_OutArgs;
372
373 /*
374  *  ======== IH264VDEC_Handle ========
375  *  This handle is used to reference all H264VDEC instance objects
376  */
377 typedef struct IH264VDEC_Obj *IH264VDEC_Handle;
378
379 /**
380  ******************************************************************************
381  *  @struct IH264VDEC_ProcessParams
382  *
383  *  @brief  This structure defines the container for holding the channel
384  *          information.
385  *
386  *  @param  handle : Handle for the channel.
387  *  @param  inBufs : Input Buffers for the Channel.
388  *  @param  outBufs : Output Buffers for the Channel.
389  *  @param  inArgs : Input Arguments for the Channel.
390  *  @param  outArgs : Output Arguments for the Channel.
391  ******************************************************************************
392 */
393 typedef struct IH264VDEC_ProcessParams
394 {
395   IH264VDEC_Handle handle;
396   XDM2_BufDesc *inBufs;
397   XDM2_BufDesc *outBufs;
398   IVIDDEC3_InArgs *inArgs;
399   IVIDDEC3_OutArgs *outArgs;
400 } IH264VDEC_ProcessParams;
401
402 /**
403  ******************************************************************************
404  *  @struct IH264VDEC_ProcessParamsList
405  *
406  *  @brief  This structure defines the container for holding the N channel
407  *          information.
408  *
409  *  @param  numEntries : Number of channels in the given container.
410  *  @param  processParams : Array holding the Process Parameters.
411  ******************************************************************************
412 */
413 typedef struct IH264VDEC_ProcessParamsList
414 {
415   XDAS_Int32 numEntries ;
416   IH264VDEC_ProcessParams processParams[IH264VDEC_MAX_LENGTH_PROCESS_LIST];
417 } IH264VDEC_ProcessParamsList ;
418
419 /**
420  ******************************************************************************
421  *  @struct IH264VDEC_Fxns
422  *
423  *  @brief  This structure contains pointers to all the XDAIS and XDM interface
424  *          functions
425  *
426  *  @param  ividdec3 : This structure contains pointers to all the XDAIS and
427  *                     XDM interface functions
428  ******************************************************************************
429 */
430 typedef struct IH264VDEC_Fxns
431 {
432   IVIDDEC3_Fxns ividdec3;
433   XDAS_Int32 (*processMulti) (IH264VDEC_ProcessParamsList *processList);
434 } IH264VDEC_Fxns;
435
436
437
438 /*
439  *  ======== IH264VDEC_Cmd ========
440  *  This structure defines the control commands for the IMP4VENC module.
441  */
442 typedef IVIDDEC3_Cmd IH264VDEC_Cmd;
443
444 /*
445  *  ======== IH264VDEC_PARAMS ========
446  *  Default parameter values for H264VDEC instance objects
447  */
448 extern const IH264VDEC_Params IH264VDEC_PARAMS;
449 /*
450  *  ======== IH264VDEC_DYNAMICPARAMS ========
451  *  Default dynamic parameter values for H264VDEC instance objects
452  */
453 extern const IH264VDEC_DynamicParams IH264VDEC_TI_DYNAMICPARAMS;
454
455
456 /**
457  ******************************************************************************
458  *  @enum       IH264VDEC_deblockFilterMode
459  *  @brief      This enum indicates the mode of deblocking filter
460  *
461  ******************************************************************************
462 */
463 typedef enum
464 {
465   IH264VDEC_DEBLOCK_DISABLE_NONE = 0,
466   /**
467   * Perform deblocking across all edges
468   */
469   IH264VDEC_DEBLOCK_DISABLE_ALL,
470   /**
471   * Disable deblocking across all edges
472   */
473   IH264VDEC_DEBLOCK_DISABLE_SLICE_EDGE,
474   /**
475   * Disable deblocking only at slice edges. Internal to slice,
476   * edges are deblocked.
477   */
478   IH264VDEC_DEBLOCK_DEFAULT
479   /**
480   * Perform deblocking as controlled by disable_deblocking_filter_idc of
481   * the bitstream
482   */
483 } IH264VDEC_deblockFilterMode;
484
485 /**
486  ******************************************************************************
487  *  @enum       IH264VDEC_temporalDirModePred
488  *  @brief      This enum indicates whether or not to decode slices with
489  *              temporal direct prediction
490  *
491  ******************************************************************************
492 */
493 typedef enum
494 {
495   IH264VDEC_DISABLE_TEMPORALDIRECT = 0,
496   /**
497   *  Do not decode slice with temporal direct
498   */
499   IH264VDEC_ENABLE_TEMPORALDIRECT
500   /**
501   * Decode slice with temporal direct
502   */
503 } IH264VDEC_temporalDirModePred;
504
505 /**
506  ******************************************************************************
507  *  @enum       IH264VDEC_detectCabacAlignErr
508  *  @brief      This enum indicates whether or not to detect the cabac
509  *              alignment errors in MB-decoding
510  *
511  ******************************************************************************
512 */
513 typedef enum
514 {
515   IH264VDEC_DISABLE_CABACALIGNERR_DETECTION = 0,
516   /**
517   *  Do not detect the CABAC alignment errors
518   */
519   IH264VDEC_ENABLE_CABACALIGNERR_DETECTION
520   /**
521   * Detect the CABAC alignment errors
522   */
523 } IH264VDEC_detectCabacAlignErr;
524
525 /**
526  ******************************************************************************
527  *  @enum       IH264VDEC_detectIPCMAlignErr
528  *  @brief      This enum indicates whether or not to detect the IPCM
529  *              alignment errors in MB-decoding
530  *
531  ******************************************************************************
532 */
533 typedef enum
534 {
535   IH264VDEC_DISABLE_IPCMALIGNERR_DETECTION = 0,
536   /**
537   *  Do not detect the IPCM alignment errors
538   */
539   IH264VDEC_ENABLE_IPCMALIGNERR_DETECTION
540   /**
541   * Detect the IPCM alignment errors
542   */
543 } IH264VDEC_detectIPCMAlignErr;
544
545 /**
546  ******************************************************************************
547  *  @enum       IH264VDEC_errConcealmentMode
548  *  @brief      This enum indicates whether to apply error concealment or not
549  *
550  ******************************************************************************
551 */
552 typedef enum
553 {
554   IH264VDEC_NO_CONCEALMENT = 0,
555   /**
556   *  do not apply error concealment
557   */
558   IH264VDEC_APPLY_CONCEALMENT
559   /**
560   * apply error concealment
561   */
562 } IH264VDEC_errConcealmentMode;
563
564 /**
565  ******************************************************************************
566  *  @enum       IH264VDEC_LevelId
567  *
568  *  @brief      This enum indicates preset level numbers for H.264 Decoder
569  *
570  *  The application should set the level in the create time parameters.
571  ******************************************************************************
572 */
573 typedef enum {
574  IH264VDEC_LEVEL1 = 0,
575   /** 0: Level 1
576   */
577  IH264VDEC_LEVEL1B,
578   /** 1: Level 1.b
579   */
580  IH264VDEC_LEVEL11,
581   /** 2: Level 1.1
582   */
583  IH264VDEC_LEVEL12,
584   /** 3: Level 1.2
585   */
586  IH264VDEC_LEVEL13,
587   /** 4: Level 1.3
588   */
589  IH264VDEC_LEVEL2,
590   /** 5: Level 2
591   */
592  IH264VDEC_LEVEL21,
593   /** 6: Level 2.1
594   */
595  IH264VDEC_LEVEL22,
596   /** 7: Level 2.2
597   */
598  IH264VDEC_LEVEL3,
599   /** 8: Level 3
600   */
601  IH264VDEC_LEVEL31,
602   /** 9: Level 3.1
603   */
604  IH264VDEC_LEVEL32,
605   /** 10: Level 3.2
606   */
607  IH264VDEC_LEVEL4,
608   /** 11: Level 4
609   */
610  IH264VDEC_LEVEL41,
611   /** 12: Level 4.1
612   */
613  IH264VDEC_LEVEL42,
614   /** 13: Level 4.2
615   */
616  IH264VDEC_LEVEL5,
617   /** 14: Level 5
618   */
619  IH264VDEC_LEVEL51,
620   /** 15: Level 5.1
621   */
622 IH264VDEC_MAXLEVELID = IH264VDEC_LEVEL51
623   /** 15: Maximum Level ID that can be configured
624   */
625 } IH264VDEC_LevelId;
626
627 /**
628  ******************************************************************************
629  *  @enum       IH264VDEC_ProfileId
630  *
631  *  @brief      This enum indicates preset profiles for H.264 Decoder
632  *
633  *  The application should set the profile in the create time parameters.
634  *  In the current implementation, the codec ignores this value.
635  ******************************************************************************
636 */
637 typedef enum {
638  IH264VDEC_PROFILE_BASELINE = 0,
639   /** 0: Baseline profile
640   */
641  IH264VDEC_PROFILE_MAIN,
642   /** 1: Main profile
643   */
644  IH264VDEC_PROFILE_HIGH,
645   /** 2: High profile
646   */
647  IH264VDEC_PROFILE_ANY
648   /** 3: As decoded from the bitstream. This is needed to pass compliance.
649   */
650 } IH264VDEC_ProfileId;
651
652 /**
653  ******************************************************************************
654  *  @enum       IH264VDEC_debugTraceLevel
655  *
656  *  @brief      This enum indicates the debug trace levels for H.264 Decoder
657  *
658  *  The application should set this in the create time parameters.
659  ******************************************************************************
660 */
661 typedef enum {
662  IH264VDEC_DEBUGTRACE_LEVEL0 = 0,
663   /** 0: Debug Trace Level 0
664   */
665  IH264VDEC_DEBUGTRACE_LEVEL1,
666   /** 1: Debug Trace Level 1
667   */
668  IH264VDEC_DEBUGTRACE_LEVEL2,
669   /** 2: Debug Trace Level 2
670   */
671  IH264VDEC_DEBUGTRACE_LEVEL3
672   /** 2: Debug Trace Level 3
673   */
674 } IH264VDEC_debugTraceLevel;
675
676 /**
677  ******************************************************************************
678  *  @enum       IH264VDEC_MetadataType
679  *  @brief      This enum indicates Meta Data types for H.264 Decoder
680  *
681  *  The way to get meta data from decoder is via outBufs of the decoder during
682  *  process call.
683  ******************************************************************************
684 */
685 typedef enum
686 {
687   IH264VDEC_PARSED_SEI_DATA = XDM_CUSTOMENUMBASE,
688   /** Write out Parsed SEI data
689   *   By setting to this value(for IVIDDEC3_Params::metadataType[i])
690   *   the codec can  can provide the parsed SEI metadata
691   */
692
693   IH264VDEC_ENCODED_SEI_DATA,
694   /** Write out Encoded (compressed) SEI data
695   *
696   */
697
698   IH264VDEC_PARSED_VUI_DATA,
699   /** Write out Parsed VUI data
700   *   By setting to this value(for IVIDDEC3_Params::metadataType[i])
701   *   the codec can  can provide the parsed VUI metadata
702   */
703   IH264VDEC_ENCODED_VUI_DATA
704   /** Write out Encoded (compressed) VUI data
705   *
706   */
707
708 } IH264VDEC_MetadataType;
709
710 /**
711  ******************************************************************************
712  *  @enum       IH264VDEC_DataMode
713  *  @brief      Describes the input slice format provided to decoder.
714  *              This enumeration type is used by App to specify codec
715  *              input slice format (NAL/Bytestream) type
716  *
717  ******************************************************************************
718 */
719
720 typedef enum
721 {
722   IH264VDEC_NALUNIT_MODE   = XDM_CUSTOMENUMBASE
723   /** data in NAL stream format
724   *
725   */
726 } IH264VDEC_DataMode;
727
728 /**
729  ******************************************************************************
730  *  @enum       IH264VDEC_bitStreamFormat
731  *  @brief      Input bit stream format provided to decoder.
732  *              This enumeration type is used by App to specify codec
733  *              input bit stream format (NAL/Bytestream) type
734  *
735  ******************************************************************************
736 */
737 typedef enum
738 {
739   IH264VDEC_BYTE_STREAM_FORMAT = 0,
740   /** Input data is in Byte stream format (stream with start code).
741   *
742   */
743   IH264VDEC_NAL_UNIT_FORMAT
744   /** Input data is in NAL stream format (No start code)
745   *
746   */
747 } IH264VDEC_bitStreamFormat;
748
749 /**
750  ******************************************************************************
751  *  @enum       IH264VDEC_mbErrStatus
752  *  @brief      This enum indicates if a MB was in error or not
753  *
754  ******************************************************************************
755 */
756 typedef enum
757 {
758   IH264VDEC_MB_NOERROR = 0,
759   /**
760   *  MB was non-erroneous
761   */
762   IH264VDEC_MB_ERROR = 1
763   /**
764   * MB was erroneous
765   */
766 } IH264VDEC_mbErrStatus;
767
768 /**
769  ******************************************************************************
770  *  @enum       IH264VDEC_ErrorBit
771  *  @brief      H.264 Error Codes: Delaration of h264 decoder specific Error
772  *              Codes.
773  *  @details    Error status is communicated trough a 32 bit word. In this,
774  *              Error Bits 8 to 15 are used to indicate the XDM error bits. See
775  *              XDM_ErrorBit definition in xdm.h. Other bits in a 32 bit word
776  *              can be used to signal any codec specific errors. The staructure
777  *              below enumerates the H264 decoder specific error bits used.
778  *              The algorithm can set multiple bits to 1 depending on the error
779  *              condition
780  ******************************************************************************
781 */
782 typedef enum
783 {
784   IH264VDEC_ERR_NOSLICE = 0,
785     /**<
786     * Bit 0
787     *  1 - No error-free slice header detected in the frame
788     *  0 - Ignore
789     */
790   IH264VDEC_ERR_SPS,
791     /**<
792     * Bit 1
793     *  1 - Error in SPS parsing
794     *  0 - Ignore
795     */
796   IH264VDEC_ERR_PPS,
797     /**<
798     * Bit 2
799     *  1 -  Error during PPS parsing
800     *  0 - Ignore
801     */
802   IH264VDEC_ERR_SLICEHDR,
803     /**<
804     * Bit 3
805     *  1 - Error in slice header parsing
806     *  0 - Ignore
807     */
808   IH264VDEC_ERR_MBDATA,
809     /**<
810     * Bit 4
811     *  1 -  Error in MB data parsing
812     *  0 - Ignore
813     */
814   IH264VDEC_ERR_UNAVAILABLESPS,
815     /**<
816     * Bit 5
817     *  1 - SPS rferred in the header is not available.
818     *  0 - Ignore
819     */
820   IH264VDEC_ERR_UNAVAILABLEPPS,
821     /**<
822     * Bit 6
823     *  1 -  PPS rferred in the header is not available
824     *  0 - Ignore
825     */
826   IH264VDEC_ERR_INVALIDPARAM_IGNORE,
827     /**<
828     * Bit 7
829     *  1 -  Invalid Parameter
830     *  0 - Ignore
831     */
832   IH264VDEC_ERR_UNSUPPFEATURE = 16,
833       /**<
834     * Bit 16
835     *  1 -  Unsupported feature
836     *  0 - Ignore
837     */
838   IH264VDEC_ERR_METADATA_BUFOVERFLOW,
839       /**<
840     * Bit 17
841     *  1 - SEI Buffer overflow detected
842     *  0 - Ignore
843     */
844   IH264VDEC_ERR_STREAM_END,
845     /**<
846     * Bit 18
847     *  1 - End of stream reached
848     *  0 - Ignore
849     */
850   IH264VDEC_ERR_NO_FREEBUF,
851     /**<
852     * Bit 19
853     *  1 - No free buffers available for reference storing reference frame
854     *  0 - Ignore
855     */
856   IH264VDEC_ERR_PICSIZECHANGE,
857     /**<
858     * Bit 20
859     *  1 - Change in resolution detected
860     *  0 - Ignore
861     */
862   IH264VDEC_ERR_UNSUPPRESOLUTION,
863     /**<
864     * Bit 21
865     *  1 - Unsupported resolution by the decoder
866     *  0 - Ignore
867     */
868   IH264VDEC_ERR_NUMREF_FRAMES,
869     /**<
870     * Bit 22
871     *  1 - maxNumRefFrames parameter is not compliant to stream properties
872     *     (does not comply to stream requirements).
873     *  0 - Ignore
874     */
875   IH264VDEC_ERR_INVALID_MBOX_MESSAGE,
876     /**<
877     * Bit 23
878     *  1 - Invalid (unexpected) mail box message received by M3 or IVAHD
879     *  0 - Ignore
880     */
881   IH264VDEC_ERR_DATA_SYNC,
882     /**<
883     * Bit 24
884     *  1 - In datasync enable mode, the input supplied is wrong
885     *  0 - Ignore
886     */
887   IH264VDEC_ERR_MISSINGSLICE,
888     /**<
889     * Bit 25
890     *  1 - Missing slice in a frame
891     *  0 - Ignore
892     */
893   IH264VDEC_ERR_INPUT_DATASYNC_PARAMS,
894     /**<
895     * Bit 26
896     *  1 - Input datasync enable mode, the input parameter is wrong
897     *  0 - Ignore
898     */
899   IH264VDEC_ERR_HDVICP2_IMPROPER_STATE,
900     /**<
901     * Bit 27
902     *  1 - IVAHD standby failed or couldn't turn-on/off the IP's clock
903     *      or HDVICP reset failed.
904     *  0 - Ignore
905     */
906   IH264VDEC_ERR_TEMPORAL_DIRECT_MODE,
907     /**<
908     * Bit 28
909     *  1 - Temporal direct mode is present in the bits stream
910     *      when disableTemporalDirect parameter (create time) is set.
911     *  0 - Ignore
912     */
913   IH264VDEC_ERR_DISPLAYWIDTH,
914     /**<
915     * Bit 29
916     *  1 - DisplayWidth is less than the Image width + Padded width.
917     *  0 - Ignore
918     */
919   IH264VDEC_ERR_NOHEADER,
920     /**<
921     * Bit 30
922     *  1 - Indicates that no SPS/PPS header is decoded in the current
923     *      process call.
924     * (or) It indicates that watermark SEI data is unavailable even though
925     *      watermark parameter is enabled.
926     *  0 - Ignore
927     */
928   IH264VDEC_ERR_GAPSINFRAMENUM
929     /**<
930     * Bit 31
931     *  1 - Indicates that a gap is detected in frame_num for a stream with
932     *      gaps_in_frame_num_value_allowed_flag 1 in SPS.
933     *  0 - Ignore
934     */
935 } IH264VDEC_ErrorBit;
936 /**
937  ******************************************************************************
938  *  @enum       IH264VDEC_svcExtension
939  *  @brief      This enum indicates whether or not to support SVC extension
940  *
941  ******************************************************************************
942 */
943 typedef enum
944 {
945   IH264VDEC_DISABLE_SVCEXTENSION = 0,
946   /**
947   * Do not support SVC extension
948   */
949   IH264VDEC_ENABLE_SVCEXTENSION
950   /**
951   * Support SVC extension
952   */
953 } IH264VDEC_svcExtension;
954
955 /**
956  ******************************************************************************
957  *  @enum       IH264VDEC_eLayerDecodeMode
958  *  @brief      This enum indicates whether or not to support decoding of
959  *              enhancement layer
960  *
961  ******************************************************************************
962 */
963 typedef enum
964 {
965   IH264VDEC_DISABLE_ELAYERDECODE = 0,
966   /**
967   * Decode base layer only. Do not decode enhancement layer
968   */
969   IH264VDEC_ENABLE_ELAYERDECODE
970   /**
971   * Support decoding of enhancement layer
972   */
973 } IH264VDEC_ELAYERDECODEMODE;
974
975
976 /**
977  ******************************************************************************
978  *  @enum       IH264VDEC_dependancyLayerIds
979  *  @brief      This enum indicates the dependancy layer IDs.
980  *
981  ******************************************************************************
982 */
983 typedef enum
984 {
985   IH264VDEC_TARGET_DID_DEFAULT = -1,
986   /**
987   * Default dependancy layer ID.
988   */
989   IH264VDEC_TARGET_DID_ZERO = 0,
990   /**
991   * Dependancy layer ID = 0
992   */
993   IH264VDEC_TARGET_DID_ONE,
994   /**
995   * Dependancy layer ID = 1
996   */
997   IH264VDEC_TARGET_DID_TWO,
998   /**
999   * Dependancy layer ID = 2
1000   */
1001   IH264VDEC_TARGET_DID_THREE,
1002   /**
1003   * Dependancy layer ID = 3
1004   */
1005   IH264VDEC_TARGET_DID_FOUR,
1006   /**
1007   * Dependancy layer ID = 4
1008   */
1009   IH264VDEC_TARGET_DID_FIVE,
1010   /**
1011   * Dependancy layer ID = 5
1012   */
1013   IH264VDEC_TARGET_DID_SIX,
1014   /**
1015   * Dependancy layer ID = 6
1016   */
1017   IH264VDEC_TARGET_DID_SEVEN,
1018   /**
1019   * Dependancy layer ID = 7
1020   */
1021   IH264VDEC_TARGET_DID_MAX =
1022   IH264VDEC_TARGET_DID_SEVEN
1023   /**
1024   * Dependancy layer max ID = 7
1025   */
1026   } IH264VDEC_dependancyLayerIds;
1027
1028 /**
1029  ******************************************************************************
1030  *  @enum       IH264VDEC_temporalLayerIds
1031  *  @brief      This enum indicates the temporal layer IDs for svc.
1032  *
1033  ******************************************************************************
1034 */
1035 typedef enum
1036 {
1037   IH264VDEC_TARGET_TID_DEFAULT = -1,
1038   /**
1039   * Default Temporal layer ID.
1040   */
1041   IH264VDEC_TARGET_TID_ZERO = 0,
1042   /**
1043   * Temporal layer ID = 0
1044   */
1045   IH264VDEC_TARGET_TID_ONE,
1046   /**
1047   * Temporal layer ID = 1
1048   */
1049   IH264VDEC_TARGET_TID_TWO,
1050   /**
1051   * Temporal layer ID = 2
1052   */
1053   IH264VDEC_TARGET_TID_THREE,
1054   /**
1055   * Temporal layer ID = 3
1056   */
1057   IH264VDEC_TARGET_TID_FOUR,
1058   /**
1059   * Temporal layer ID = 4
1060   */
1061   IH264VDEC_TARGET_TID_FIVE,
1062   /**
1063   * Temporal layer ID = 5
1064   */
1065   IH264VDEC_TARGET_TID_SIX,
1066   /**
1067   * Temporal layer ID = 6
1068   */
1069   IH264VDEC_TARGET_TID_SEVEN,
1070   /**
1071   * Temporal layer ID = 7
1072   */
1073   IH264VDEC_TARGET_TID_MAX =
1074   IH264VDEC_TARGET_TID_SEVEN
1075   /**
1076   * Temporal layer max ID = 7
1077   */
1078   } IH264VDEC_temporalLayerIds;
1079
1080 /**
1081  ******************************************************************************
1082  *  @enum       IH264VDEC_qualityLayerIds
1083  *  @brief      This enum indicates the quality layer IDs for svc.
1084  *
1085  ******************************************************************************
1086 */
1087 typedef enum
1088 {
1089   IH264VDEC_TARGET_QID_DEFAULT = -1,
1090   /**
1091   * Default Quality layer ID.
1092   */
1093   IH264VDEC_TARGET_QID_ZERO = 0,
1094   /**
1095   * Quality layer ID = 0
1096   */
1097   IH264VDEC_TARGET_QID_ONE,
1098   /**
1099   * Quality layer ID = 1
1100   */
1101   IH264VDEC_TARGET_QID_TWO,
1102   /**
1103   * Quality layer ID = 2
1104   */
1105   IH264VDEC_TARGET_QID_THREE,
1106   /**
1107   * Quality layer ID = 3
1108   */
1109   IH264VDEC_TARGET_QID_FOUR,
1110   /**
1111   * Quality layer ID = 4
1112   */
1113   IH264VDEC_TARGET_QID_FIVE,
1114   /**
1115   * Quality layer ID = 5
1116   */
1117   IH264VDEC_TARGET_QID_SIX,
1118   /**
1119   * Quality layer ID = 6
1120   */
1121   IH264VDEC_TARGET_QID_SEVEN,
1122   /**
1123   * Quality layer ID = 7
1124   */
1125   IH264VDEC_TARGET_QID_EIGHT,
1126   /**
1127   * Quality layer max ID = 8
1128   */
1129   IH264VDEC_TARGET_QID_NINE,
1130   /**
1131   * Quality layer max ID = 9
1132   */
1133   IH264VDEC_TARGET_QID_TEN,
1134   /**
1135   * Quality layer max ID = 10
1136   */
1137   IH264VDEC_TARGET_QID_ELEVEN,
1138   /**
1139   * Quality layer max ID = 11
1140   */
1141   IH264VDEC_TARGET_QID_TWELVE,
1142   /**
1143   * Quality layer max ID = 12
1144   */
1145   IH264VDEC_TARGET_QID_THIRTEEN,
1146   /**
1147   * Quality layer max ID = 13
1148   */
1149   IH264VDEC_TARGET_QID_FOURTEEN,
1150   /**
1151   * Quality layer max ID = 14
1152   */
1153   IH264VDEC_TARGET_QID_FIFTEEN,
1154   /**
1155   * Quality layer max ID = 15
1156   */
1157   IH264VDEC_TARGET_QID_MAX =
1158   IH264VDEC_TARGET_QID_FIFTEEN
1159   /**
1160   * Quality layer max ID = 15
1161   */
1162 } IH264VDEC_qualityLayerIds;
1163
1164 /**
1165  ******************************************************************************
1166  *  @enum       IH264VDEC_seiOverFlowFlag
1167  *  @brief      This enum indicates user data reg/unreg SEI overFlowFlag values
1168  *
1169  ******************************************************************************
1170 */
1171 typedef enum
1172 {
1173   IH264VDEC_PAYLOAD_NO_OVERFLOW = 0,
1174   /**
1175   * Indicates there is no overflow occured in user data reg or unreg sei
1176   */
1177   IH264VDEC_PAYLOAD_OVERFLOW
1178   /**
1179   * Indicates there is a overflow in user data reg or unreg sei
1180   */
1181 } IH264VDEC_seiOverFlowFlag;
1182
1183 /**
1184  ******************************************************************************
1185  *  @enum       IH264VDEC_enableDualOutput
1186  *  @brief      This enum is used to enable/disable dual output feature
1187  *
1188  ******************************************************************************
1189 */
1190 typedef enum
1191 {
1192   IH264VDEC_DUALOUTPUT_DISABLE = 0,
1193   /**
1194   * Indicates that dual output is disabled
1195   */
1196   IH264VDEC_DUALOUTPUT_ENABLE
1197   /**
1198   * Indicates that dual output is enabled
1199   */
1200 } IH264VDEC_enableDualOutput;
1201
1202 /**
1203  ******************************************************************************
1204  *  @enum       IH264VDEC_processCallLevel
1205  *  @brief      This enum indicates whether process call is done at a field
1206  *              level or frame level
1207  *
1208  ******************************************************************************
1209 */
1210 typedef enum
1211 {
1212   IH264VDEC_FIELDLEVELPROCESSCALL = 0,
1213   /**
1214   * Indicates that process call should be at field level
1215   */
1216   IH264VDEC_FRAMELEVELPROCESSCALL
1217   /**
1218   * Indicates that process call should be at frame level
1219   */
1220 } IH264VDEC_processCallLevel;
1221
1222 /**
1223  ******************************************************************************
1224  *  @enum       IH264VDEC_enableWaterMark
1225  *  @brief      This enum is used to enable/disable Watermark feature
1226  *
1227  ******************************************************************************
1228 */
1229 typedef enum
1230 {
1231   IH264VDEC_WATERMARK_DISABLE = 0,
1232   /**
1233   * Indicates that Watermark is disabled
1234   */
1235   IH264VDEC_WATERMARK_ENABLE
1236   /**
1237   * Indicates that Watermark is enabled
1238   */
1239 } IH264VDEC_enableWaterMark;
1240
1241 /**
1242  ******************************************************************************
1243  *  @enum       IH264VDEC_decodeFrameType
1244  *  @brief      This enum is used to request decoder to decode only I, IP or ALL
1245  *              frame types
1246  ******************************************************************************
1247 */
1248 typedef enum
1249 {
1250   IH264VDEC_DECODE_ALL = 0,
1251   /**
1252   * Indicates that all type of frames decoding is enabled
1253   */
1254    IH264VDEC_DECODE_IP_ONLY = 1,
1255   /**
1256   * Indicates that only I/IDR and P frames decoding is enabled
1257   */
1258    IH264VDEC_DECODE_I_ONLY = 2
1259   /**
1260   * Indicates that only I/IDR frames decoding is enabled
1261   */
1262 } IH264VDEC_decodeFrameType;
1263
1264 /**
1265  *  Macro definitions required for SEI support: HRD sequence parameter set
1266  */
1267 #define IH264VDEC_MAXCPBCNT        32
1268
1269 /**
1270  *  Macro definitions required for SEI support: HRD sequence parameter set
1271  */
1272 #define IH264VDEC_MAXUSERDATA_PAYLOAD 300
1273
1274 /**
1275  ******************************************************************************
1276  *  @struct IH264VDEC_HrdParams
1277  *
1278  *  @brief  This structure contains the HRD parameter elements.
1279  *
1280  *  @param  cpb_cnt_minus1 : Number of alternative CPB specifications in the
1281  *                           bit-stream
1282  *  @param  bit_rate_scale : Together with bit_rate_value[i], it specifies the
1283  *                           maximum input bit-rate for the ith CPB.
1284  *  @param  cpb_size_scale : Together with cpb_size_value[i], specifies the
1285  *                           maximum CPB size for the ith CPB.
1286  *  @param  bit_rate_value_minus1[IH264VDEC_MAXCPBCNT] :Maximum input bitrate
1287  *                                                     for the ith CPB
1288  *  @param  cpb_size_value_minus1[IH264VDEC_MAXCPBCNT] :Maximum CPB size for the
1289  *                                                     ith CPB
1290  *  @param  vbr_cbr_flag[IH264VDEC_MAXCPBCNT] :Specifies the ith CPB is operated
1291  *                          in Constant Bit-rate mode or variable bit-rate mode
1292  *  @param  initial_cpb_removal_delay_length_minus1 :Length in bits of
1293  *                                   initial_cpb_removal_length syntax element
1294  *  @param  cpb_removal_delay_length_minus1 :Length in bits of
1295  *                                      cpb_removal_delay_length syntax element
1296  *  @param  dpb_output_delay_length_minus1 :Length in bits of
1297  *                                       dpb_output_delay_length syntax element
1298  *  @param  time_offset_length : Length in bits of time_offset syntax element
1299  ******************************************************************************
1300 */
1301 typedef struct IH264VDEC_HrdParams
1302 {
1303   XDAS_UInt32  cpb_cnt_minus1;
1304   XDAS_UInt8   bit_rate_scale;
1305   XDAS_UInt8   cpb_size_scale;
1306   XDAS_UInt32  bit_rate_value_minus1[IH264VDEC_MAXCPBCNT];
1307   XDAS_UInt32  cpb_size_value_minus1[IH264VDEC_MAXCPBCNT];
1308   XDAS_UInt8   vbr_cbr_flag[IH264VDEC_MAXCPBCNT];
1309   XDAS_UInt8   initial_cpb_removal_delay_length_minus1;
1310   XDAS_UInt8   cpb_removal_delay_length_minus1;
1311   XDAS_UInt8   dpb_output_delay_length_minus1;
1312   XDAS_UInt8   time_offset_length;
1313 } IH264VDEC_HrdParams;
1314
1315 /**
1316  ******************************************************************************
1317  *  @struct IH264VDEC_SVCVuiParams
1318  *
1319  *  @brief   This structure contains VUI  message syntax elements for scalable
1320  *           video stream
1321  *
1322  *  @param  parsed_flag :1 - Indicates that in the current process call, c
1323  *                            contents of the structure is updated
1324  *                       0 - Indicates contents of the structure is not updated
1325  *
1326  *  @param  svc_vui_ext_num_entries_minus1:(svc_vui_ext_num_entries_minus1 + 1)
1327  *                      specifies the number of information
1328  *                        entries that are present in the SVC
1329  *                      VUI parameters extension syntax
1330  *                        structure
1331  *  @param  svc_vui_ext_dependency_id:indicate the max value of DId for the
1332  *                    i-th subset of coded video sequences
1333  *  @param  svc_vui_ext_quality_id:indicate the max value of QId for the
1334  *                    i-th subset of coded video sequences
1335  *  @param  svc_vui_ext_temporal_id: indicate the max value of TId for the
1336  *                    i-th subset of coded video sequences
1337  *  @param  svc_vui_ext_timing_info_present_flag: Flag to tells that
1338  *                          svc_vui_ext_num_units_in_tick,
1339  *                          svc_vui_ext_time_scale,
1340  *                          svc_vui_ext_fixed_frame_rate_flag
1341  *                          are present for current coded
1342  *                          sequence or not.
1343  *  @param  svc_vui_ext_num_units_in_tick: specifies the value of
1344  *                                         num_units_in_tick
1345  *  @param  svc_vui_ext_time_scale: specifies the value of time_scale
1346  *  @param  svc_vui_ext_fixed_frame_rate_flag: specifies the value of
1347  *                         fixed_frame_rate_flag
1348  *  @param  svc_vui_ext_nal_hrd_parameters_present_flag:specifies the
1349  *                value of nal_hrd_parameters_present_flag
1350  *  @param  svc_vui_ext_vcl_hrd_parameters_present_flag: ] specifies the
1351  *                value of vcl_hrd_parameters_present_flag
1352  *  @param  svc_vui_ext_low_delay_hrd_flag: specifies the value
1353  *          of low_delay_hrd_flag
1354  *  @param  svc_vui_ext_pic_struct_present_flag: specifies the value
1355  *           of pic_struct_present_flag
1356  *
1357  ******************************************************************************
1358 */
1359
1360 typedef struct sIH264VDEC_SVCVuiParams
1361 {
1362   XDAS_UInt32 parsed_flag;
1363   XDAS_UInt16 svc_vui_ext_num_entries_minus1;
1364   XDAS_UInt16 svc_vui_ext_dependency_id;
1365   XDAS_UInt16 svc_vui_ext_quality_id;
1366   XDAS_UInt16 svc_vui_ext_temporal_id;
1367   XDAS_UInt16 svc_vui_ext_timing_info_present_flag;
1368   XDAS_UInt32 svc_vui_ext_num_units_in_tick;
1369   XDAS_UInt32 svc_vui_ext_time_scale;
1370   XDAS_UInt16 svc_vui_ext_fixed_frame_rate_flag;
1371   XDAS_UInt16 svc_vui_ext_nal_hrd_parameters_present_flag;
1372   XDAS_UInt16 svc_vui_ext_vcl_hrd_parameters_present_flag;
1373   XDAS_UInt16 svc_vui_ext_low_delay_hrd_flag;
1374   XDAS_UInt16 svc_vui_ext_pic_struct_present_flag;
1375 } IH264VDEC_SVCVuiParams;
1376
1377 /**
1378  ******************************************************************************
1379  *  @struct IH264VDEC_VuiParams
1380  *
1381  *  @brief  This structure contains the VUI Sequence Parameter elements.
1382  *
1383  *  @param  parsed_flag :1 - Indicates that in the current process call, c
1384  *                            contents of the structure is updated
1385  *                       0 - Indicates contents of the structure is not updated
1386  *  @param  aspect_ratio_info_present_flag :Indicates whether aspect ratio idc
1387  *                                          is present or not.
1388  *  @param  aspect_ratio_idc : Aspect ratio of Luma samples
1389  *  @param  sar_width : Horizontal size of sample aspect ratio
1390  *  @param  sar_height : Vertical size of sample aspect ratio
1391  *  @param  overscan_info_present_flag : Cropped decoded pictures are suitable
1392  *                                       for display or not.
1393  *  @param  overscan_appropriate_flag : Overscan_appropriate_flag
1394  *  @param  video_signal_type_present_flag : Flag indicates whether
1395  *          video_format, video_full_range_flag and colour_description_present_
1396  *          flag are present or not
1397  *  @param  video_format :Video format indexed by a table. For example,PAL/NTSC
1398  *  @param  video_full_range_flag : Black level, luma and chroma ranges. It
1399  *                                  should be used for BT.601 compliance
1400  *  @param  colour_description_present_flag:Indicates whether colour_primaries,
1401  *                transfer_characteristics and matrix_coefficients are present.
1402  *  @param  colour_primaries :Chromaticity co-ordinates of source primaries
1403  *  @param  transfer_characteristics :Opto-electronic transfer characteristics
1404  *          of the source picture
1405  *  @param  matrix_coefficients :Matrix coefficients for deriving Luma and
1406  *          chroma data from RGB components.
1407  *  @param  chroma_location_info_present_flag : Flag indicates whether
1408  *          chroma_sample_loc_type_top field and chroma_sample_loctype
1409  *          bottom_field are present.
1410  *  @param  chroma_sample_loc_type_top_field : Location of chroma_sample top
1411  *          field
1412  *  @param  chroma_sample_loc_type_bottom_field :Location of chroma_sample
1413  *          bottom field
1414  *  @param  timing_info_present_flag :Indicates whether num_units_in_tick,
1415  *          time_scale, and fixed_frame_rate_flag are present.
1416  *  @param  num_units_in_tick :Number of units of a clock that corresponds to 1
1417  *          increment of a clock tick counter
1418  *  @param  time_scale :Indicates actual increase in time for 1 increment of a
1419  *          clock tick counter
1420  *  @param  fixed_frame_rate_flag :Indicates how the temporal distance between
1421  *          HRD output times of any two output pictures is constrained
1422  *  @param  nal_hrd_parameters_present_flag :Indicates whether
1423  *          nal_hrd_parameters are present
1424  *  @param  nal_hrd_pars : NAL HRD Parameters
1425  *  @param  vcl_hrd_parameters_present_flag :Indicates whether
1426  *          vcl_hrd_parameters are present
1427  *  @param  vcl_hrd_pars : VCL HRD Parameters
1428  *  @param  low_delay_hrd_flag :HRD operational mode as in Annex C of the
1429  *          standard
1430  *  @param  pic_struct_present_flag :Indicates whether picture timing SEI
1431  *          messages are present
1432  *  @param  bitstream_restriction_flag :Indicates if the bit-stream restriction
1433  *          parameters are present
1434  *  @param  motion_vectors_over_pic_boundaries_flag :Specifies whether motion
1435  *          vectors can point to regions outside the picture boundaries
1436  *  @param  max_bytes_per_pic_denom :Maximum number of bytes not exceeded by
1437  *          the sum of sizes of all VCL NAL units of a single coded picture
1438  *  @param  max_bits_per_mb_denom :Maximum number of bits taken by any coded MB
1439  *  @param  log2_max_mv_length_vertical :Maximum value of any motion vector\92s
1440  *          vertical component
1441  *  @param  log2_max_mv_length_horizontal :Maximum value of any motion vector\92s
1442  *           horizontal component
1443  *  @param  max_dec_frame_reordering :
1444  *  @param  num_reorder_frames :Maximum number of frames that need to be
1445  *          re-ordered
1446  *  @param  max_dec_frame_buffering :Size of HRD decoded buffer (DPB) in terms
1447  *          of frame buffers
1448  *  @param  svcVuiParams :  struct instance of vui parameters for svc
1449  *
1450  ******************************************************************************
1451 */
1452 typedef struct IH264VDEC_VuiParams
1453 {
1454   XDAS_UInt32  parsed_flag;
1455   XDAS_UInt8   aspect_ratio_info_present_flag;
1456   XDAS_UInt32  aspect_ratio_idc;
1457   XDAS_UInt32  sar_width;
1458   XDAS_UInt32  sar_height;
1459   XDAS_UInt8   overscan_info_present_flag;
1460   XDAS_UInt8   overscan_appropriate_flag;
1461   XDAS_UInt8   video_signal_type_present_flag;
1462   XDAS_UInt8   video_format;
1463   XDAS_UInt8   video_full_range_flag;
1464   XDAS_UInt8   colour_description_present_flag;
1465   XDAS_UInt8   colour_primaries;
1466   XDAS_UInt8   transfer_characteristics;
1467   XDAS_UInt8   matrix_coefficients;
1468   XDAS_UInt8   chroma_location_info_present_flag;
1469   XDAS_UInt32  chroma_sample_loc_type_top_field;
1470   XDAS_UInt32  chroma_sample_loc_type_bottom_field;
1471   XDAS_UInt8   timing_info_present_flag;
1472   XDAS_UInt32  num_units_in_tick;
1473   XDAS_UInt32  time_scale;
1474   XDAS_UInt8   fixed_frame_rate_flag;
1475   XDAS_UInt8   nal_hrd_parameters_present_flag;
1476   IH264VDEC_HrdParams   nal_hrd_pars;
1477   XDAS_UInt8   vcl_hrd_parameters_present_flag;
1478   IH264VDEC_HrdParams   vcl_hrd_pars;
1479   XDAS_UInt8   low_delay_hrd_flag;
1480   XDAS_UInt8   pic_struct_present_flag;
1481   XDAS_UInt8   bitstream_restriction_flag;
1482   XDAS_UInt8   motion_vectors_over_pic_boundaries_flag;
1483   XDAS_UInt32  max_bytes_per_pic_denom;
1484   XDAS_UInt32  max_bits_per_mb_denom;
1485   XDAS_UInt32  log2_max_mv_length_vertical;
1486   XDAS_UInt32  log2_max_mv_length_horizontal;
1487   XDAS_UInt32  max_dec_frame_reordering;
1488   XDAS_UInt32  num_reorder_frames;
1489   XDAS_UInt32  max_dec_frame_buffering;
1490   IH264VDEC_SVCVuiParams svcVuiParams;
1491 } IH264VDEC_VuiParams;
1492
1493 /**
1494  ******************************************************************************
1495  *  @struct IH264VDEC_SeiUserDataRegITUT
1496  *
1497  *  @brief  This structure contains the user data SEI msg elements
1498  *
1499  *  @param  parsed_flag :1 - Indicates that in the current process call,
1500  *                           contents of the structure is updated
1501  *                       0 - Indicates contents of the structure is not updated
1502  *  @param  num_payload_bytes :Specifies the size of the payload
1503  *  @param  itu_t_t35_country_code : A byte having a value specified as a
1504  *                          country code by ITU-T Recommendation T.35 Annex A
1505  *  @param  itu_t_t35_country_code_extension_byte :A byte having a value
1506  *          specified as a country code by ITU-T Recommendation T.35 Annex B
1507  *  @param  itu_t_t35_payload_byte[] : A byte containing data registered as
1508  *          specified by ITU-T Recommendation T.35.
1509  *  @param  dataOverflowFlag: This indicates if pay load data is more than the
1510  *                            array size i.e., IH264VDEC_MAXUSERDATA_PAYLOAD.
1511  ******************************************************************************
1512 */
1513 typedef struct IH264VDEC_SeiUserDataRegITUT
1514 {
1515   XDAS_UInt32 parsed_flag;
1516   XDAS_UInt32 num_payload_bytes;
1517   XDAS_UInt8  itu_t_t35_country_code;
1518   XDAS_UInt8  itu_t_t35_country_code_extension_byte;
1519   XDAS_UInt8  itu_t_t35_payload_byte[IH264VDEC_MAXUSERDATA_PAYLOAD];
1520   XDAS_UInt8  dataOverflowFlag;
1521 } IH264VDEC_SeiUserDataRegITUT;
1522
1523 /**
1524  ******************************************************************************
1525  *  @struct IH264VDEC_SeiUserDataUnReg
1526  *
1527  *  @brief  This structure contains the user data SEI msg elements
1528  *
1529  *  @param  parsed_flag :1 - Indicates that in the current process call,
1530  *                           contents of the structure is updated
1531  *                       0 - Indicates contents of the structure is not updated
1532  *  @param  num_payload_bytes :Specifies the size of the payload
1533  *  @param  uuid_iso_iec_11578 :Value specified as a UUID according to the
1534  *                              procedures of ISO/IEC 11578:1996 Annex A.
1535  *  @param  user_data_payload_byte :Byte containing data having syntax and
1536  *                                semantics as specified by the UUID generator.
1537  *  @param  dataOverflowFlag: This indicates if pay load data is more than the
1538  *                            array size i.e., IH264VDEC_MAXUSERDATA_PAYLOAD.
1539  ******************************************************************************
1540 */
1541 typedef struct IH264VDEC_SeiUserDataUnReg
1542 {
1543   XDAS_UInt32  parsed_flag;
1544   XDAS_UInt32  num_payload_bytes;
1545   XDAS_UInt8   uuid_iso_iec_11578[16];
1546   XDAS_UInt8   user_data_payload_byte[IH264VDEC_MAXUSERDATA_PAYLOAD];
1547   XDAS_UInt8   dataOverflowFlag;
1548 } IH264VDEC_SeiUserDataUnReg;
1549
1550
1551 /**
1552  ******************************************************************************
1553  *  @struct IH264VDEC_SeiBufferingPeriod
1554  *
1555  *  @brief   This structure contains the buffering period SEI msg elements
1556  *
1557  *  @param  parsed_flag :1 - Indicates that in the current process call,
1558  *                           contents of the structure is updated
1559  *                       0 - Indicates contents of the structure is not updated
1560  *  @param  seq_parameter_set_id :Specifies the sequence parameter set that
1561  *                                contains the sequence HRD attributes
1562  *  @param  nal_cpb_removal_delay :Specifies the delay for the indexed NAL CPB
1563  *          between the time of arrival in the CPB of the first bit of the
1564  *          coded data associated with the access unit associated with the
1565  *          buffering period SEI message and the time of removal from the CPB
1566  *          of the coded data associated with the same access unit, for the
1567  *          first buffering period after HRD initialization.
1568  *  @param  nal_cpb_removal_delay_offset :Used for the indexed NAL CPB in
1569  *          combination with the cpb_removal_delay to specify the initial
1570  *          delivery time of coded access units to the CPB
1571  *  @param  vcl_cpb_removal_delay :Specifies the delay for the indexed VCL CPB
1572  *          between the time of arrival in the CPB of the first bit of the
1573  *          coded data associated with the access unit associated with the
1574  *          buffering period SEI message and the time of removal from the CPB
1575  *          of the coded data associated with the same access unit, for the
1576  *          first buffering period after HRD initialization.
1577  *  @param  vcl_cpb_removal_delay_offset :Used for the indexed VCL CPB in
1578  *          combination with the cpb_removal_delay to specify the initial
1579  *          delivery time of coded access units to the CPB
1580  ******************************************************************************
1581 */
1582 typedef struct IH264VDEC_SeiBufferingPeriod
1583 {
1584   XDAS_UInt32 parsed_flag;
1585   XDAS_UInt32 seq_parameter_set_id;
1586   XDAS_UInt32 nal_cpb_removal_delay[IH264VDEC_MAXCPBCNT];
1587   XDAS_UInt32 nal_cpb_removal_delay_offset[IH264VDEC_MAXCPBCNT];
1588   XDAS_UInt32 vcl_cpb_removal_delay[IH264VDEC_MAXCPBCNT];
1589   XDAS_UInt32 vcl_cpb_removal_delay_offset[IH264VDEC_MAXCPBCNT];
1590 }IH264VDEC_SeiBufferingPeriod;
1591 /**
1592  ******************************************************************************
1593  *  @struct IH264VDEC_SeiPanScanRect
1594  *
1595  *  @brief   This structure contains the pan scan rectangle SEI msg elements
1596  *
1597  *  @param  parsed_flag :1 - Indicates that in the current process call,
1598  *                           contents of the structure is updated
1599  *                       0 - Indicates contents of the structure is not updated
1600  *  @param  pan_scan_rect_id :Specifies an identifying number that may be used
1601  *                            to identify the purpose of the pan-scan rectangle
1602  *  @param  pan_scan_rect_cancel_flag :Equal to 1 indicates that the SEI
1603  *                    message cancels the persistence of any previous pan-scan
1604  *                    rectangle SEI message in output order.
1605  *                    pan_scan_rect_cancel_flag equal to 0 indicates that
1606  *                    pan-scan rectangle information follows.
1607  *  @param  pan_scan_cnt_minus1 :Specifies the number of pan-scan rectangles
1608  *          that are present in the SEI message
1609  *  @param  pan_scan_rect_left_offset :Specifies as signed integer quantities
1610  *          in units of one-sixteenth sample spacing relative to the luma
1611  *          sampling grid, the location of the pan-scan rectangle
1612  *  @param  pan_scan_rect_right_offset :Specifies as signed integer quantities
1613  *          in units of one-sixteenth sample spacing relative to the luma
1614  *          sampling grid, the location of the pan-scan rectangle
1615  *  @param  pan_scan_rect_top_offset : Top offset
1616  *  @param  pan_scan_rect_bottom_offset : Bottom offset
1617  *  @param  pan_scan_rect_repetition_period :Specifies the persistence of the
1618  *          pan-scan rectangle SEI message and may specify a picture order
1619  *          count interval within which another pan-scan rectangle SEI message
1620  *          with the same value of pan_scan_rect_id or the end of the coded
1621  *          video sequence shall be present in the bit-stream
1622  ******************************************************************************
1623 */
1624 typedef struct IH264VDEC_SeiPanScanRect
1625 {
1626   XDAS_UInt32 parsed_flag;
1627   XDAS_UInt32 pan_scan_rect_id;
1628   XDAS_UInt32  pan_scan_rect_cancel_flag;
1629   XDAS_UInt32 pan_scan_cnt_minus1;
1630   XDAS_Int32 pan_scan_rect_left_offset[3];
1631   XDAS_Int32 pan_scan_rect_right_offset[3];
1632   XDAS_Int32 pan_scan_rect_top_offset[3];
1633   XDAS_Int32 pan_scan_rect_bottom_offset[3];
1634   XDAS_UInt32 pan_scan_rect_repetition_period;
1635 } IH264VDEC_SeiPanScanRect;
1636
1637 /**
1638  ******************************************************************************
1639  *  @struct IH264VDEC_SeiProgRefineStart
1640  *
1641  *  @brief  This structure contains the progressive refinement start SEI msg
1642  *          elements
1643  *
1644  *  @param  parsed_flag :1 - Indicates that in the current process call,
1645  *                           contents of the structure is updated
1646  *                       0 - Indicates contents of the structure is not updated
1647  *  @param  progressive_refinement_id :Specifies an identification number for
1648  *          the progressive refinement operation.
1649  *  @param  num_refinement_steps_minus1 :Specifies the number of reference
1650  *          frames in the tagged set of consecutive coded pictures
1651  ******************************************************************************
1652 */
1653 typedef struct IH264VDEC_SeiProgRefineStart
1654 {
1655     XDAS_UInt32 parsed_flag;
1656     XDAS_UInt32 progressive_refinement_id;
1657     XDAS_UInt32 num_refinement_steps_minus1;
1658 } IH264VDEC_SeiProgRefineStart;
1659 /**
1660  ******************************************************************************
1661  *  @struct IH264VDEC_SeiProgRefineEnd
1662  *
1663  *  @brief  TThis structure contains the progressive refinement end SEI msg
1664  *          elements
1665  *
1666  *  @param  parsed_flag :1 - Indicates that in the current process call,
1667  *                           contents of the structure is updated
1668  *                       0 - Indicates contents of the structure is not updated
1669  *  @param  progressive_refinement_id :Specifies an identification number for
1670  *                    the progressive refinement operation.
1671  ******************************************************************************
1672 */
1673 typedef struct IH264VDEC_SeiProgRefineEnd
1674 {
1675   XDAS_UInt32 parsed_flag;
1676   XDAS_UInt32 progressive_refinement_id;
1677 } IH264VDEC_SeiProgRefineEnd;
1678 /**
1679  ******************************************************************************
1680  *  @struct IH264VDEC_SeiRecoveryPointInfo
1681  *
1682  *  @brief  This structure contains the sRecovery Point Info SEI msg elements
1683  *
1684  *  @param  parsed_flag :1 - Indicates that in the current process call,
1685  *                           contents of the structure is updated
1686  *                       0 - Indicates contents of the structure is not updated
1687  *  @param  exact_match_flag :Indicates whether decoded pictures at and
1688  *          subsequent to the specified recovery point in output order derived
1689  *          by starting the decoding process at the access unit associated with
1690  *          the recovery point SEI message, will be an exact match to the
1691  *          pictures that would be produced by starting the decoding process
1692  *        at the location of a previous IDR access unit in the NAL unit stream.
1693  *  @param  recovery_frame_cnt :Specifies the recovery point of output pictures
1694  *          in output order
1695  *  @param  broken_link_flag :Indicates the presence or absence of a broken
1696  *                            link in the NAL unit stream
1697  *  @param  changing_slice_group_idc :Indicates whether decoded pictures are
1698  *          correct or approximately correct in content at and subsequent to
1699  *          the recovery point in output order when all macro-blocks of the
1700  *          primary coded pictures are decoded within the changing slice group
1701  *          period.
1702  ******************************************************************************
1703 */
1704 typedef struct IH264VDEC_SeiRecoveryPointInfo
1705 {
1706   XDAS_UInt32  parsed_flag;
1707   XDAS_UInt32  recovery_frame_cnt;
1708   XDAS_UInt32  exact_match_flag;
1709   XDAS_UInt32  broken_link_flag;
1710   XDAS_UInt32  changing_slice_group_idc;
1711 } IH264VDEC_SeiRecoveryPointInfo;
1712
1713 /**
1714  ******************************************************************************
1715  *  @struct IH264VDEC_SeiPictureTiming
1716  *
1717  *  @brief  This structure contains the picture timing SEI msg elements
1718  *
1719  *  @param  parsed_flag :1 - Indicates that in the current process call,
1720  *                           contents of the structure is updated
1721  *                       0 - Indicates contents of the structure is not updated
1722  *  @param     NumClockTs :
1723  *  @param     cpb_removal_delay :Specifies how many clock ticks to wait after
1724  *               removal from the CPB of the access unit associated with the
1725  *               most recent buffering period SEI message before removing from
1726  *               the buffer the access unit data associated with the picture
1727  *               timing SEI message.
1728  *  @param     dpb_output_delay : Used to compute the DPB output time of the
1729  *               picture.
1730  *  @param     pic_struct : Indicates whether a picture  should be displayed as
1731  *               a frame or field
1732  *  @param     clock_time_stamp_flag[4]:1 - Indicates number of clock timestamp
1733  *                            syntax elements present and follow immediately
1734  *                            0 \96 Indicates associated clock timestamp syntax
1735  *                                elements not present
1736  *  @param     ct_type[4] : Indicates the scan type(interlaced or progressive)
1737  *                          of the source material
1738  *  @param     nuit_field_based_flag[4] : Used to calculate the clockTimestamp
1739  *  @param     counting_type[4] : Specifies the method of dropping values of
1740  *                                n_frames
1741  *  @param     full_timestamp_flag[4] : 1 - Specifies that the n_frames syntax
1742  *                                      element is followed by seconds_value,
1743  *                                      minutes_value, and hours_value.
1744  *                                      0 - Specifies that the n_frames syntax
1745  *                                      element is followed by seconds_flag
1746  *  @param     discontinuity_flag[4] : Indicates whether the difference between
1747  *               the current value of clockTimestamp and the value of
1748  *               clockTimestamp computed from the previous clockTimestamp in
1749  *               output order can be interpreted as the time difference between
1750  *               the times of origin or capture of the associated frames or
1751  *               fields.
1752  *  @param     cnt_dropped_flag[4] : Specifies the skipping of one or more
1753  *               values of n_frames using the counting method
1754  *  @param     n_frames[4] : Specifies the value of nFrames used to compute
1755  *                            clockTimestamp.
1756  *  @param     seconds_flag[4] : equal to 1 specifies that seconds_value and
1757  *                               minutes_flag are present when
1758  *                               full_timestamp_flag is equal to 0.
1759  *  @param     minutes_flag[4] : equal to 1 specifies that minutes_value and
1760  *                              hours_flag are present when full_timestamp_flag
1761  *                              is equal to 0 and seconds_flag is equal to 1.
1762  *  @param     hours_flag[4] :  equal to 1 specifies that hours_value is
1763  *                              present when full_timestamp_flag is equal to 0
1764  *                              and seconds_flag is equal to 1 and minutes_flag
1765  *                              is equal to 1.
1766  *  @param     seconds_value[4] : Specifies the value of sS used to compute
1767  *                                clockTimestamp.
1768  *  @param     minutes_value[4] : Specifies the value of mM used to compute
1769  *                                clockTimestamp.
1770  *  @param     hours_value[4] : Specifies the value of tOffset used to compute
1771  *                              clockTimestamp
1772  *  @param     time_offset[4] : Specifies the value of tOffset used to compute
1773  *                              clockTimestamp
1774  ******************************************************************************
1775 */
1776 typedef struct IH264VDEC_SeiPictureTiming
1777 {
1778   XDAS_UInt32 parsed_flag;
1779   XDAS_UInt32 NumClockTs;
1780   XDAS_UInt32 cpb_removal_delay;
1781   XDAS_UInt32 dpb_output_delay;
1782   XDAS_UInt32 pic_struct;
1783   XDAS_UInt32 clock_time_stamp_flag[4];
1784   XDAS_UInt32 ct_type[4];
1785   XDAS_UInt32 nuit_field_based_flag[4];
1786   XDAS_UInt32 counting_type[4];
1787   XDAS_UInt32 full_timestamp_flag[4];
1788   XDAS_UInt32 discontinuity_flag[4];
1789   XDAS_UInt32 cnt_dropped_flag[4];
1790   XDAS_UInt32 n_frames[4];
1791   XDAS_UInt32 seconds_flag[4];
1792   XDAS_UInt32 minutes_flag[4];
1793   XDAS_UInt32 hours_flag[4];
1794   XDAS_UInt32 seconds_value[4];
1795   XDAS_UInt32 minutes_value[4];
1796   XDAS_UInt32 hours_value[4];
1797   XDAS_Int32 time_offset[4];
1798 }IH264VDEC_SeiPictureTiming;
1799 /**
1800  ******************************************************************************
1801  *  @struct IH264VDEC_SeiFullFrameFreezeRep
1802  *
1803  *  @brief  This structure contains the full frmae freeze repetition SEI msg
1804  *          elements
1805  *
1806  *  @param  parsed_flag :1 - Indicates that in the current process call,
1807  *                           contents of the structure is updated
1808  *                       0 - Indicates contents of the structure is not updated
1809  *  @param  full_frame_freeze_repetition_period :Specifies the persistence of
1810  *            the full-frame freeze SEI message
1811  ******************************************************************************
1812 */
1813 typedef struct IH264VDEC_SeiFullFrameFreezeRep
1814 {
1815   XDAS_UInt32 parsed_flag;
1816   XDAS_UInt32 full_frame_freeze_repetition_period;
1817 } IH264VDEC_SeiFullFrameFreezeRep;
1818
1819 /**
1820  ******************************************************************************
1821  *  @struct IH264VDEC_SeiFullFrameFreezeRel
1822  *
1823  *  @brief   This structure contains frame freeze release SEI msg elements
1824  *
1825  *  @param  parsed_flag :1 - Indicates that in the current process call,
1826  *                           contents of the structure is updated
1827  *                       0 - Indicates contents of the structure is not updated
1828  *  @param  payloadSize : Size of the frame_freeze_release payload
1829  ******************************************************************************
1830 */
1831 typedef struct IH264VDEC_SeiFullFrameFreezeRel
1832 {
1833   XDAS_UInt32 parsed_flag;
1834   XDAS_UInt32 payloadSize;
1835 } IH264VDEC_SeiFullFrameFreezeRel;
1836
1837 /**
1838  ******************************************************************************
1839  *  @struct IH264VDEC_SeiStereoVideoInfo
1840  *
1841  *  @brief   This structure contains stereo video information SEI msg elements
1842  *
1843  *  @param  parsed_flag :1 - Indicates that in the current process call,
1844  *                           contents of the structure is updated
1845  *                       0 - Indicates contents of the structure is not updated
1846  *  @param  field_views_flag :   1 - indicates that all pictures in the current
1847  *                  coded video sequence are fields
1848  *                0 - indicates that all pictures in the current
1849  *                  coded video sequence are frames.
1850  *  @param  top_field_is_left_view_flag :
1851  *                1 - top field is a left  view.
1852  *                0 - topfield is right view.
1853  *  @param  current_frame_is_left_view_flag :
1854  *                1 - current frame is left view.
1855  *                0 - current frame is right view.
1856  *  @param  next_frame_is_second_view_flag :
1857  *                1 - current picture and a next picture in
1858  *                  output order form a stereo video pair.
1859  *                0 - current picture and a previous picture in
1860  *                  output order form a stereo video pair.
1861  *  @param  left_view_self_contained_flag :
1862  *                1 - it will not use right view as a reference
1863  *                  picture for inter prediction
1864  *                0 - it may use right view as a reference
1865  *                  picture for inter prediction.
1866  *  @param  right_view_self_contained_flag :
1867  *                1 - it will not use left view as a reference
1868  *                  picture for inter prediction
1869  *                0 - it may use left view as a reference
1870  *                  picture for inter prediction.
1871  ******************************************************************************
1872 */
1873 typedef struct IH264VDEC_SeiStereoVideoInfo
1874 {
1875   XDAS_UInt32 parsed_flag;
1876   XDAS_UInt32 field_views_flag;
1877   XDAS_UInt32 top_field_is_left_view_flag;
1878   XDAS_UInt32 current_frame_is_left_view_flag;
1879   XDAS_UInt32 next_frame_is_second_view_flag;
1880   XDAS_UInt32 left_view_self_contained_flag;
1881   XDAS_UInt32 right_view_self_contained_flag;
1882 } IH264VDEC_SeiStereoVideoInfo;
1883
1884 /**
1885  ******************************************************************************
1886  *  @struct IH264VDEC_SeiFramePacking
1887  *
1888  *  @brief  This structure contains frame packing arrangement SEI msg elements
1889  *
1890  *  @param  frame_packing_arrangement_id :
1891  *                contains an identifying number that may be used to identify
1892  *                the usage of the frame packing arrangement SEI message.
1893  *  @param  frame_packing_arrangement_cancel_flag :
1894  *                1 - equal to 1 indicates that the frame packing arrangement
1895  *                    SEI message cancels the persistence of any previous frame
1896  *                    packing arrangement SEI message in output order.
1897  *                0 - indicates that frame packing arrangement info follows
1898  *  @param  frame_packing_arrangement_type :
1899  *                indicates the type of packing arrangement of the frames
1900  *  @param  quincunx_sampling_flag :
1901  *                1 - indicates that each color component plane of each
1902  *                    constituent frame is quincunx sampled
1903  *                0 - indicates that each color component plane of each
1904  *                    constituent frame is not quincunx sampled
1905  *  @param  content_interpretation_type :
1906  *                1 - frame 0 being associated with the left view and frame 1
1907  *                    being associated with the right view
1908  *                2 - frame 0 being associated with the right view and frame 1
1909  *                    being associated with the left view
1910  *  @param  spatial_flipping_flag :
1911  *                1 - spatial flipping is enabled for any one of the frame
1912  *                    constituent, if frame_packing_arrangement_type is 3 or 4.
1913  *                0 - spatial flipping is disabled for any one of the frame
1914  *                    constituent, if frame_packing_arrangement_type is 3 or 4.
1915  *  @param  frame0_flipped_flag :
1916  *                1 - frame 0 is spatially flipped
1917  *                0 - frame 1 is spatially flipped
1918  *  @param  field_views_flag :
1919  *                1 - indicates that all pictures in the current coded video
1920  *                   sequence are coded as complementary field pairs.
1921  *                0 - indicates that all pictures in the current coded video
1922  *                   sequence are coded as frame.
1923  *  @param  current_frame_is_frame0_flag :
1924  *                1 - indicates that the current decoded frame is constituent
1925  *                    frame 0 and the next decoded frame in output order
1926  *                    is constituent frame 1.
1927  *                0 - indicates that the current decoded frame is constituent
1928  *                    frame 1 and the next decoded frame in output order
1929  *                    is constituent frame 0.
1930  *  @param  frame0_self_contained_flag :
1931  *                1 - indicates that the constituent frame 0 is dependent on
1932  *                    constituent frame 1 in decoding process
1933  *                0 - indicates that the constituent frame 0 may dependent on
1934  *                    constituent frame 1 in decoding process
1935  *  @param  frame1_self_contained_flag :
1936  *                1 - indicates that the constituent frame 1 is dependent on
1937  *                    constituent frame 0 in decoding process
1938  *                0 - indicates that the constituent frame 1 may dependent on
1939  *                    constituent frame 0 in decoding process
1940  *  @param  frame0_grid_position_x :
1941  *                specifies the horizontal location of the upper left
1942  *                sample of constituent frame 0 in the units of one
1943  *                sixteenth of the luma samples
1944  *  @param  frame0_grid_position_y :
1945  *                specifies the vertical location of the upper left
1946  *                sample of constituent frame 0 in the units of one
1947  *                sixteenth of the luma samples
1948  *  @param  frame1_grid_position_x :
1949  *                specifies the horizontal location of the upper left
1950  *                sample of constituent frame 1 in the units of one
1951  *                sixteenth of the luma samples
1952  *  @param  frame1_grid_position_y :
1953  *                specifies the vertical location of the upper left
1954  *                sample of constituent frame 1 in the units of one
1955  *                sixteenth of the luma samples
1956  *  @param  frame_packing_arrangement_reserved_byte :
1957  *                reserved for the future use.
1958  *  @param  frame_packing_arrangement_repetition_period :
1959  *                specifies the persistence of the frame packing arrangement
1960  *                SEI message and may specify a frame order count interval
1961  *                within which another frame packing arrangement SEI message
1962  *                with the same value of frame_packing_arrangement_id or the
1963  *                end of the coded video sequence shall be present in the
1964  *                bitstream.
1965  *  @param  frame_packing_arrangement_extension_flag :
1966  *                0 - indicates that no additional data follows within the
1967  *                    frame packing arrangement SEI message.
1968  *                1 - Reserved for the future use.
1969  ******************************************************************************
1970 */
1971 typedef struct IH264VDEC_SeiFramePacking
1972 {
1973   XDAS_UInt32 parsed_flag;
1974   XDAS_UInt32 frame_packing_arrangement_id;
1975   XDAS_UInt32 frame_packing_arrangement_repetition_period;
1976   XDAS_UInt8  frame_packing_arrangement_cancel_flag;
1977   XDAS_UInt8  frame_packing_arrangement_type;
1978   XDAS_UInt8  quincunx_sampling_flag;
1979   XDAS_UInt8  content_interpretation_type;
1980   XDAS_UInt8  spatial_flipping_flag;
1981   XDAS_UInt8  frame0_flipped_flag;
1982   XDAS_UInt8  field_views_flag;
1983   XDAS_UInt8  current_frame_is_frame0_flag;
1984   XDAS_UInt8  frame0_self_contained_flag;
1985   XDAS_UInt8  frame1_self_contained_flag;
1986   XDAS_UInt8  frame0_grid_position_x;
1987   XDAS_UInt8  frame0_grid_position_y;
1988   XDAS_UInt8  frame1_grid_position_x;
1989   XDAS_UInt8  frame1_grid_position_y;
1990   XDAS_UInt8  frame_packing_arrangement_reserved_byte;
1991   XDAS_UInt8  frame_packing_arrangement_extension_flag;
1992 } IH264VDEC_SeiFramePacking;
1993
1994
1995 /**
1996  ******************************************************************************
1997  *  @struct IH264VDEC_SeiMessages
1998  *
1999  *  @brief   This structure contains all the supported SEI msg objects
2000  *
2001  *  @param  parsed_flag :1 - Indicates that in the current process call,
2002  *                           contents of the structure is updated
2003  *                       0 - Indicates contents of the structure is not updated
2004  *  @param  full_frame_freeze : Full-frame freeze SEI message
2005  *  @param  full_frame_freeze_release :Cancels the effect of any full-frame
2006  *             freeze SEI message sent with pictures that precede the current
2007  *             picture in the output order.
2008  *  @param  prog_refine_start :Specifies the beginning of a set of consecutive
2009  *             coded pictures that is labeled as the current picture followed
2010  *             by a sequence of one or more pictures of refinement of the
2011  *             quality of the current picture, rather than as a representation
2012  *             of a continually moving scene.
2013  *  @param  prog_refine_end : Specifies end of progressive refinement.
2014  *  @param  user_data_registered :Message contains user data registered as
2015  *            specified by ITU-T Recommendation T.35
2016  *  @param  user_data_unregistered :Message contains unregistered user data
2017  *            identified by a UUID
2018  *  @param  buffering_period_info :Message specifies the buffering period
2019  *  @param  pan_scan_rect :Message specifies the coordinates of a rectangle
2020  *            relative to the cropping rectangle of the sequence parameter set
2021  *  @param  recovery_pt_info :The recovery point SEI message assists a decoder
2022  *            in determining when the decoding process will produce acceptable
2023  *            pictures for display after the decoder initiates random access or
2024  *            after the encoder indicates a broken link in the sequence.
2025  *  @param  pic_timing :Specifies timing information regarding cpb delays, dpb
2026 *              output delay, and so on.
2027  *  @param  stereo_video_info :stereo video information SEI message consist of
2028  *      pair of picture forming stereo view content.
2029  ******************************************************************************
2030 */
2031 typedef struct IH264VDEC_SeiMessages
2032 {
2033   XDAS_UInt32                  parsed_flag;
2034   IH264VDEC_SeiFullFrameFreezeRep full_frame_freeze;
2035   IH264VDEC_SeiFullFrameFreezeRel    full_frame_freeze_release;
2036   IH264VDEC_SeiProgRefineStart           prog_refine_start;
2037   IH264VDEC_SeiProgRefineEnd             prog_refine_end;
2038   IH264VDEC_SeiUserDataRegITUT    user_data_registered;
2039   IH264VDEC_SeiUserDataUnReg      user_data_unregistered;
2040   IH264VDEC_SeiBufferingPeriod             buffering_period_info;
2041   IH264VDEC_SeiPanScanRect               pan_scan_rect;
2042   IH264VDEC_SeiRecoveryPointInfo         recovery_pt_info;
2043   IH264VDEC_SeiPictureTiming               pic_timing;
2044   IH264VDEC_SeiStereoVideoInfo       stereo_video_info;
2045   IH264VDEC_SeiFramePacking       frame_packing;
2046 } IH264VDEC_SeiMessages;
2047
2048 /**
2049  ******************************************************************************
2050  *  @struct IH264VDEC_MbxTraceData
2051  *
2052  *  @brief  This structure holds the elements that describe the attributes of
2053  *          traced data.
2054  *
2055  *  @param  userId  : Indicates whose data getting logged.
2056  *  @param  message : Indicates the message type that's been used at given
2057  *                    user ID.
2058  *  @param  rwMode  : Indicates mode in which the MBx is accessed.
2059  *  @param  rsvd    : Reserved byte to add any new attribute in future.
2060  *
2061  ******************************************************************************
2062 */
2063 typedef struct IH264VDEC_MbxTraceData
2064 {
2065   XDAS_UInt8 userId;
2066   XDAS_UInt8 message;
2067   XDAS_UInt8 rwMode;
2068   XDAS_UInt8 rsvd;
2069 }IH264VDEC_MbxTraceData;
2070
2071 /**
2072  *  Macro to indicate the max number of samples
2073  *  that we capture in the log.
2074 */
2075 #define NUM_MBX_TRACE_ELEMENTS  300
2076
2077 /**
2078  ******************************************************************************
2079  *  @struct IH264VDEC_ProfileInfo
2080  *
2081  *  @brief   This structure contains elements related to profiling information
2082  *           This Structure is used to get some codec internal cycles and not
2083  *           to be used for any system level profiling.
2084  *
2085  *  @param  hostPreIva : Cycles spent by M3 before giving control to IVAHD.
2086  *                       This gives M3 cycles alone that are spent before IVAHD
2087  *                       starts doing any thing for a given process call.
2088  *  @param  preMbLoop  : Cycles spent before entering MB Loop
2089  *  @param  inMbLoop   : Cycles in the MB Loop
2090  *  @param  postMbLoop : Cycles spent after the MB Loop execution
2091  *  @param  hostPostIva : Cycles spent after getting control back to Host from
2092  *                        IVAHD. This gives M3 cycles alone that are spent
2093  *                        after IVAHD gives control back to M3
2094  *  @param  ivahdTotalCycles : Total cycles on IVAHD
2095  *  @param  sliceTask  : per slice cycles spent; Array size set to the stream
2096  *                       "Combined_CABAC_07_HD_10.1.26l"
2097  *  @param  noOfSlices : Number of lices in the picture
2098  ******************************************************************************
2099 */
2100 typedef struct IH264VDEC_ProfileInfo
2101 {
2102   XDAS_UInt32 hostPreIva;
2103   XDAS_UInt32 preMbLoop;
2104   XDAS_UInt32 inMbLoop;
2105   XDAS_UInt32 postMbLoop;
2106   XDAS_UInt32 hostPostIva;
2107   XDAS_UInt32 ivahdTotalCycles;
2108   XDAS_UInt32 sliceTask[136];
2109   XDAS_UInt32 noOfSlices;
2110   IH264VDEC_MbxTraceData mbxTraceArray[NUM_MBX_TRACE_ELEMENTS];
2111   XDAS_UInt16 mbxtraceIdx;
2112 } IH264VDEC_ProfileInfo;
2113
2114 /**
2115  ******************************************************************************
2116  *  @struct _sErrConcealStr
2117  *  @brief  This str holds up the required Info for implementing the SCV EC,
2118  *          this will get updated by H.264 decoder while decoding the  SVC
2119  *          Base/Target Layers
2120  *
2121  *  @param  CurrMbInfoBufPointer  :Base Address of the current decoded frame
2122  *                                   MB Info buffer
2123  *
2124  *  @param  CurrMbStatusBufPointer: Base Address of the current decoded frame
2125  *                                   MB staus buffer pointer
2126  *
2127  *  @param  currFrameY            : Base Address of the current decoded Luma
2128  *                                  frame buffer pointer (physical pointer)
2129  *
2130  *  @param  currFrameUV           : Base Address of the current decoded Chroma
2131  *                                  frame buffer pointer (physical pointer)
2132  *
2133  *  @param  refConclY             : Base Address of the ref decoded Luma
2134  *                                  frame buffer pointer (virtual pointer)
2135  *
2136  *  @param  refConclUV            : Base Address of the ref decoded Chroma
2137  *                                  frame buffer pointer (virtual pointer)
2138  *
2139  *  @param  TilerBaseAddress      : TBA vaule for the VDMA
2140  *
2141  *  @param  pSliceInfoFlags       : Flag to enable slice info
2142  *
2143  *  @param  ref_width             : Resultant Horizontal LUMA picture size
2144  *                                  after Pad size addition on both Left
2145  *                                  & Right sides. This gets used as
2146  *                                  stride during vDMA programming.
2147  *                                  In case of TILER,the stride is fixed,
2148  *                                  independant of Picture width, and
2149  *                                  only changes with TILER mode.
2150  *
2151  *  @param  ref_width_c           : Resultant Horizontal CHROMA picture size
2152  *                                  after Pad size addition on both Left &
2153  *                                  Right sides.
2154  *
2155  *
2156  *  @param  ref_frame_height      : In case of Interlaced streams,the picure
2157  *                                  store is different i.e., store each field
2158  *                                  by applying PAD on top & bottom lines.
2159  *                                  Hence the picture height will be Height
2160  *                                  plus four times the Pad size. This
2161  *                                  variable holds this resultant value.
2162  *
2163  *  @param  mb_width              : Picture width in terms of Macroblocks
2164  *
2165  *  @param  mb_height             : Picture height in terms of Macroblocks.
2166  *
2167  *  @param  image_width           : Image width of the decoded frame
2168  *
2169  *  @param  image_width           : Image height of the decoded frame
2170  *
2171  *  @param  frameType             : Frame type of the current frame.
2172  *
2173  *  @param  picaff_frame          : Flag to indicate whether current picture
2174  *                                  is of Frame type & referring to Field
2175  *                                  picture as reference.
2176  *
2177  *  @param  mb_aff_frame_flag     : Flag to indicate whether the current
2178  *                                  decoding picture is MBAFF type.
2179  *
2180  *  @param  field_pic_flag        : Flag to indicate whether the current
2181  *                                  decoding picture is field type.
2182  *
2183  *  @param  bottom_field_flag     : This parameter equal to 1 specifies that
2184  *                                  the slice is part of a coded bottom field.
2185  *                                  bottom_field_flag equalto 0 specifies
2186  *                                  that the picture is a coded top field.
2187  *
2188  *  @param  nonPairedFieldPic     : Flag to indicate Non paired field picture.
2189  *
2190  *  @param  prev_pic_bottom_field : this variable Indicates if the previous
2191  *                                  picture was a bottom field or not (a Flag)
2192  *
2193  *  @param  currFrameYDual        : Base Address of the current decoded Luma
2194  *                                  frame buffer pointer (physical pointer)
2195  *                                  for dual yuv output.
2196  *
2197  *  @param  currFrameUVDual       : Base Address of the current decoded Chroma
2198  *                                  frame buffer pointer (physical pointer)
2199  *                                  for dual yuv output.
2200  *
2201  *  @param  ref_widthDual         : Resultant Horizontal LUMA picture size
2202  *                                  after Pad size addition on both Left
2203  *                                  & Right sides. This gets used as
2204  *                                  stride during vDMA programming.
2205  *                                  In case of TILER,the stride is fixed,
2206  *                                  independant of Picture width, and
2207  *                                  only changes with TILER mode.
2208  *
2209  *  @param  ref_width_cDual       : Resultant Horizontal CHROMA picture size
2210  *                                  after Pad size addition on both Left &
2211  *                                  Right sides.
2212  *
2213  ******************************************************************************
2214 */
2215
2216 typedef struct _sErrConcealStr
2217 {
2218   XDAS_Int32  ErrConcealmentEnable;
2219   XDAS_Int32  CurrMbInfoBufPointer;
2220   XDAS_Int32  CurrMbStatusBufPointer;
2221   XDAS_Int32  CurrMbInfoIresBufPointer;
2222   XDAS_Int32  currFrameY;
2223   XDAS_Int32  currFrameUV;
2224   XDAS_Int32  refConclY;
2225   XDAS_Int32  refConclUV;
2226   XDAS_UInt32 TilerBaseAddress;
2227   XDAS_UInt16 ref_width;
2228   XDAS_UInt16 ref_width_c;
2229   XDAS_UInt16 ref_frame_height;
2230   XDAS_UInt16 mb_width;
2231   XDAS_UInt16 mb_height;
2232   XDAS_UInt16 image_width;
2233   XDAS_UInt16 image_height;
2234   XDAS_UInt8  frameType;
2235   XDAS_UInt8  picaff_frame;
2236   XDAS_UInt8  mb_aff_frame_flag;
2237   XDAS_UInt8  field_pic_flag;
2238   XDAS_UInt8  bottom_field_flag;
2239   XDAS_UInt8  nonPairedFieldPic;
2240   XDAS_UInt8  prev_pic_bottom_field;
2241   XDAS_Int32  currFrameYDual;
2242   XDAS_Int32  currFrameUVDual;
2243   XDAS_UInt16 ref_widthDual;
2244   XDAS_UInt16 ref_width_cDual;
2245   XDAS_UInt16 rsvd[2];
2246 }sErrConcealStr;
2247
2248 /**
2249  *  Size of sliceinfo flags - We have two slice info flag arrays in SL2, one
2250  *  for ECD3 and the other for MC3. ECD3 flag is one bit per MB. Since Maximum
2251  *  supported number of MBs in a frame for Low resolution is 128 x 128 = 16384,
2252  *  and for High resolution 256*256 = 65536. So we need 16384/8 = 2048 bytes
2253  *  for Low resolution and 65536/8 = 8192 for High resolution to store slice
2254  *  info flag array for ECD3. But for the MC3 array, we always make the next
2255  *  bit also as 1 to enable loading into ping and pong memories of MCBUF.
2256  *  So we need an extra bit for the MC3 array, to avoid buffer overflow when
2257  *  the last MB is a new slice. To keep the next SL2 buffer in 16-byte aligned
2258  *  position (some buffers need it) we round the size to next multiple of 16,
2259  *  i.e., 2064 and 8208 for Low and High resolutions respectively.
2260  *  As we are maintaining only one decoder image in M3, we define
2261  *  SLICEINFO_FLAGSIZE as 8208 (maximum among 2064 and 8208).
2262 */
2263 #define SLICEINFO_FLAGSIZE_HIGHRES  8208
2264 #define SLICEINFO_FLAGSIZE_LOWRES   2064
2265
2266 /**
2267  ******************************************************************************
2268  *  @struct _sErrConcealLayerStr
2269  *  @brief  This str holds up the required Info for implementing the SCV EC,
2270  *          this will get updated by H.264 decoder while decoding the  SVC
2271  *          Base/Target Layers
2272  *
2273  *  @param  svcEcStr              : structure instance of sSVCErrConcealStr
2274  *
2275  *  @param  pSliceInfoFlags       : Array to store the sliceInfo flag
2276  *
2277  *
2278  ******************************************************************************
2279 */
2280 typedef struct _sErrConcealLayerStr
2281 {
2282   sErrConcealStr sECStr;
2283   XDAS_UInt8 pSliceInfoFlags[SLICEINFO_FLAGSIZE_HIGHRES];
2284 }sErrConcealLayerStr;
2285
2286 /**
2287  ******************************************************************************
2288  *  @enum       IH264VDEC_dpbNumFrames
2289  *  @brief      This enum can be used to choose the DPB Size in number
2290  *              number of frames.
2291  *  @details
2292  ******************************************************************************
2293 */
2294 typedef enum
2295 {
2296   IH264VDEC_DPB_NUMFRAMES_AUTO = -1,
2297    /**<
2298     * Allow the decoder to choose the number of reference frames based on the
2299     * stream information.
2300     */
2301   IH264VDEC_DPB_NUMFRAMES_0 = 0,
2302     /**<
2303     * Number of frames required is 0
2304     */
2305   IH264VDEC_DPB_NUMFRAMES_1 = 1,
2306     /**<
2307     * Number of frames required is 1
2308     */
2309   IH264VDEC_DPB_NUMFRAMES_2 = 2,
2310     /**<
2311     * Number of frames required is 2
2312     */
2313   IH264VDEC_DPB_NUMFRAMES_3 = 3,
2314     /**<
2315     * Number of frames required is 3
2316     */
2317   IH264VDEC_DPB_NUMFRAMES_4 = 4,
2318       /**<
2319     * Number of frames required is 4
2320     */
2321   IH264VDEC_DPB_NUMFRAMES_5 = 5,
2322     /**<
2323     * Number of frames required is 5
2324     */
2325   IH264VDEC_DPB_NUMFRAMES_6 = 6,
2326     /**<
2327     * Number of frames required is 6
2328     */
2329   IH264VDEC_DPB_NUMFRAMES_7 = 7,
2330       /**<
2331     * Number of frames required is 7
2332     */
2333   IH264VDEC_DPB_NUMFRAMES_8 = 8,
2334     /**<
2335     * Number of frames required is 8
2336     */
2337   IH264VDEC_DPB_NUMFRAMES_9 = 9,
2338     /**<
2339     * Number of frames required is 9
2340     */
2341   IH264VDEC_DPB_NUMFRAMES_10 = 10,
2342     /**<
2343     * Number of frames required is 10
2344     */
2345   IH264VDEC_DPB_NUMFRAMES_11 = 11,
2346     /**<
2347     * Number of frames required is 11
2348     */
2349   IH264VDEC_DPB_NUMFRAMES_12 = 12,
2350     /**<
2351     * Number of frames required is 12
2352     */
2353   IH264VDEC_DPB_NUMFRAMES_13 = 13,
2354     /**<
2355     * Number of frames required is 13
2356     */
2357   IH264VDEC_DPB_NUMFRAMES_14 = 14,
2358     /**<
2359     * Number of frames required is 14
2360     */
2361   IH264VDEC_DPB_NUMFRAMES_15 = 15,
2362     /**<
2363     * Number of frames required is 15
2364     */
2365   IH264VDEC_DPB_NUMFRAMES_16 = 16,
2366     /**<
2367     * Number of frames required is 16
2368     */
2369   IH264VDEC_DPB_NUMFRAMES_DEFAULT = IH264VDEC_DPB_NUMFRAMES_AUTO
2370    /**<
2371     * Allow the decoder to choose the number of reference frames based on the
2372     * stream information.
2373     */
2374 } IH264VDEC_dpbNumFrames;
2375
2376 /**
2377  ******************************************************************************
2378  *  @enum       IH264VDEC_SVCErrConcealMode
2379  *  @brief      Describes the error concealment mode ID for SVC codec
2380  *              This enumeration type is used by svc app to specify codec
2381  *              to concealment mode
2382  *
2383  ******************************************************************************
2384 */
2385
2386 typedef enum
2387 {
2388   IH264VDEC_SETERRCONCEALMODE   = 15
2389   /** SVC error concealment mode ID
2390   *
2391   */
2392 } IH264VDEC_SVCErrConcealMode;
2393
2394 /**
2395  ******************************************************************************
2396  *  @struct IH264VDEC_TI_CommonInfo
2397  *
2398  *  @brief
2399  *
2400  ******************************************************************************
2401 */
2402 typedef struct _IH264VDEC_TI_CommonInfo
2403 {
2404   XDAS_UInt32 codec_type:8;
2405   XDAS_UInt32 fmt_type:8;
2406   XDAS_UInt32 mb_ll_avail:1;
2407   XDAS_UInt32 mb_ul_avail:1;
2408   XDAS_UInt32 mb_uu_avail:1;
2409   XDAS_UInt32 mb_ur_avail:1;
2410   XDAS_UInt32 pic_bound_l:1;
2411   XDAS_UInt32 pic_bound_u:1;
2412   XDAS_UInt32 pic_bound_r:1;
2413   XDAS_UInt32 pic_bound_b:1;
2414   XDAS_UInt32 first_mb_flag:1;
2415   XDAS_UInt32 error_flag:1;
2416   XDAS_UInt32 zero:6;
2417   XDAS_UInt32 zeroes:16;
2418   XDAS_UInt32 mb_addr:16;
2419
2420 } IH264VDEC_TI_CommonInfo;
2421
2422 /**
2423  ******************************************************************************
2424  *  @struct IH264VDEC_TI_MotionVector
2425  *
2426  *  @brief
2427  *
2428  ******************************************************************************
2429 */
2430 typedef struct _IH264VDEC_TI_MotionVector
2431 {
2432   XDAS_Int16 x;
2433   XDAS_Int16 y;
2434 } IH264VDEC_TI_MotionVector;
2435
2436 /**
2437  ******************************************************************************
2438  *  @struct IH264VDEC_TI_CabacContext
2439  *
2440  *  @brief
2441  *
2442  ******************************************************************************
2443 */
2444 typedef struct _IH264VDEC_TI_CabacContext
2445 {
2446   IH264VDEC_TI_MotionVector   mvd_l0[4];
2447   IH264VDEC_TI_MotionVector   mvd_l1[4];
2448
2449 } IH264VDEC_TI_CabacContext;
2450
2451 /**
2452  ******************************************************************************
2453  *  @struct IH264VDEC_TI_TotalCoefLuma
2454  *
2455  *  @brief
2456  *
2457  ******************************************************************************
2458 */
2459 typedef struct _IH264VDEC_TI_TotalCoefLuma
2460 {
2461   XDAS_UInt8 right[3];
2462   XDAS_UInt8 bottom_right;
2463   XDAS_UInt8 bottom[3];
2464   XDAS_UInt8 zero;
2465 } IH264VDEC_TI_TotalCoefLuma;
2466
2467 /**
2468  ******************************************************************************
2469  *  @struct IH264VDEC_TI_TotalCoefChroma
2470  *
2471  *  @brief
2472  *
2473  ******************************************************************************
2474 */
2475 typedef struct _IH264VDEC_TI_TotalCoefChroma
2476 {
2477   XDAS_UInt8 right_cb;
2478   XDAS_UInt8 bottom_right_cb;
2479   XDAS_UInt8 bottom_cb;
2480   XDAS_UInt8 zero;
2481   XDAS_UInt8 right_cr;
2482   XDAS_UInt8 bottom_right_cr;
2483   XDAS_UInt8 bottom_cr;
2484   XDAS_UInt8 zero1;
2485 } IH264VDEC_TI_TotalCoefChroma;
2486
2487 /**
2488  ******************************************************************************
2489  *  @struct IH264VDEC_TI_CavlcContext
2490  *
2491  *  @brief
2492  *
2493  ******************************************************************************
2494 */
2495 typedef struct _IH264VDEC_TI_CavlcContext
2496 {
2497   unsigned long long zeroes[2];
2498   IH264VDEC_TI_TotalCoefLuma    total_coef_luma;
2499   IH264VDEC_TI_TotalCoefChroma  total_coef_chroma;
2500
2501 } IH264VDEC_TI_CavlcContext;
2502
2503 /**
2504  ******************************************************************************
2505  *  @struct IH264VDEC_TI_IntraPredMode
2506  *
2507  *  @brief
2508  *
2509  ******************************************************************************
2510 */
2511 typedef struct _IH264VDEC_TI_IntraPredMode
2512 {
2513   XDAS_UInt32 ipred_mode0:4;
2514   XDAS_UInt32 ipred_mode1:4;
2515   XDAS_UInt32 ipred_mode2:4;
2516   XDAS_UInt32 ipred_mode3:4;
2517   XDAS_UInt32 ipred_mode4:4;
2518   XDAS_UInt32 ipred_mode5:4;
2519   XDAS_UInt32 ipred_mode6:4;
2520   XDAS_UInt32 ipred_mode7:4;
2521   XDAS_UInt32 ipred_mode8:4;
2522   XDAS_UInt32 ipred_mode9:4;
2523   XDAS_UInt32 ipred_mode10:4;
2524   XDAS_UInt32 ipred_mode11:4;
2525   XDAS_UInt32 ipred_mode12:4;
2526   XDAS_UInt32 ipred_mode13:4;
2527   XDAS_UInt32 ipred_mode14:4;
2528   XDAS_UInt32 ipred_mode15:4;
2529
2530 } IH264VDEC_TI_IntraPredMode;
2531
2532
2533 /**
2534  ******************************************************************************
2535  *  @struct IH264VDEC_TI_MbPredType
2536  *
2537  *  @brief
2538  *
2539  ******************************************************************************
2540 */
2541 typedef struct _IH264VDEC_TI_MbPredType
2542 {
2543   XDAS_UInt32 mbskip:1;
2544   XDAS_UInt32 tr8x8:1;
2545   XDAS_UInt32 mb_field:1;
2546   XDAS_UInt32 cond_mbskip:1;
2547   XDAS_UInt32 c_ipred_mode:2;
2548   XDAS_UInt32 zero:1;
2549   XDAS_UInt32 end_of_slice:1;
2550   XDAS_UInt32 mb_y_mod2:1;
2551   XDAS_UInt32 zero1:7;
2552   XDAS_UInt32 refidx_equal_flag_l0:1;
2553   XDAS_UInt32 refidx_equal_flag_l1:1;
2554   XDAS_UInt32 mv_equal_flag_l0:1;
2555   XDAS_UInt32 mv_equal_flag_l1:1;
2556   XDAS_UInt32 zeroes:4;
2557   XDAS_UInt32 mb_type:8;
2558   XDAS_UInt8 sub_mb_type[4];
2559
2560 } IH264VDEC_TI_MbPredType;
2561
2562 /**
2563  ******************************************************************************
2564  *  @struct IH264VDEC_TI_QpCbp
2565  *
2566  *  @brief
2567  *
2568  ******************************************************************************
2569 */
2570 typedef struct _IH264VDEC_TI_QpCbp
2571 {
2572   XDAS_UInt32 cbp;
2573   XDAS_UInt8 qp_y;
2574   XDAS_UInt8 qp_cb;
2575   XDAS_UInt8 qp_cr;
2576   XDAS_UInt8 zero;
2577 } IH264VDEC_TI_QpCbp;
2578
2579 /**
2580  ******************************************************************************
2581  *  @struct IH264VDEC_TI_RefPicControl
2582  *
2583  *  @brief
2584  *
2585  ******************************************************************************
2586 */
2587 typedef struct _IH264VDEC_TI_RefPicControl
2588 {
2589   XDAS_UInt8 refidx[4];
2590   XDAS_UInt8 refpicid[4];
2591
2592 } IH264VDEC_TI_RefPicControl;
2593
2594 /**
2595  ******************************************************************************
2596  *  @struct IH264VDEC_TI_MvBidirectional16
2597  *
2598  *  @brief
2599  *
2600  ******************************************************************************
2601 */
2602 typedef struct _IH264VDEC_TI_MvBidirectional16
2603 {
2604   IH264VDEC_TI_MotionVector   mv_forward[16];
2605   IH264VDEC_TI_MotionVector   mv_backward[16];
2606 } IH264VDEC_TI_MvBidirectional16;
2607
2608
2609 /**
2610  ******************************************************************************
2611  *  @struct IH264VDEC_TI_MvBidirectional4
2612  *
2613  *  @brief
2614  *
2615  ******************************************************************************
2616 */
2617 typedef struct _IH264VDEC_TI_MvBidirectional4
2618 {
2619   IH264VDEC_TI_MotionVector   mv_forward[4];
2620   IH264VDEC_TI_MotionVector   mv_backward[4];
2621
2622 } IH264VDEC_TI_MvBidirectional4;
2623
2624 /**
2625  ******************************************************************************
2626  *  @struct IH264VDEC_TI_MbInfo
2627  *
2628  *  @brief  This structure details the data format for MB information shared to
2629  *          application. This helps application to understand all fields
2630  *          the way codec uses MB info internally. This structure is of size
2631  *          208 Bytes.
2632  *
2633  *  @param  info : This elements gives details about the MB placement in the
2634  *                 frame.
2635  *
2636  *  @param  cabac: This field holds the context data for a CABAC coded MB
2637  *
2638  *  @param  cavlc: This field holds the context data for a CAVLC coded MB
2639  *
2640  *  @param  ipred_mode: This field holds information of intra prediction modes
2641  *                      at 4x4 level, for intra coded MB.
2642  *
2643  *  @param  mb_pred_type: This indicates prediction specific details for inter
2644  *                        coded MB
2645  *
2646  *  @param  qp_cbp: This gives coded & QP informations for both LUMA & CHROMA
2647  *                   components of a Macro Block.
2648  *
2649  *  @param  l0_ref_pic_control: Informs all details about reference indices
2650  *                              at 8x8 block level in L0 direction
2651  *
2652  *  @param  l1_ref_pic_control: Informs all details about reference indices
2653  *                              at 8x8 block level in L1 direction
2654  *
2655  *  @param  mv_forward: Lists all Motion vectors at 4x4 level in L0 direction
2656  *
2657  *  @param  bidirectional16: Lists all Motion vectors at 4x4 level in both
2658  *                           directions
2659  *
2660  *  @param  bidirectional4: Lists all Motion vectors at 8x8 level in both
2661  *                          directions
2662  *
2663  ******************************************************************************
2664 */
2665 typedef struct _IH264VDEC_TI_MbInfo
2666 {
2667   IH264VDEC_TI_CommonInfo info;
2668
2669   union {
2670     IH264VDEC_TI_CabacContext  cabac;
2671     IH264VDEC_TI_CavlcContext  cavlc;
2672   } IH264VDEC_TI_context;
2673
2674   IH264VDEC_TI_IntraPredMode  ipred_mode;
2675   IH264VDEC_TI_MbPredType     mb_pred_type;
2676   IH264VDEC_TI_QpCbp          qp_cbp;
2677   IH264VDEC_TI_RefPicControl  l0_ref_pic_control;
2678   IH264VDEC_TI_RefPicControl  l1_ref_pic_control;
2679
2680   union {
2681     IH264VDEC_TI_MotionVector       mv_forward[16];
2682     IH264VDEC_TI_MvBidirectional16  bidirectional16;
2683     IH264VDEC_TI_MvBidirectional4   bidirectional4;
2684   } IH264VDEC_TI_motion_vecs;
2685
2686 } IH264VDEC_TI_MbInfo;
2687
2688 #endif             /* IH264VDEC_ */