xref: /utopia/UTPA2-700.0.x/modules/vdec_v1/api/vdec/apiVDEC_v2.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 
78 ///////////////////////////////////////////////////////////////////////////////////////////////////
79 ///
80 /// file    apiVDEC_v2.c
81 /// @brief  VDEC API
82 /// @author MStar Semiconductor Inc.
83 ///////////////////////////////////////////////////////////////////////////////////////////////////
84 
85 
86 
87 //-------------------------------------------------------------------------------------------------
88 //  Include Files
89 //-------------------------------------------------------------------------------------------------
90 #include "MsTypes.h"
91 #ifndef MSOS_TYPE_LINUX_KERNEL
92 #include <stdio.h>
93 #include <string.h>
94 #endif
95 
96 #include "utopia.h"
97 #include "utopia_dapi.h"
98 #include "vdec_private.h"
99 #include "apiVDEC_v2.h"
100 #include "apiVDEC.h"
101 //-------------------------------------------------------------------------------------------------
102 //  Global Variable
103 //-------------------------------------------------------------------------------------------------
104 void* pModuleVDEC_V2 = NULL;
105 char  ResourceGroup[1][20] = {{"VDEC_R0"},};
106 
107 //-------------------------------------------------------------------------------------------------
108 //  API Function
109 //-------------------------------------------------------------------------------------------------
VDEC_V2_RegisterToUtopia(void)110 void VDEC_V2_RegisterToUtopia(void)
111 {
112     MS_U32 j = 0;
113     void* psResource = NULL;
114 
115     // 1. deal with module
116     UtopiaModuleCreate(MODULE_VDEC, 0, &pModuleVDEC_V2);
117     UtopiaModuleRegister(pModuleVDEC_V2);
118     UtopiaModuleSetupFunctionPtr(pModuleVDEC_V2,
119                                 (FUtopiaOpen)VDEC_V2_Open,
120                                 (FUtopiaClose)VDEC_V2_Close,
121                                 (FUtopiaIOctl)VDEC_V2_Ioctl);
122 
123     // 2. deal with resource
124     //for(i=E_VDEC_EX_POOL_ID_INTERNAL;i<E_VDEC_EX_POOL_ID_MAX;i++) // for each resource group in different memory pool
125     {
126         UtopiaModuleAddResourceStart(pModuleVDEC_V2,0);
127         for(j=0;j<1;j++) // for each resource group in same memory pool
128         {
129             UtopiaResourceCreate(ResourceGroup[0],sizeof(VDEC_RESOURCE_PRIVATE),&psResource);
130             UtopiaResourceRegister(pModuleVDEC_V2,psResource,0);
131         }
132         UtopiaModuleAddResourceEnd(pModuleVDEC_V2,0);
133     }
134 }
135 
VDEC_V2_Open(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)136 MS_U32 VDEC_V2_Open(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
137 {
138     void* pResource = NULL;
139     VDEC_RESOURCE_PRIVATE* pVDEC_ResourcePrivate = NULL;
140     VDEC_INSTANCE_PRIVATE* psVDEC_InstPri = NULL;
141     //MS_U8 i = 0;
142 
143     // Check there is available decoder to be use
144     if(UtopiaResourceObtain(pModuleVDEC_V2, /*E_VDEC_EX_POOL_ID_INTERNAL*/ 0, &pResource) != UTOPIA_STATUS_SUCCESS)
145     {
146         printf("UtopiaResourceObtain fail,%s,%d\n",__FUNCTION__,__LINE__);
147         return UTOPIA_STATUS_ERR_RESOURCE;
148     }
149 
150     UtopiaResourceGetPrivate(pResource,(void*)(&pVDEC_ResourcePrivate));
151 
152 
153     if(pVDEC_ResourcePrivate->u8DecoderInUse == 0)
154     {
155         pVDEC_ResourcePrivate->u8DecoderInUse = 1;
156 
157     }
158     else
159     {
160         printf("No decoder can be used,%s,%d\n",__FUNCTION__,__LINE__);
161         return UTOPIA_STATUS_ERR_RESOURCE;
162     }
163 
164     UtopiaResourceRelease(pResource);
165 
166     //Create instance
167     UtopiaInstanceCreate(sizeof(VDEC_INSTANCE_PRIVATE), ppInstance);
168     UtopiaInstanceGetPrivate(*ppInstance, (void**)&psVDEC_InstPri);
169 
170     //Recode de coder index
171     //psVDEC_InstPri->Index_of_decoder = 0;
172 
173     //Link Function pointer
174     //psVDEC_InstPri->fpVDEC_EX_GetFreeStream  = MApi_VDEC_EX_V2_GetFreeStream;
175     psVDEC_InstPri->fpVDEC_Init                         = MApi_VDEC_V2_Init;
176     psVDEC_InstPri->fpVDEC_Init_EX                      = MApi_VDEC_V2_Init_EX;
177     psVDEC_InstPri->fpVDEC_Rst                          = MApi_VDEC_V2_Rst;
178     psVDEC_InstPri->fpVDEC_Exit                         = MApi_VDEC_V2_Exit;
179     psVDEC_InstPri->fpVDEC_CheckDispInfoRdy             = MApi_VDEC_V2_CheckDispInfoRdy;
180     psVDEC_InstPri->fpVDEC_SetFrcMode                   = MApi_VDEC_V2_SetFrcMode;
181     psVDEC_InstPri->fpVDEC_SetDynScalingParams          = MApi_VDEC_V2_SetDynScalingParams;
182     psVDEC_InstPri->fpVDEC_Play                         = MApi_VDEC_V2_Play;
183     psVDEC_InstPri->fpVDEC_Pause                        = MApi_VDEC_V2_Pause;
184     psVDEC_InstPri->fpVDEC_Resume                       = MApi_VDEC_V2_Resume;
185     psVDEC_InstPri->fpVDEC_StepDisp                     = MApi_VDEC_V2_StepDisp;
186     psVDEC_InstPri->fpVDEC_IsStepDispDone               = MApi_VDEC_V2_IsStepDispDone;
187     psVDEC_InstPri->fpVDEC_SeekToPTS                    = MApi_VDEC_V2_SeekToPTS;
188     psVDEC_InstPri->fpVDEC_SkipToPTS                    = MApi_VDEC_V2_SkipToPTS;
189     psVDEC_InstPri->fpVDEC_StepDecode                   = MApi_VDEC_V2_StepDecode;
190     psVDEC_InstPri->fpVDEC_IsStepDecodeDone             = MApi_VDEC_V2_IsStepDecodeDone;
191     psVDEC_InstPri->fpVDEC_SetTrickMode                 = MApi_VDEC_V2_SetTrickMode;
192     psVDEC_InstPri->fpVDEC_PushDecQ                     = MApi_VDEC_V2_PushDecQ;
193     psVDEC_InstPri->fpVDEC_FireDecCmd                   = MApi_VDEC_V2_FireDecCmd;
194     psVDEC_InstPri->fpVDEC_GetDecQVacancy               = MApi_VDEC_V2_GetDecQVacancy;
195     psVDEC_InstPri->fpVDEC_IsCCAvailable                = MApi_VDEC_V2_IsCCAvailable;
196     psVDEC_InstPri->fpVDEC_GetCCInfo                    = MApi_VDEC_V2_GetCCInfo;
197     psVDEC_InstPri->fpVDEC_Flush                        = MApi_VDEC_V2_Flush;
198     psVDEC_InstPri->fpVDEC_GetESWritePtr                = MApi_VDEC_V2_GetESWritePtr;
199     psVDEC_InstPri->fpVDEC_GetESReadPtr                 = MApi_VDEC_V2_GetESReadPtr;
200     psVDEC_InstPri->fpVDEC_EnableLastFrameShow          = MApi_VDEC_V2_EnableLastFrameShow;
201     psVDEC_InstPri->fpVDEC_IsDispFinish                 = MApi_VDEC_V2_IsDispFinish;
202     psVDEC_InstPri->fpVDEC_SetSpeed                     = MApi_VDEC_V2_SetSpeed;
203     psVDEC_InstPri->fpVDEC_IsFrameRdy                   = MApi_VDEC_V2_IsFrameRdy;
204     psVDEC_InstPri->fpVDEC_SetFreezeDisp                = MApi_VDEC_V2_SetFreezeDisp;
205     psVDEC_InstPri->fpVDEC_SetBlueScreen                = MApi_VDEC_V2_SetBlueScreen;
206     psVDEC_InstPri->fpVDEC_ResetPTS                     = MApi_VDEC_V2_ResetPTS;
207     psVDEC_InstPri->fpVDEC_AVSyncOn                     = MApi_VDEC_V2_AVSyncOn;
208     psVDEC_InstPri->fpVDEC_SetAVSyncFreerunThreshold    = MApi_VDEC_V2_SetAVSyncFreerunThreshold;
209     psVDEC_InstPri->fpVDEC_IsAVSyncOn                   = MApi_VDEC_V2_IsAVSyncOn;
210     psVDEC_InstPri->fpVDEC_GetPTS                       = MApi_VDEC_V2_GetPTS;
211     psVDEC_InstPri->fpVDEC_GetNextPTS                   = MApi_VDEC_V2_GetNextPTS;
212     psVDEC_InstPri->fpVDEC_IsStartSync                  = MApi_VDEC_V2_IsStartSync;
213     psVDEC_InstPri->fpVDEC_IsReachSync                  = MApi_VDEC_V2_IsReachSync;
214     psVDEC_InstPri->fpVDEC_IsFreerun                    = MApi_VDEC_V2_IsFreerun;
215     psVDEC_InstPri->fpVDEC_MhegDecodeIFrame             = MApi_VDEC_V2_MHEG_DecodeIFrame;
216     psVDEC_InstPri->fpVDEC_MhegIsIFrameDecoding         = MApi_VDEC_V2_MHEG_IsIFrameDecoding;
217     psVDEC_InstPri->fpVDEC_MhegRstIFrameDec             = MApi_VDEC_V2_MHEG_RstIFrameDec;
218     psVDEC_InstPri->fpVDEC_GetErrCode                   = MApi_VDEC_V2_GetErrCode;
219     psVDEC_InstPri->fpVDEC_GetErrCnt                    = MApi_VDEC_V2_GetErrCnt;
220     psVDEC_InstPri->fpVDEC_GetActiveCodecType           = MApi_VDEC_V2_GetActiveCodecType;
221     psVDEC_InstPri->fpVDEC_GetBitsRate                  = MApi_VDEC_V2_GetBitsRate;
222     psVDEC_InstPri->fpVDEC_Is32PullDown                 = MApi_VDEC_V2_Is32PullDown;
223     psVDEC_InstPri->fpVDEC_IsAlive                      = MApi_VDEC_V2_IsAlive;
224     psVDEC_InstPri->fpVDEC_GetVideoPtsStcDelta          = MApi_VDEC_V2_GetVideoPtsStcDelta;
225     psVDEC_InstPri->fpVDEC_IsWithValidStream            = MApi_VDEC_V2_IsWithValidStream;
226     psVDEC_InstPri->fpVDEC_IsIFrameFound                = MApi_VDEC_V2_IsIFrameFound;
227     psVDEC_InstPri->fpVDEC_IsWithLowDelay               = MApi_VDEC_V2_IsWithLowDelay;
228     psVDEC_InstPri->fpVDEC_IsAllBufferEmpty             = MApi_VDEC_V2_IsAllBufferEmpty;
229     psVDEC_InstPri->fpVDEC_GetGOPCnt                    = MApi_VDEC_V2_GetGOPCnt;
230     psVDEC_InstPri->fpVDEC_GetFrameCnt                  = MApi_VDEC_V2_GetFrameCnt;
231     psVDEC_InstPri->fpVDEC_GetSkipCnt                   = MApi_VDEC_V2_GetSkipCnt;
232     psVDEC_InstPri->fpVDEC_GetDropCnt                   = MApi_VDEC_V2_GetDropCnt;
233     psVDEC_InstPri->fpVDEC_GetDispInfo                  = MApi_VDEC_V2_GetDispInfo;
234     psVDEC_InstPri->fpVDEC_GetTrickMode                 = MApi_VDEC_V2_GetTrickMode;
235     psVDEC_InstPri->fpVDEC_GetActiveFormat              = MApi_VDEC_V2_GetActiveFormat;
236     psVDEC_InstPri->fpVDEC_GetColourPrimaries           = MApi_VDEC_V2_GetColourPrimaries;
237     psVDEC_InstPri->fpVDEC_GetHWKey                     = MApi_VDEC_V2_GetHWKey;
238     psVDEC_InstPri->fpVDEC_IsSeqChg                     = MApi_VDEC_V2_IsSeqChg;
239     psVDEC_InstPri->fpVDEC_SetDbgLevel                  = MApi_VDEC_V2_SetDbgLevel;
240     psVDEC_InstPri->fpVDEC_GetDecFrameInfo              = MApi_VDEC_V2_GetDecFrameInfo;
241     psVDEC_InstPri->fpVDEC_GetDispFrameInfo             = MApi_VDEC_V2_GetDispFrameInfo;
242     psVDEC_InstPri->fpVDEC_GetExtDispInfo               = MApi_VDEC_V2_GetExtDispInfo;
243     psVDEC_InstPri->fpVDEC_GetDecTimeCode               = MApi_VDEC_V2_GetDecTimeCode;
244     psVDEC_InstPri->fpVDEC_GetDispTimeCode              = MApi_VDEC_V2_GetDispTimeCode;
245 
246 
247     return UTOPIA_STATUS_SUCCESS;
248 }
249 
250 
VDEC_V2_Ioctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)251 MS_U32 VDEC_V2_Ioctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
252 {
253     VDEC_INSTANCE_PRIVATE* psVDEC_InstPri = NULL;
254     UtopiaInstanceGetPrivate(pInstance, (void*)&psVDEC_InstPri);
255     E_VDEC_V2_IOCTL_CMD IOcmd = (E_VDEC_V2_IOCTL_CMD)u32Cmd;
256     MS_U32 ret = UTOPIA_STATUS_FAIL;
257     VDEC_Result *pRet = (((VDEC_V2_IO_Param *)pArgs)->pRet);
258     *pRet = E_VDEC_FAIL;
259 
260     switch(IOcmd)
261     {
262         case E_VDEC_V2_CMD_GETLIBVER:
263                 *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_GetLibVer((const MSIF_Version **)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
264                 ret = UTOPIA_STATUS_SUCCESS;
265                 break;
266 
267         case E_VDEC_V2_CMD_GETINFO:
268                 *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_GetInfo((const VDEC_Info **)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
269                 ret = UTOPIA_STATUS_SUCCESS;
270                 break;
271 
272         case E_VDEC_V2_CMD_GETSTATUS:
273                 *((MS_BOOL *)pRet) = psVDEC_InstPri->fpVDEC_GetStatus((VDEC_Status*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
274                 ret = UTOPIA_STATUS_SUCCESS;
275                 break;
276 
277         case E_VDEC_V2_CMD_CHECKCAPS:
278                 *((MS_BOOL *)pRet) = psVDEC_InstPri->fpVDEC_CheckCaps(*((VDEC_CodecType*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
279                 ret = UTOPIA_STATUS_SUCCESS;
280                 break;
281 
282         case E_VDEC_V2_CMD_ENABLETUEBOMODE:
283                 *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_EnableTurboMode(*((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
284                 ret = UTOPIA_STATUS_SUCCESS;
285                 break;
286 
287         case E_VDEC_V2_CMD_INIT:
288 
289             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_Init((VDEC_InitParam*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
290             ret = UTOPIA_STATUS_SUCCESS;
291             break;
292 
293         case E_VDEC_V2_CMD_INIT_EX:
294 
295             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_Init_EX((void*)(((VDEC_V2_IO_Param *)pArgs)->param[0]),
296                                                                     *((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1])));
297             ret = UTOPIA_STATUS_SUCCESS;
298             break;
299 
300         case E_VDEC_V2_CMD_RST:
301 
302             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_Rst();
303             ret = UTOPIA_STATUS_SUCCESS;
304             break;
305 
306         case E_VDEC_V2_CMD_EXIT:
307 
308             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_Exit(*((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
309             ret = UTOPIA_STATUS_SUCCESS;
310             break;
311 
312         case E_VDEC_V2_CMD_CHECK_DISP_INFO_RDY:
313 
314             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CheckDispInfoRdy();
315             ret = UTOPIA_STATUS_SUCCESS;
316             break;
317 
318         case E_VDEC_V2_CMD_SET_FRC_MODE:
319 
320             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetFrcMode(*((VDEC_FrcMode*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
321             ret = UTOPIA_STATUS_SUCCESS;
322             break;
323 
324         case E_VDEC_V2_CMD_SET_DYNSCALING_PARAMS:
325 
326             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetDynScalingParams(*((MS_PHYADDR*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
327                                                           *((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1])));
328             ret = UTOPIA_STATUS_SUCCESS;
329             break;
330 
331         case E_VDEC_V2_CMD_PLAY:
332 
333             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_Play();
334             ret = UTOPIA_STATUS_SUCCESS;
335             break;
336 
337         case E_VDEC_V2_CMD_PAUSE:
338 
339             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_Pause();
340             ret = UTOPIA_STATUS_SUCCESS;
341             break;
342 
343         case E_VDEC_V2_CMD_RESUME:
344 
345             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_Resume();
346             ret = UTOPIA_STATUS_SUCCESS;
347             break;
348 
349         case E_VDEC_V2_CMD_STEP_DISP:
350 
351             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_StepDisp();
352             ret = UTOPIA_STATUS_SUCCESS;
353             break;
354 
355         case E_VDEC_V2_CMD_IS_STEP_DISP_DONE:
356 
357             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsStepDispDone();
358             ret = UTOPIA_STATUS_SUCCESS;
359             break;
360 
361         case E_VDEC_V2_CMD_SEEK_TO_PTS:
362 
363             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SeekToPTS(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
364             ret = UTOPIA_STATUS_SUCCESS;
365             break;
366 
367         case E_VDEC_V2_CMD_SKIP_TO_PTS:
368 
369             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SkipToPTS(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
370             ret = UTOPIA_STATUS_SUCCESS;
371             break;
372 
373         case E_VDEC_V2_CMD_STEP_DECODE:
374 
375             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_StepDecode();
376             ret = UTOPIA_STATUS_SUCCESS;
377             break;
378 
379         case E_VDEC_V2_CMD_IS_STEP_DECODE_DONE:
380 
381             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsStepDecodeDone();
382             ret = UTOPIA_STATUS_SUCCESS;
383             break;
384 
385         case E_VDEC_V2_CMD_SET_TRICK_MODE:
386 
387             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetTrickMode(*((VDEC_TrickDec*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
388             ret = UTOPIA_STATUS_SUCCESS;
389             break;
390 
391         case E_VDEC_V2_CMD_PUSH_DECQ:
392 
393             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_PushDecQ(((VDEC_DecCmd*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
394             ret = UTOPIA_STATUS_SUCCESS;
395             break;
396 
397         case E_VDEC_V2_CMD_FIRE_DEC_CMD:
398 
399             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_FireDecCmd();
400             ret = UTOPIA_STATUS_SUCCESS;
401             break;
402 
403         case E_VDEC_V2_CMD_GET_DECQ_VACANCY:
404 
405             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetDecQVacancy();
406             ret = UTOPIA_STATUS_SUCCESS;
407             break;
408 
409         case E_VDEC_V2_CMD_IS_CC_AVAILABLE:
410 
411             *((MS_BOOL *)pRet)  = psVDEC_InstPri->fpVDEC_IsCCAvailable();
412             ret = UTOPIA_STATUS_SUCCESS;
413             break;
414 
415         case E_VDEC_V2_CMD_GET_CC_INFO:
416 
417             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_GetCCInfo(((void *)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
418                                                  (*((MS_U32 *)(((VDEC_V2_IO_Param *)pArgs)->param[1]))));
419             ret = UTOPIA_STATUS_SUCCESS;
420             break;
421 
422         case E_VDEC_V2_CMD_FLUSH:
423 
424             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_Flush(*((VDEC_FreezePicSelect *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
425             ret = UTOPIA_STATUS_SUCCESS;
426             break;
427 
428         case E_VDEC_V2_CMD_GET_ES_WRITE_PTR:
429 
430             *((MS_U32 *)pRet) = psVDEC_InstPri->fpVDEC_GetESWritePtr();
431             ret = UTOPIA_STATUS_SUCCESS;
432             break;
433 
434         case E_VDEC_V2_CMD_GET_ES_READ_PTR:
435 
436             *((MS_U32 *)pRet) = psVDEC_InstPri->fpVDEC_GetESReadPtr();
437             ret = UTOPIA_STATUS_SUCCESS;
438             break;
439 
440         case E_VDEC_V2_CMD_ENABLE_LAST_FRAME_SHOW:
441 
442             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_EnableLastFrameShow(*((MS_BOOL *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
443             ret = UTOPIA_STATUS_SUCCESS;
444             break;
445 
446         case E_VDEC_V2_CMD_IS_DISP_FINISH:
447 
448             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_IsDispFinish();
449             ret = UTOPIA_STATUS_SUCCESS;
450             break;
451 
452         case E_VDEC_V2_CMD_SET_SPEED:
453 
454             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_SetSpeed(*((VDEC_SpeedType *)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
455                                                                     *((VDEC_DispSpeed *)(((VDEC_V2_IO_Param *)pArgs)->param[1])));
456             ret = UTOPIA_STATUS_SUCCESS;
457             break;
458 
459         case E_VDEC_V2_CMD_IS_FRAME_RDY:
460 
461             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_IsFrameRdy();
462             ret = UTOPIA_STATUS_SUCCESS;
463             break;
464 
465         case E_VDEC_V2_CMD_SET_FREEZE_DISP:
466 
467             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_SetFreezeDisp(*((MS_BOOL *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
468             ret = UTOPIA_STATUS_SUCCESS;
469             break;
470 
471         case E_VDEC_V2_CMD_SET_BLUE_SCREEN:
472 
473             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_SetBlueScreen(*((MS_BOOL *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
474             ret = UTOPIA_STATUS_SUCCESS;
475             break;
476 
477         case E_VDEC_V2_CMD_RESET_PTS:
478 
479             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_ResetPTS(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
480             ret = UTOPIA_STATUS_SUCCESS;
481             break;
482 
483         case E_VDEC_V2_CMD_AVSYNC_ON:
484 
485             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_AVSyncOn(*((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
486                                                                     *((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1])),
487                                                                     *((MS_U16*)(((VDEC_V2_IO_Param *)pArgs)->param[2])));
488             ret = UTOPIA_STATUS_SUCCESS;
489             break;
490 
491         case E_VDEC_V2_CMD_SET_AVSYNC_FREERUN_THRESHOLD:
492 
493             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetAVSyncFreerunThreshold(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
494             ret = UTOPIA_STATUS_SUCCESS;
495             break;
496 
497         case E_VDEC_V2_CMD_IS_AVSYNC_ON:
498 
499             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsAVSyncOn();
500             ret = UTOPIA_STATUS_SUCCESS;
501             break;
502 
503         case E_VDEC_V2_CMD_GET_PTS:
504 
505             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetPTS();
506             ret = UTOPIA_STATUS_SUCCESS;
507             break;
508 
509         case E_VDEC_V2_CMD_GET_NEXT_PTS:
510 
511             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetNextPTS();
512             ret = UTOPIA_STATUS_SUCCESS;
513             break;
514 
515         case E_VDEC_V2_CMD_IS_START_SYNC:
516 
517             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsStartSync();
518             ret = UTOPIA_STATUS_SUCCESS;
519             break;
520 
521         case E_VDEC_V2_CMD_IS_REACH_SYNC:
522 
523             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsReachSync();
524             ret = UTOPIA_STATUS_SUCCESS;
525             break;
526 
527         case E_VDEC_V2_CMD_IS_FREERUN:
528 
529             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsFreerun();
530             ret = UTOPIA_STATUS_SUCCESS;
531             break;
532 
533         case E_VDEC_V2_CMD_MHEG_DECODE_I_FRAME:
534 
535             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_MhegDecodeIFrame(*((MS_PHYADDR*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
536                                                                     *((MS_PHYADDR*)(((VDEC_V2_IO_Param *)pArgs)->param[1])),
537                                                                     *((MS_PHYADDR*)(((VDEC_V2_IO_Param *)pArgs)->param[2])));
538             ret = UTOPIA_STATUS_SUCCESS;
539             break;
540 
541         case E_VDEC_V2_CMD_MHEG_IS_I_FRAME_DECODING:
542 
543             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_MhegIsIFrameDecoding();
544             ret = UTOPIA_STATUS_SUCCESS;
545             break;
546 
547         case E_VDEC_V2_CMD_MHEG_RST_I_FRAME_DEC:
548 
549             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_MhegRstIFrameDec();
550             ret = UTOPIA_STATUS_SUCCESS;
551             break;
552 
553         case E_VDEC_V2_CMD_GET_ERR_CODE:
554 
555             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetErrCode();
556             ret = UTOPIA_STATUS_SUCCESS;
557             break;
558 
559         case E_VDEC_V2_CMD_GET_ERR_CNT:
560 
561             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetErrCnt();
562             ret = UTOPIA_STATUS_SUCCESS;
563             break;
564 
565         case E_VDEC_V2_CMD_GET_ACTIVE_CODEC_TYPE:
566 
567             *((VDEC_CodecType *)pRet)  = psVDEC_InstPri->fpVDEC_GetActiveCodecType();
568             ret = UTOPIA_STATUS_SUCCESS;
569             break;
570 
571         case E_VDEC_V2_CMD_GET_BITS_RATE:
572 
573             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetBitsRate();
574             ret = UTOPIA_STATUS_SUCCESS;
575             break;
576 
577         case E_VDEC_V2_CMD_IS_32PULLDOWN:
578 
579             *((MS_BOOL *)pRet)  = psVDEC_InstPri->fpVDEC_Is32PullDown();
580             ret = UTOPIA_STATUS_SUCCESS;
581             break;
582 
583         case E_VDEC_V2_CMD_IS_ALIVE:
584 
585             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsAlive();
586             ret = UTOPIA_STATUS_SUCCESS;
587             break;
588 
589         case E_VDEC_V2_CMD_GET_VIDEO_PTS_STC_DELTA:
590 
591             *((MS_S64 *)pRet)  = psVDEC_InstPri->fpVDEC_GetVideoPtsStcDelta();
592             ret = UTOPIA_STATUS_SUCCESS;
593             break;
594 
595         case E_VDEC_V2_CMD_IS_WITH_VALID_STREAM:
596 
597             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsWithValidStream();
598             ret = UTOPIA_STATUS_SUCCESS;
599             break;
600 
601         case E_VDEC_V2_CMD_IS_I_FRAME_FOUND:
602 
603             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsIFrameFound();
604             ret = UTOPIA_STATUS_SUCCESS;
605             break;
606 
607         case E_VDEC_V2_CMD_IS_WITH_LOW_DELAY:
608 
609             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsWithLowDelay();
610             ret = UTOPIA_STATUS_SUCCESS;
611             break;
612 
613         case E_VDEC_V2_CMD_IS_ALL_BUFFER_EMPTY:
614 
615             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsAllBufferEmpty();
616             ret = UTOPIA_STATUS_SUCCESS;
617             break;
618 
619         case E_VDEC_V2_CMD_GET_GOP_CNT:
620 
621             *((MS_U8 *)pRet)  = psVDEC_InstPri->fpVDEC_GetGOPCnt();
622             ret = UTOPIA_STATUS_SUCCESS;
623             break;
624 
625         case E_VDEC_V2_CMD_GET_FRAME_CNT:
626 
627             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetFrameCnt();
628             ret = UTOPIA_STATUS_SUCCESS;
629             break;
630 
631         case E_VDEC_V2_CMD_GET_SKIP_CNT:
632 
633             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetSkipCnt();
634             ret = UTOPIA_STATUS_SUCCESS;
635             break;
636 
637         case E_VDEC_V2_CMD_GET_DROP_CNT:
638 
639             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetDropCnt();
640             ret = UTOPIA_STATUS_SUCCESS;
641             break;
642 
643         case E_VDEC_V2_CMD_GET_DISP_INFO:
644 
645             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetDispInfo((VDEC_DispInfo *)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
646             ret = UTOPIA_STATUS_SUCCESS;
647             break;
648 
649         case E_VDEC_V2_CMD_GET_TRICK_MODE:
650 
651             *((VDEC_TrickDec *)pRet)  = psVDEC_InstPri->fpVDEC_GetTrickMode();
652             ret = UTOPIA_STATUS_SUCCESS;
653             break;
654 
655         case E_VDEC_V2_CMD_GET_ACTIVE_FORMAT:
656 
657             *((MS_U8 *)pRet)  = psVDEC_InstPri->fpVDEC_GetActiveFormat();
658             ret = UTOPIA_STATUS_SUCCESS;
659             break;
660 
661         case E_VDEC_V2_CMD_GET_COLOUR_PRIMARIES:
662 
663             *((MS_U8 *)pRet)  = psVDEC_InstPri->fpVDEC_GetColourPrimaries();
664             ret = UTOPIA_STATUS_SUCCESS;
665             break;
666 
667         case E_VDEC_V2_CMD_GET_HW_KEY:
668 
669             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetHWKey(((MS_U8*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
670             ret = UTOPIA_STATUS_SUCCESS;
671             break;
672 
673         case E_VDEC_V2_CMD_IS_SEQ_CHG:
674 
675             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_IsSeqChg();
676             ret = UTOPIA_STATUS_SUCCESS;
677             break;
678 
679         case E_VDEC_V2_CMD_SET_DBG_LEVEL:
680 
681             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetDbgLevel(*((VDEC_DbgLevel *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
682             ret = UTOPIA_STATUS_SUCCESS;
683             break;
684 
685         case E_VDEC_V2_CMD_GET_DEC_FRAME_INFO:
686 
687             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetDecFrameInfo(((VDEC_FrameInfo *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
688             ret = UTOPIA_STATUS_SUCCESS;
689             break;
690 
691         case E_VDEC_V2_CMD_GET_DISP_FRAME_INFO:
692 
693             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetDispFrameInfo(((VDEC_FrameInfo *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
694             ret = UTOPIA_STATUS_SUCCESS;
695             break;
696 
697         case E_VDEC_V2_CMD_GET_EXT_DISP_INFO:
698 
699             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetExtDispInfo(((VDEC_ExtDispInfo *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
700             ret = UTOPIA_STATUS_SUCCESS;
701             break;
702 
703         case E_VDEC_V2_CMD_GET_DEC_TIME_CODE:
704 
705             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetDecTimeCode(((VDEC_TimeCode *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
706             ret = UTOPIA_STATUS_SUCCESS;
707             break;
708 
709         case E_VDEC_V2_CMD_GET_DISP_TIME_CODE:
710 
711             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetDispTimeCode(((VDEC_TimeCode *)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
712             ret = UTOPIA_STATUS_SUCCESS;
713             break;
714 
715         case E_VDEC_V2_CMD_CC_STARTPARSING:
716             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_CC_StartParsing((VDEC_CCCfg*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
717             ret = UTOPIA_STATUS_SUCCESS;
718             break;
719 
720         case E_VDEC_V2_CMD_CC_STOPPARSING:
721             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_CC_StopParsing((VDEC_CCCfg*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
722             ret = UTOPIA_STATUS_SUCCESS;
723             break;
724 
725         case E_VDEC_V2_CMD_CC_GETWRITEPTR:
726             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_CC_GetWritePtr((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
727             ret = UTOPIA_STATUS_SUCCESS;
728             break;
729 
730         case E_VDEC_V2_CMD_CC_GETREADPTR:
731             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_GetReadPtr((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
732             ret = UTOPIA_STATUS_SUCCESS;
733             break;
734 
735         case E_VDEC_V2_CMD_CC_UPDATEREADPTR:
736             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_UpdateReadPtr(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
737             ret = UTOPIA_STATUS_SUCCESS;
738             break;
739 
740         case E_VDEC_V2_CMD_CC_GETISOVERFLOW:
741             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_GetIsOverflow((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
742             ret = UTOPIA_STATUS_SUCCESS;
743             break;
744 
745         case E_VDEC_V2_CMD_SETEVENT:
746             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetEvent(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
747                                                                       *((VDEC_EventCb*)(((VDEC_V2_IO_Param *)pArgs)->param[1])),
748                                                                       (void*)(((VDEC_V2_IO_Param *)pArgs)->param[2]));
749             ret = UTOPIA_STATUS_SUCCESS;
750             break;
751 
752         case E_VDEC_V2_CMD_UNSETEVENT:
753             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_UnsetEvent(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
754             ret = UTOPIA_STATUS_SUCCESS;
755             break;
756 
757         case E_VDEC_V2_CMD_SETENVENT_EX:
758             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetEvent_EX(*((VDEC_CB_TYPE*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
759                                                                       *((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1])),
760                                                                       *((VDEC_EventCb*)(((VDEC_V2_IO_Param *)pArgs)->param[2])),
761                                                                       (void*)(((VDEC_V2_IO_Param *)pArgs)->param[3]));
762             ret = UTOPIA_STATUS_SUCCESS;
763             break;
764 
765         case E_VDEC_V2_CMD_UNSETEVENT_EX:
766             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_UnsetEvent_EX(*((VDEC_CB_TYPE*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
767                                                                       *((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1])));
768             ret = UTOPIA_STATUS_SUCCESS;
769             break;
770 
771         case E_VDEC_V2_CMD_GETEVENTINFO:
772             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetEventInfo((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
773             ret = UTOPIA_STATUS_SUCCESS;
774             break;
775 
776         case E_VDEC_V2_CMD_GENPATTERN:
777             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GenPattern(*((VDEC_PatternType*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
778                                                                         *((MS_PHYADDR*)(((VDEC_V2_IO_Param *)pArgs)->param[1])),
779                                                                         (MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[2]));
780             ret = UTOPIA_STATUS_SUCCESS;
781             break;
782 
783         case E_VDEC_V2_CMD_GENPATTERNLEASTLENGTH:
784             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetPatternLeastLength(*((VDEC_PatternType*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
785             ret = UTOPIA_STATUS_SUCCESS;
786             break;
787 
788         case E_VDEC_V2_CMD_DISABLEDEBLOCKING:
789             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_DisableDeblocking(*((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
790             ret = UTOPIA_STATUS_SUCCESS;
791             break;
792 
793         case E_VDEC_V2_CMD_DISABLEQUARTERPIXEL:
794             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_DisableQuarterPixel(*((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
795             ret = UTOPIA_STATUS_SUCCESS;
796             break;
797 
798         case E_VDEC_V2_CMD_SETAUTORMLSTZEROBYTE:
799             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetAutoRmLstZeroByte(*((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
800             ret = UTOPIA_STATUS_SUCCESS;
801             break;
802 
803         case E_VDEC_V2_CMD_SETBALANCEBW:
804             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetBalanceBW(*((MS_U8*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
805                                                                           *((MS_U8*)(((VDEC_V2_IO_Param *)pArgs)->param[1])),
806                                                                           *((MS_U8*)(((VDEC_V2_IO_Param *)pArgs)->param[2])),
807                                                                           *((MS_U8*)(((VDEC_V2_IO_Param *)pArgs)->param[3])));
808             ret = UTOPIA_STATUS_SUCCESS;
809             break;
810 
811         case E_VDEC_V2_CMD_DBGDUMPSTATUS:
812             *((VDEC_Result *)pRet) = psVDEC_InstPri->fpVDEC_DbgDumpStatus();
813             ret = UTOPIA_STATUS_SUCCESS;
814             break;
815 
816         case E_VDEC_V2_CMD_SETCONTROL:
817             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SetControl(*((VDEC_User_Cmd*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
818                                                                         *((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1])));
819             ret = UTOPIA_STATUS_SUCCESS;
820             break;
821 
822         case E_VDEC_V2_CMD_GETCONTROL:
823             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetControl(*((VDEC_User_Cmd*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
824                                                                         *((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1])));
825             ret = UTOPIA_STATUS_SUCCESS;
826             break;
827 
828         case E_VDEC_V2_CMD_GETDISPCNT:
829             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetDispCnt();
830             ret = UTOPIA_STATUS_SUCCESS;
831             break;
832 
833         case E_VDEC_V2_CMD_GETFWVERSION:
834             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetFwVersion(*((VDEC_FwType*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));;
835             ret = UTOPIA_STATUS_SUCCESS;
836             break;
837 
838         case E_VDEC_V2_CMD_SETBLOCKDISPLAY:
839             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_SetBlockDisplay(*((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
840             ret = UTOPIA_STATUS_SUCCESS;
841             break;
842 
843         case E_VDEC_V2_CMD_ENABLEESBUFFMALLOC:
844             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_EnableESBuffMalloc(*((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
845             ret = UTOPIA_STATUS_SUCCESS;
846             break;
847 
848         case E_VDEC_V2_CMD_GETESBUFFVACANCY:
849             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_GetESBuffVacancy((void*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
850             ret = UTOPIA_STATUS_SUCCESS;
851             break;
852 
853         case E_VDEC_V2_CMD_GETESBUFF:
854             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetESBuff(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
855                                                                    (MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1]),
856                                                                    (MS_PHYADDR*)(((VDEC_V2_IO_Param *)pArgs)->param[2]));
857             ret = UTOPIA_STATUS_SUCCESS;
858             break;
859 
860         case E_VDEC_V2_CMD_GETNEXTDISPFRAME:
861             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_GetNextDispFrame((VDEC_DispFrame**)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
862             ret = UTOPIA_STATUS_SUCCESS;
863             break;
864 
865         case E_VDEC_V2_CMD_DISPLAYFRAME:
866             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_DisplayFrame((VDEC_DispFrame*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
867             ret = UTOPIA_STATUS_SUCCESS;
868             break;
869 
870         case E_VDEC_V2_CMD_RELEASEFRAME:
871             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_ReleaseFrame((VDEC_DispFrame*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
872             ret = UTOPIA_STATUS_SUCCESS;
873             break;
874 
875         case E_VDEC_V2_CMD_FLUSHPTSBUF:
876             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_FlushPTSBuf();
877             ret = UTOPIA_STATUS_SUCCESS;
878             break;
879 
880         case E_VDEC_V2_CMD_CAPTUREFRAME:
881             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CaptureFrame(*((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
882                                                                           *((MS_BOOL*)(((VDEC_V2_IO_Param *)pArgs)->param[1])));
883             ret = UTOPIA_STATUS_SUCCESS;
884             break;
885 
886         case E_VDEC_V2_CMD_CC_INIT:
887             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_Init((MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[0]));
888             ret = UTOPIA_STATUS_SUCCESS;
889             break;
890 
891         case E_VDEC_V2_CMD_CC_SETCFG:
892             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_SetCfg(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
893                                                                        *((VDEC_CCType*)(((VDEC_V2_IO_Param *)pArgs)->param[1])),
894                                                                         (MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[2]));
895             ret = UTOPIA_STATUS_SUCCESS;
896             break;
897 
898         case E_VDEC_V2_CMD_CC_SETBUFFSTARTADD:
899             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_SetBuffStartAdd(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
900                                                                             (MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1]));
901             ret = UTOPIA_STATUS_SUCCESS;
902             break;
903 
904         case E_VDEC_V2_CMD_CC_UPDATEWRITEADD:
905             *((MS_U32 *)pRet)  = psVDEC_InstPri->fpVDEC_CC_UpdateWriteAdd(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
906                                                                            (MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1]));
907             ret = UTOPIA_STATUS_SUCCESS;
908             break;
909 
910         case E_VDEC_V2_CMD_CC_UPDATEREADADD:
911             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_UpdateReadAdd(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
912                                                                           (MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[1]));
913             ret = UTOPIA_STATUS_SUCCESS;
914             break;
915 
916         case E_VDEC_V2_CMD_CC_DISABLEPARSING:
917             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_DisableParsing(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
918             ret = UTOPIA_STATUS_SUCCESS;
919             break;
920 
921         case E_VDEC_V2_CMD_CC_GETINFO:
922             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_GetInfo(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
923                                                                         *((VDEC_CCInfoCmd*)(((VDEC_V2_IO_Param *)pArgs)->param[1])),
924                                                                          (MS_U32*)(((VDEC_V2_IO_Param *)pArgs)->param[2]));
925             ret = UTOPIA_STATUS_SUCCESS;
926             break;
927 
928         case E_VDEC_V2_CMD_CC_GETISRSTDONE:
929             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_GetIsRstDone(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
930             ret = UTOPIA_STATUS_SUCCESS;
931             break;
932 
933         case E_VDEC_V2_CMD_CC_GETISBUFFOVERFLOW:
934             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_CC_GetIsBuffOverflow(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
935             ret = UTOPIA_STATUS_SUCCESS;
936             break;
937 
938         case E_VDEC_V2_CMD_CC_GETWRITEADD:
939             *((MS_PHYADDR *)pRet)  = psVDEC_InstPri->fpVDEC_CC_GetWriteAdd(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
940             ret = UTOPIA_STATUS_SUCCESS;
941             break;
942 
943         case E_VDEC_V2_CMD_CC_GETREADADD:
944             *((MS_PHYADDR *)pRet)  = psVDEC_InstPri->fpVDEC_CC_GetReadAdd(*((VDEC_CCFormat*)(((VDEC_V2_IO_Param *)pArgs)->param[0])));
945             ret = UTOPIA_STATUS_SUCCESS;
946             break;
947 
948         case E_VDEC_V2_CMD_SYSTEMPRESETCONTROL:
949             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_SystemPreSetControl(*((VDEC_User_Cmd*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
950                                                                                   (void*)(((VDEC_V2_IO_Param *)pArgs)->param[1]));
951             ret = UTOPIA_STATUS_SUCCESS;
952             break;
953 
954         case E_VDEC_V2_CMD_PRESETCONTROL:
955             *((VDEC_Result *)pRet)  = psVDEC_InstPri->fpVDEC_PreSetControl(*((VDEC_User_Cmd*)(((VDEC_V2_IO_Param *)pArgs)->param[0])),
956                                                                            (MS_U32 **)(((VDEC_V2_IO_Param *)pArgs)->param[1]));
957             ret = UTOPIA_STATUS_SUCCESS;
958             break;
959 
960         default:
961             printf("Error Command = %ld\n",u32Cmd);
962             ret = UTOPIA_STATUS_NOT_SUPPORTED;
963             break;
964     }
965     if(*pRet != E_VDEC_OK)
966     {
967         ret =  UTOPIA_STATUS_FAIL;
968     }
969     return ret;
970 }
971 
VDEC_V2_Close(void * pInstance)972 MS_U32 VDEC_V2_Close(void* pInstance)
973 {
974     void* pResource = NULL;
975     VDEC_RESOURCE_PRIVATE* pVDEC_ResourcePrivate = NULL;
976     VDEC_INSTANCE_PRIVATE* psVDEC_InstPri = NULL;
977 
978     // Get instance private
979     UtopiaInstanceGetPrivate(pInstance, (void**)&psVDEC_InstPri);
980 
981     // Get resource private
982     if(UtopiaResourceObtain(pModuleVDEC_V2, 0, &pResource) != UTOPIA_STATUS_SUCCESS)
983     {
984         printf("UtopiaResourceObtain fail,%s,%d\n",__FUNCTION__,__LINE__);
985         return UTOPIA_STATUS_ERR_RESOURCE;
986     }
987 
988     UtopiaResourceGetPrivate(pResource,(void*)(&pVDEC_ResourcePrivate));
989 
990     // Set using decoder index to 0
991     pVDEC_ResourcePrivate->u8DecoderInUse = 0;
992 
993     UtopiaResourceRelease(pResource);
994 
995     UtopiaInstanceDelete(pInstance);
996 
997     return UTOPIA_STATUS_SUCCESS;
998 }
999 
1000 
1001 
1002 
1003