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