xref: /utopia/UTPA2-700.0.x/modules/vdec_v2/api/vdec_ex/apiVDEC_wrap.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 //    Software and any modification/derivatives thereof.
18 //    No right, ownership, or interest to MStar Software and any
19 //    modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 //    supplied together with third party`s software and the use of MStar
23 //    Software may require additional licenses from third parties.
24 //    Therefore, you hereby agree it is your sole responsibility to separately
25 //    obtain any and all third party right and license necessary for your use of
26 //    such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 //    MStar`s confidential information and you agree to keep MStar`s
30 //    confidential information in strictest confidence and not disclose to any
31 //    third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35 //    without limitation, any warranties of merchantability, non-infringement of
36 //    intellectual property rights, fitness for a particular purpose, error free
37 //    and in conformity with any international standard.  You agree to waive any
38 //    claim against MStar for any loss, damage, cost or expense that you may
39 //    incur related to your use of MStar Software.
40 //    In no event shall MStar be liable for any direct, indirect, incidental or
41 //    consequential damages, including without limitation, lost of profit or
42 //    revenues, lost or damage of data, and unauthorized system use.
43 //    You agree that this Section 4 shall still apply without being affected
44 //    even if MStar Software has been modified by MStar in accordance with your
45 //    request or instruction for your use, except otherwise agreed by both
46 //    parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 //    services in relation with MStar Software to you for your use of
50 //    MStar Software in conjunction with your or your customer`s product
51 //    ("Services").
52 //    You understand and agree that, except otherwise agreed by both parties in
53 //    writing, Services are provided on an "AS IS" basis and the warranty
54 //    disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 //    or otherwise:
58 //    (a) conferring any license or right to use MStar name, trademark, service
59 //        mark, symbol or any other identification;
60 //    (b) obligating MStar or any of its affiliates to furnish any person,
61 //        including without limitation, you and your customers, any assistance
62 //        of any kind whatsoever, or any information; or
63 //    (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 //    of Taiwan, R.O.C., excluding its conflict of law rules.
67 //    Any and all dispute arising out hereof or related hereto shall be finally
68 //    settled by arbitration referred to the Chinese Arbitration Association,
69 //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 //    Rules of the Association by three (3) arbitrators appointed in accordance
71 //    with the said Rules.
72 //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73 //    be English.
74 //    The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94 
95 ///////////////////////////////////////////////////////////////////////////////////////////////////
96 ///
97 /// file    apiVDEC_wrap.c
98 /// @brief  wrapper to wrap VDEC_EX to VDEC API
99 /// @author MStar Semiconductor Inc.
100 ///////////////////////////////////////////////////////////////////////////////////////////////////
101 
102 
103 //-------------------------------------------------------------------------------------------------
104 //  Include Files
105 //-------------------------------------------------------------------------------------------------
106 #include "MsCommon.h"
107 #include "MsVersion.h"
108 #include "apiVDEC.h"
109 #include "apiVDEC_EX.h"
110 
111 #include "drvMMIO.h"
112 
113 #ifdef MSOS_TYPE_LINUX_KERNEL
114 #include <asm/div64.h>
115 #endif
116 
117 #ifdef MSOS_TYPE_LINUX_KERNEL
118 #include <linux/string.h>
119 #else
120 #include <string.h>
121 #endif
122 
123 //-------------------------------------------------------------------------------------------------
124 //  Local Compiler Options
125 //-------------------------------------------------------------------------------------------------
126 
127 //-------------------------------------------------------------------------------------------------
128 //  Function and Variable
129 //-------------------------------------------------------------------------------------------------
130 
131 //-------------------------------------------------------------------------------------------------
132 //  Local Defines
133 //-------------------------------------------------------------------------------------------------
134 #define _VDEC_Memcpy(pDstAddr, pSrcAddr, u32Size)   memcpy((pDstAddr), (pSrcAddr), (u32Size))
135 #define _VDEC_Memset(pDstAddr, u8value, u32Size)    memset((pDstAddr), (u8value), (u32Size))
136 
137 #define _VDEC_WRAP_NOT_INIT_RET()                            \
138       do {                                                   \
139             if (VDEC_U32_MAX == stStreamId.u32Id)            \
140             {                                                \
141                 return E_VDEC_RET_NOT_INIT;                  \
142             }                                                \
143       } while(0)
144 
145 #define _VDEC_WRAP_NOT_INIT_RET_ZERO()                       \
146       do {                                                   \
147             if (VDEC_U32_MAX == stStreamId.u32Id)            \
148             {                                                \
149                 return 0;                                    \
150             }                                                \
151       } while(0)
152 
153 #define VDEC_U32_MAX            0xffffffffUL
154 
155 #if ((defined(CHIP_A1) || defined(CHIP_A7)) && defined (__aeon__))
156 #define VDEC_INFO(x)
157 #else
158 #define VDEC_INFO(x)    if (_eDbgMsgLevel >= E_VDEC_DBG_LEVEL_INFO) { (x); }
159 #endif
160 
161 #ifndef UNUSED
162 #define UNUSED(x) (void)(x)
163 #endif
164 
165 //-------------------------------------------------------------------------------------------------
166 //  Local Structures
167 //-------------------------------------------------------------------------------------------------
168 
169 
170 //------------------------------------------------------------------------------
171 // Local Functions Prototype
172 //------------------------------------------------------------------------------
173 
174 
175 //-------------------------------------------------------------------------------------------------
176 //  Global Variables
177 //-------------------------------------------------------------------------------------------------
178 
179 
180 //-------------------------------------------------------------------------------------------------
181 //  Local Variables
182 //-------------------------------------------------------------------------------------------------
183 
184 #ifndef MSOS_TYPE_NUTTX
185 
186 //Use EX_MAIN stream for the original VDEC interface
187 static VDEC_EX_Stream eStType = E_VDEC_EX_MAIN_STREAM;
188 
189 //StreamID for VDEC_EX interface
190 static VDEC_StreamId stStreamId = {
191                                       0,            //u32Version
192                                       VDEC_U32_MAX  //u32Id
193                                   };
194 
195 static VDEC_Info        _api_vdec_info;
196 #if !((defined(CHIP_A1) || defined(CHIP_A7)) && defined (__aeon__))
197 static VDEC_DbgLevel    _eDbgMsgLevel = E_VDEC_DBG_LEVEL_ERR;
198 #endif
199 static VDEC_InitParam   _vdecInitParam;
200 
_VDEC_MapResult(VDEC_EX_Result eEXRet)201 static VDEC_Result _VDEC_MapResult(VDEC_EX_Result eEXRet)
202 {
203     VDEC_Result eRet = E_VDEC_FAIL;
204     const VDEC_Result eRetMapTable[E_VDEC_EX_RET_NUM] =
205     {
206         E_VDEC_FAIL,
207         E_VDEC_OK,
208         E_VDEC_RET_INVALID_PARAM,
209         E_VDEC_RET_ILLEGAL_ACCESS,
210         E_VDEC_RET_HARDWARE_BREAKDOWN,
211         E_VDEC_RET_UNSUPPORTED,
212         E_VDEC_RET_TIMEOUT,
213         E_VDEC_RET_NOT_READY,
214         E_VDEC_RET_NOT_INIT,
215         E_VDEC_RET_NOT_EXIT,
216         E_VDEC_RET_NOT_RUNNING
217     };
218 
219     if (eEXRet < E_VDEC_EX_RET_NUM)
220     {
221         eRet = eRetMapTable[eEXRet];
222     }
223     return eRet;
224 }
225 
_VDEC_MapDispInfo(VDEC_EX_DispInfo * pExDisp,VDEC_DispInfo * pDisp)226 static void _VDEC_MapDispInfo(VDEC_EX_DispInfo* pExDisp, VDEC_DispInfo* pDisp)
227 {
228     pDisp->u16HorSize        = pExDisp->u16HorSize;
229     pDisp->u16VerSize        = pExDisp->u16VerSize;
230     pDisp->u32FrameRate      = pExDisp->u32FrameRate;
231     pDisp->u8Interlace       = pExDisp->u8Interlace;
232     pDisp->u8AFD             = pExDisp->u8AFD;
233     pDisp->u16SarWidth       = pExDisp->u16SarWidth;
234     pDisp->u16SarHeight      = pExDisp->u16SarHeight;
235     pDisp->u16CropRight      = pExDisp->u16CropRight;
236     pDisp->u16CropLeft       = pExDisp->u16CropLeft;
237     pDisp->u16CropBottom     = pExDisp->u16CropBottom;
238     pDisp->u16CropTop        = pExDisp->u16CropTop;
239     pDisp->u16Pitch          = pExDisp->u16Pitch;
240     pDisp->u16PTSInterval    = pExDisp->u16PTSInterval;
241     pDisp->u8MPEG1           = pExDisp->u8MPEG1;
242     pDisp->u8PlayMode        = pExDisp->u8PlayMode;
243     pDisp->u8FrcMode         = pExDisp->u8FrcMode;
244     pDisp->u8AspectRate      = pExDisp->u8AspectRate;
245     pDisp->bWithChroma       = pExDisp->bWithChroma;
246     pDisp->bColorInXVYCC     = pExDisp->bColorInXVYCC;
247     pDisp->u32DynScalingAddr = pExDisp->u32DynScalingAddr;
248     pDisp->u32DynScalingSize = pExDisp->u32DynScalingSize;
249     pDisp->u8DynScalingDepth = pExDisp->u8DynScalingDepth;
250     pDisp->bEnableMIUSel   = pExDisp->bEnableMIUSel;
251     pDisp->u32AspectWidth  = pExDisp->u32AspectWidth;
252     pDisp->u32AspectHeight = pExDisp->u32AspectHeight;
253 }
254 
_VDEC_MapExDecCmd(VDEC_DecCmd * pCmd,VDEC_EX_DecCmd * pExCmd)255 static void _VDEC_MapExDecCmd(VDEC_DecCmd *pCmd, VDEC_EX_DecCmd *pExCmd)
256 {
257     pExCmd->u32ID_H      = pCmd->u32ID_H;
258     pExCmd->u32ID_L      = pCmd->u32ID_L;
259     pExCmd->u32StAddr    = pCmd->u32StAddr;
260     pExCmd->u32Size      = pCmd->u32Size;
261     pExCmd->u32Timestamp = pCmd->u32Timestamp;
262 }
263 
_VDEC_MapFrameType(VDEC_EX_FrameType eExFrameType)264 static VDEC_FrameType _VDEC_MapFrameType(VDEC_EX_FrameType eExFrameType)
265 {
266     const VDEC_FrameType eFrmTypeMapTable[E_VDEC_EX_FRM_TYPE_NUM] =
267     {
268         E_VDEC_FRM_TYPE_I,
269         E_VDEC_FRM_TYPE_P,
270         E_VDEC_FRM_TYPE_B,
271         E_VDEC_FRM_TYPE_OTHER
272     };
273     VDEC_FrameType eFrameType = eFrmTypeMapTable[eExFrameType];
274     MS_ASSERT(eExFrameType < E_VDEC_EX_FRM_TYPE_NUM);
275     return eFrameType;
276 }
277 
_VDEC_MapFieldType(VDEC_EX_FieldType eExFieldType)278 static VDEC_FieldType _VDEC_MapFieldType(VDEC_EX_FieldType eExFieldType)
279 {
280     const VDEC_FieldType eFieldTypeMapTable[E_VDEC_EX_FIELDTYPE_NUM] =
281     {
282         E_VDEC_FIELDTYPE_NONE,
283         E_VDEC_FIELDTYPE_TOP,
284         E_VDEC_FIELDTYPE_BOTTOM,
285         E_VDEC_FIELDTYPE_BOTH
286     };
287     VDEC_FieldType eFieldType = eFieldTypeMapTable[eExFieldType];
288     MS_ASSERT(eExFieldType < E_VDEC_EX_FIELDTYPE_NUM);
289     return eFieldType;
290 }
291 
_VDEC_MapFrameInfo(VDEC_EX_FrameInfo * pExFrmInfo,VDEC_FrameInfo * pFrmInfo)292 static void _VDEC_MapFrameInfo(VDEC_EX_FrameInfo* pExFrmInfo, VDEC_FrameInfo* pFrmInfo)
293 {
294     pFrmInfo->u32LumaAddr   = pExFrmInfo->u32LumaAddr  ;
295     pFrmInfo->u32ChromaAddr = pExFrmInfo->u32ChromaAddr;
296     pFrmInfo->u32TimeStamp  = pExFrmInfo->u32TimeStamp ;
297     pFrmInfo->u32ID_L       = pExFrmInfo->u32ID_L;
298     pFrmInfo->u32ID_H       = pExFrmInfo->u32ID_H;
299     pFrmInfo->u16Pitch      = pExFrmInfo->u16Pitch;
300     pFrmInfo->u16Width      = pExFrmInfo->u16Width;
301     pFrmInfo->u16Height     = pExFrmInfo->u16Height;
302     pFrmInfo->eFrameType    = _VDEC_MapFrameType(pExFrmInfo->eFrameType);
303     pFrmInfo->eFieldType    = _VDEC_MapFieldType(pExFrmInfo->eFieldType);
304 }
305 
_VDEC_MapExtDispInfo(VDEC_EX_ExtDispInfo * pExFrmInfo,VDEC_ExtDispInfo * pFrmInfo)306 static void _VDEC_MapExtDispInfo(VDEC_EX_ExtDispInfo* pExFrmInfo, VDEC_ExtDispInfo* pFrmInfo)
307 {
308     pFrmInfo->u16VSize = pExFrmInfo->u16VSize;
309     pFrmInfo->u16HSize = pExFrmInfo->u16HSize;
310     pFrmInfo->s16HOffset= pExFrmInfo->s16HOffset;
311     pFrmInfo->s16VOffset= pExFrmInfo->s16VOffset;
312 }
313 
_VDEC_MapTrickDecMode(VDEC_EX_TrickDec eExTrickDec)314 static VDEC_TrickDec _VDEC_MapTrickDecMode(VDEC_EX_TrickDec eExTrickDec)
315 {
316     const VDEC_TrickDec eTrickDecMapTable[E_VDEC_EX_TRICK_DEC_NUM] =
317     {
318         E_VDEC_TRICK_DEC_ALL,
319         E_VDEC_TRICK_DEC_IP,
320         E_VDEC_TRICK_DEC_I
321     };
322     VDEC_TrickDec eTrickDec = eTrickDecMapTable[eExTrickDec];
323     MS_ASSERT(eExTrickDec < E_VDEC_EX_TRICK_DEC_NUM);
324     return eTrickDec;
325 }
326 
_VDEC_MapExTrickDecMode(VDEC_TrickDec eTrickDec)327 static VDEC_EX_TrickDec _VDEC_MapExTrickDecMode(VDEC_TrickDec eTrickDec)
328 {
329 #if 1
330     VDEC_EX_TrickDec eExTrickDec = E_VDEC_EX_TRICK_DEC_ALL;
331 
332     switch (eTrickDec)
333     {
334         case E_VDEC_TRICK_DEC_ALL:
335             eExTrickDec = E_VDEC_EX_TRICK_DEC_ALL;
336             break;
337         case E_VDEC_TRICK_DEC_IP:
338             eExTrickDec = E_VDEC_EX_TRICK_DEC_IP;
339             break;
340         case E_VDEC_TRICK_DEC_I:
341             eExTrickDec = E_VDEC_EX_TRICK_DEC_I;
342             break;
343         default:
344             eExTrickDec = E_VDEC_EX_TRICK_DEC_ALL;
345             MS_ASSERT(0);
346             break;
347     }
348 
349     return eExTrickDec;
350 #else
351     const VDEC_EX_TrickDec eExTrickDecMapTable[E_VDEC_EX_TRICK_DEC_NUM] =
352     {
353         E_VDEC_EX_TRICK_DEC_ALL,
354         E_VDEC_EX_TRICK_DEC_IP,
355         E_VDEC_EX_TRICK_DEC_I
356     };
357     VDEC_EX_TrickDec eExTrickDec = eExTrickDecMapTable[eTrickDec];
358     MS_ASSERT(eTrickDec < E_VDEC_EX_TRICK_DEC_NUM);
359     return eExTrickDec;
360 #endif
361 }
362 
_VDEC_MapExFreezePicSel(VDEC_FreezePicSelect ePicSel)363 static VDEC_EX_FreezePicSelect _VDEC_MapExFreezePicSel(VDEC_FreezePicSelect ePicSel)
364 {
365     VDEC_EX_FreezePicSelect eExPicSel = E_VDEC_EX_FREEZE_AT_CUR_PIC;
366 
367     switch (ePicSel)
368     {
369         case E_VDEC_FREEZE_AT_CUR_PIC:
370             eExPicSel = E_VDEC_EX_FREEZE_AT_CUR_PIC;
371             break;
372 
373         case E_VDEC_FREEZE_AT_LAST_PIC:
374             eExPicSel = E_VDEC_EX_FREEZE_AT_LAST_PIC;
375             break;
376         default:
377             eExPicSel = E_VDEC_EX_FREEZE_AT_LAST_PIC;
378             MS_ASSERT(0);
379             break;
380     }
381     return eExPicSel;
382 }
383 
_VDEC_MapExSpeedType(VDEC_SpeedType eSpeedType)384 static VDEC_EX_SpeedType _VDEC_MapExSpeedType(VDEC_SpeedType eSpeedType)
385 {
386     VDEC_EX_SpeedType eExSpeedType = E_VDEC_EX_SPEED_DEFAULT;
387 
388     switch (eSpeedType)
389     {
390         case E_VDEC_SPEED_DEFAULT:
391             eExSpeedType = E_VDEC_EX_SPEED_DEFAULT;
392             break;
393         case E_VDEC_SPEED_FAST:
394             eExSpeedType = E_VDEC_EX_SPEED_FAST;
395             break;
396         case E_VDEC_SPEED_SLOW:
397             eExSpeedType = E_VDEC_EX_SPEED_SLOW;
398             break;
399         default:
400             eExSpeedType = E_VDEC_EX_SPEED_DEFAULT;
401             MS_ASSERT(0);
402             break;
403     }
404 
405     return eExSpeedType;
406 }
407 
_VDEC_MapExDispSpeed(VDEC_DispSpeed eSpeed)408 static VDEC_EX_DispSpeed _VDEC_MapExDispSpeed(VDEC_DispSpeed eSpeed)
409 {
410     VDEC_EX_DispSpeed eExSpeed = E_VDEC_EX_DISP_SPEED_1X;
411 
412     switch (eSpeed)
413     {
414         case E_VDEC_DISP_SPEED_1X:
415             eExSpeed = E_VDEC_EX_DISP_SPEED_1X;
416             break;
417         case E_VDEC_DISP_SPEED_2X:
418             eExSpeed = E_VDEC_EX_DISP_SPEED_2X;
419             break;
420         case E_VDEC_DISP_SPEED_4X :
421             eExSpeed = E_VDEC_EX_DISP_SPEED_4X;
422             break;
423         case E_VDEC_DISP_SPEED_8X :
424             eExSpeed = E_VDEC_EX_DISP_SPEED_8X;
425             break;
426         case E_VDEC_DISP_SPEED_16X:
427             eExSpeed = E_VDEC_EX_DISP_SPEED_16X;
428             break;
429         case E_VDEC_DISP_SPEED_32X:
430             eExSpeed = E_VDEC_EX_DISP_SPEED_32X;
431             break;
432         default:
433             eExSpeed = E_VDEC_EX_DISP_SPEED_1X;
434             MS_ASSERT(0);
435             break;
436     }
437 
438     return eExSpeed;
439 }
440 
_VDEC_MapTimeCode(VDEC_EX_TimeCode * pstExTimeCode,VDEC_TimeCode * pstTimeCode)441 static void _VDEC_MapTimeCode(VDEC_EX_TimeCode* pstExTimeCode, VDEC_TimeCode* pstTimeCode)
442 {
443     pstTimeCode->u8TimeCodeHr  = pstExTimeCode->u8TimeCodeHr;
444     pstTimeCode->u8TimeCodeMin = pstExTimeCode->u8TimeCodeMin;
445     pstTimeCode->u8TimeCodeSec = pstExTimeCode->u8TimeCodeSec;
446     pstTimeCode->u8TimeCodePic = pstExTimeCode->u8TimeCodePic;
447     pstTimeCode->u8DropFrmFlag = pstExTimeCode->u8DropFrmFlag;
448 }
449 
_VDEC_MapExPatternType(VDEC_PatternType ePatternType)450 static VDEC_EX_PatternType _VDEC_MapExPatternType(VDEC_PatternType ePatternType)
451 {
452     VDEC_EX_PatternType eExPatternType = E_VDEC_EX_PATTERN_FLUSH;
453 
454     if (ePatternType == E_VDEC_PATTERN_FLUSH)
455     {
456         eExPatternType = E_VDEC_EX_PATTERN_FLUSH;
457     }
458     else if (ePatternType == E_VDEC_PATTERN_FILEEND)
459     {
460         eExPatternType = E_VDEC_EX_PATTERN_FILEEND;
461     }
462     else
463     {
464         MS_ASSERT(0);
465     }
466 
467     return eExPatternType;
468 }
469 
_VDEC_MapStatus(VDEC_EX_Status * pExStatus,VDEC_Status * pStatus)470 static void _VDEC_MapStatus(VDEC_EX_Status* pExStatus, VDEC_Status* pStatus)
471 {
472     pStatus->bInit  = pExStatus->bInit;
473     pStatus->bIdle  = pExStatus->bIdle;
474     switch (pExStatus->eStage)
475     {
476         case E_VDEC_EX_STAGE_STOP:  pStatus->eStage = E_VDEC_STAGE_STOP; break;
477         case E_VDEC_EX_STAGE_INIT:  pStatus->eStage = E_VDEC_STAGE_INIT; break;
478         case E_VDEC_EX_STAGE_PLAY:  pStatus->eStage = E_VDEC_STAGE_PLAY; break;
479         case E_VDEC_EX_STAGE_PAUSE: pStatus->eStage = E_VDEC_STAGE_PAUSE; break;
480         default:    pStatus->eStage = E_VDEC_STAGE_STOP; break;
481     }
482     return;
483 }
484 
_VDEC_MapCodecType(VDEC_EX_CodecType eExCodecType)485 static VDEC_CodecType _VDEC_MapCodecType(VDEC_EX_CodecType eExCodecType)
486 {
487     VDEC_CodecType eCodecType = E_VDEC_CODEC_TYPE_NONE;
488 
489     const VDEC_CodecType eCodecTypeMapTable[E_VDEC_EX_CODEC_TYPE_NUM] =
490     {
491         E_VDEC_CODEC_TYPE_NONE,
492         E_VDEC_CODEC_TYPE_MPEG2,
493         E_VDEC_CODEC_TYPE_H263,
494         E_VDEC_CODEC_TYPE_MPEG4,
495         E_VDEC_CODEC_TYPE_DIVX311,
496         E_VDEC_CODEC_TYPE_DIVX412,
497         E_VDEC_CODEC_TYPE_FLV,
498         E_VDEC_CODEC_TYPE_VC1_ADV,
499         E_VDEC_CODEC_TYPE_VC1_MAIN,
500         E_VDEC_CODEC_TYPE_RV8,
501         E_VDEC_CODEC_TYPE_RV9,
502         E_VDEC_CODEC_TYPE_H264,
503         E_VDEC_CODEC_TYPE_AVS,
504         E_VDEC_CODEC_TYPE_MJPEG,
505         E_VDEC_CODEC_TYPE_MVC,
506         E_VDEC_CODEC_TYPE_VP8,
507         E_VDEC_CODEC_TYPE_HEVC,
508     };
509 
510     if (eExCodecType < E_VDEC_EX_CODEC_TYPE_NUM)
511     {
512         eCodecType = eCodecTypeMapTable[eExCodecType];
513     }
514 
515     return eCodecType;
516 }
517 
_VDEC_MapExCodecType(VDEC_CodecType eCodecType)518 static VDEC_EX_CodecType _VDEC_MapExCodecType(VDEC_CodecType eCodecType)
519 {
520     VDEC_EX_CodecType eExCodecType = E_VDEC_EX_CODEC_TYPE_NONE;
521 
522     const VDEC_EX_CodecType eExCodecTypeMapTable[E_VDEC_EX_CODEC_TYPE_NUM] =
523     {
524         E_VDEC_EX_CODEC_TYPE_NONE,
525         E_VDEC_EX_CODEC_TYPE_MPEG2,
526         E_VDEC_EX_CODEC_TYPE_H263,
527         E_VDEC_EX_CODEC_TYPE_MPEG4,
528         E_VDEC_EX_CODEC_TYPE_DIVX311,
529         E_VDEC_EX_CODEC_TYPE_DIVX412,
530         E_VDEC_EX_CODEC_TYPE_FLV,
531         E_VDEC_EX_CODEC_TYPE_VC1_ADV,
532         E_VDEC_EX_CODEC_TYPE_VC1_MAIN,
533         E_VDEC_EX_CODEC_TYPE_RV8,
534         E_VDEC_EX_CODEC_TYPE_RV9,
535         E_VDEC_EX_CODEC_TYPE_H264,
536         E_VDEC_EX_CODEC_TYPE_AVS,
537         E_VDEC_EX_CODEC_TYPE_MJPEG,
538         E_VDEC_EX_CODEC_TYPE_MVC,
539         E_VDEC_EX_CODEC_TYPE_VP8,
540         E_VDEC_EX_CODEC_TYPE_HEVC,
541     };
542 
543     if (eExCodecType < E_VDEC_EX_CODEC_TYPE_NUM)
544     {
545         eExCodecType = eExCodecTypeMapTable[eCodecType];
546     }
547 
548     return eExCodecType;
549 }
550 
551 //-------------------------------------------------------------------------------------------------
552 //  Debug Functions
553 //-------------------------------------------------------------------------------------------------
MApi_VDEC_DbgCmd(MS_U32 u8Cmd,MS_U32 u32CmdArg)554 VDEC_Result MApi_VDEC_DbgCmd(MS_U32 u8Cmd, MS_U32 u32CmdArg)
555 {
556     _VDEC_WRAP_NOT_INIT_RET();
557 
558     VDEC_Result eRetVal  = E_VDEC_FAIL;
559     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
560     eEXRetVal = MApi_VDEC_EX_DbgCmd(&stStreamId, u8Cmd, u32CmdArg);
561     eRetVal = _VDEC_MapResult(eEXRetVal);
562 
563     return eRetVal;
564 }
565 
MApi_VDEC_DbgSetData(MS_VIRT u32Addr,MS_U32 u32Data)566 VDEC_Result MApi_VDEC_DbgSetData(MS_VIRT u32Addr, MS_U32 u32Data)
567 {
568     _VDEC_WRAP_NOT_INIT_RET();
569 
570     VDEC_Result eRetVal  = E_VDEC_FAIL;
571     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
572     eEXRetVal = MApi_VDEC_EX_DbgSetData(&stStreamId, u32Addr, u32Data);
573     eRetVal = _VDEC_MapResult(eEXRetVal);
574 
575     return eRetVal;
576 }
577 
MApi_VDEC_DbgGetData(MS_VIRT u32Addr,MS_U32 * u32Data)578 VDEC_Result MApi_VDEC_DbgGetData(MS_VIRT u32Addr, MS_U32 *u32Data)
579 {
580     _VDEC_WRAP_NOT_INIT_RET();
581 
582     VDEC_Result eRetVal  = E_VDEC_FAIL;
583     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
584     eEXRetVal = MApi_VDEC_EX_DbgGetData(&stStreamId, u32Addr, u32Data);
585     eRetVal = _VDEC_MapResult(eEXRetVal);
586 
587     return eRetVal;
588 }
589 
590 //-------------------------------------------------------------------------------------------------
591 //  Local Functions
592 //-------------------------------------------------------------------------------------------------
593 
594 //-------------------------------------------------------------------------------------------------
595 //  Global Functions
596 //-------------------------------------------------------------------------------------------------
597 
598 //------------------------------------------------------------------------------
599 /// Get VDEC version
600 /// @return -the pointer to the VDEC version
601 //------------------------------------------------------------------------------
MApi_VDEC_GetLibVer(const MSIF_Version ** ppVersion)602 VDEC_Result MApi_VDEC_GetLibVer(const MSIF_Version **ppVersion)
603 {
604     VDEC_Result eRetVal  = E_VDEC_FAIL;
605     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
606     if (!ppVersion)
607     {
608         return eRetVal;
609     }
610 
611     eEXRetVal = MApi_VDEC_EX_GetLibVer(ppVersion);
612     eRetVal = _VDEC_MapResult(eEXRetVal);
613     return eRetVal;
614 }
615 
616 //-----------------------------------------------------------------------------
617 /// Get VDEC info
618 /// @brief \b Function \b Description:  Get information of VDEC API
619 /// @return - the pointer to the VDEC information
620 //-----------------------------------------------------------------------------
MApi_VDEC_GetInfo(const VDEC_Info ** ppInfo)621 VDEC_Result MApi_VDEC_GetInfo(const VDEC_Info **ppInfo)
622 {
623     if (!ppInfo)
624     {
625         return E_VDEC_FAIL;
626     }
627 
628     *ppInfo = &_api_vdec_info;
629 
630     return E_VDEC_OK;
631 }
632 
633 //------------------------------------------------------------------------------
634 /// Get decoder status
635 /// @param pStatus \b OUT : VDEC_Status
636 /// @return TRUE or FALSE
637 ///     - TRUE: Useful status got
638 ///     - FALSE: No status because of not init yet
639 //------------------------------------------------------------------------------
MApi_VDEC_GetStatus(VDEC_Status * pStatus)640 MS_BOOL MApi_VDEC_GetStatus(VDEC_Status *pStatus)
641 {
642     MS_BOOL bRet = FALSE;
643     VDEC_EX_Status stExStatus;
644 
645     if (VDEC_U32_MAX == stStreamId.u32Id)
646     {
647         return FALSE;
648     }
649 
650     if (pStatus)
651     {
652         bRet = MApi_VDEC_EX_GetStatus(&stStreamId, &stExStatus);
653         _VDEC_MapStatus(&stExStatus, pStatus);
654     }
655 
656     return bRet;
657 }
658 
659 //------------------------------------------------------------------------------
660 /// Check if codec type is supported or not.
661 /// @param eCodecType \b IN : codec type
662 /// @return TRUE or FALSE
663 ///     - TRUE: Success
664 ///     - FALSE: Failed
665 //------------------------------------------------------------------------------
MApi_VDEC_CheckCaps(VDEC_CodecType eCodecType)666 MS_BOOL MApi_VDEC_CheckCaps(VDEC_CodecType eCodecType)
667 {
668     VDEC_EX_CodecType eExCodecType = _VDEC_MapExCodecType(eCodecType);
669 
670     if (VDEC_U32_MAX == stStreamId.u32Id)
671     {
672         return FALSE;
673     }
674 
675     return MApi_VDEC_EX_CheckCaps(&stStreamId, eExCodecType);
676 }
677 
678 //------------------------------------------------------------------------------
679 /// Enable turbo mode for VDEC.
680 /// @param bTurbo \b IN : TRUE for enable or FALSE for disable
681 /// @return VDEC_Result
682 ///     - E_VDEC_OK: success
683 ///     - E_VDEC_FAIL: failed
684 //------------------------------------------------------------------------------
MApi_VDEC_EnableTurboMode(MS_BOOL bEnable)685 VDEC_Result MApi_VDEC_EnableTurboMode(MS_BOOL bEnable)
686 {
687     VDEC_Result eRetVal  = E_VDEC_FAIL;
688     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
689 
690     eEXRetVal = MApi_VDEC_EX_EnableTurboMode(bEnable);
691     eRetVal = _VDEC_MapResult(eEXRetVal);
692     return eRetVal;
693 }
694 
695 #ifdef _MVD_EVENT_DBG
696 MS_U32 u32Para = 111;
697 extern MS_U8 HAL_MVD_GetAVSyncStatus(MS_U8 u8Idx);
VDEC_TestVSync(MS_U32 eFlag,void * param)698 void VDEC_TestVSync(MS_U32 eFlag, void *param)
699 {
700     if ((E_VDEC_EVENT_DISP_ONE & eFlag) == E_VDEC_EVENT_DISP_ONE)
701     {
702         printf("SyncStat=0x%x, diff=%lld\n", HAL_MVD_GetAVSyncStatus(0), MApi_VDEC_GetVideoPtsStcDelta());
703         //MApi_VDEC_IsFreerun();
704     }
705 }
VDEC_TestCC(MS_U32 eFlag,void * param)706 void VDEC_TestCC(MS_U32 eFlag, void *param)
707 {
708     static MS_U16 u16TempRef = 0xffff;
709     //printf("testCb eFlag=0x%lx, param=%ld\n", eFlag, *(MS_U32*)param);
710 
711     if ((E_VDEC_EVENT_USER_DATA_FOUND & eFlag) == E_VDEC_EVENT_USER_DATA_FOUND)
712     {
713         VDEC_CC_Info ccInfo;
714         ccInfo.u32Version = 0;
715         while (MApi_VDEC_IsCCAvailable())
716         {
717             if (E_VDEC_OK == MApi_VDEC_GetCCInfo((void*)&ccInfo, sizeof(VDEC_CC_Info)))
718             {
719                 //if ((u16TempRef+1) != ccInfo.u16TempRef)
720                 {
721                     printf("ccInfo: ");
722                     printf("%02d, ", ccInfo.u16TempRef);
723                     printf("%d, ", ccInfo.u8PicStructure);
724                     printf("%d, ", ccInfo.u8TopFieldFirst);
725                     printf("0x%lx, ", ccInfo.u32UserDataBuf);
726                     printf("%ld, ", ccInfo.u32UserDataSize);
727                     printf("%ld\n", ccInfo.u32Pts);
728                 }
729                 u16TempRef = ccInfo.u16TempRef;
730             }
731         }
732     }
733 
734     return;
735 }
736 
_VDEC_MVDEventDbg(void)737 void _VDEC_MVDEventDbg(void)
738 {
739 #if 1
740     //Get info at every VSync:
741     MApi_VDEC_SetEvent(E_VDEC_EVENT_DISP_ONE, VDEC_TestVSync, (void *)&u32Para);
742 #else
743     //Test DisplayOrder user data
744     MApi_VDEC_SetEvent(E_VDEC_EVENT_USER_DATA_FOUND, VDEC_TestCC, (void *)&u32Para);
745 #endif
746 }
747 #endif
748 
_VDEC_MapFWSourceType(VDEC_FWSourceType eFWSrc)749 static VDEC_EX_FWSourceType _VDEC_MapFWSourceType(VDEC_FWSourceType eFWSrc)
750 {
751     VDEC_EX_FWSourceType eExFWSrc = E_VDEC_EX_FW_SOURCE_NONE;
752 
753     switch (eFWSrc)
754     {
755         case E_VDEC_FW_SOURCE_DRAM:
756             eExFWSrc = E_VDEC_EX_FW_SOURCE_DRAM;
757             break;
758         case E_VDEC_FW_SOURCE_FLASH:
759             eExFWSrc = E_VDEC_EX_FW_SOURCE_FLASH;
760             break;
761         case E_VDEC_FW_SOURCE_NONE:
762         default:
763             eExFWSrc = E_VDEC_EX_FW_SOURCE_NONE;
764             break;
765     }
766 
767     return eExFWSrc;
768 }
769 
_VDEC_MapCCFormat(VDEC_CCFormat eCCFmt)770 static VDEC_EX_CCFormat _VDEC_MapCCFormat(VDEC_CCFormat eCCFmt)
771 {
772     VDEC_EX_CCFormat eExCCFmt = E_VDEC_EX_CC_NONE;
773 
774     switch (eCCFmt)
775     {
776         case E_VDEC_CC_608:
777             eExCCFmt = E_VDEC_EX_CC_608;
778             break;
779         case E_VDEC_CC_708:
780             eExCCFmt = E_VDEC_EX_CC_708;
781             break;
782         case E_VDEC_CC_UNPACKED:
783             eExCCFmt = E_VDEC_EX_CC_608;
784             break;
785         case E_VDEC_CC_NONE:
786         default:
787             eExCCFmt = E_VDEC_EX_CC_NONE;
788             break;
789     }
790 
791     return eExCCFmt;
792 }
793 
_VDEC_MapCCType(VDEC_CCType eCCType)794 static VDEC_EX_CCType _VDEC_MapCCType(VDEC_CCType eCCType)
795 {
796     VDEC_EX_CCType eExCCType = E_VDEC_EX_CC_TYPE_NONE;
797 
798     switch (eCCType)
799     {
800         case E_VDEC_CC_TYPE_NTSC_FIELD1:
801             eExCCType = E_VDEC_EX_CC_TYPE_NTSC_FIELD1;
802             break;
803         case E_VDEC_CC_TYPE_NTSC_FIELD2:
804             eExCCType = E_VDEC_EX_CC_TYPE_NTSC_FIELD2;
805             break;
806         case E_VDEC_CC_TYPE_DTVCC:
807             eExCCType = E_VDEC_EX_CC_TYPE_DTVCC;
808             break;
809         case E_VDEC_CC_TYPE_NTSC_TWOFIELD:
810             eExCCType = E_VDEC_EX_CC_TYPE_NTSC_TWOFIELD;
811             break;
812         case E_VDEC_CC_TYPE_NONE:
813         default:
814             eExCCType = E_VDEC_EX_CC_TYPE_NONE;
815             break;
816     }
817 
818     return eExCCType;
819 }
820 
_VDEC_MapCCInfoCmd(VDEC_CCInfoCmd eCCInfoCmd)821 static VDEC_EX_CCInfoCmd _VDEC_MapCCInfoCmd(VDEC_CCInfoCmd eCCInfoCmd)
822 {
823     VDEC_EX_CCInfoCmd eExCCInfoCmd = E_VDEC_EX_CC_GET_BUFF_START;
824 
825     switch (eCCInfoCmd)
826     {
827         case E_VDEC_CC_GET_BUFF_START:
828             eExCCInfoCmd = E_VDEC_EX_CC_GET_BUFF_START;
829             break;
830         case E_VDEC_CC_GET_BUFF_SIZE:
831             eExCCInfoCmd = E_VDEC_EX_CC_GET_BUFF_SIZE;
832             break;
833         case E_VDEC_CC_GET_708_ENABLE:
834         default:
835             eExCCInfoCmd = E_VDEC_EX_CC_GET_708_ENABLE;
836             break;
837     }
838 
839     return eExCCInfoCmd;
840 }
841 
_VDEC_MapDbgLevel(VDEC_DbgLevel eDbg)842 static VDEC_EX_DbgLevel _VDEC_MapDbgLevel(VDEC_DbgLevel eDbg)
843 {
844     VDEC_EX_DbgLevel  eExDbg = E_VDEC_EX_DBG_LEVEL_NONE;
845 
846     switch (eDbg)
847     {
848         case E_VDEC_DBG_LEVEL_ERR:
849             eExDbg = E_VDEC_EX_DBG_LEVEL_ERR;
850             break;
851         case E_VDEC_DBG_LEVEL_INFO:
852             eExDbg = E_VDEC_EX_DBG_LEVEL_INFO;
853             break;
854         case E_VDEC_DBG_LEVEL_DBG:
855             eExDbg = E_VDEC_EX_DBG_LEVEL_DBG;
856             break;
857         case E_VDEC_DBG_LEVEL_TRACE:
858             eExDbg = E_VDEC_EX_DBG_LEVEL_TRACE;
859             break;
860         case E_VDEC_DBG_LEVEL_FW:
861             eExDbg = E_VDEC_EX_DBG_LEVEL_FW;
862             break;
863         case E_VDEC_DBG_LEVEL_NONE:
864         default:
865             eExDbg = E_VDEC_EX_DBG_LEVEL_NONE;
866             break;
867     }
868     return eExDbg;
869 }
870 
_VDEC_MapSysCfg(VDEC_SysCfg * pstSys,VDEC_EX_SysCfg * pstExSys)871 static void _VDEC_MapSysCfg(VDEC_SysCfg* pstSys, VDEC_EX_SysCfg* pstExSys)
872 {
873     pstExSys->u32FWBinaryAddr     = pstSys->u32FWBinaryAddr;
874     pstExSys->u32FWBinarySize     = pstSys->u32FWBinarySize;
875     pstExSys->u32CodeBufAddr      = pstSys->u32CodeBufAddr;
876     pstExSys->u32CodeBufSize      = pstSys->u32CodeBufSize;
877     pstExSys->u32FrameBufAddr     = pstSys->u32FrameBufAddr;
878     pstExSys->u32FrameBufSize     = pstSys->u32FrameBufSize;
879     pstExSys->u32BitstreamBufAddr = pstSys->u32BitstreamBufAddr;
880     pstExSys->u32BitstreamBufSize = pstSys->u32BitstreamBufSize;
881     pstExSys->u32DrvProcBufAddr   = pstSys->u32DrvProcBufAddr;
882     pstExSys->u32DrvProcBufSize   = pstSys->u32DrvProcBufSize;
883     pstExSys->u32VlcBinarySrcAddr = pstSys->u32VlcBinarySrcAddr;
884     pstExSys->u32VlcTabBinarySize = pstSys->u32VlcTabBinarySize;
885     pstExSys->eDbgMsgLevel        = _VDEC_MapDbgLevel(pstSys->eDbgMsgLevel);
886     pstExSys->eFWSourceType       = _VDEC_MapFWSourceType(pstSys->eFWSourceType);
887 }
888 
_VDEC_MapSrcMode(VDEC_SrcMode eSrcMode)889 static VDEC_EX_SrcMode _VDEC_MapSrcMode(VDEC_SrcMode eSrcMode)
890 {
891     VDEC_EX_SrcMode eExSrcMode = E_VDEC_EX_SRC_MODE_DTV;
892 
893     switch (eSrcMode)
894     {
895         case E_VDEC_SRC_MODE_DTV:
896             eExSrcMode = E_VDEC_EX_SRC_MODE_DTV;
897             break;
898         case E_VDEC_SRC_MODE_TS_FILE:
899             eExSrcMode = E_VDEC_EX_SRC_MODE_TS_FILE;
900             break;
901         case E_VDEC_SRC_MODE_FILE:
902             eExSrcMode = E_VDEC_EX_SRC_MODE_FILE;
903             break;
904         case E_VDEC_SRC_MODE_TS_FILE_DUAL_ES:
905             eExSrcMode = E_VDEC_EX_SRC_MODE_TS_FILE_DUAL_ES;
906             break;
907         case E_VDEC_SRC_MODE_FILE_DUAL_ES:
908             eExSrcMode = E_VDEC_EX_SRC_MODE_FILE_DUAL_ES;
909             break;
910         default:
911             VDEC_INFO(printf("input eSrcMode 0x%x out of range!\n", eSrcMode));
912             eExSrcMode = E_VDEC_EX_SRC_MODE_DTV;
913             break;
914     }
915     return eExSrcMode;
916 }
917 
_VDEC_MapTimeStampType(VDEC_TimeStampType eTimeStamp)918 static VDEC_EX_TimeStampType _VDEC_MapTimeStampType(VDEC_TimeStampType eTimeStamp)
919 {
920     VDEC_EX_TimeStampType eExTimeStamp = E_VDEC_EX_TIME_STAMP_NONE;
921 
922     switch (eTimeStamp)
923     {
924         case E_VDEC_TIME_STAMP_PTS:
925             eExTimeStamp = E_VDEC_EX_TIME_STAMP_PTS;
926             break;
927         case E_VDEC_TIME_STAMP_DTS:
928             eExTimeStamp = E_VDEC_EX_TIME_STAMP_DTS;
929             break;
930         case E_VDEC_TIME_STAMP_STS:
931             eExTimeStamp = E_VDEC_EX_TIME_STAMP_STS;
932             break;
933         case E_VDEC_TIME_STAMP_NONE:
934         default:
935            eExTimeStamp = E_VDEC_EX_TIME_STAMP_NONE;
936             break;
937     }
938     return eExTimeStamp;
939 }
940 
_VDEC_MapMjpegScaleFactor(VDEC_MJpegScaleFactor eMjScaleFactor)941 static VDEC_EX_MJpegScaleFactor _VDEC_MapMjpegScaleFactor(VDEC_MJpegScaleFactor eMjScaleFactor)
942 {
943     VDEC_EX_MJpegScaleFactor eExMjScaleFactor = E_VDEC_EX_MJPEG_SCALE_1to1;
944 
945     switch (eMjScaleFactor)
946     {
947         case E_VDEC_MJPEG_SCALE_1to1:
948             eExMjScaleFactor = E_VDEC_EX_MJPEG_SCALE_1to1;
949             break;
950         case E_VDEC_MJPEG_SCALE_2to1:
951             eExMjScaleFactor = E_VDEC_EX_MJPEG_SCALE_2to1;
952             break;
953         case E_VDEC_MJPEG_SCALE_4to1:
954             eExMjScaleFactor = E_VDEC_EX_MJPEG_SCALE_4to1;
955             break;
956         case E_VDEC_MJPEG_SCALE_8to1:
957             eExMjScaleFactor = E_VDEC_EX_MJPEG_SCALE_8to1;
958             break;
959         default:
960             eExMjScaleFactor = E_VDEC_EX_MJPEG_SCALE_1to1;
961             break;
962     }
963     return eExMjScaleFactor;
964 }
965 
_VDEC_MapVideoInfo(VDEC_VideoInfo * pstVidInfo,VDEC_EX_VideoInfo * pstExVidInfo)966 static void _VDEC_MapVideoInfo(VDEC_VideoInfo* pstVidInfo, VDEC_EX_VideoInfo* pstExVidInfo)
967 {
968     MS_U8 i = 0;
969 
970     pstExVidInfo->eSrcMode           = _VDEC_MapSrcMode(pstVidInfo->eSrcMode);
971     pstExVidInfo->eTimeStampType     = _VDEC_MapTimeStampType(pstVidInfo->eTimeStampType);
972     pstExVidInfo->eMJpegScaleFactor  = _VDEC_MapMjpegScaleFactor(pstVidInfo->eMJpegScaleFactor);
973     pstExVidInfo->bWithoutNalStCode  = pstVidInfo->bWithoutNalStCode;
974     pstExVidInfo->u32FrameRate       = pstVidInfo->u32FrameRate;
975     pstExVidInfo->u32FrameRateBase   = pstVidInfo->u32FrameRateBase;
976     pstExVidInfo->u16NumSizes        = pstVidInfo->u16NumSizes;
977 
978     for (i = 0; i < 8; i++)
979     {
980         pstExVidInfo->u16Width[i]   = pstVidInfo->u16Width[i];
981         pstExVidInfo->u16Height[i]  = pstVidInfo->u16Height[i];
982     }
983 }
984 
_VDEC_MapInitParam(VDEC_InitParam * pstInitPara,VDEC_EX_InitParam * pstExInitPara)985 static MS_BOOL _VDEC_MapInitParam(VDEC_InitParam* pstInitPara, VDEC_EX_InitParam* pstExInitPara)
986 {
987     pstExInitPara->u32Version = 0;
988     pstExInitPara->eCodecType = _VDEC_MapExCodecType(pstInitPara->eCodecType);
989     _VDEC_MapSysCfg(&pstInitPara->SysConfig, &pstExInitPara->SysConfig);
990     _VDEC_MapVideoInfo(&pstInitPara->VideoInfo, &pstExInitPara->VideoInfo);
991     pstExInitPara->EnableDynaScale       = pstInitPara->EnableDynaScale;
992     pstExInitPara->bDisableDropErrFrame  = pstInitPara->bDisableDropErrFrame;
993     pstExInitPara->bDisableErrConceal    = pstInitPara->bDisableErrConceal;
994     pstExInitPara->bRepeatLastField      = pstInitPara->bRepeatLastField;
995     pstExInitPara->u8ErrThreshold        = pstInitPara->u8ErrThreshold;
996     pstExInitPara->u32DSVirtualBoxWidth  = pstInitPara->u32DSVirtualBoxWidth;
997     pstExInitPara->u32DSVirtualBoxHeight = pstInitPara->u32DSVirtualBoxHeight ;
998     pstExInitPara->stFBReduction.eLumaFBReduction = VDEC_EX_FB_REDUCTION_NONE;
999     pstExInitPara->stFBReduction.eChromaFBReduction = VDEC_EX_FB_REDUCTION_NONE;
1000     pstExInitPara->stFBReduction.bEnableAutoMode = FALSE;
1001     return TRUE;
1002 }
1003 
_VDEC_MapFBReductionType(VDEC_FBReductionType eRedType)1004 static VDEC_EX_FBReductionType _VDEC_MapFBReductionType(VDEC_FBReductionType eRedType)
1005 {
1006     VDEC_EX_FBReductionType eExRedType = VDEC_EX_FB_REDUCTION_NONE;
1007     switch (eRedType)
1008     {
1009         case VDEC_FB_REDUCTION_1_2:
1010             eExRedType = VDEC_EX_FB_REDUCTION_1_2;
1011             break;
1012         case VDEC_FB_REDUCTION_1_4:
1013             eExRedType = VDEC_EX_FB_REDUCTION_1_4;
1014             break;
1015         case VDEC_FB_REDUCTION_NONE:
1016         default:
1017             eExRedType = VDEC_EX_FB_REDUCTION_NONE;
1018             break;
1019     }
1020     return eExRedType;
1021 }
1022 
_VDEC_MapInitParam_EX1(VDEC_InitParam_EX1 * pstInitPara,VDEC_EX_InitParam * pstExInitPara)1023 static MS_BOOL _VDEC_MapInitParam_EX1(VDEC_InitParam_EX1* pstInitPara, VDEC_EX_InitParam* pstExInitPara)
1024 {
1025     pstExInitPara->u32Version = 0;
1026     pstExInitPara->eCodecType = _VDEC_MapExCodecType(pstInitPara->eCodecType);
1027     _VDEC_MapSysCfg(&pstInitPara->SysConfig, &pstExInitPara->SysConfig);
1028     _VDEC_MapVideoInfo(&pstInitPara->VideoInfo, &pstExInitPara->VideoInfo);
1029     pstExInitPara->EnableDynaScale       = pstInitPara->EnableDynaScale;
1030     pstExInitPara->bDisableDropErrFrame  = pstInitPara->bDisableDropErrFrame;
1031     pstExInitPara->bDisableErrConceal    = pstInitPara->bDisableErrConceal;
1032     pstExInitPara->bRepeatLastField      = pstInitPara->bRepeatLastField;
1033     pstExInitPara->u8ErrThreshold        = pstInitPara->u8ErrThreshold;
1034     pstExInitPara->u32DSVirtualBoxWidth  = pstInitPara->u32DSVirtualBoxWidth;
1035     pstExInitPara->u32DSVirtualBoxHeight = pstInitPara->u32DSVirtualBoxHeight ;
1036     pstExInitPara->stFBReduction.eLumaFBReduction = _VDEC_MapFBReductionType(pstInitPara->stFBReduction.eLumaFBReduction);
1037     pstExInitPara->stFBReduction.eChromaFBReduction = _VDEC_MapFBReductionType(pstInitPara->stFBReduction.eChromaFBReduction);
1038     pstExInitPara->stFBReduction.bEnableAutoMode = pstInitPara->stFBReduction.bEnableAutoMode;
1039     return TRUE;
1040 }
1041 
_VDEC_MapUserCmd(VDEC_User_Cmd eUserCmd)1042 static VDEC_EX_User_Cmd _VDEC_MapUserCmd(VDEC_User_Cmd eUserCmd)
1043 {
1044     VDEC_EX_User_Cmd eEXUserCmd = E_VDEC_EX_USER_CMD_SET_CONTROL_BASE;
1045     switch (eUserCmd)
1046     {
1047         case VDEC_USER_CMD_SET_CONTROL_BASE             : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_CONTROL_BASE; break;
1048         case VDEC_USER_CMD_REPEAT_LAST_FIELD            : eEXUserCmd = E_VDEC_EX_USER_CMD_REPEAT_LAST_FIELD; break;
1049         case VDEC_USER_CMD_AVSYNC_REPEAT_TH             : eEXUserCmd = E_VDEC_EX_USER_CMD_AVSYNC_REPEAT_TH; break;
1050         case VDEC_USER_CMD_DISP_ONE_FIELD               : eEXUserCmd = E_VDEC_EX_USER_CMD_DISP_ONE_FIELD; break;
1051         case VDEC_USER_CMD_FD_MASK_DELAY_COUNT          : eEXUserCmd = E_VDEC_EX_USER_CMD_FD_MASK_DELAY_COUNT; break;
1052         case VDEC_USER_CMD_FRC_OUTPUT                   : eEXUserCmd = E_VDEC_EX_USER_CMD_FRC_OUTPUT; break;
1053         case VDEC_USER_CMD_FRC_DROP_TYPE                : eEXUserCmd = E_VDEC_EX_USER_CMD_FRC_DROP_TYPE; break;
1054         case VDEC_USER_CMD_FAST_DISPLAY                 : eEXUserCmd = E_VDEC_EX_USER_CMD_FAST_DISPLAY; break;
1055         case VDEC_USER_CMD_IGNORE_ERR_REF               : eEXUserCmd = E_VDEC_EX_USER_CMD_IGNORE_ERR_REF; break;
1056         case VDEC_USER_CMD_FORCE_FOLLOW_DTV_SPEC        : eEXUserCmd = E_VDEC_EX_USER_CMD_FORCE_FOLLOW_DTV_SPEC; break;
1057         case VDEC_USER_CMD_AVC_MIN_FRM_GAP              : eEXUserCmd = E_VDEC_EX_USER_CMD_AVC_MIN_FRM_GAP; break;
1058         case VDEC_USER_CMD_DISABLE_SEQ_CHG              : eEXUserCmd = E_VDEC_EX_USER_CMD_DISABLE_SEQ_CHG; break;
1059         case VDEC_USER_CMD_AVC_DISABLE_ANTI_VDEAD       : eEXUserCmd = E_VDEC_EX_USER_CMD_AVC_DISABLE_ANTI_VDEAD; break;
1060         case VDEC_USER_CMD_DTV_RESET_MVD_PARSER         : eEXUserCmd = E_VDEC_EX_USER_CMD_DTV_RESET_MVD_PARSER; break;
1061         case VDEC_USER_CMD_PVR_FLUSH_FRAME_BUFFER       : eEXUserCmd = E_VDEC_EX_USER_CMD_PVR_FLUSH_FRAME_BUFFER; break;
1062         case VDEC_USER_CMD_SET_DTV_USER_DATA_MODE       : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_DTV_USER_DATA_MODE; break;
1063         case VDEC_USER_CMD_SET_SINGLE_TASK_MODE         : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_SINGLE_TASK_MODE; break;
1064         case VDEC_USER_CMD_FORCE_INTERLACE_MODE         : eEXUserCmd = E_VDEC_EX_USER_CMD_FORCE_INTERLACE_MODE; break;
1065         case VDEC_USER_CMD_RELEASE_FD_MASK              : eEXUserCmd = E_VDEC_EX_USER_CMD_RELEASE_FD_MASK; break;
1066         case VDEC_USER_CMD_SET_DECODE_MODE              : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_DECODE_MODE; break;
1067         case VDEC_USER_CMD_SHOW_DECODE_ORDER            : eEXUserCmd = E_VDEC_EX_USER_CMD_SHOW_DECODE_ORDER; break;
1068         case VDEC_USER_CMD_SUPPORT_AVC_TO_MVC           : eEXUserCmd = E_VDEC_EX_USER_CMD_SUPPORT_AVC_TO_MVC; break;
1069         case VDEC_USER_CMD_3DLR_VIEW_EXCHANGE           : eEXUserCmd = E_VDEC_EX_USER_CMD_3DLR_VIEW_EXCHANGE; break;
1070         case VDEC_USER_CMD_FORCE_AUTO_MUTE              : eEXUserCmd = E_VDEC_EX_USER_CMD_FORCE_AUTO_MUTE; break;
1071         case VDEC_USER_CMD_SET_VSIZE_ALIGN              : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_VSIZE_ALIGN; break;
1072         case VDEC_USER_CMD_AVC_DISP_IGNORE_CROP         : eEXUserCmd = E_VDEC_EX_USER_CMD_AVC_DISP_IGNORE_CROP; break;
1073         case VDEC_USER_CMD_SET_DISP_FINISH_MODE         : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_DISP_FINISH_MODE; break;
1074         case VDEC_USER_CMD_SET_AVSYNC_MODE              : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_AVSYNC_MODE; break;
1075         case VDEC_USER_CMD_SET_CC608_INFO_ENHANCE_MODE  : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_CC608_INFO_ENHANCE_MODE; break;
1076         case VDEC_USER_CMD_PUSH_DISPQ_WITH_REF_NUM      : eEXUserCmd = E_VDEC_EX_USER_CMD_PUSH_DISPQ_WITH_REF_NUM; break;
1077         case VDEC_USER_CMD_SET_IDCT_MODE                : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_IDCT_MODE; break;
1078         case VDEC_USER_CMD_SHOW_FIRST_FRAME_DIRECT      : eEXUserCmd = E_VDEC_EX_USER_CMD_SHOW_FIRST_FRAME_DIRECT; break;
1079         case VDEC_USER_CMD_SET_XC_LOW_DELAY_PARA        : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_XC_LOW_DELAY_PARA; break;
1080         case VDEC_USER_CMD_AVC_SUPPORT_REF_NUM_OVER_MAX_DPB_SIZE  : eEXUserCmd = E_VDEC_EX_USER_CMD_AVC_SUPPORT_REF_NUM_OVER_MAX_DPB_SIZE; break;
1081         case VDEC_USER_CMD_FRAMEBUFFER_AUTO_MODE        : eEXUserCmd = E_VDEC_EX_USER_CMD_FRAMEBUFFER_AUTO_MODE; break;
1082         case VDEC_USER_CMD_AUTO_DROP_DISPLAY_QUEUE      : eEXUserCmd = E_VDEC_EX_USER_CMD_AUTO_DROP_DISPLAY_QUEUE; break;
1083         case VDEC_USER_CMD_SET_PTS_US_MODE              : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_PTS_US_MODE; break;
1084         case VDEC_USER_CMD_FORCE_PROGRESSIVE_MODE       : eEXUserCmd = E_VDEC_EX_USER_CMD_FORCE_PROGRESSIVE_MODE; break;
1085 
1086         case VDEC_USER_CMD_MVC_BBU2_PUSH_PACKET         : eEXUserCmd = E_VDEC_EX_USER_CMD_MVC_BBU2_PUSH_PACKET; break;
1087         case VDEC_USER_CMD_MVC_BBU2_FIRE_DECCMD         : eEXUserCmd = E_VDEC_EX_USER_CMD_MVC_BBU2_FIRE_DECCMD; break;
1088 
1089         //Group2:Get Control command
1090         case VDEC_USER_CMD_GET_CONTROL_BASE             : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_CONTROL_BASE; break;
1091         case VDEC_USER_CMD_GET_CHROMA_TYPE              : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_CHROMA_TYPE; break;
1092         case VDEC_USER_CMD_GET_REAL_FRAMERATE           : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_REAL_FRAMERATE; break;
1093         case VDEC_USER_CMD_GET_COLOR_MATRIX             : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_COLOR_MATRIX; break;
1094         case VDEC_USER_CMD_GET_DYNSCALE_ENABLED         : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_DYNSCALE_ENABLED; break;
1095         case VDEC_USER_CMD_GET_ORI_INTERLACE_MODE       : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_ORI_INTERLACE_MODE; break;
1096         case VDEC_USER_CMD_GET_FPA_SEI                  : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_FPA_SEI; break;
1097         case VDEC_USER_CMD_GET_U64PTS                   : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_U64PTS; break;
1098         //case VDEC_USER_CMD_GET_FB_USAGE_MEM             : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_FB_USAGE_MEM; break;
1099         case VDEC_USER_CMD_GET_FW_STATUS_FLAG           : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_FW_STATUS_FLAG; break;
1100         case VDEC_USER_CMD_GET_DS_BUF_MIU_SEL           : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_DS_BUF_MIU_SEL; break;
1101 
1102         case VDEC_USER_CMD_GET_MVC_SUB_FRAME_DISP_INFO  : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_MVC_SUB_FRAME_DISP_INFO; break;
1103         case VDEC_USER_CMD_GET_MVC_BBU2_DECQ_VACANCY    : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_MVC_BBU2_DECQ_VACANCY; break;
1104         case VDEC_USER_CMD_GET_MVC_ES2_READ_PTR         : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_MVC_ES2_READ_PTR; break;
1105         case VDEC_USER_CMD_GET_MVC_ES2_WRITE_PTR        : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_MVC_ES2_WRITE_PTR; break;
1106         case VDEC_USER_CMD_GET_ES_QUANTITY              : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_ES_QUANTITY; break;
1107         case VDEC_USER_CMD_GET_ES2_QUANTITY             : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_ES2_QUANTITY; break;
1108         case VDEC_USER_CMD_DROP_ERR_FRAME               : eEXUserCmd = E_VDEC_EX_USER_CMD_DROP_ERR_FRAME; break;
1109         case VDEC_USER_CMD_GET_FLUSH_PATTEN_ENTRY_NUM   : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_FLUSH_PATTEN_ENTRY_NUM ; break;
1110         case VDEC_USER_CMD_SET_MIN_TSP_DATA_SIZE        : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_MIN_TSP_DATA_SIZE; break;
1111 
1112         //Group3:System Preset Control command======================
1113         //Group3-1:Common system Preset Control command
1114         case VDEC_USER_CMD_SYSTEM_PRESET_CONTROL_BASE   : eEXUserCmd = E_VDEC_EX_USER_CMD_SYSTEM_PRESET_CONTROL_BASE; break;
1115         case VDEC_USER_CMD_SYSTEM_PRESET_VPU_CLOCK      : eEXUserCmd = E_VDEC_EX_USER_CMD_SYSTEM_PRESET_VPU_CLOCK; break;
1116 
1117         //Group3-2:HVD System Preset Control command
1118         case VDEC_USER_CMD_SYSTEM_PRESET_HVD_BASE       : eEXUserCmd = E_VDEC_EX_USER_CMD_SYSTEM_PRESET_HVD_BASE; break;
1119         case VDEC_USER_CMD_SYSTEM_PRESET_HVD_CLOCK      : eEXUserCmd = E_VDEC_EX_USER_CMD_SYSTEM_PRESET_HVD_CLOCK; break;
1120         case VDEC_USER_CMD_GET_XC_LOW_DELAY_INT_STATE   : eEXUserCmd = E_VDEC_EX_USER_CMD_GET_XC_LOW_DELAY_INT_STATE; break;
1121 
1122         //Group3-3:MVD System Preset Control command
1123         case VDEC_USER_CMD_SYSTEM_PRESET_MVD_BASE       : eEXUserCmd = E_VDEC_EX_USER_CMD_SYSTEM_PRESET_MVD_BASE; break;
1124         case VDEC_USER_CMD_SYSTEM_PRESET_MVD_CLOCK      : eEXUserCmd = E_VDEC_EX_USER_CMD_SYSTEM_PRESET_MVD_CLOCK; break;
1125         case VDEC_USER_CMD_VPU_SECURITY_MODE            : eEXUserCmd = E_VDEC_EX_USER_CMD_VPU_SECURITY_MODE; break;
1126 
1127         //Group3-4:Preset Control command=============================
1128         case VDEC_USER_CMD_PRESET_CONTROL_BASE          : eEXUserCmd = E_VDEC_EX_USER_CMD_PRESET_CONTROL_BASE; break;
1129         case VDEC_USER_CMD_HVD_ONE_PENDING_BUFFER_MODE  : eEXUserCmd = E_VDEC_EX_USER_CMD_HVD_ONE_PENDING_BUFFER_MODE; break;
1130         case VDEC_USER_CMD_MVD_HWBUFFER_REMAPPING_MODE  : eEXUserCmd = E_VDEC_EX_USER_CMD_MVD_HWBUFFER_REMAPPING_MODE; break;
1131         case VDEC_USER_CMD_FRAMERATE_HANDLING           : eEXUserCmd = E_VDEC_EX_USER_CMD_FRAMERATE_HANDLING; break;
1132         case VDEC_USER_CMD_SET_SHAREMEMORY_BASE         : eEXUserCmd = E_VDEC_EX_USER_CMD_SET_SHAREMEMORY_BASE; break;
1133         case VDEC_USER_CMD_HVD_COL_BBU_MODE             : eEXUserCmd = E_VDEC_EX_USER_CMD_HVD_COL_BBU_MODE; break;
1134         case VDEC_USER_CMD_HVD_IAPGN_BUF_SHARE_BW_MODE  : eEXUserCmd = E_VDEC_EX_USER_CMD_HVD_IAPGN_BUF_SHARE_BW_MODE; break;
1135         case VDEC_USER_CMD_DTV_DEBUG_MODE               : eEXUserCmd = E_VDEC_EX_USER_CMD_DTV_DEBUG_MODE; break;
1136         case VDEC_USER_CMD_HVD_TS_IN_BBU_MODE           : eEXUserCmd = E_VDEC_EX_USER_CMD_HVD_TS_IN_BBU_MODE; break;
1137         case VDEC_USER_CMD_AUTO_ARRANGE_FRAMEBUFFER_USAGE           : eEXUserCmd = E_VDEC_EX_USER_CMD_AUTO_ARRANGE_FRAMEBUFFER_USAGE; break;
1138         case VDEC_USER_CMD_THUMBNAIL_MODE               : eEXUserCmd = E_VDEC_EX_USER_CMD_THUMBNAIL_MODE; break;
1139         case VDEC_USER_CMD_FORCE_8BIT_DEC_MODE           : eEXUserCmd = E_VDEC_EX_USER_CMD_FORCE_8BIT_DEC_MODE; break;
1140 
1141 
1142         default:
1143             break;
1144     }
1145     return eEXUserCmd;
1146 }
1147 
1148 //------------------------------------------------------------------------------
1149 /// Initial VDEC.
1150 /// @param pInitParam \b IN : pointer to initial parameter
1151 /// @return VDEC_Result
1152 ///     - E_VDEC_OK: success
1153 ///     - E_VDEC_FAIL: failed
1154 ///     - E_VDEC_RET_NOT_EXIT: not ext after last initialization
1155 ///     - E_VDEC_RET_INVALID_PARAM: input parameter is invalid
1156 //------------------------------------------------------------------------------
MApi_VDEC_Init(VDEC_InitParam * pInitParam)1157 VDEC_Result MApi_VDEC_Init(VDEC_InitParam *pInitParam)
1158 {
1159     VDEC_Result eRetVal  = E_VDEC_FAIL;
1160     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1161     VDEC_EX_InitParam stInitPara;
1162 
1163     if (!pInitParam)
1164     {
1165         return E_VDEC_RET_INVALID_PARAM;
1166     }
1167 
1168     if (!_VDEC_MapInitParam(pInitParam, &stInitPara))
1169     {
1170         return E_VDEC_RET_INVALID_PARAM;
1171     }
1172 
1173     eEXRetVal = MApi_VDEC_EX_GetFreeStream(&stStreamId, sizeof(VDEC_StreamId), eStType, stInitPara.eCodecType);
1174     if (E_VDEC_EX_OK != eEXRetVal)
1175     {
1176         goto _init_ret;
1177     }
1178 
1179     if (E_VDEC_EX_CODEC_TYPE_MVC == stInitPara.eCodecType)
1180     {
1181         MApi_VDEC_EX_SetSingleDecode(TRUE);
1182     }
1183 
1184     eEXRetVal = MApi_VDEC_EX_Init(&stStreamId, &stInitPara);
1185 
1186 _init_ret:
1187     eRetVal = _VDEC_MapResult(eEXRetVal);
1188 
1189     if (E_VDEC_EX_OK == eEXRetVal)
1190     {
1191         //printf("%s: Update _vdecInitParam\n", __FUNCTION__);
1192         _VDEC_Memcpy(&_vdecInitParam, pInitParam, sizeof(VDEC_InitParam));
1193     }
1194 
1195 #ifdef _MVD_EVENT_DBG
1196     _VDEC_MVDEventDbg();
1197 #endif
1198 
1199     return eRetVal;
1200 }
1201 
MApi_VDEC_Init_EX(void * pInfo,MS_U32 u32Size)1202 VDEC_Result MApi_VDEC_Init_EX(void *pInfo, MS_U32 u32Size)
1203 {
1204     MS_U32 u32Version = *((MS_U32 *)pInfo);
1205     VDEC_Result eRetVal  = E_VDEC_FAIL;
1206     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1207     VDEC_EX_InitParam stInitPara;
1208 
1209     if (FALSE == ((u32Version == 1) && (u32Size == sizeof(VDEC_InitParam_EX1))))
1210     {
1211         MS_ASSERT(FALSE);
1212         return E_VDEC_FAIL;
1213     }
1214 
1215     VDEC_InitParam_EX1 *pInitParam = (VDEC_InitParam_EX1 *)pInfo;
1216 
1217     if (!_VDEC_MapInitParam_EX1(pInitParam, &stInitPara))
1218     {
1219         return E_VDEC_RET_INVALID_PARAM;
1220     }
1221 
1222     eEXRetVal = MApi_VDEC_EX_GetFreeStream(&stStreamId, sizeof(VDEC_StreamId), eStType, stInitPara.eCodecType);
1223     if (E_VDEC_EX_OK != eEXRetVal)
1224     {
1225         goto _init_ret;
1226     }
1227 
1228     eEXRetVal = MApi_VDEC_EX_Init(&stStreamId, &stInitPara);
1229 
1230 _init_ret:
1231     eRetVal = _VDEC_MapResult(eEXRetVal);
1232     return eRetVal;
1233 }
1234 
1235 //------------------------------------------------------------------------------
1236 /// Reset decoder.
1237 /// @return VDEC_Result
1238 //------------------------------------------------------------------------------
MApi_VDEC_Rst(void)1239 VDEC_Result MApi_VDEC_Rst(void)
1240 {
1241     _VDEC_WRAP_NOT_INIT_RET();
1242 
1243     VDEC_Result eRetVal  = E_VDEC_OK;
1244     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1245     eEXRetVal = MApi_VDEC_EX_Rst(&stStreamId);
1246     eRetVal = _VDEC_MapResult(eEXRetVal);
1247 
1248     return eRetVal;
1249 }
1250 
1251 //------------------------------------------------------------------------------
1252 /// Stop playback
1253 /// @return VDEC_Result
1254 //------------------------------------------------------------------------------
MApi_VDEC_Exit(void)1255 VDEC_Result MApi_VDEC_Exit(void)
1256 {
1257     _VDEC_WRAP_NOT_INIT_RET();
1258 
1259     VDEC_Result eRetVal  = E_VDEC_OK;
1260     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1261 
1262     eEXRetVal = MApi_VDEC_EX_Exit(&stStreamId);
1263     eRetVal = _VDEC_MapResult(eEXRetVal);
1264 
1265     stStreamId.u32Version = 0;
1266     stStreamId.u32Id = VDEC_U32_MAX;
1267 
1268     return eRetVal;
1269 }
1270 
1271 //------------------------------------------------------------------------------
1272 /// Check if information for display setting is ready or not
1273 /// @return VDEC_Result
1274 //------------------------------------------------------------------------------
MApi_VDEC_CheckDispInfoRdy(void)1275 VDEC_Result MApi_VDEC_CheckDispInfoRdy(void)
1276 {
1277     _VDEC_WRAP_NOT_INIT_RET();
1278     VDEC_Result eRetVal  = E_VDEC_OK;
1279     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1280     eEXRetVal = MApi_VDEC_EX_CheckDispInfoRdy(&stStreamId);
1281     eRetVal = _VDEC_MapResult(eEXRetVal);
1282 
1283     return eRetVal;
1284 }
1285 
1286 //------------------------------------------------------------------------------
1287 /// Set up frame rate conversion mode
1288 /// @param eFrcMode \b IN : frame rate conversion mode
1289 /// @return VDEC_Result
1290 //------------------------------------------------------------------------------
MApi_VDEC_SetFrcMode(VDEC_FrcMode eFrcMode)1291 VDEC_Result MApi_VDEC_SetFrcMode(VDEC_FrcMode eFrcMode)
1292 {
1293     _VDEC_WRAP_NOT_INIT_RET();
1294 
1295     VDEC_Result eRetVal  = E_VDEC_FAIL;
1296     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1297     eEXRetVal = MApi_VDEC_EX_SetFrcMode(&stStreamId, (VDEC_EX_FrcMode)eFrcMode);
1298     eRetVal = _VDEC_MapResult(eEXRetVal);
1299 
1300     return eRetVal;
1301 }
1302 
1303 //------------------------------------------------------------------------------
1304 /// Set up some parameters about dynamic scaling in FW
1305 /// @param u32Addr \b IN : the physical start address of parameter set
1306 /// @param u32Size \b IN : the size of parameter set
1307 /// @return VDEC_Result
1308 //------------------------------------------------------------------------------
MApi_VDEC_SetDynScalingParams(MS_PHY u32Addr,MS_U32 u32Size)1309 VDEC_Result MApi_VDEC_SetDynScalingParams(MS_PHY u32Addr , MS_U32 u32Size)
1310 {
1311     _VDEC_WRAP_NOT_INIT_RET();
1312 
1313     VDEC_Result eRetVal  = E_VDEC_FAIL;
1314     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1315     eEXRetVal = MApi_VDEC_EX_SetDynScalingParams(&stStreamId, u32Addr, u32Size);
1316     eRetVal = _VDEC_MapResult(eEXRetVal);
1317 
1318     return eRetVal;
1319 }
1320 
1321 //------------------------------------------------------------------------------
1322 /// Start playback
1323 /// @return return VDEC_Result
1324 //------------------------------------------------------------------------------
MApi_VDEC_Play(void)1325 VDEC_Result MApi_VDEC_Play(void)
1326 {
1327     _VDEC_WRAP_NOT_INIT_RET();
1328 
1329     VDEC_Result eRetVal  = E_VDEC_OK;
1330     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1331     eEXRetVal = MApi_VDEC_EX_Play(&stStreamId);
1332     eRetVal = _VDEC_MapResult(eEXRetVal);
1333 
1334     return eRetVal;
1335 }
1336 
1337 //------------------------------------------------------------------------------
1338 /// Pause decode and display
1339 /// @return return VDEC_Result
1340 //-----------------------------------------------------------------------------
MApi_VDEC_Pause(void)1341 VDEC_Result MApi_VDEC_Pause(void)
1342 {
1343     _VDEC_WRAP_NOT_INIT_RET();
1344 
1345     VDEC_Result eRetVal  = E_VDEC_OK;
1346     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1347     eEXRetVal = MApi_VDEC_EX_Pause(&stStreamId);
1348     eRetVal = _VDEC_MapResult(eEXRetVal);
1349 
1350     return eRetVal;
1351 }
1352 
1353 //------------------------------------------------------------------------------
1354 /// Resume decode and display
1355 /// @return return VDEC_Result
1356 //------------------------------------------------------------------------------
MApi_VDEC_Resume(void)1357 VDEC_Result MApi_VDEC_Resume(void)
1358 {
1359     _VDEC_WRAP_NOT_INIT_RET();
1360 
1361     VDEC_Result eRetVal  = E_VDEC_OK;
1362     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1363     eEXRetVal = MApi_VDEC_EX_Resume(&stStreamId);
1364     eRetVal = _VDEC_MapResult(eEXRetVal);
1365 
1366     return eRetVal;
1367 }
1368 
1369 //------------------------------------------------------------------------------
1370 /// Trigger to display one frame (background may still decoding)
1371 /// @return return VDEC_Result
1372 //------------------------------------------------------------------------------
MApi_VDEC_StepDisp(void)1373 VDEC_Result MApi_VDEC_StepDisp(void)
1374 {
1375     _VDEC_WRAP_NOT_INIT_RET();
1376 
1377     VDEC_Result eRetVal  = E_VDEC_OK;
1378     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1379     eEXRetVal = MApi_VDEC_EX_StepDisp(&stStreamId);
1380     eRetVal = _VDEC_MapResult(eEXRetVal);
1381 
1382     return eRetVal;
1383 }
1384 
1385 //------------------------------------------------------------------------------
1386 /// Check if step play done or not
1387 /// @return VDEC_Result
1388 ///     - E_VDEC_OK: step display done
1389 ///     - E_VDEC_FAIL: not yet
1390 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1391 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1392 //------------------------------------------------------------------------------
MApi_VDEC_IsStepDispDone(void)1393 VDEC_Result MApi_VDEC_IsStepDispDone(void)
1394 {
1395     _VDEC_WRAP_NOT_INIT_RET();
1396 
1397     VDEC_Result eRetVal  = E_VDEC_OK;
1398     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1399     eEXRetVal = MApi_VDEC_EX_IsStepDispDone(&stStreamId);
1400     eRetVal = _VDEC_MapResult(eEXRetVal);
1401 
1402     return eRetVal;
1403 }
1404 
1405 //------------------------------------------------------------------------------
1406 /// Decoder will start decode with full  speed until target PTS is reached (equal or larger) then pause.
1407 /// @param u32PTS \b IN : target PTS
1408 /// @return VDEC_Result
1409 //------------------------------------------------------------------------------
MApi_VDEC_SeekToPTS(MS_U32 u32PTS)1410 VDEC_Result MApi_VDEC_SeekToPTS(MS_U32 u32PTS)
1411 {
1412     _VDEC_WRAP_NOT_INIT_RET();
1413 
1414     VDEC_Result eRetVal  = E_VDEC_FAIL;
1415     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1416     eEXRetVal = MApi_VDEC_EX_SeekToPTS(&stStreamId, u32PTS);
1417     eRetVal = _VDEC_MapResult(eEXRetVal);
1418 
1419     return eRetVal;
1420 }
1421 
1422 //------------------------------------------------------------------------------
1423 /// Decoder will skip all frames before target PTS, and start decode with full  speed after target PTS is reached.
1424 /// @param u32PTS \b IN : target PTS
1425 ///         - 0: turn off this mode.
1426 ///         - any not zero: enable this mode.
1427 /// @return VDEC_Result
1428 //------------------------------------------------------------------------------
MApi_VDEC_SkipToPTS(MS_U32 u32PTS)1429 VDEC_Result MApi_VDEC_SkipToPTS(MS_U32 u32PTS)
1430 {
1431     _VDEC_WRAP_NOT_INIT_RET();
1432 
1433     VDEC_Result eRetVal  = E_VDEC_FAIL;
1434     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1435     eEXRetVal = MApi_VDEC_EX_SkipToPTS(&stStreamId, u32PTS);
1436     eRetVal = _VDEC_MapResult(eEXRetVal);
1437 
1438     return eRetVal;
1439 }
1440 
1441 //------------------------------------------------------------------------------
1442 /// Trigger decoder to decode one frame.
1443 /// Decoder seeks to an I frame, decodes and displays it.
1444 /// @return return VDEC_Result
1445 //------------------------------------------------------------------------------
MApi_VDEC_StepDecode(void)1446 VDEC_Result MApi_VDEC_StepDecode(void)
1447 {
1448     _VDEC_WRAP_NOT_INIT_RET();
1449 
1450     VDEC_Result eRetVal  = E_VDEC_OK;
1451     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1452     eEXRetVal = MApi_VDEC_EX_StepDecode(&stStreamId);
1453     eRetVal = _VDEC_MapResult(eEXRetVal);
1454 
1455     return eRetVal;
1456 }
1457 
1458 //------------------------------------------------------------------------------
1459 /// Check if step decode done or not
1460 /// @return VDEC_Result
1461 ///     - E_VDEC_OK: step decode done
1462 ///     - E_VDEC_FAIL: not yet
1463 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1464 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1465 //------------------------------------------------------------------------------
MApi_VDEC_IsStepDecodeDone(void)1466 VDEC_Result MApi_VDEC_IsStepDecodeDone(void)
1467 {
1468     _VDEC_WRAP_NOT_INIT_RET();
1469 
1470     VDEC_Result eRetVal  = E_VDEC_OK;
1471     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1472     eEXRetVal = MApi_VDEC_EX_IsStepDecodeDone(&stStreamId);
1473     eRetVal = _VDEC_MapResult(eEXRetVal);
1474 
1475     return eRetVal;
1476 }
1477 
1478 //------------------------------------------------------------------------------
1479 /// Set up trick decode mode for decode I, decode IP and decode all.
1480 /// @param eTrickDec \b IN : trick decode mode
1481 /// @return VDEC_Result
1482 //------------------------------------------------------------------------------
MApi_VDEC_SetTrickMode(VDEC_TrickDec eTrickDec)1483 VDEC_Result MApi_VDEC_SetTrickMode(VDEC_TrickDec eTrickDec)
1484 {
1485     _VDEC_WRAP_NOT_INIT_RET();
1486 
1487     VDEC_Result eRetVal  = E_VDEC_FAIL;
1488     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1489     eEXRetVal = MApi_VDEC_EX_SetTrickMode(&stStreamId, _VDEC_MapExTrickDecMode(eTrickDec));
1490     eRetVal = _VDEC_MapResult(eEXRetVal);
1491 
1492     return eRetVal;
1493 }
1494 
1495 //------------------------------------------------------------------------------
1496 /// Push decode command queue
1497 /// @param pCmd \b IN : the pointer to decode command
1498 /// @return VDEC_Result
1499 //------------------------------------------------------------------------------
MApi_VDEC_PushDecQ(VDEC_DecCmd * pCmd)1500 VDEC_Result MApi_VDEC_PushDecQ(VDEC_DecCmd *pCmd)
1501 {
1502     _VDEC_WRAP_NOT_INIT_RET();
1503 
1504     VDEC_Result eRetVal  = E_VDEC_FAIL;
1505     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1506     VDEC_EX_DecCmd stExDecCmd;
1507     _VDEC_MapExDecCmd(pCmd, &stExDecCmd);
1508     eEXRetVal = MApi_VDEC_EX_PushDecQ(&stStreamId, &stExDecCmd);
1509     eRetVal = _VDEC_MapResult(eEXRetVal);
1510 
1511     return eRetVal;
1512 }
1513 
1514 //------------------------------------------------------------------------------
1515 /// Fire the decode command which be pushed since last fired
1516 /// @return VDEC_Result
1517 //------------------------------------------------------------------------------
MApi_VDEC_FireDecCmd(void)1518 VDEC_Result MApi_VDEC_FireDecCmd(void)
1519 {
1520     _VDEC_WRAP_NOT_INIT_RET();
1521 
1522     VDEC_Result eRetVal  = E_VDEC_OK;
1523     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1524     eEXRetVal = MApi_VDEC_EX_FireDecCmd(&stStreamId);
1525     eRetVal = _VDEC_MapResult(eEXRetVal);
1526 
1527     return eRetVal;
1528 }
1529 
1530 //------------------------------------------------------------------------------
1531 /// Get current queue vacancy
1532 /// @return vacancy number
1533 //------------------------------------------------------------------------------
MApi_VDEC_GetDecQVacancy(void)1534 MS_U32 MApi_VDEC_GetDecQVacancy(void)
1535 {
1536     MS_U32 u32DecQVac = 0;
1537     u32DecQVac = MApi_VDEC_EX_GetDecQVacancy(&stStreamId);
1538     return u32DecQVac;
1539 }
1540 
MApi_VDEC_IsCCAvailable(void)1541 MS_BOOL MApi_VDEC_IsCCAvailable(void)
1542 {
1543     MS_BOOL bIsCCAvail = FALSE;
1544     bIsCCAvail = MApi_VDEC_EX_IsCCAvailable(&stStreamId);
1545     return bIsCCAvail;
1546 }
1547 
MApi_VDEC_GetCCInfo(void * pInfo,MS_U32 u32Size)1548 VDEC_Result MApi_VDEC_GetCCInfo(void *pInfo, MS_U32 u32Size)
1549 {
1550     _VDEC_WRAP_NOT_INIT_RET();
1551 
1552     VDEC_Result eRetVal  = E_VDEC_OK;
1553     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1554 
1555     MS_U32 u32Version = *((MS_U32 *) pInfo);
1556 
1557     if (u32Version == 0 && u32Size == sizeof(VDEC_CC_Info))
1558     {
1559         VDEC_EX_CC_Info stExCCInfo;
1560 
1561         _VDEC_Memset(&stExCCInfo, 0, sizeof(VDEC_EX_CC_Info));
1562 
1563         eEXRetVal = MApi_VDEC_EX_GetCCInfo(&stStreamId, &stExCCInfo, sizeof(VDEC_EX_CC_Info));
1564 
1565         ((VDEC_CC_Info *)pInfo)->u8PicStructure = stExCCInfo.u8PicStructure;
1566         ((VDEC_CC_Info *)pInfo)->u8TopFieldFirst = stExCCInfo.u8TopFieldFirst;
1567         ((VDEC_CC_Info *)pInfo)->u16TempRef = stExCCInfo.u16TempRef;
1568         ((VDEC_CC_Info *)pInfo)->u32Pts = stExCCInfo.u32Pts;
1569         ((VDEC_CC_Info *)pInfo)->u32UserDataBuf = stExCCInfo.u32UserDataBuf;
1570         ((VDEC_CC_Info *)pInfo)->u32UserDataSize = stExCCInfo.u32UserDataSize;
1571 
1572         eRetVal = _VDEC_MapResult(eEXRetVal);
1573     }
1574     else
1575     {
1576         VDEC_INFO(printf("%s err: wrong pInfo\n", __FUNCTION__));
1577         eRetVal = E_VDEC_RET_INVALID_PARAM;
1578     }
1579 
1580     return eRetVal;
1581 }
1582 
1583 //------------------------------------------------------------------------------
1584 /// Flush command queue and internal data of decoder
1585 /// @return VDEC_Result
1586 //------------------------------------------------------------------------------
MApi_VDEC_Flush(VDEC_FreezePicSelect eFreezePic)1587 VDEC_Result MApi_VDEC_Flush(VDEC_FreezePicSelect eFreezePic)
1588 {
1589     _VDEC_WRAP_NOT_INIT_RET();
1590 
1591     VDEC_Result eRetVal  = E_VDEC_OK;
1592     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1593     VDEC_EX_FreezePicSelect eExFreezePic = _VDEC_MapExFreezePicSel(eFreezePic);
1594     eEXRetVal = MApi_VDEC_EX_Flush(&stStreamId, eExFreezePic);
1595     eRetVal = _VDEC_MapResult(eEXRetVal);
1596 
1597     return eRetVal;
1598 }
1599 
1600 //------------------------------------------------------------------------------
1601 /// Get ES buffer write pointer
1602 /// @return write pointer
1603 //------------------------------------------------------------------------------
MApi_VDEC_GetESWritePtr(void)1604 MS_U32 MApi_VDEC_GetESWritePtr(void)
1605 {
1606     MS_U32 u32WrPtr = 0;
1607     u32WrPtr = MApi_VDEC_EX_GetESWritePtr(&stStreamId);
1608     return u32WrPtr;
1609 }
1610 
1611 //------------------------------------------------------------------------------
1612 /// Get decoder ES buffer read pointer
1613 /// @return read pointer
1614 //------------------------------------------------------------------------------
MApi_VDEC_GetESReadPtr(void)1615 MS_U32 MApi_VDEC_GetESReadPtr(void)
1616 {
1617     MS_U32 u32RdPtr = 0;
1618     u32RdPtr = MApi_VDEC_EX_GetESReadPtr(&stStreamId);
1619     return u32RdPtr;
1620 }
1621 
1622 //------------------------------------------------------------------------------
1623 /// Enable to let decoder force to display all decoded frame when out of input data
1624 /// @param bEnable \b IN : TRUE - enable; FALSE - disable
1625 /// @return VDEC_Result
1626 //------------------------------------------------------------------------------
MApi_VDEC_EnableLastFrameShow(MS_BOOL bEnable)1627 VDEC_Result MApi_VDEC_EnableLastFrameShow(MS_BOOL bEnable)
1628 {
1629     _VDEC_WRAP_NOT_INIT_RET();
1630 
1631     VDEC_Result eRetVal  = E_VDEC_OK;
1632     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1633     eEXRetVal = MApi_VDEC_EX_EnableLastFrameShow(&stStreamId, bEnable);
1634     eRetVal = _VDEC_MapResult(eEXRetVal);
1635 
1636     return eRetVal;
1637 }
1638 
1639 //------------------------------------------------------------------------------
1640 /// Check if all decoded frames are displayed when input stream is run out
1641 /// @return VDEC_Result
1642 ///     - E_VDEC_OK: finished
1643 ///     - E_VDEC_FAIL: not yet
1644 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1645 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1646 //------------------------------------------------------------------------------
MApi_VDEC_IsDispFinish(void)1647 VDEC_Result MApi_VDEC_IsDispFinish(void)
1648 {
1649     _VDEC_WRAP_NOT_INIT_RET();
1650 
1651     VDEC_Result eRetVal  = E_VDEC_OK;
1652     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1653     eEXRetVal = MApi_VDEC_EX_IsDispFinish(&stStreamId);
1654     eRetVal = _VDEC_MapResult(eEXRetVal);
1655 
1656     return eRetVal;
1657 }
1658 
1659 //------------------------------------------------------------------------------
1660 /// Set up display speed
1661 /// @param eSpeedType \b IN : display speed type
1662 /// @param eSpeed \b IN : multiple
1663 /// @return VDEC_Result
1664 //------------------------------------------------------------------------------
MApi_VDEC_SetSpeed(VDEC_SpeedType eSpeedType,VDEC_DispSpeed eSpeed)1665 VDEC_Result MApi_VDEC_SetSpeed(VDEC_SpeedType eSpeedType, VDEC_DispSpeed eSpeed)
1666 {
1667     _VDEC_WRAP_NOT_INIT_RET();
1668 
1669     VDEC_Result eRetVal  = E_VDEC_FAIL;
1670     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1671     VDEC_EX_SpeedType eExSpeedType = _VDEC_MapExSpeedType(eSpeedType);
1672     VDEC_EX_DispSpeed eExSpeed = _VDEC_MapExDispSpeed(eSpeed);
1673     eEXRetVal = MApi_VDEC_EX_SetSpeed(&stStreamId, eExSpeedType, eExSpeed);
1674     eRetVal = _VDEC_MapResult(eEXRetVal);
1675 
1676     return eRetVal;
1677 }
1678 
1679 //------------------------------------------------------------------------------
1680 /// Check if the first frame is showed after play function is called
1681 /// @return VDEC_Result
1682 ///     - E_VDEC_OK: ready
1683 ///     - E_VDEC_FAIL: not ready
1684 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1685 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1686 //------------------------------------------------------------------------------
MApi_VDEC_IsFrameRdy(void)1687 VDEC_Result MApi_VDEC_IsFrameRdy(void)
1688 {
1689     _VDEC_WRAP_NOT_INIT_RET();
1690 
1691     VDEC_Result eRetVal  = E_VDEC_OK;
1692     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1693     eEXRetVal = MApi_VDEC_EX_IsFrameRdy(&stStreamId);
1694     eRetVal = _VDEC_MapResult(eEXRetVal);
1695 
1696     return eRetVal;
1697 }
1698 
1699 //------------------------------------------------------------------------------
1700 /// Let FW stop updating frames when vsync, but decoding process is still going.
1701 /// @param bEnable \b IN : Enable/Disable
1702 /// @return -The result of command freeze image.
1703 //------------------------------------------------------------------------------
MApi_VDEC_SetFreezeDisp(MS_BOOL bEnable)1704 VDEC_Result MApi_VDEC_SetFreezeDisp(MS_BOOL bEnable)
1705 {
1706     _VDEC_WRAP_NOT_INIT_RET();
1707 
1708     VDEC_Result eRetVal  = E_VDEC_FAIL;
1709     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1710     eEXRetVal = MApi_VDEC_EX_SetFreezeDisp(&stStreamId, bEnable);
1711     eRetVal = _VDEC_MapResult(eEXRetVal);
1712 
1713     return eRetVal;
1714 }
1715 
1716 //------------------------------------------------------------------------------
1717 /// Set blue screen on/off
1718 /// @param bOn \b IN : turn on / off blue screen
1719 /// @return VDEC_Result
1720 //------------------------------------------------------------------------------
MApi_VDEC_SetBlueScreen(MS_BOOL bOn)1721 VDEC_Result MApi_VDEC_SetBlueScreen(MS_BOOL bOn)
1722 {
1723     _VDEC_WRAP_NOT_INIT_RET();
1724 
1725     VDEC_Result eRetVal  = E_VDEC_FAIL;
1726     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1727     eEXRetVal = MApi_VDEC_EX_SetBlueScreen(&stStreamId, bOn);
1728     eRetVal = _VDEC_MapResult(eEXRetVal);
1729 
1730     return eRetVal;
1731 }
1732 
1733 //------------------------------------------------------------------------------
1734 /// Reset PTS
1735 /// @param u32PtsBase \b IN : new PTS base value
1736 /// @return VDEC_Result
1737 //------------------------------------------------------------------------------
MApi_VDEC_ResetPTS(MS_U32 u32PtsBase)1738 VDEC_Result MApi_VDEC_ResetPTS(MS_U32 u32PtsBase)
1739 {
1740     _VDEC_WRAP_NOT_INIT_RET();
1741 
1742     VDEC_Result eRetVal  = E_VDEC_FAIL;
1743     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1744     eEXRetVal = MApi_VDEC_EX_ResetPTS(&stStreamId, u32PtsBase);
1745     eRetVal = _VDEC_MapResult(eEXRetVal);
1746 
1747     return eRetVal;
1748 }
1749 
1750 //------------------------------------------------------------------------------
1751 /// Switch AV sync on/off
1752 /// @param bOn \b IN : on/off
1753 /// @param u32SyncDelay \b IN : delay value
1754 /// @param u16SyncTolerance \b IN : tolerance value
1755 /// @return VDEC_Result
1756 //------------------------------------------------------------------------------
MApi_VDEC_AVSyncOn(MS_BOOL bOn,MS_U32 u32SyncDelay,MS_U16 u16SyncTolerance)1757 VDEC_Result MApi_VDEC_AVSyncOn(MS_BOOL bOn, MS_U32 u32SyncDelay, MS_U16 u16SyncTolerance)
1758 {
1759     _VDEC_WRAP_NOT_INIT_RET();
1760 
1761     VDEC_Result eRetVal  = E_VDEC_FAIL;
1762     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1763     eEXRetVal = MApi_VDEC_EX_AVSyncOn(&stStreamId, bOn, u32SyncDelay, u16SyncTolerance);
1764     eRetVal = _VDEC_MapResult(eEXRetVal);
1765 
1766     return eRetVal;
1767 }
1768 
1769 //------------------------------------------------------------------------------
1770 /// Switch AV sync free run threshold
1771 /// @param u32Threshold \b IN : threshold value
1772 /// @return VDEC_Result
1773 //------------------------------------------------------------------------------
MApi_VDEC_SetAVSyncFreerunThreshold(MS_U32 u32Threshold)1774 VDEC_Result MApi_VDEC_SetAVSyncFreerunThreshold(MS_U32 u32Threshold)
1775 {
1776     _VDEC_WRAP_NOT_INIT_RET();
1777 
1778     VDEC_Result eRetVal  = E_VDEC_FAIL;
1779     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1780     eEXRetVal = MApi_VDEC_EX_SetAVSyncFreerunThreshold(&stStreamId, u32Threshold);
1781     eRetVal = _VDEC_MapResult(eEXRetVal);
1782 
1783     return eRetVal;
1784 }
1785 
1786 
1787 //------------------------------------------------------------------------------
1788 /// Check if AV sync on or not
1789 /// @return VDEC_Result
1790 ///     - E_VDEC_OK: AV sync on
1791 ///     - E_VDEC_FAIL: freerun
1792 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1793 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1794 //------------------------------------------------------------------------------
MApi_VDEC_IsAVSyncOn(void)1795 VDEC_Result MApi_VDEC_IsAVSyncOn(void)
1796 {
1797     _VDEC_WRAP_NOT_INIT_RET();
1798 
1799     VDEC_Result eRetVal  = E_VDEC_OK;
1800     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1801     eEXRetVal = MApi_VDEC_EX_IsAVSyncOn(&stStreamId);
1802     eRetVal = _VDEC_MapResult(eEXRetVal);
1803 
1804     return eRetVal;
1805 }
1806 
1807 //------------------------------------------------------------------------------
1808 /// Get the PTS of current displayed frame
1809 /// @return PTS
1810 //------------------------------------------------------------------------------
MApi_VDEC_GetPTS(void)1811 MS_U32 MApi_VDEC_GetPTS(void)
1812 {
1813     _VDEC_WRAP_NOT_INIT_RET_ZERO();
1814 
1815     MS_U32 u32Pts = VDEC_U32_MAX;
1816     u32Pts = MApi_VDEC_EX_GetPTS(&stStreamId);
1817     return u32Pts;
1818 }
1819 
1820 //------------------------------------------------------------------------------
1821 /// Get the PTS of next displayed frame
1822 /// @return next PTS (unit:ms)
1823 //------------------------------------------------------------------------------
MApi_VDEC_GetNextPTS(void)1824 MS_U32 MApi_VDEC_GetNextPTS(void)
1825 {
1826     _VDEC_WRAP_NOT_INIT_RET_ZERO();
1827 
1828     MS_U32 u32NextPts = VDEC_U32_MAX;
1829     u32NextPts = MApi_VDEC_EX_GetNextPTS(&stStreamId);
1830     return u32NextPts;
1831 }
1832 
1833 //------------------------------------------------------------------------------
1834 /// Check if decoder is doing AV sync now
1835 /// @return VDEC_Result
1836 ///     - E_VDEC_OK: doing AV sync
1837 ///     - E_VDEC_FAIL: still freerun
1838 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1839 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1840 //------------------------------------------------------------------------------
MApi_VDEC_IsStartSync(void)1841 VDEC_Result MApi_VDEC_IsStartSync(void)
1842 {
1843     _VDEC_WRAP_NOT_INIT_RET();
1844 
1845     VDEC_Result eRetVal  = E_VDEC_OK;
1846     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1847     eEXRetVal = MApi_VDEC_EX_IsStartSync(&stStreamId);
1848     eRetVal = _VDEC_MapResult(eEXRetVal);
1849 
1850     return eRetVal;
1851 }
1852 
1853 //------------------------------------------------------------------------------
1854 /// Check if the distance of Video time stamp and STC is closed enough.
1855 /// @return VDEC_Result
1856 ///     - E_VDEC_OK: sync complete
1857 ///     - E_VDEC_FAIL: sync is incomplete
1858 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1859 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1860 //------------------------------------------------------------------------------
MApi_VDEC_IsReachSync(void)1861 VDEC_Result MApi_VDEC_IsReachSync(void)
1862 {
1863     _VDEC_WRAP_NOT_INIT_RET();
1864 
1865     VDEC_Result eRetVal  = E_VDEC_OK;
1866     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1867     eEXRetVal = MApi_VDEC_EX_IsReachSync(&stStreamId);
1868     eRetVal = _VDEC_MapResult(eEXRetVal);
1869 
1870     return eRetVal;
1871 }
1872 
1873 //------------------------------------------------------------------------------
1874 /// Check if decoder is avsync freerun
1875 /// @return VDEC_Result
1876 ///     - E_VDEC_OK: freerun
1877 ///     - E_VDEC_FAIL: not freerun
1878 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1879 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1880 //------------------------------------------------------------------------------
MApi_VDEC_IsFreerun(void)1881 VDEC_Result MApi_VDEC_IsFreerun(void)
1882 {
1883     _VDEC_WRAP_NOT_INIT_RET();
1884 
1885     VDEC_Result eRetVal  = E_VDEC_OK;
1886     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1887     eEXRetVal = MApi_VDEC_EX_IsFreerun(&stStreamId);
1888     eRetVal = _VDEC_MapResult(eEXRetVal);
1889 
1890     return eRetVal;
1891 }
1892 
1893 //------------------------------------------------------------------------------
1894 /// For MHEG5 MW, decode one I frame
1895 /// @param u32FrameBufAddr \b IN : output buffer address
1896 /// @param u32SrcSt \b IN : source start address
1897 /// @param u32SrcEnd \b IN : source end address
1898 /// @return VDEC_Result
1899 //------------------------------------------------------------------------------
MApi_VDEC_MHEG_DecodeIFrame(MS_PHY u32FrameBufAddr,MS_PHY u32SrcSt,MS_PHY u32SrcEnd)1900 VDEC_Result MApi_VDEC_MHEG_DecodeIFrame(MS_PHY u32FrameBufAddr,
1901                                         MS_PHY u32SrcSt,
1902                                         MS_PHY u32SrcEnd)
1903 {
1904     _VDEC_WRAP_NOT_INIT_RET();
1905 
1906     VDEC_Result eRetVal  = E_VDEC_FAIL;
1907     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
1908     eEXRetVal = MApi_VDEC_EX_MHEG_DecodeIFrame(&stStreamId, u32FrameBufAddr, u32SrcSt, u32SrcEnd);
1909     eRetVal = _VDEC_MapResult(eEXRetVal);
1910 
1911     return eRetVal;
1912 }
1913 
1914 //------------------------------------------------------------------------------
1915 /// For MHEG5 MW, check if I frame decode done
1916 /// @return VDEC_Result
1917 ///     - E_VDEC_OK: decode done
1918 ///     - E_VDEC_FAIL: not yet
1919 ///     - E_VDEC_RET_NOT_INIT: not initial yet
1920 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
1921 //------------------------------------------------------------------------------
MApi_VDEC_MHEG_IsIFrameDecoding(void)1922 VDEC_Result MApi_VDEC_MHEG_IsIFrameDecoding(void)
1923 {
1924     _VDEC_WRAP_NOT_INIT_RET();
1925 
1926     VDEC_Result eRetVal  = E_VDEC_OK;
1927     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
1928     eEXRetVal = MApi_VDEC_EX_MHEG_IsIFrameDecoding(&stStreamId);
1929     eRetVal = _VDEC_MapResult(eEXRetVal);
1930 
1931     return eRetVal;
1932 }
1933 
1934 //------------------------------------------------------------------------------
1935 /// For MHEG5 MW, reset decoder after I frame decode done
1936 /// @return VDEC_Result
1937 //------------------------------------------------------------------------------
MApi_VDEC_MHEG_RstIFrameDec(void)1938 VDEC_Result MApi_VDEC_MHEG_RstIFrameDec(void)
1939 {
1940     _VDEC_WRAP_NOT_INIT_RET();
1941 
1942     VDEC_Result eRetVal  = E_VDEC_OK;
1943     eRetVal = MApi_VDEC_Exit();
1944     if (E_VDEC_OK != eRetVal)
1945     {
1946         printf("%s fail to exit 0x%x\n", __FUNCTION__, eRetVal);
1947     }
1948 
1949     eRetVal = MApi_VDEC_Init(&_vdecInitParam);
1950     if (E_VDEC_OK != eRetVal)
1951     {
1952         printf("%s fail to init 0x%x\n", __FUNCTION__, eRetVal);
1953     }
1954 
1955     return eRetVal;
1956 }
1957 
1958 //------------------------------------------------------------------------------
1959 /// Get error code
1960 /// @return error code
1961 //------------------------------------------------------------------------------
MApi_VDEC_GetErrCode(void)1962 MS_U32 MApi_VDEC_GetErrCode(void)
1963 {
1964     MS_U32 u32ErrCode = 0;
1965     u32ErrCode = MApi_VDEC_EX_GetErrCode(&stStreamId);
1966     return u32ErrCode;
1967 }
1968 
1969 //------------------------------------------------------------------------------
1970 /// Get accumulated error counter
1971 /// @return error counter
1972 //------------------------------------------------------------------------------
MApi_VDEC_GetErrCnt(void)1973 MS_U32 MApi_VDEC_GetErrCnt(void)
1974 {
1975     MS_U32 u32Cnt = 0;
1976     u32Cnt = MApi_VDEC_EX_GetErrCnt(&stStreamId);
1977     return u32Cnt;
1978 }
1979 
1980 //------------------------------------------------------------------------------
1981 /// Get codec type which be initialed
1982 /// @return VDEC_CodecType
1983 //------------------------------------------------------------------------------
MApi_VDEC_GetActiveCodecType(void)1984 VDEC_CodecType MApi_VDEC_GetActiveCodecType(void)
1985 {
1986     VDEC_CodecType eCodecType = E_VDEC_CODEC_TYPE_NONE;
1987     VDEC_EX_CodecType eExCodecType =  MApi_VDEC_EX_GetActiveCodecType(&stStreamId);
1988     eCodecType = _VDEC_MapCodecType(eExCodecType);
1989 
1990     return eCodecType;
1991 }
1992 
1993 //------------------------------------------------------------------------------
1994 /// Get bitrate which decoder retrieved from stream
1995 /// @return bitrate
1996 //------------------------------------------------------------------------------
MApi_VDEC_GetBitsRate(void)1997 MS_U32 MApi_VDEC_GetBitsRate(void)
1998 {
1999     MS_U32 u32Bitrate = 0;
2000     u32Bitrate = MApi_VDEC_EX_GetBitsRate(&stStreamId);
2001     return u32Bitrate;
2002 }
2003 
2004 
2005 //------------------------------------------------------------------------------
2006 /// Get 3:2 pull down flag which decoder retrieved from stream
2007 /// @return TRUE/FALSE
2008 //------------------------------------------------------------------------------
MApi_VDEC_Is32PullDown(void)2009 MS_BOOL MApi_VDEC_Is32PullDown(void)
2010 {
2011     MS_BOOL bIs32PullDown = FALSE;
2012     bIs32PullDown = MApi_VDEC_EX_Is32PullDown(&stStreamId);
2013     return bIs32PullDown;
2014 }
2015 
2016 
2017 //------------------------------------------------------------------------------
2018 /// Check whether the status of decoder is running or not.
2019 /// @return VDEC_Result: E_VDEC_OK/E_VDEC_RET_NOT_RUNNING/E_VDEC_RET_NOT_INIT
2020 //------------------------------------------------------------------------------
MApi_VDEC_IsAlive(void)2021 VDEC_Result MApi_VDEC_IsAlive(void)
2022 {
2023     _VDEC_WRAP_NOT_INIT_RET();
2024 
2025     VDEC_Result eRetVal  = E_VDEC_OK;
2026     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
2027     eEXRetVal = MApi_VDEC_EX_IsAlive(&stStreamId);
2028     eRetVal = _VDEC_MapResult(eEXRetVal);
2029 
2030     return eRetVal;
2031 }
2032 
2033 //------------------------------------------------------------------------------
2034 /// Get the value of PTS - STC for video
2035 /// @return the value of PTS - STC for video
2036 //------------------------------------------------------------------------------
MApi_VDEC_GetVideoPtsStcDelta(void)2037 MS_S64 MApi_VDEC_GetVideoPtsStcDelta(void)
2038 {
2039     MS_S64 s64Pts = 0;
2040     s64Pts = MApi_VDEC_EX_GetVideoPtsStcDelta(&stStreamId);
2041     return s64Pts;
2042 }
2043 
2044 //------------------------------------------------------------------------------
2045 /// Check if decoder got valid stream to decode
2046 /// @return TRUE or FALSE
2047 ///     - TRUE: find valid stream
2048 ///     - FALSE: not yet
2049 //------------------------------------------------------------------------------
MApi_VDEC_IsWithValidStream(void)2050 VDEC_Result MApi_VDEC_IsWithValidStream(void)
2051 {
2052     _VDEC_WRAP_NOT_INIT_RET();
2053     VDEC_Result eRetVal  = E_VDEC_OK;
2054     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
2055     eEXRetVal = MApi_VDEC_EX_IsWithValidStream(&stStreamId);
2056     eRetVal = _VDEC_MapResult(eEXRetVal);
2057 
2058     return eRetVal;
2059 }
2060 
2061 //------------------------------------------------------------------------------
2062 /// Check if decoder found I frame after reset or flush queue
2063 /// @return VDEC_Result
2064 ///     - E_VDEC_OK: found
2065 ///     - E_VDEC_FAIL: not found
2066 ///     - E_VDEC_RET_NOT_INIT: not initial yet
2067 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
2068 //------------------------------------------------------------------------------
MApi_VDEC_IsIFrameFound(void)2069 VDEC_Result MApi_VDEC_IsIFrameFound(void)
2070 {
2071     _VDEC_WRAP_NOT_INIT_RET();
2072 
2073     VDEC_Result eRetVal  = E_VDEC_OK;
2074     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
2075     eEXRetVal = MApi_VDEC_EX_IsIFrameFound(&stStreamId);
2076     eRetVal = _VDEC_MapResult(eEXRetVal);
2077 
2078     return eRetVal;
2079 }
2080 
2081 //------------------------------------------------------------------------------
2082 /// Check if input stream is with low delay flag
2083 /// @return VDEC_Result
2084 ///     - E_VDEC_OK: with low delay
2085 ///     - E_VDEC_FAIL: without low delay
2086 ///     - E_VDEC_RET_NOT_INIT: not initial yet
2087 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
2088 //------------------------------------------------------------------------------
MApi_VDEC_IsWithLowDelay(void)2089 VDEC_Result MApi_VDEC_IsWithLowDelay(void)
2090 {
2091     _VDEC_WRAP_NOT_INIT_RET();
2092 
2093     VDEC_Result eRetVal  = E_VDEC_OK;
2094     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
2095     eEXRetVal = MApi_VDEC_EX_IsWithLowDelay(&stStreamId);
2096     eRetVal = _VDEC_MapResult(eEXRetVal);
2097 
2098     return eRetVal;
2099 }
2100 
2101 //------------------------------------------------------------------------------
2102 /// Check if all date buffers are empty or not
2103 /// @return VDEC_Result
2104 ///     - E_VDEC_OK: All of the buffers are empty
2105 ///     - E_VDEC_FAIL: Some of the buffers are not empty
2106 ///     - E_VDEC_RET_NOT_INIT: not initial yet
2107 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
2108 //------------------------------------------------------------------------------
MApi_VDEC_IsAllBufferEmpty(void)2109 VDEC_Result MApi_VDEC_IsAllBufferEmpty(void)
2110 {
2111     _VDEC_WRAP_NOT_INIT_RET();
2112 
2113     VDEC_Result eRetVal  = E_VDEC_OK;
2114     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
2115     eEXRetVal = MApi_VDEC_EX_IsAllBufferEmpty(&stStreamId);
2116     eRetVal = _VDEC_MapResult(eEXRetVal);
2117 
2118     return eRetVal;
2119 }
2120 
2121 //------------------------------------------------------------------------------
2122 /// Get picture counter of current GOP
2123 /// @return picture counter
2124 //------------------------------------------------------------------------------
MApi_VDEC_GetGOPCnt(void)2125 MS_U8 MApi_VDEC_GetGOPCnt(void)
2126 {
2127     MS_U8 u8Cnt = 0;
2128     u8Cnt = MApi_VDEC_EX_GetGOPCnt(&stStreamId);
2129     return u8Cnt;
2130 }
2131 
2132 //-----------------------------------------------------------------------------
2133 /// Get accumulated decoded frame Count
2134 /// @return - decoded frame Count
2135 //-----------------------------------------------------------------------------
MApi_VDEC_GetFrameCnt(void)2136 MS_U32 MApi_VDEC_GetFrameCnt(void)
2137 {
2138     _VDEC_WRAP_NOT_INIT_RET_ZERO();
2139     MS_U32 u32Cnt = 0;
2140     u32Cnt = MApi_VDEC_EX_GetFrameCnt(&stStreamId);
2141     return u32Cnt;
2142 }
2143 
2144 //------------------------------------------------------------------------------
2145 /// Get skipped counter
2146 /// @return counter
2147 //------------------------------------------------------------------------------
MApi_VDEC_GetSkipCnt(void)2148 MS_U32 MApi_VDEC_GetSkipCnt(void)
2149 {
2150     MS_U32 u32Cnt = 0;
2151     u32Cnt = MApi_VDEC_EX_GetSkipCnt(&stStreamId);
2152     return u32Cnt;
2153 }
2154 
2155 //------------------------------------------------------------------------------
2156 /// Get dropped frame counter
2157 /// @return counter
2158 //------------------------------------------------------------------------------
MApi_VDEC_GetDropCnt(void)2159 MS_U32 MApi_VDEC_GetDropCnt(void)
2160 {
2161     MS_U32 u32Cnt = 0;
2162     u32Cnt = MApi_VDEC_EX_GetDropCnt(&stStreamId);
2163     return u32Cnt;
2164 }
2165 
2166 //------------------------------------------------------------------------------
2167 /// Get display information
2168 /// @param pDispinfo \b OUT : pointer to display setting information
2169 /// @return VDEC_Result
2170 //------------------------------------------------------------------------------
MApi_VDEC_GetDispInfo(VDEC_DispInfo * pDispinfo)2171 VDEC_Result MApi_VDEC_GetDispInfo(VDEC_DispInfo *pDispinfo)
2172 {
2173     _VDEC_WRAP_NOT_INIT_RET();
2174 
2175     VDEC_Result eRetVal  = E_VDEC_FAIL;
2176     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2177     VDEC_EX_DispInfo stExDispinfo;
2178 
2179     if (pDispinfo)
2180     {
2181         eEXRetVal =  MApi_VDEC_EX_GetDispInfo(&stStreamId, &stExDispinfo);
2182         if (eEXRetVal == E_VDEC_EX_OK)
2183         {
2184             _VDEC_MapDispInfo(&stExDispinfo, pDispinfo);
2185         }
2186         else
2187         {
2188             _VDEC_Memset(pDispinfo, 0, sizeof(VDEC_DispInfo));
2189         }
2190         eRetVal = _VDEC_MapResult(eEXRetVal);
2191     }
2192     else
2193     {
2194         VDEC_INFO(printf("%s err: null input\n", __FUNCTION__));
2195         eRetVal = E_VDEC_RET_INVALID_PARAM;
2196     }
2197     return eRetVal;
2198 }
2199 
2200 //------------------------------------------------------------------------------
2201 /// Get current trick decode mode of decoder
2202 /// @return VDEC_TrickDec
2203 //------------------------------------------------------------------------------
MApi_VDEC_GetTrickMode(void)2204 VDEC_TrickDec MApi_VDEC_GetTrickMode(void)
2205 {
2206     VDEC_TrickDec eTrick = E_VDEC_TRICK_DEC_ALL;
2207     VDEC_EX_TrickDec eExTrick = E_VDEC_EX_TRICK_DEC_ALL;
2208     eExTrick = MApi_VDEC_EX_GetTrickMode(&stStreamId);
2209     eTrick = _VDEC_MapTrickDecMode(eExTrick);
2210     return eTrick;
2211 }
2212 
2213 //------------------------------------------------------------------------------
2214 /// Get stream active format which decoder retrieved
2215 /// @return active format ID
2216 //------------------------------------------------------------------------------
MApi_VDEC_GetActiveFormat(void)2217 MS_U8 MApi_VDEC_GetActiveFormat(void)
2218 {
2219     MS_U8 u8ActFmt = 0xFF;
2220     u8ActFmt = MApi_VDEC_EX_GetActiveFormat(&stStreamId);
2221     return u8ActFmt;
2222 }
2223 
2224 //------------------------------------------------------------------------------
2225 /// Get stream colour primaries
2226 /// @return stream colour primaries
2227 //------------------------------------------------------------------------------
MApi_VDEC_GetColourPrimaries(void)2228 MS_U8 MApi_VDEC_GetColourPrimaries(void)
2229 {
2230     MS_U8 u8ColourPrimaries = 0xFF;
2231     u8ColourPrimaries = MApi_VDEC_EX_GetColourPrimaries(&stStreamId);
2232     return u8ColourPrimaries;
2233 }
2234 
MApi_VDEC_GetHWKey(MS_U8 * pu8Key)2235 VDEC_Result MApi_VDEC_GetHWKey(MS_U8 *pu8Key)
2236 {
2237     _VDEC_WRAP_NOT_INIT_RET();
2238 
2239     VDEC_Result eRetVal  = E_VDEC_FAIL;
2240     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2241     eEXRetVal = MApi_VDEC_EX_GetHWKey(&stStreamId, pu8Key);
2242     eRetVal = _VDEC_MapResult(eEXRetVal);
2243 
2244     return eRetVal;
2245 }
2246 
2247 //------------------------------------------------------------------------------
2248 /// Check if sequence header is different from previous one
2249 /// @return VDEC_Result
2250 ///     - E_VDEC_OK: changed
2251 ///     - E_VDEC_FAIL: not changed
2252 ///     - E_VDEC_RET_NOT_INIT: not initial yet
2253 ///     - E_VDEC_RET_UNSUPPORTED: not supported with current decoder configuration
2254 //------------------------------------------------------------------------------
MApi_VDEC_IsSeqChg(void)2255 VDEC_Result MApi_VDEC_IsSeqChg(void)
2256 {
2257     _VDEC_WRAP_NOT_INIT_RET();
2258 
2259     VDEC_Result eRetVal  = E_VDEC_OK;
2260     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
2261     eEXRetVal = MApi_VDEC_EX_IsSeqChg(&stStreamId);
2262     eRetVal = _VDEC_MapResult(eEXRetVal);
2263 
2264     return eRetVal;
2265 }
2266 
2267 //------------------------------------------------------------------------------
2268 /// Set up debug message level
2269 /// @param eDbgLevel \b IN : message level
2270 /// @return VDEC_Result
2271 ///     - E_VDEC_OK: Success
2272 ///     - E_VDEC_FAIL: Failed
2273 //------------------------------------------------------------------------------
MApi_VDEC_SetDbgLevel(VDEC_DbgLevel eDbgLevel)2274 VDEC_Result MApi_VDEC_SetDbgLevel(VDEC_DbgLevel eDbgLevel)
2275 {
2276     _VDEC_WRAP_NOT_INIT_RET();
2277 
2278     VDEC_Result eRetVal  = E_VDEC_OK;
2279     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
2280     eEXRetVal = MApi_VDEC_EX_SetDbgLevel(&stStreamId, _VDEC_MapDbgLevel(eDbgLevel));
2281     eRetVal = _VDEC_MapResult(eEXRetVal);
2282 
2283     return eRetVal;
2284 }
2285 
2286 //------------------------------------------------------------------------------
2287 /// Get the information of the latest decoded frame.
2288 /// @param pFrmInfo \b IN : the information of the latest decoded frame
2289 /// @return -VDEC_Result
2290 //------------------------------------------------------------------------------
MApi_VDEC_GetDecFrameInfo(VDEC_FrameInfo * pFrmInfo)2291 VDEC_Result MApi_VDEC_GetDecFrameInfo(VDEC_FrameInfo* pFrmInfo)
2292 {
2293     _VDEC_WRAP_NOT_INIT_RET();
2294 
2295     VDEC_Result eRetVal  = E_VDEC_FAIL;
2296     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2297     VDEC_EX_FrameInfo stExFrmInfo;
2298 
2299     if (!pFrmInfo)
2300     {
2301         VDEC_INFO(printf("%s err: null pFrmInfo\n", __FUNCTION__));
2302         return E_VDEC_RET_INVALID_PARAM;
2303     }
2304 
2305     eEXRetVal = MApi_VDEC_EX_GetDecFrameInfo(&stStreamId, &stExFrmInfo);
2306     if (eEXRetVal == E_VDEC_EX_OK)
2307     {
2308         _VDEC_MapFrameInfo(&stExFrmInfo, pFrmInfo);
2309     }
2310     eRetVal = _VDEC_MapResult(eEXRetVal);
2311 
2312     return eRetVal;
2313 }
2314 
2315 //------------------------------------------------------------------------------
2316 /// Get the information of current displaying frame.
2317 /// @param pFrmInfo \b IN : the information of displaying frame
2318 /// @return -VDEC_Result
2319 //------------------------------------------------------------------------------
MApi_VDEC_GetDispFrameInfo(VDEC_FrameInfo * pFrmInfo)2320 VDEC_Result MApi_VDEC_GetDispFrameInfo(VDEC_FrameInfo *pFrmInfo)
2321 {
2322     _VDEC_WRAP_NOT_INIT_RET();
2323 
2324     VDEC_Result eRetVal  = E_VDEC_FAIL;
2325     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2326     VDEC_EX_FrameInfo stExFrmInfo;
2327 
2328     if (!pFrmInfo)
2329     {
2330         VDEC_INFO(printf("%s err: null pFrmInfo\n", __FUNCTION__));
2331         return E_VDEC_RET_INVALID_PARAM;
2332     }
2333 
2334     eEXRetVal = MApi_VDEC_EX_GetDispFrameInfo(&stStreamId, &stExFrmInfo);
2335     if (eEXRetVal == E_VDEC_EX_OK)
2336     {
2337         _VDEC_MapFrameInfo(&stExFrmInfo, pFrmInfo);
2338     }
2339     eRetVal = _VDEC_MapResult(eEXRetVal);
2340 
2341     return eRetVal;
2342 }
2343 
2344 //------------------------------------------------------------------------------
2345 /// Get the extension information of decoded frame.
2346 /// @param pExtDispinfo \b IN : the extension information of decoded frame.
2347 /// @return -VDEC_Result
2348 //------------------------------------------------------------------------------
MApi_VDEC_GetExtDispInfo(VDEC_ExtDispInfo * pExtDispinfo)2349 VDEC_Result MApi_VDEC_GetExtDispInfo(VDEC_ExtDispInfo *pExtDispinfo)
2350 {
2351     _VDEC_WRAP_NOT_INIT_RET();
2352 
2353     VDEC_Result eRetVal  = E_VDEC_FAIL;
2354     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2355     VDEC_EX_ExtDispInfo stExExtDisp;
2356 
2357     if (!pExtDispinfo)
2358     {
2359         VDEC_INFO(printf("%s err: null pExtDispinfo\n", __FUNCTION__));
2360         return E_VDEC_RET_INVALID_PARAM;
2361     }
2362 
2363     eEXRetVal = MApi_VDEC_EX_GetExtDispInfo(&stStreamId, &stExExtDisp);
2364     if (eEXRetVal == E_VDEC_EX_OK)
2365     {
2366         _VDEC_MapExtDispInfo(&stExExtDisp, pExtDispinfo);
2367     }
2368     eRetVal = _VDEC_MapResult(eEXRetVal);
2369 
2370     return eRetVal;
2371 }
2372 
2373 //------------------------------------------------------------------------------
2374 /// Get the time_code of the latest decoded frame.
2375 /// @param pTimeCode \b IN : the time_code of the latest decoded frame
2376 /// @return -VDEC_Result
2377 //------------------------------------------------------------------------------
MApi_VDEC_GetDecTimeCode(VDEC_TimeCode * pTimeCode)2378 VDEC_Result MApi_VDEC_GetDecTimeCode(VDEC_TimeCode* pTimeCode)
2379 {
2380     _VDEC_WRAP_NOT_INIT_RET();
2381 
2382     VDEC_Result eRetVal  = E_VDEC_FAIL;
2383     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2384     VDEC_EX_TimeCode stTimeCode = {0,0,0,0,0,{0,0,0}};
2385 
2386     if (!pTimeCode)
2387     {
2388         VDEC_INFO(printf("%s err: null pTimeCode\n", __FUNCTION__));
2389         return E_VDEC_RET_INVALID_PARAM;
2390     }
2391 
2392     eEXRetVal = MApi_VDEC_EX_GetDecTimeCode(&stStreamId, &stTimeCode);
2393 
2394     if (eEXRetVal == E_VDEC_EX_OK)
2395     {
2396         _VDEC_MapTimeCode(&stTimeCode, pTimeCode);
2397     }
2398     eRetVal = _VDEC_MapResult(eEXRetVal);
2399 
2400     return eRetVal;
2401 }
2402 
2403 //------------------------------------------------------------------------------
2404 /// Get the time_code of the latest displayed frame.
2405 /// @param pTimeCode \b IN : the time_code of the latest displayed frame
2406 /// @return -VDEC_Result
2407 //------------------------------------------------------------------------------
MApi_VDEC_GetDispTimeCode(VDEC_TimeCode * pTimeCode)2408 VDEC_Result MApi_VDEC_GetDispTimeCode(VDEC_TimeCode* pTimeCode)
2409 {
2410     _VDEC_WRAP_NOT_INIT_RET();
2411 
2412     VDEC_Result eRetVal  = E_VDEC_FAIL;
2413     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2414     VDEC_EX_TimeCode stTimeCode = {0,0,0,0,0,{0,0,0}};
2415     if (!pTimeCode)
2416     {
2417         return E_VDEC_RET_INVALID_PARAM;
2418     }
2419 
2420     eEXRetVal = MApi_VDEC_EX_GetDispTimeCode(&stStreamId, &stTimeCode);
2421     if (eEXRetVal == E_VDEC_EX_OK)
2422     {
2423         _VDEC_MapTimeCode(&stTimeCode, pTimeCode);
2424     }
2425     eRetVal = _VDEC_MapResult(eEXRetVal);
2426 
2427     return eRetVal;
2428 }
2429 
2430 //------------------------------------------------------------------------------
2431 /// [Obsolete] Start CC data parsing.
2432 /// @param pCCParam \b IN : CC configuration
2433 /// @return -VDEC_Result
2434 //------------------------------------------------------------------------------
MApi_VDEC_CC_StartParsing(VDEC_CCCfg * pCCParam)2435 VDEC_Result MApi_VDEC_CC_StartParsing(VDEC_CCCfg* pCCParam)
2436 {
2437     printf("%s is obsolete\n", __FUNCTION__);
2438     UNUSED(pCCParam);
2439     return E_VDEC_RET_UNSUPPORTED;
2440 }
2441 
2442 //------------------------------------------------------------------------------
2443 /// [Obsolete] Stop CC data parsing.
2444 /// @return -VDEC_Result
2445 //------------------------------------------------------------------------------
MApi_VDEC_CC_StopParsing(void)2446 VDEC_Result MApi_VDEC_CC_StopParsing(void)
2447 {
2448     printf("%s is obsolete\n", __FUNCTION__);
2449     return E_VDEC_RET_UNSUPPORTED;
2450 }
2451 
2452 //------------------------------------------------------------------------------
2453 /// [Obsolete] Get write pointer of CC data buffer.
2454 /// @param pu32Write \b OUT : current write pointer
2455 /// @return -VDEC_Result
2456 //------------------------------------------------------------------------------
MApi_VDEC_CC_GetWritePtr(MS_U32 * pu32Write)2457 VDEC_Result MApi_VDEC_CC_GetWritePtr(MS_U32* pu32Write)
2458 {
2459     printf("%s is obsolete\n", __FUNCTION__);
2460     UNUSED(pu32Write);
2461     return E_VDEC_RET_UNSUPPORTED;
2462 }
2463 
2464 //------------------------------------------------------------------------------
2465 /// [Obsolete] Get the read pointer of CC data buffer.
2466 /// @param pu32Read \b OUT : current read pointer
2467 /// @return -VDEC_Result
2468 //------------------------------------------------------------------------------
MApi_VDEC_CC_GetReadPtr(MS_U32 * pu32Read)2469 VDEC_Result MApi_VDEC_CC_GetReadPtr(MS_U32* pu32Read)
2470 {
2471     printf("%s is obsolete\n", __FUNCTION__);
2472     UNUSED(pu32Read);
2473     return E_VDEC_RET_UNSUPPORTED;
2474 }
2475 
2476 //------------------------------------------------------------------------------
2477 /// [Obsolete] Update the read pointer of CC data buffer.
2478 /// @param u32EachPacketSize \b IN : new read pointer
2479 /// @return -VDEC_Result
2480 //------------------------------------------------------------------------------
MApi_VDEC_CC_UpdateReadPtr(MS_U32 u32EachPacketSize)2481 VDEC_Result MApi_VDEC_CC_UpdateReadPtr(MS_U32 u32EachPacketSize)
2482 {
2483     printf("%s is obsolete\n", __FUNCTION__);
2484     UNUSED(u32EachPacketSize);
2485     return E_VDEC_RET_UNSUPPORTED;
2486 }
2487 
2488 //------------------------------------------------------------------------------
2489 /// [Obsolete] Get if CC data buffer is overflow.
2490 /// @param pbOverflow \b OUT : overflow flag
2491 /// @return -VDEC_Result
2492 //------------------------------------------------------------------------------
MApi_VDEC_CC_GetIsOverflow(MS_BOOL * pbOverflow)2493 VDEC_Result MApi_VDEC_CC_GetIsOverflow(MS_BOOL* pbOverflow)
2494 {
2495     printf("%s is obsolete\n", __FUNCTION__);
2496     UNUSED(pbOverflow);
2497     return E_VDEC_RET_UNSUPPORTED;
2498 }
2499 
MApi_VDEC_SetEvent(MS_U32 u32EnableEvent,VDEC_EventCb pfn,void * param)2500 VDEC_Result MApi_VDEC_SetEvent(MS_U32 u32EnableEvent, VDEC_EventCb pfn, void *param)
2501 {
2502     _VDEC_WRAP_NOT_INIT_RET();
2503 
2504     VDEC_Result eRetVal  = E_VDEC_FAIL;
2505     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2506     eEXRetVal = MApi_VDEC_EX_SetEvent(&stStreamId, u32EnableEvent, pfn, param);
2507     eRetVal = _VDEC_MapResult(eEXRetVal);
2508 
2509     return eRetVal;
2510 }
2511 
MApi_VDEC_UnsetEvent(MS_U32 u32EnableEvent)2512 VDEC_Result MApi_VDEC_UnsetEvent(MS_U32 u32EnableEvent)
2513 {
2514     _VDEC_WRAP_NOT_INIT_RET();
2515 
2516     VDEC_Result eRetVal  = E_VDEC_FAIL;
2517     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2518     eEXRetVal = MApi_VDEC_EX_UnsetEvent(&stStreamId, u32EnableEvent);
2519     eRetVal = _VDEC_MapResult(eEXRetVal);
2520 
2521     return eRetVal;
2522 }
2523 
2524 //------------------------------------------------------------------------------
2525 /// set ISR event CB
2526 /// @param cb_type \b IN : The CB type for VDEC interrupt
2527 /// @param u32EnableEvent \b IN : The event flag for user data CB function
2528 /// @param pfn \b IN : user data CB function
2529 /// @param param \b IN : the param of/for user data CB function
2530 /// @return status
2531 //------------------------------------------------------------------------------
MApi_VDEC_SetEvent_EX(VDEC_CB_TYPE cb_type,MS_U32 u32EnableEvent,VDEC_EventCb pfn,void * param)2532 VDEC_Result MApi_VDEC_SetEvent_EX(VDEC_CB_TYPE cb_type, MS_U32 u32EnableEvent, VDEC_EventCb pfn, void* param)
2533 {
2534     _VDEC_WRAP_NOT_INIT_RET();
2535 
2536     VDEC_Result eRetVal  = E_VDEC_FAIL;
2537     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2538     eEXRetVal = MApi_VDEC_EX_SetEvent_MultiCallback(&stStreamId, (VDEC_EX_CB_TYPE)cb_type, u32EnableEvent, pfn, param);
2539     eRetVal = _VDEC_MapResult(eEXRetVal);
2540 
2541     return eRetVal;
2542 }
2543 
2544 //------------------------------------------------------------------------------
2545 /// Unset ISR event CB
2546 /// @param cb_type \b IN : The CB type for VDEC interrupt
2547 /// @param u32EnableEvent \b IN : The event flag for user data CB function
2548 /// @return status
2549 //------------------------------------------------------------------------------
MApi_VDEC_UnsetEvent_EX(VDEC_CB_TYPE cb_type,MS_U32 u32EnableEvent)2550 VDEC_Result MApi_VDEC_UnsetEvent_EX(VDEC_CB_TYPE cb_type, MS_U32 u32EnableEvent)
2551 {
2552     _VDEC_WRAP_NOT_INIT_RET();
2553 
2554     VDEC_Result eRetVal  = E_VDEC_FAIL;
2555     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2556     eEXRetVal = MApi_VDEC_EX_UnsetEvent_MultiCallback(&stStreamId, (VDEC_EX_CB_TYPE)cb_type, u32EnableEvent);
2557     eRetVal = _VDEC_MapResult(eEXRetVal);
2558 
2559     return eRetVal;
2560 }
2561 
2562 //------------------------------------------------------------------------------
2563 /// Get ISR event status
2564 /// @return status
2565 //------------------------------------------------------------------------------
MApi_VDEC_GetEventInfo(MS_U32 * u32EventFlag)2566 VDEC_Result MApi_VDEC_GetEventInfo(MS_U32* u32EventFlag)
2567 {
2568     _VDEC_WRAP_NOT_INIT_RET();
2569 
2570     VDEC_Result eRetVal  = E_VDEC_FAIL;
2571     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2572 
2573     if (u32EventFlag)
2574     {
2575         eEXRetVal = MApi_VDEC_EX_GetEventInfo(&stStreamId, u32EventFlag);
2576         eRetVal = _VDEC_MapResult(eEXRetVal);
2577     }
2578 
2579     return eRetVal;
2580 }
2581 
2582 //------------------------------------------------------------------------------
2583 /// Generate a special pattern to work with specific functions
2584 /// @param ePatternType \b IN : Pattern type
2585 /// @param u32Addr \b IN : Pattern buffer physical start address
2586 /// @param u32Size \b IN,OUT : Pattern buffer size
2587 ///                             IN: Pattern buffer size
2588 ///                             OUT: Used Pattern buffer size
2589 /// @return VDEC_Result
2590 //------------------------------------------------------------------------------
MDrv_VDEC_GenPattern(VDEC_PatternType ePatternType,MS_PHY u32Addr,MS_U32 * u32Size)2591 VDEC_Result MDrv_VDEC_GenPattern(VDEC_PatternType ePatternType ,  MS_PHY u32Addr , MS_U32* u32Size)
2592 {
2593     printf("VDEC Warn: MDrv_VDEC_GenPattern() will be removed. please use new API:MApi_VDEC_GenPattern()\n ");
2594     return MApi_VDEC_GenPattern(ePatternType, u32Addr, u32Size);
2595 }
2596 
MApi_VDEC_GenPattern(VDEC_PatternType ePatternType,MS_PHY u32Addr,MS_U32 * pu32Size)2597 VDEC_Result MApi_VDEC_GenPattern(VDEC_PatternType ePatternType,  MS_PHY u32Addr, MS_U32 *pu32Size)
2598 {
2599     _VDEC_WRAP_NOT_INIT_RET();
2600 
2601     VDEC_Result eRetVal  = E_VDEC_FAIL;
2602     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2603     VDEC_EX_PatternType eExPtnType = _VDEC_MapExPatternType(ePatternType);
2604     eEXRetVal = MApi_VDEC_EX_GenPattern(&stStreamId, eExPtnType, u32Addr, pu32Size);
2605     eRetVal = _VDEC_MapResult(eEXRetVal);
2606 
2607     return eRetVal;
2608 }
2609 
2610 //------------------------------------------------------------------------------
2611 /// Get the information of the least length of pattern used for specific function
2612 /// @param pFrmInfo \b IN : the information of the least length of pattern used for specific function
2613 /// @return -the length (Bytes)
2614 //------------------------------------------------------------------------------
MApi_VDEC_GetPatternLeastLength(VDEC_PatternType ePatternType)2615 MS_U32 MApi_VDEC_GetPatternLeastLength(VDEC_PatternType ePatternType)
2616 {
2617     MS_U32 u32Ret = 0;
2618     VDEC_EX_PatternType eExPtnType = _VDEC_MapExPatternType(ePatternType);
2619     u32Ret = MApi_VDEC_EX_GetPatternLeastLength(&stStreamId, eExPtnType);
2620     return u32Ret;
2621 }
2622 
2623 //------------------------------------------------------------------------------
2624 /// Set deblocking process on/off
2625 /// @param bOn \b IN : turn on / off deblocking process
2626 /// @return VDEC_Result
2627 //------------------------------------------------------------------------------
MApi_VDEC_DisableDeblocking(MS_BOOL bDisable)2628 VDEC_Result MApi_VDEC_DisableDeblocking(MS_BOOL bDisable)
2629 {
2630     _VDEC_WRAP_NOT_INIT_RET();
2631 
2632     VDEC_Result eRetVal  = E_VDEC_FAIL;
2633     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2634     eEXRetVal = MApi_VDEC_EX_DisableDeblocking(&stStreamId, bDisable);
2635     eRetVal = _VDEC_MapResult(eEXRetVal);
2636 
2637     return eRetVal;
2638 }
2639 
2640 //------------------------------------------------------------------------------
2641 /// Set Quarter Pixel process on/off
2642 /// @param bOn \b IN : turn on / off Quarter Pixel process
2643 /// @return VDEC_Result
2644 //------------------------------------------------------------------------------
MApi_VDEC_DisableQuarterPixel(MS_BOOL bDisable)2645 VDEC_Result MApi_VDEC_DisableQuarterPixel(MS_BOOL bDisable)
2646 {
2647     _VDEC_WRAP_NOT_INIT_RET();
2648 
2649     VDEC_Result eRetVal  = E_VDEC_FAIL;
2650     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2651     eEXRetVal = MApi_VDEC_EX_DisableQuarterPixel(&stStreamId, bDisable);
2652     eRetVal = _VDEC_MapResult(eEXRetVal);
2653 
2654     return eRetVal;
2655 }
2656 
2657 //------------------------------------------------------------------------------
2658 /// Turn on/off Auto Remove Last Zero Byte process
2659 /// @param bOn \b IN : turn on / off Auto Remove Last Zero Byte process
2660 /// @return VDEC_Result
2661 //------------------------------------------------------------------------------
MApi_VDEC_SetAutoRmLstZeroByte(MS_BOOL bOn)2662 VDEC_Result MApi_VDEC_SetAutoRmLstZeroByte(MS_BOOL bOn)
2663 {
2664     _VDEC_WRAP_NOT_INIT_RET();
2665 
2666     VDEC_Result eRetVal  = E_VDEC_FAIL;
2667     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2668     eEXRetVal = MApi_VDEC_EX_SetAutoRmLstZeroByte(&stStreamId, bOn);
2669     eRetVal = _VDEC_MapResult(eEXRetVal);
2670 
2671     return eRetVal;
2672 }
2673 
2674 //------------------------------------------------------------------------------
2675 /// Set the parameters of Balancing BW
2676 /// @param u8QuarPixelTH \b IN : set Quarter pixel threshold
2677 /// @param u8DeBlockingTH \b IN : set deblocking threshold
2678 /// @param u8UpperBound \b IN : set upper boundary of BW control counter
2679 /// @param u8SafeCoef \b IN : set safety coeffecient of average MB tick.
2680 /// @return VDEC_Result
2681 //------------------------------------------------------------------------------
MApi_VDEC_SetBalanceBW(MS_U8 u8QuarPixelTH,MS_U8 u8DeBlockingTH,MS_U8 u8UpperBound,MS_U8 u8SafeCoef)2682 VDEC_Result MApi_VDEC_SetBalanceBW(MS_U8 u8QuarPixelTH, MS_U8 u8DeBlockingTH, MS_U8 u8UpperBound, MS_U8 u8SafeCoef)
2683 {
2684     _VDEC_WRAP_NOT_INIT_RET();
2685 
2686     VDEC_Result eRetVal  = E_VDEC_FAIL;
2687     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2688     eEXRetVal = MApi_VDEC_EX_SetBalanceBW(&stStreamId, u8QuarPixelTH, u8DeBlockingTH, u8UpperBound, u8SafeCoef);
2689     eRetVal = _VDEC_MapResult(eEXRetVal);
2690 
2691     return eRetVal;
2692 }
2693 
MApi_VDEC_DbgDumpStatus(void)2694 VDEC_Result MApi_VDEC_DbgDumpStatus(void)
2695 {
2696     MApi_VDEC_EX_DbgDumpStatus(&stStreamId);
2697     return E_VDEC_EX_OK;
2698 }
2699 
2700 extern MS_U32 MApi_VDEC_EX_DbgGetProgCnt(void);
MApi_VDEC_DbgGetProgCnt(void)2701 MS_U32 MApi_VDEC_DbgGetProgCnt(void)
2702 {
2703     return MApi_VDEC_EX_DbgGetProgCnt();
2704 }
2705 
MApi_VDEC_SetControl(VDEC_User_Cmd cmd_id,MS_U32 param)2706 VDEC_Result MApi_VDEC_SetControl(VDEC_User_Cmd cmd_id, MS_U32 param)
2707 {
2708     VDEC_Result eRetVal  = E_VDEC_FAIL;
2709     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2710     eEXRetVal = MApi_VDEC_EX_SetControl(&stStreamId, _VDEC_MapUserCmd(cmd_id), param);
2711     eRetVal = _VDEC_MapResult(eEXRetVal);
2712 
2713     return eRetVal;
2714 }
2715 
MApi_VDEC_PreSetControl(VDEC_User_Cmd cmd_id,MS_U32 param)2716 VDEC_Result MApi_VDEC_PreSetControl(VDEC_User_Cmd cmd_id, MS_U32 param)
2717 {
2718     VDEC_Result eRetVal  = E_VDEC_FAIL;
2719     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2720     eEXRetVal = MApi_VDEC_EX_PreSetControl(&stStreamId, _VDEC_MapUserCmd(cmd_id), param);
2721     eRetVal = _VDEC_MapResult(eEXRetVal);
2722 
2723     return eRetVal;
2724 }
2725 
MApi_VDEC_GetControl(VDEC_User_Cmd cmd_id,MS_U32 * param)2726 VDEC_Result MApi_VDEC_GetControl(VDEC_User_Cmd cmd_id, MS_U32 *param)
2727 {
2728     VDEC_Result eRetVal  = E_VDEC_OK;
2729     VDEC_EX_Result eEXRetVal = E_VDEC_EX_OK;
2730 
2731     if (VDEC_USER_CMD_GET_MVC_SUB_FRAME_DISP_INFO == cmd_id)
2732     {
2733         VDEC_FrameInfo* pstFrmInfo = (VDEC_FrameInfo*)param;
2734         VDEC_EX_FrameInfo stEXFrmInfo;
2735         memset(&stEXFrmInfo,0,sizeof(VDEC_EX_FrameInfo));
2736         eEXRetVal = MApi_VDEC_EX_GetControl(&stStreamId, E_VDEC_EX_USER_CMD_GET_MVC_SUB_FRAME_DISP_INFO, (MS_U32*)&stEXFrmInfo);
2737         if (E_VDEC_EX_OK == eEXRetVal)
2738         {
2739             _VDEC_MapFrameInfo(&stEXFrmInfo, pstFrmInfo);
2740         }
2741     }
2742     else if(VDEC_USER_CMD_GET_MAIN_STREAM_ID == cmd_id)
2743     {
2744         *param = stStreamId.u32Id;
2745     }
2746     else
2747     {
2748         eEXRetVal = MApi_VDEC_EX_GetControl(&stStreamId, _VDEC_MapUserCmd(cmd_id), param);
2749     }
2750     eRetVal = _VDEC_MapResult(eEXRetVal);
2751 
2752     return eRetVal;
2753 }
2754 
MApi_VDEC_GetDispCnt(void)2755 MS_U32 MApi_VDEC_GetDispCnt(void)
2756 {
2757     MS_U32 u32Cnt = 0;
2758     u32Cnt = MApi_VDEC_EX_GetDispCnt(&stStreamId);
2759     return u32Cnt;
2760 }
2761 
MApi_VDEC_GetFwVersion(VDEC_FwType eFwType)2762 MS_U32 MApi_VDEC_GetFwVersion(VDEC_FwType eFwType)
2763 {
2764     MS_U32 u32FWVer = 0;
2765 
2766     u32FWVer = MApi_VDEC_EX_GetFwVersion(&stStreamId, (VDEC_EX_FwType)eFwType);
2767 
2768     return u32FWVer;
2769 }
2770 
MApi_VDEC_SetBlockDisplay(MS_BOOL bEnable)2771 VDEC_Result MApi_VDEC_SetBlockDisplay(MS_BOOL bEnable)
2772 {
2773     _VDEC_WRAP_NOT_INIT_RET();
2774 
2775     VDEC_Result eRetVal  = E_VDEC_FAIL;
2776     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2777     eEXRetVal = MApi_VDEC_EX_SetBlockDisplay(&stStreamId, bEnable);
2778     eRetVal = _VDEC_MapResult(eEXRetVal);
2779 
2780     return eRetVal;
2781 }
2782 
MApi_VDEC_EnableESBuffMalloc(MS_BOOL bEnable)2783 VDEC_Result MApi_VDEC_EnableESBuffMalloc(MS_BOOL bEnable)
2784 {
2785     _VDEC_WRAP_NOT_INIT_RET();
2786 
2787     VDEC_Result eRetVal  = E_VDEC_FAIL;
2788     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2789     eEXRetVal = MApi_VDEC_EX_EnableESBuffMalloc(&stStreamId, bEnable);
2790     eRetVal = _VDEC_MapResult(eEXRetVal);
2791 
2792     return eRetVal;
2793 }
2794 
MApi_VDEC_GetESBuffVacancy(void * pData)2795 MS_U32 MApi_VDEC_GetESBuffVacancy(void* pData)
2796 {
2797     _VDEC_WRAP_NOT_INIT_RET_ZERO();
2798     return MApi_VDEC_EX_GetESBuffVacancy(&stStreamId, pData);
2799 }
2800 
MApi_VDEC_GetESBuff(MS_U32 u32ReqSize,MS_U32 * u32AvailSize,MS_PHY * u32Addr)2801 VDEC_Result MApi_VDEC_GetESBuff(MS_U32 u32ReqSize, MS_U32* u32AvailSize, MS_PHY* u32Addr)
2802 {
2803     _VDEC_WRAP_NOT_INIT_RET();
2804 
2805     VDEC_Result eRetVal  = E_VDEC_FAIL;
2806     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2807     eEXRetVal = MApi_VDEC_EX_GetESBuff(&stStreamId, u32ReqSize, u32AvailSize, u32Addr);
2808     eRetVal = _VDEC_MapResult(eEXRetVal);
2809 
2810     return eRetVal;
2811 }
2812 
MApi_VDEC_GetNextDispFrame(VDEC_DispFrame ** ppDispFrm)2813 VDEC_Result MApi_VDEC_GetNextDispFrame(VDEC_DispFrame** ppDispFrm)
2814 {
2815     _VDEC_WRAP_NOT_INIT_RET();
2816 
2817     VDEC_Result eRetVal  = E_VDEC_FAIL;
2818     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2819 
2820     //MS_ASSERT(sizeof(VDEC_EX_DispFrame) == sizeof(VDEC_DispFrame));
2821     //MS_ASSERT(sizeof(VDEC_EX_FrameInfo) == sizeof(VDEC_FrameInfo));
2822 
2823     eEXRetVal = MApi_VDEC_EX_GetNextDispFrame(&stStreamId, (VDEC_EX_DispFrame **)ppDispFrm);
2824     eRetVal = _VDEC_MapResult(eEXRetVal);
2825 
2826     return eRetVal;
2827 }
2828 
2829 //------------------------------------------------------------------------------
2830 /// Notify FW to display the specified frame
2831 /// @param pDispFrm \b IN : the pointer of the frame to be displayed
2832 /// @return VDEC_Result
2833 /// @retval -E_VDEC_RET_NOT_INIT: VDEC is not initialized.
2834 /// @retval -E_VDEC_RET_INVALID_PARAM: the pointer is NULL.
2835 /// @retval -E_VDEC_RET_ILLEGAL_ACCESS: the pointer is invalid.
2836 ///          There might be multiple frame display/release.
2837 //------------------------------------------------------------------------------
MApi_VDEC_DisplayFrame(VDEC_DispFrame * pDispFrm)2838 VDEC_Result MApi_VDEC_DisplayFrame(VDEC_DispFrame *pDispFrm)
2839 {
2840     _VDEC_WRAP_NOT_INIT_RET();
2841 
2842     VDEC_Result eRetVal  = E_VDEC_FAIL;
2843     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2844     eEXRetVal = MApi_VDEC_EX_DisplayFrame(&stStreamId, (VDEC_EX_DispFrame*)pDispFrm);
2845     eRetVal = _VDEC_MapResult(eEXRetVal);
2846 
2847     return eRetVal;
2848 }
2849 
MApi_VDEC_ReleaseFrame(VDEC_DispFrame * pDispFrm)2850 VDEC_Result MApi_VDEC_ReleaseFrame(VDEC_DispFrame *pDispFrm)
2851 {
2852     _VDEC_WRAP_NOT_INIT_RET();
2853 
2854     VDEC_Result eRetVal  = E_VDEC_FAIL;
2855     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2856     eEXRetVal = MApi_VDEC_EX_ReleaseFrame(&stStreamId, (VDEC_EX_DispFrame*)pDispFrm);
2857     eRetVal = _VDEC_MapResult(eEXRetVal);
2858 
2859     return eRetVal;
2860 }
2861 
MApi_VDEC_CaptureFrame(MS_U32 u32FrmPriData,MS_BOOL bEnable)2862 VDEC_Result MApi_VDEC_CaptureFrame(MS_U32 u32FrmPriData, MS_BOOL bEnable)
2863 {
2864     _VDEC_WRAP_NOT_INIT_RET();
2865 
2866     VDEC_Result eRetVal  = E_VDEC_FAIL;
2867     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2868     eEXRetVal = MApi_VDEC_EX_CaptureFrame(&stStreamId, u32FrmPriData, bEnable);
2869     eRetVal = _VDEC_MapResult(eEXRetVal);
2870 
2871     return eRetVal;
2872 }
2873 
MApi_VDEC_CC_Init(MS_U32 * pIn)2874 VDEC_Result MApi_VDEC_CC_Init(MS_U32 *pIn)
2875 {
2876     _VDEC_WRAP_NOT_INIT_RET();
2877 
2878     VDEC_Result eRetVal  = E_VDEC_FAIL;
2879     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2880     eEXRetVal = MApi_VDEC_EX_CC_Init(&stStreamId, pIn);
2881     eRetVal = _VDEC_MapResult(eEXRetVal);
2882 
2883     return eRetVal;
2884 }
2885 
MApi_VDEC_CC_SetCfg(VDEC_CCFormat eFmt,VDEC_CCType eType,MS_U32 * pIn)2886 VDEC_Result MApi_VDEC_CC_SetCfg(VDEC_CCFormat eFmt, VDEC_CCType eType, MS_U32 *pIn)
2887 {
2888     _VDEC_WRAP_NOT_INIT_RET();
2889 
2890     VDEC_Result eRetVal  = E_VDEC_FAIL;
2891     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2892     eEXRetVal = MApi_VDEC_EX_CC_SetCfg(&stStreamId, _VDEC_MapCCFormat(eFmt), _VDEC_MapCCType(eType), pIn);
2893     eRetVal = _VDEC_MapResult(eEXRetVal);
2894 
2895     return eRetVal;
2896 }
2897 
MApi_VDEC_CC_SetBuffStartAdd(VDEC_CCFormat eFmt,MS_U32 * pIn)2898 VDEC_Result MApi_VDEC_CC_SetBuffStartAdd(VDEC_CCFormat eFmt, MS_U32 *pIn)
2899 {
2900     _VDEC_WRAP_NOT_INIT_RET();
2901 
2902     VDEC_Result eRetVal  = E_VDEC_FAIL;
2903     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2904     eEXRetVal = MApi_VDEC_EX_CC_SetBuffStartAdd(&stStreamId, _VDEC_MapCCFormat(eFmt), pIn);
2905     eRetVal = _VDEC_MapResult(eEXRetVal);
2906 
2907     return eRetVal;
2908 }
2909 
MApi_VDEC_CC_UpdateWriteAdd(VDEC_CCFormat eFmt,MS_U32 * pIn)2910 VDEC_Result MApi_VDEC_CC_UpdateWriteAdd(VDEC_CCFormat eFmt, MS_U32 *pIn)
2911 {
2912     _VDEC_WRAP_NOT_INIT_RET();
2913 
2914     VDEC_Result eRetVal  = E_VDEC_FAIL;
2915     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2916     eEXRetVal = MApi_VDEC_EX_CC_UpdateWriteAdd(&stStreamId, _VDEC_MapCCFormat(eFmt), pIn);
2917     eRetVal = _VDEC_MapResult(eEXRetVal);
2918 
2919     return eRetVal;
2920 }
2921 
MApi_VDEC_CC_UpdateReadAdd(VDEC_CCFormat eFmt,MS_U32 * pIn)2922 VDEC_Result MApi_VDEC_CC_UpdateReadAdd(VDEC_CCFormat eFmt, MS_U32 *pIn)
2923 {
2924     _VDEC_WRAP_NOT_INIT_RET();
2925 
2926     VDEC_Result eRetVal  = E_VDEC_FAIL;
2927     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2928     eEXRetVal = MApi_VDEC_EX_CC_UpdateReadAdd(&stStreamId, _VDEC_MapCCFormat(eFmt), pIn);
2929     eRetVal = _VDEC_MapResult(eEXRetVal);
2930 
2931     return eRetVal;
2932 }
2933 
MApi_VDEC_CC_DisableParsing(VDEC_CCFormat eFmt)2934 VDEC_Result MApi_VDEC_CC_DisableParsing(VDEC_CCFormat eFmt)
2935 {
2936     _VDEC_WRAP_NOT_INIT_RET();
2937 
2938     VDEC_Result eRetVal  = E_VDEC_FAIL;
2939     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2940     eEXRetVal = MApi_VDEC_EX_CC_DisableParsing(&stStreamId, _VDEC_MapCCFormat(eFmt));
2941     eRetVal = _VDEC_MapResult(eEXRetVal);
2942 
2943     return eRetVal;
2944 }
2945 
MApi_VDEC_CC_GetInfo(VDEC_CCFormat eFmt,VDEC_CCInfoCmd eCmd,MS_U32 * pOut)2946 VDEC_Result MApi_VDEC_CC_GetInfo(VDEC_CCFormat eFmt, VDEC_CCInfoCmd eCmd, MS_U32 *pOut)
2947 {
2948     _VDEC_WRAP_NOT_INIT_RET();
2949 
2950     VDEC_Result eRetVal  = E_VDEC_FAIL;
2951     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2952     eEXRetVal = MApi_VDEC_EX_CC_GetInfo(&stStreamId, _VDEC_MapCCFormat(eFmt), _VDEC_MapCCInfoCmd(eCmd), pOut);
2953     eRetVal = _VDEC_MapResult(eEXRetVal);
2954 
2955     return eRetVal;
2956 }
2957 
MApi_VDEC_CC_GetIsRstDone(VDEC_CCFormat eFmt)2958 VDEC_Result MApi_VDEC_CC_GetIsRstDone(VDEC_CCFormat eFmt)
2959 {
2960     _VDEC_WRAP_NOT_INIT_RET();
2961 
2962     VDEC_Result eRetVal  = E_VDEC_FAIL;
2963     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2964     eEXRetVal = MApi_VDEC_EX_CC_GetIsRstDone(&stStreamId, _VDEC_MapCCFormat(eFmt));
2965     eRetVal = _VDEC_MapResult(eEXRetVal);
2966 
2967     return eRetVal;
2968 }
2969 
MApi_VDEC_CC_GetIsBuffOverflow(VDEC_CCFormat eFmt)2970 VDEC_Result MApi_VDEC_CC_GetIsBuffOverflow(VDEC_CCFormat eFmt)
2971 {
2972     _VDEC_WRAP_NOT_INIT_RET();
2973 
2974     VDEC_Result eRetVal  = E_VDEC_FAIL;
2975     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
2976     eEXRetVal = MApi_VDEC_EX_CC_GetIsBuffOverflow(&stStreamId, _VDEC_MapCCFormat(eFmt));
2977     eRetVal = _VDEC_MapResult(eEXRetVal);
2978 
2979     return eRetVal;
2980 }
2981 
2982 //------------------------------------------------------------------------------
2983 /// Report the physical address of write pointer
2984 /// @param eFmt \b IN : the format of closed caption
2985 /// @return MS_PHY
2986 //------------------------------------------------------------------------------
MApi_VDEC_CC_GetWriteAdd(VDEC_CCFormat eFmt)2987 MS_PHY MApi_VDEC_CC_GetWriteAdd(VDEC_CCFormat eFmt)
2988 {
2989     MS_PHY u32CCWrPtr = VDEC_U32_MAX;
2990     u32CCWrPtr = MApi_VDEC_EX_CC_GetWriteAdd(&stStreamId, _VDEC_MapCCFormat(eFmt));
2991     return u32CCWrPtr;
2992 }
2993 
2994 //------------------------------------------------------------------------------
2995 /// Report the physical address of read pointer
2996 /// @param eFmt \b IN : the format of closed caption
2997 /// @return MS_PHY
2998 //------------------------------------------------------------------------------
MApi_VDEC_CC_GetReadAdd(VDEC_CCFormat eFmt)2999 MS_PHY MApi_VDEC_CC_GetReadAdd(VDEC_CCFormat eFmt)
3000 {
3001     MS_PHY u32CCRdPtr = VDEC_U32_MAX;
3002     u32CCRdPtr = MApi_VDEC_EX_CC_GetReadAdd(&stStreamId, _VDEC_MapCCFormat(eFmt));
3003     return u32CCRdPtr;
3004 }
3005 
3006 
MApi_VDEC_SystemPreSetControl(VDEC_User_Cmd cmd_id,void * pParam)3007 VDEC_Result MApi_VDEC_SystemPreSetControl(VDEC_User_Cmd cmd_id, void *pParam)
3008 {
3009     VDEC_Result eRetVal  = E_VDEC_FAIL;
3010     VDEC_EX_Result eEXRetVal = E_VDEC_EX_FAIL;
3011     eEXRetVal = MApi_VDEC_EX_SystemPreSetControl(_VDEC_MapUserCmd(cmd_id), pParam);
3012     eRetVal = _VDEC_MapResult(eEXRetVal);
3013 
3014     return eRetVal;
3015 }
3016 #endif
3017