1 
2 /*
3  * Copyright (C) Texas Instruments - http://www.ti.com/
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21 /* =============================================================================
22 *             Texas Instruments OMAP(TM) Platform Software
23 *  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
24 *
25 *  Use of this software is controlled by the terms and conditions found
26 *  in the license agreement under which this software has been supplied.
27 * =========================================================================== */
28 /**
29 * @file OMX_VIDDEC_DSP.h
30 *
31 * This is a header file for a TI OMX video component that is fully
32 * compliant with the OMX Video specification.
33 * This the file that the application that uses OMX would include
34 * in its code.
35 *
36 * @path $(CSLPATH)\
37 *
38 * @rev 0.1
39 */
40 /* -------------------------------------------------------------------------- */
41 
42 #ifndef OMX_VIDDEC_DSP__H
43 #define OMX_VIDDEC_DSP__H
44 
45 #define OMX_H264DEC_NUM_DLLS 5
46 #define OMX_MP4DEC_NUM_DLLS  5
47 #define OMX_MP2DEC_NUM_DLLS  4
48 #define OMX_WMVDEC_NUM_DLLS  5
49  #ifdef VIDDEC_SPARK_CODE
50     #define OMX_SPARKDEC_NUM_DLLS  5
51  #endif
52 
53 #ifndef VIDDEC_SN_R8_14
54     #define VIDDEC_SN_R8_14
55 #endif
56 
57 #ifndef UNDER_CE
58     #define H264_DEC_NODE_DLL  "h264vdec_sn.dll64P"
59     #define MP4_DEC_NODE_DLL   "mp4vdec_sn.dll64P"
60     #define MP4720P_DEC_NODE_DLL   "mpeg4aridec_sn.dll64P"
61     #define MP2_DEC_NODE_DLL   "mp2vdec_sn.dll64P"
62     #define WMV_DEC_NODE_DLL   "wmv9dec_sn.dll64P"
63     #define RINGIO_NODE_DLL    "ringio.dll64P"
64     #define USN_DLL            "usn.dll64P"
65     #define CONVERSIONS_DLL    "conversions.dll64P"
66  #ifdef VIDDEC_SPARK_CODE
67     #define SPARK_DEC_NODE_DLL  "sparkdec_sn.dll64P"
68  #endif
69 #else
70     #define H264_DEC_NODE_DLL "\\windows\\h264vdec_sn.dll64P"
71     #define MP4_DEC_NODE_DLL  "\\windows\\mp4vdec_sn.dll64P"
72     #define MP2_DEC_NODE_DLL  "\\windows\\mp2vdec_sn.dll64P"
73     #define WMV_DEC_NODE_DLL  "\\windows\\wmv9dec_sn.dll64P"
74     #define RINGIO_NODE_DLL   "\\windows\\ringio.dll64P"
75     #define USN_DLL           "\\windows\\usn.dll64P"
76     #define CONVERSIONS_DLL   "\\windows\\conversions.dll64P"
77  #ifdef VIDDEC_SPARK_CODE
78     #define SPARK_DEC_NODE_DLL "\\windows\\sparkdec_sn.dll64P"
79  #endif
80 #endif
81 
82 #define CEILING_1000X(x) ((OMX_U32)(x) + (1000-(OMX_U32)(x)%1000))
83 
84 #define STRING_UUID_LENGHT 37
85 /* DIVX_1.0_ARICENT_uuid */
86 #define STRING_MP4D720PSOCKET_TI_UUID "E7FDD4D8_4F0B_4325_A430_E5729975F54A"
87 static const struct DSP_UUID MP4D720PSOCKET_TI_UUID = {
88     0xe7fdd4d8, 0x4f0b, 0x4325, 0xa4, 0x30, {
89     0xe5, 0x72, 0x99, 0x75, 0xf5, 0x4a
90     }
91 };
92 /* MP4VDSOCKET_TI_UUID = 7E4B8541_47A1_11D6_B156_00B0D017674B */
93 #define STRING_MP4DSOCKET_TI_UUID "7E4B8541_47A1_11D6_B156_00B0D017674B"
94 static const struct DSP_UUID MP4DSOCKET_TI_UUID = {
95     0x7e4b8541, 0x47a1, 0x11d6, 0xb1, 0x56, {
96     0x00, 0xb0, 0xd0, 0x17, 0x67, 0x4b
97     }
98 };
99 /* MP2VDSOCKET_TI_UUID = 7E4B8541_47A1_11D6_B156_00B0D0176740 */
100 #define STRING_MP2DSOCKET_TI_UUID "7E4B8541_47A1_11D6_B156_00B0D0176740"
101 static const struct DSP_UUID MP2DSOCKET_TI_UUID = {
102 	0x7e4b8541, 0x47a1, 0x11d6, 0xb1, 0x56, {
103 	0x00, 0xb0, 0xd0, 0x17, 0x67, 0x40
104     }
105 };
106 /* H264VDSOCKET_TI_UUID = CB1E9F0F_9D5A_4434_8449_1FED2F992DF7 */
107 #define STRING_H264VDSOCKET_TI_UUID "CB1E9F0F_9D5A_4434_8449_1FED2F992DF7"
108 static const struct DSP_UUID H264VDSOCKET_TI_UUID = {
109     0xCB1E9F0F, 0x9D5A, 0x4434, 0x84, 0x49, {
110     0x1F, 0xED, 0x2F, 0x99, 0x2D, 0xF7
111     }
112 };
113 /* WMV9SOCKET_TI_UUID = 609DAB97_3DFC_471F_8AB9_4E56E834501B */
114 #define STRING_WMVDSOCKET_TI_UUID "609DAB97_3DFC_471F_8AB9_4E56E834501B"
115 static const struct DSP_UUID WMVDSOCKET_TI_UUID = {
116     0x609DAB97, 0x3DFC, 0x471F, 0x8A, 0xB9, {
117     0x4E, 0x56, 0xE8, 0x34, 0x50, 0x1B
118     }
119 };
120 
121 static const struct DSP_UUID USN_UUID = {
122     0x79A3C8B3, 0x95F2, 0x403F, 0x9A, 0x4B, {
123     0xCF, 0x80, 0x57, 0x73, 0x05, 0x41
124     }
125 };
126 
127 static const struct DSP_UUID RINGIO_TI_UUID = {
128     0x47698bfb, 0xa7ee, 0x417e, 0xa6, 0x7a, {
129     0x41, 0xc0, 0x27, 0x9e, 0xb8, 0x05
130     }
131 };
132 
133 static const struct DSP_UUID CONVERSIONS_UUID = {
134             0x722DD0DA, 0xF532, 0x4238, 0xB8, 0x46, {
135                         0xAB, 0xFF, 0x5D, 0xA4, 0xBA, 0x02
136             }
137 };
138 
139 #ifdef VIDDEC_SPARK_CODE
140     #define STRING_SPARKDSOCKET_TI_UUID "DD8AC7F0_33BF_446B_938E_FDF00B467ED6"
141     static const struct DSP_UUID SPARKDSOCKET_TI_UUID = {
142         0xdd8ac7f0, 0x33bf, 0x446b, 0x93, 0x8e, {
143         0xfd, 0xf0, 0x0b, 0x46, 0x7e, 0xd6
144         }
145     };
146 #endif
147 
148 typedef struct WMV9DEC_SNCreatePhArg {
149     OMX_U16 unNumOfStreams;
150     OMX_U16 unInputStreamID;
151     OMX_U16 unInputBufferType;
152     OMX_U16 unInputNumBufsPerStream;
153 
154     OMX_U16 unOutputStreamID;
155     OMX_U16 unOutputBufferType;
156     OMX_U16 unOutputNumBufsPerStream;
157     OMX_U16 unReserved;
158 
159     OMX_U32 ulMaxWidth;
160     OMX_U32 ulMaxHeight;
161     OMX_U32 ulYUVFormat;
162     OMX_U32 ulMaxFrameRate;
163     OMX_U32 ulMaxBitRate;
164     OMX_U32 ulDataEndianness;
165     OMX_S32 ulProfile;
166     OMX_S32 ulMaxLevel;
167     OMX_U32 ulProcessMode;
168     OMX_S32 lPreRollBufConfig;
169     OMX_U32 usIsElementaryStream;
170     OMX_U32 bCopiedCCDBuffer;
171     OMX_U16 endArgs;
172 } WMV9DEC_SNCreatePhArg;
173 
174 typedef struct {
175     OMX_S32 lBuffCount;
176 } WMV9DEC_UALGInputParam;
177 
178 typedef struct {
179     OMX_U32 ulDisplayID;
180     OMX_U32 ulBytesConsumed;
181     OMX_S32 iErrorCode;
182     OMX_U32 ulDecodedFrameType;
183 } WMV9DEC_UALGOutputParam;
184 
185 /* Mpeg4 Decoder Structures */
186 typedef enum
187 {
188     /* 0 */
189     DECSTAT_Success,
190     /* 0x80000001 */  DECSTAT_Failure = -0x7FFFFFFF,
191     /* 0x80000002 */  DECSTAT_nonMpegStream,
192     /* 0x80000003 */  DECSTAT_nonVideoMpegStream,
193     /* 0x80000004 */  DECSTAT_unSupportedProfile,
194     /* 0x80000005 */  DECSTAT_invalidBitstreamAddress,
195     /* 0x80000006 */  DECSTAT_invalidVideoObjectLayerStartCode,
196     /* 0x80000007 */  DECSTAT_nullBitstreamAddress,
197     /* 0x80000008 */  DECSTAT_insufficientData,
198     /* 0x80000009 */  DECSTAT_unsupportedVOL_verid,
199     /* 0x8000000A */  DECSTAT_invalidAspectRatio,
200     /* 0x8000000B */  DECSTAT_invalidChromaFormat,
201     /* 0x8000000C */  DECSTAT_unsupportedVOLShape,
202     /* 0x8000000D */  DECSTAT_invalidVOPTimeIncrementResolution,
203     /* 0x8000000E */  DECSTAT_unsupportedFeatureInterlaced,
204     /* 0x8000000F */  DECSTAT_unsupportedFeatureOBMC,
205     /* 0x80000010 */  DECSTAT_unsupportedVideoDataPrecision,
206     /* 0x80000011 */  DECSTAT_unsupportedObjectType,
207     /* 0x80000012 */  DECSTAT_unsupportedFirstQuantMethod,
208     /* 0x80000013 */  DECSTAT_unsupportedFeatureScalability,
209     /* 0x80000014 */  DECSTAT_invalidCallingOrder,
210     /* 0x80000015 */  DECSTAT_invalidVideoObjectSC,
211     /* 0x80000016 */  DECSTAT_invalidVOPSC,
212     /* 0x80000017 */  DECSTAT_invalidQuant,
213     /* 0x80000018 */  DECSTAT_invalidFcode,
214     /* 0x80000019 */  DECSTAT_invalidMBnumInVPH,
215     /* 0x8000001A */  DECSTAT_endOfSequence,
216     /* 0x8000001B */  DECSTAT_invalidGOBnum,
217     /* 0x8000001C */  DECSTAT_corruptedHeader,
218     /* 0x8000001D */  DECSTAT_corruptedBitStream,
219     /* 0x8000001E */  DECSTAT_unsupportedFeatureBFrames,
220     /* 0x8000001F */  DECSTAT_unsupportedFeatureSprite,
221     /* 0x80000020 */  DECSTAT_duringInitialization,
222     /* 0x80000021 */  DECSTAT_initSuccess,
223     /* 0x80000022 */  DECSTAT_noError,
224     /* 0x80000023 */  DECSTAT_unsupportedFeatureQuarterPel,
225     /* 0x80000024 */  DECSTAT_exceededResolution
226 } DEC_STATUS;
227 
228 typedef struct MP2VDEC_SNCreatePhArg
229 {
230     OMX_U16     unNumOfStreams;
231     OMX_U16     unInputStreamID;
232     OMX_U16     unInputBufferType;
233     OMX_U16     unInputNumBufsPerStream;
234     OMX_U16     unOutputStreamID;
235     OMX_U16     unOutputBufferType;
236     OMX_U16     unOutputNumBufsPerStream;
237     OMX_U16     unReserved;
238 
239     OMX_U32     ulMaxWidth;
240     OMX_U32     ulMaxHeight;
241     OMX_U32     ulYUVFormat;
242     OMX_U32     ulMaxFrameRate;
243     OMX_U32     ulMaxBitRate;
244     OMX_U32     ulDataEndianness;
245     OMX_U32     ulProfile;
246     OMX_S32     lMaxLevel;
247     OMX_U32     ulProcessMode;
248     OMX_S32     lPreRollBufConfig;
249     OMX_U32 	ulDisplayWidth;
250     OMX_U16     endArgs;
251 } MP2VDEC_SNCreatePhArg;
252 
253 typedef struct
254 {
255     OMX_S32            lBuffCount;
256 
257 } MP2VDEC_UALGInputParam;
258 
259 typedef struct
260 {
261     OMX_U32           ulDisplayID;
262     OMX_U32           ulBytesConsumed;
263     OMX_S32           lErrorCode;
264     OMX_U32           ulDecodedFrameType;
265     OMX_U32           ulQP[(640 * 480) / 256];
266 } MP2VDEC_UALGOutputParam;
267 
268 typedef struct MP4VD_GPP_SN_Obj_CreatePhase {
269     OMX_U16 unNumOfStreams;
270     OMX_U16 unInputStreamID;
271     OMX_U16 unInputBufferType;
272     OMX_U16 unlInputNumBufsPerStream;
273 
274     OMX_U16 unOutputStreamID;
275     OMX_U16 unOutputBufferType;
276     OMX_U16 unOutputNumBufsPerStream;
277     OMX_U16 unReserved;
278 
279     OMX_U32 ulMaxWidth;
280     OMX_U32 ulMaxHeight;
281     OMX_U32 ulYUVFormat;
282     OMX_U32 ulMaxFrameRate;
283     OMX_U32 ulMaxBitRate;
284     OMX_U32 ulDataEndianness;
285     OMX_U32 ulProfile;
286     OMX_S32 ulMaxLevel;
287     OMX_U32 ulProcessMode;
288     OMX_S32 ulPreRollBufConfig;
289     OMX_U32 ulDisplayWidth;
290     OMX_U16 endArgs;
291 } MP4VD_GPP_SN_Obj_CreatePhase;
292 
293 typedef struct
294 {
295     OMX_S32 nBuffCount;
296     OMX_U32 uRingIOBlocksize;
297     OMX_S32 nPerformMode;
298 } MP4VD_GPP_SN_UALGInputParams;
299 
300 typedef struct
301 {
302     OMX_U32 ulDisplayID;
303     OMX_U32 uBytesConsumed;
304     OMX_S32 iErrorCode;
305     OMX_U32 ulDecodedFrameType;
306     OMX_U32 ulQP[(720 * 576) / 256];
307     OMX_S32 lMbErrorBufFlag;
308     OMX_U8  usMbErrorBuf[(720 * 576) / 256];
309 
310 } MP4VD_GPP_SN_UALGOutputParams;
311 
312 typedef struct H264VDEC_SNCreatePhArg {
313    OMX_U16 unNumOfStreams;
314    OMX_U16 unInputStreamID;
315    OMX_U16 unInputBufferType;
316    OMX_U16 unInputNumBufsPerStream;
317 
318    OMX_U16 unOutputStreamID;
319    OMX_U16 unOutputBufferType;
320    OMX_U16 unOutputNumBufsPerStream;
321    OMX_U16 unReserved;
322 
323    OMX_U32 ulMaxWidth;
324    OMX_U32 ulMaxHeight;
325    OMX_U32 ulYUVFormat;
326    OMX_U32 ulMaxFrameRate;
327    OMX_U32 ulMaxBitRate;
328    OMX_U32 ulDataEndianness;
329    OMX_U32 ulProfile;
330    OMX_S32 ulMaxLevel;
331    OMX_U32 ulProcessMode;
332    OMX_S32 lPreRollBufConfig;
333    OMX_U32 ulBitStreamFormat;
334    OMX_U32 ulDisplayWidth;
335    OMX_U16 endArgs;
336 } H264VDEC_SNCreatePhArg;
337 
338 typedef struct {
339     OMX_S32 lBuffCount;
340 #if 1
341     OMX_U32 ulNumOfNALU;
342     OMX_U32 pNALUSizeArray[H264VDEC_SN_MAX_NALUNITS];
343 /*     OMX_U32 *pNALUSizeArray;*/
344 #endif
345 } H264VDEC_UALGInputParam;
346 
347 #define H264VDEC_SN_MAX_MB_NUMBER 1620
348 
349 typedef struct {
350     OMX_U32 ulDisplayID;
351     OMX_U32 ulBytesConsumed;
352     OMX_S32 iErrorCode;
353     OMX_U32 ulDecodedFrameType;
354 #if 1
355     OMX_U32 ulNumOfNALUDecoded;
356     OMX_S32 lMBErrStatFlag;
357     OMX_U8  pMBErrStatOutBuf[H264VDEC_SN_MAX_MB_NUMBER];
358 #endif
359 } H264VDEC_UALGOutputParam;
360 #ifdef VIDDEC_SPARK_CODE
361 typedef struct SPARKVD_GPP_SN_Obj_CreatePhase {
362     OMX_U16 unNumOfStreams;
363     OMX_U16 unInputStreamID;
364     OMX_U16 unInputBufferType;
365     OMX_U16 unlInputNumBufsPerStream;
366 
367     OMX_U16 unOutputStreamID;
368     OMX_U16 unOutputBufferType;
369     OMX_U16 unOutputNumBufsPerStream;
370 
371     OMX_U32 ulMaxWidth;
372     OMX_U32 ulMaxHeight;
373     OMX_U32 ulYUVFormat;
374     OMX_U32 ulMaxFrameRate;
375     OMX_U32 ulMaxBitRate;
376     OMX_U32 ulDataEndianness;
377     OMX_U32 ulProfile;
378     OMX_S32 ulMaxLevel;
379     OMX_U32 ulProcessMode;
380     OMX_S32 ulPreRollBufConfig;
381     OMX_U16 endArgs;
382 } SPARKVD_GPP_SN_Obj_CreatePhase;
383 
384 typedef struct SPARKVD_GPP_SN_UALGInputParams
385 {
386     long int lBuffCount;
387     long int nIsSparkInput;
388 } SPARKVD_GPP_SN_UALGInputParams;
389 
390 typedef struct SPARKVD_GPP_SN_UALGOutputParams
391 {
392     OMX_U32 ulDisplayID;
393     OMX_U32 uBytesConsumed;
394     OMX_S32 iErrorCode;
395     OMX_U32 ulDecodedFrameType;
396     OMX_U32 ulQP[(720 * 576) / 256];
397 } SPARKVD_GPP_SN_UALGOutputParams;
398 #endif
399 
400 typedef enum {
401     USN_DSPACK_STOP          = 0x0200,
402     USN_DSPACK_PAUSE         = 0x0300,
403     USN_DSPACK_ALGCTRL       = 0x0400,
404     USN_DSPACK_STRMCTRL      = 0x0500,
405     USN_DSPMSG_BUFF_FREE     = 0x0600,
406     USN_DSPACK_SET_STRM_NODE = 0x0700,
407     USN_DSPACK_GET_NODE_PTR  = 0x0800,
408     USN_DSPMSG_EVENT         = 0x0E00
409 }USN_NodeToHostCmd;
410 
411 typedef enum {
412     USN_ERR_NONE,
413     USN_ERR_WARNING,
414     USN_ERR_PROCESS,
415     USN_ERR_PAUSE,
416     USN_ERR_STOP,
417     USN_ERR_ALGCTRL,
418     USN_ERR_STRMCTRL,
419     USN_ERR_UNKNOWN_MSG
420 } USN_ErrTypes;
421 
422 typedef enum {
423     IUALG_OK                  = 0x0000,
424     IUALG_WARN_CONCEALED      = 0x0100,
425     IUALG_WARN_UNDERFLOW      = 0x0200,
426     IUALG_WARN_OVERFLOW       = 0x0300,
427     IUALG_WARN_ENDOFDATA      = 0x0400,
428     IUALG_WARN_PLAYCOMPLETED  = 0x0500,
429     IUALG_ERR_BAD_HANDLE      = 0x0F00,
430     IUALG_ERR_DATA_CORRUPT    = 0x0F01,
431     IUALG_ERR_NOT_SUPPORTED   = 0x0F02,
432     IUALG_ERR_ARGUMENT        = 0x0F03,
433     IUALG_ERR_NOT_READY       = 0x0F04,
434     IUALG_ERR_GENERAL         = 0x0FFF
435 }IUALG_Event;
436 
437 typedef enum {
438     USN_STRMCMD_PLAY,
439     USN_STRMCMD_PAUSE,
440     USN_STRMCMD_STOP,
441     USN_STRMCMD_SETCODECPARAMS,
442     USN_STRMCMD_IDLE,
443     USN_STRMCMD_FLUSH
444 }USN_StrmCmd;
445 
446 /*
447  *  ======== VIDDEC_FrameType ========
448  * XDM supported frame types for video
449  */
450 typedef enum {
451     VIDDEC_I_FRAME =0, VIDDEC_P_FRAME, VIDDEC_B_FRAME,
452     VIDDEC_IDR_FRAME
453 } VIDDEC_FrameType;
454 
455 #define OMX_VIDDEC_1_1
456 #ifdef OMX_VIDDEC_1_1
457     #define OMX_BUFFERFLAG_SYNCFRAME 0x00000020
458 #endif
459 #define VIDDEC_BUFFERFLAG_FRAMETYPE_MASK                    0xF0000000
460 #define VIDDEC_BUFFERFLAG_FRAMETYPE_I_FRAME                 0x10000000
461 #define VIDDEC_BUFFERFLAG_FRAMETYPE_P_FRAME                 0x20000000
462 #define VIDDEC_BUFFERFLAG_FRAMETYPE_B_FRAME                 0x40000000
463 #define VIDDEC_BUFFERFLAG_FRAMETYPE_IDR_FRAME               0x80000000
464 
465 #define VIDDEC_BUFFERFLAG_EXTENDERROR_MASK                  0x0FFFF000
466 #define VIDDEC_BUFFERFLAG_EXTENDERROR_DIRTY                 0x000FF000
467 #define VIDDEC_BUFFERFLAG_EXTENDERROR_APPLIEDCONCEALMENT    0x00200000
468 #define VIDDEC_BUFFERFLAG_EXTENDERROR_INSUFFICIENTDATA      0x00400000
469 #define VIDDEC_BUFFERFLAG_EXTENDERROR_CORRUPTEDDATA         0x00800000
470 #define VIDDEC_BUFFERFLAG_EXTENDERROR_CORRUPTEDHEADER       0x01000000
471 #define VIDDEC_BUFFERFLAG_EXTENDERROR_UNSUPPORTEDINPUT      0x02000000
472 #define VIDDEC_BUFFERFLAG_EXTENDERROR_UNSUPPORTEDPARAM      0x04000000
473 #define VIDDEC_BUFFERFLAG_EXTENDERROR_FATALERROR            0x08000000
474 
475 /*
476  *  Extended error enumeration for XDM compliant encoders and decoders:
477  *
478  *  Bit 16-32 : Reserved
479  *  Bit XDM_FATALERROR:       1 => Fatal error (Stop decoding)
480  *                            0 => Recoverable error
481  *  Bit XDM_UNSUPPORTEDPARAM: 1 => Unsupported input parameter or configuration
482  *                            0 => Ignore
483  *  Bit XDM_UNSUPPORTEDINPUT: 1 => Unsupported feature/ parameter in input,
484  *                            0 => Ignore
485  *  Bit XDM_CORRUPTEDHEADER:  1 => Header problem/ corruption,
486  *                            0 => Ignore
487  *  Bit XDM_CORRUPTEDDATA:    1 => Data problem /corruption,
488  *                            0 => Ignore
489  *  Bit XDM_INSUFFICIENTDATA: 1 => Insufficient data,
490  *                            0 => Ignore
491  *  Bit  XDM_APPLIEDCONCEALMENT:  1 => Applied concelement,
492  *                            0=> Ignore
493  *  Bit  8 :    Reserved
494  *  Bit 7-0 :   Codec & Implementation specific
495  *
496  *  Notes :
497  *  =====
498  *  1) Algorithm will set multiple bits to 1 based on conditions.
499  *     e.g. it will set bits XDM_FATALERROR (fatal) and XDM_UNSUPPORTEDPARAM
500  *     (unsupported params) in case of unsupported run time parameters
501  *  2) Some erors are applicable to decoders only.
502  */
503 typedef enum {
504     VIDDEC_XDM_APPLIEDCONCEALMENT=9, VIDDEC_XDM_INSUFFICIENTDATA=10, VIDDEC_XDM_CORRUPTEDDATA=11,
505     VIDDEC_XDM_CORRUPTEDHEADER=12, VIDDEC_XDM_UNSUPPORTEDINPUT=13, VIDDEC_XDM_UNSUPPORTEDPARAM=14,
506     VIDDEC_XDM_FATALERROR=15
507 } VIDDEC_XDM_ErrorBit;
508 
509 #define VIDDEC_ISFLAGSET(x,y)         (((x)>>(y)) & 0x1)
510 /*#define VIDDEC_ISFLAGSET(x,y)         ((((OMX_S32*)(x))>>((OMX_S32*)(y))) & 0x1) */
511 
512 /** @enum M4H3DEC_TI_ERROR */
513 typedef enum {
514   /* 00 */  M4H3DEC_TI_ERROR_Success = 0,
515   /* 01 */  M4H3DEC_TI_ERROR_Failure ,
516   /* 02 */  M4H3DEC_TI_ERROR_nonMpegStream,
517   /* 03 */  M4H3DEC_TI_ERROR_nonVideoMpegStream,
518   /* 04 */  M4H3DEC_TI_ERROR_unSupportedProfile,
519   /* 05 */  M4H3DEC_TI_ERROR_invalidBitstreamAddress,
520   /* 06 */  M4H3DEC_TI_ERROR_invalidVideoObjectLayerStartCode,
521   /* 07 */  M4H3DEC_TI_ERROR_nullBitstreamAddress,
522   /* 08 */  M4H3DEC_TI_ERROR_insufficientData,
523   /* 09 */  M4H3DEC_TI_ERROR_unsupportedVOL_verid,
524   /* 10 */  M4H3DEC_TI_ERROR_invalidAspectRatio,
525   /* 11 */  M4H3DEC_TI_ERROR_invalidChromaFormat,
526   /* 12 */  M4H3DEC_TI_ERROR_unsupportedVOLShape,
527   /* 13 */  M4H3DEC_TI_ERROR_invalidVOPTimeIncrementResolution,
528   /* 14 */  M4H3DEC_TI_ERROR_unsupportedFeatureInterlaced,
529   /* 15 */  M4H3DEC_TI_ERROR_unsupportedFeatureOBMC,
530   /* 16 */  M4H3DEC_TI_ERROR_unsupportedVideoDataPrecision,
531   /* 17 */  M4H3DEC_TI_ERROR_unsupportedObjectType,
532   /* 18 */  M4H3DEC_TI_ERROR_unsupportedFirstQuantMethod,
533   /* 19 */  M4H3DEC_TI_ERROR_unsupportedFeatureScalability,
534   /* 20 */  M4H3DEC_TI_ERROR_invalidCallingOrder,
535   /* 21 */  M4H3DEC_TI_ERROR_invalidVideoObjectSC,
536   /* 22 */  M4H3DEC_TI_ERROR_invalidVOPSC,
537   /* 23 */  M4H3DEC_TI_ERROR_invalidQuant,
538   /* 24 */  M4H3DEC_TI_ERROR_invalidFcode,
539   /* 25 */  M4H3DEC_TI_ERROR_invalidMBnumInVPH,
540   /* 26 */  M4H3DEC_TI_ERROR_endOfSequence,
541   /* 27 */  M4H3DEC_TI_ERROR_invalidGOBnum,
542   /* 28 */  M4H3DEC_TI_ERROR_corruptedHeader,
543   /* 29 */  M4H3DEC_TI_ERROR_corruptedBitStream,
544   /* 30 */  M4H3DEC_TI_ERROR_unsupportedFeatureBFrames,
545   /* 31 */  M4H3DEC_TI_ERROR_unsupportedFeatureSprite,
546   /* 32 */  M4H3DEC_TI_ERROR_unsupportedFeatureQuarterPel,
547   /* 33 */  M4H3DEC_TI_ERROR_exceededResolution,
548   /* 34 */    M4H3DEC_TI_ERROR_unsupportedFeatureIntraDcVlcThreshold,
549   /* 35 */  M4H3DEC_TI_ERROR_invalidValue,
550   /* 36 */  M4H3DEC_TI_ERROR_stuffingInMB,
551   /* 37 */  M4H3DEC_TI_ERROR_numMbRowsInVpExceeded,
552   /* 38 */  M4H3DEC_TI_ERROR_cannotdecodempeg4,
553   /* 39 */  M4H3DEC_TI_ERROR_incorrectWidthHeight,
554   /* 40 */  M4H3DEC_TI_ERROR_insufficientMemory,
555 } VIDDEC_M4H3DEC_TI_ERROR;
556 
557 /* ======================================================================= */
558 /* WMV9DEC_UALGDynamicParams - This structure defines the run-time algorithm
559  * specific and UALG parameters which can be configured.
560  *
561  * @param ulDecodeHeader    :Parse header.
562  *
563  * @param ulDisplayWidth    :Pitch value. Used as pitch only if this value
564  * is greater than Video width.
565  *
566  * @param ulFrameSkipMode   :Frame skip mode.
567  *
568  * @param ulPPType          :Post-processing type required.
569  *
570  */
571 /* ==================================================================== */
572 typedef struct WMV9DEC_UALGDynamicParams
573 {
574 #ifdef VIDDEC_SN_R8_14
575     OMX_S32 size;
576 #endif
577     OMX_U32 ulDecodeHeader;
578     OMX_U32 ulDisplayWidth;
579     OMX_U32 ulFrameSkipMode;
580     OMX_U32 ulPPType;
581     OMX_U16 usIsElementaryStream;
582 
583 }WMV9DEC_UALGDynamicParams;
584 
585 typedef struct H264_Iualg_Cmd_SetStatus
586 {
587 #ifdef VIDDEC_SN_R8_14
588     OMX_S32 size;
589 #endif
590     OMX_U32 ulDecodeHeader;
591     OMX_U32 ulDisplayWidth;
592     OMX_U32 ulFrameSkipMode;
593     OMX_U32 ulPPType;
594 
595 /*#if defined(WMV9PGIN)    */
596  /*   OMX_U16 usIsElementaryStream; */
597 /*#endif */
598 } H264_Iualg_Cmd_SetStatus;
599 
600 typedef struct MP4VDEC_UALGDynamicParams
601 {
602 #ifdef VIDDEC_SN_R8_14
603   OMX_S32           size;
604 #endif
605   OMX_U32         ulDecodeHeader;
606   OMX_U32         ulDisplayWidth;
607   OMX_U32         ulFrameSkipMode;
608   OMX_U32         ulPPType;
609   OMX_BOOL        useHighPrecIdctQp1;
610 }MP4VDEC_UALGDynamicParams;
611 
612 #ifdef VIDDEC_SPARK_CODE
613 typedef struct SPARKVDEC_UALGDynamicParams
614 {
615 #ifdef VIDDEC_SN_R8_14
616   OMX_S32           size;
617 #endif
618   OMX_U32         ulDecodeHeader;
619   OMX_U32         ulDisplayWidth;
620   OMX_U32         ulFrameSkipMode;
621   OMX_U32        ulPPType;
622 }SPARKVDEC_UALGDynamicParams;
623 #endif
624 
625 typedef struct MP2VDEC_UALGDynamicParams
626 {
627 #ifdef VIDDEC_SN_R8_14
628     OMX_S32            size;
629 #endif
630     OMX_U32            ulDecodeHeader;
631     OMX_U32            ulDisplayWidth;
632     OMX_U32            ulFrameSkipMode;
633     OMX_U32            ulPPType;
634     OMX_U32            ulPpNone;                  /* This will generate 4:2:0 planar output */
635     OMX_U32            ulDyna_chroma_format;      /* If ON, chroma format can be modified at the format level */
636 
637 } MP2VDEC_UALGDynamicParams;
638 
639 #endif
640 
641