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