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