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