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