xref: /utopia/UTPA2-700.0.x/modules/vdec_v3/drv/mvd_v3/drvMVD_EX.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi /// @file  drvMVD.h
98*53ee8cc1Swenshuai.xi /// @brief MPEG-2/4 Video Decoder header file
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi #ifndef _DRV_MVD_H_
103*53ee8cc1Swenshuai.xi #define _DRV_MVD_H_
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi 
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
109*53ee8cc1Swenshuai.xi // Include List
110*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi #ifdef __cplusplus
113*53ee8cc1Swenshuai.xi extern "C"
114*53ee8cc1Swenshuai.xi {
115*53ee8cc1Swenshuai.xi #endif
116*53ee8cc1Swenshuai.xi 
117*53ee8cc1Swenshuai.xi #if (!defined(MSOS_TYPE_NUTTX) && !defined(MSOS_TYPE_OPTEE)) || defined(SUPPORT_X_MODEL_FEATURE)
118*53ee8cc1Swenshuai.xi 
119*53ee8cc1Swenshuai.xi #include "drvmvd_cc.h"
120*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
121*53ee8cc1Swenshuai.xi // Constant & Macro Definition
122*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
123*53ee8cc1Swenshuai.xi /// Version string.
124*53ee8cc1Swenshuai.xi #define MVD_DRV_VERSION                 /* Character String for DRV/API version             */  \
125*53ee8cc1Swenshuai.xi     MSIF_TAG,                           /* 'MSIF'                                           */  \
126*53ee8cc1Swenshuai.xi     MSIF_CLASS,                         /* '00'                                             */  \
127*53ee8cc1Swenshuai.xi     MSIF_CUS,                           /* 0x0000                                           */  \
128*53ee8cc1Swenshuai.xi     MSIF_MOD,                           /* 0x0000                                           */  \
129*53ee8cc1Swenshuai.xi     MSIF_CHIP,                                                                                  \
130*53ee8cc1Swenshuai.xi     MSIF_CPU,                                                                                   \
131*53ee8cc1Swenshuai.xi     {'M','V','D','_'},                  /* IP__                                             */  \
132*53ee8cc1Swenshuai.xi     {'0','A'},                          /* 0.0 ~ Z.Z                                        */  \
133*53ee8cc1Swenshuai.xi     {'0','1'},                          /* 00 ~ 99                                          */  \
134*53ee8cc1Swenshuai.xi     {'0','0','6','4','1','6','6','7'},  /* CL#                                              */  \
135*53ee8cc1Swenshuai.xi     MSIF_OS
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi #define MIU_SEL_0         0
138*53ee8cc1Swenshuai.xi #define MIU_SEL_1         1
139*53ee8cc1Swenshuai.xi #define MIU_SEL_2         2
140*53ee8cc1Swenshuai.xi #define MIU_SEL_3         3
141*53ee8cc1Swenshuai.xi 
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi #define MST_MODE_TRUE     1
144*53ee8cc1Swenshuai.xi #define MST_MODE_FALSE    0
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi 
147*53ee8cc1Swenshuai.xi #if defined( MSOS_TYPE_ECOS)
148*53ee8cc1Swenshuai.xi     #define VPRINTF     diag_printf
149*53ee8cc1Swenshuai.xi     #define MVD_PRINT   diag_printf
150*53ee8cc1Swenshuai.xi     #define MVD_ERR     diag_printf
151*53ee8cc1Swenshuai.xi #else
152*53ee8cc1Swenshuai.xi     #include "ULog.h"
153*53ee8cc1Swenshuai.xi     #define VPRINTF(format,args...) ULOGI("VDEC", format, ##args)
154*53ee8cc1Swenshuai.xi     #define MVD_PRINT(format,args...) ULOGI("VDEC", format, ##args)
155*53ee8cc1Swenshuai.xi     #define MVD_ERR(format,args...) ULOGE("VDEC", format, ##args)
156*53ee8cc1Swenshuai.xi #endif
157*53ee8cc1Swenshuai.xi 
158*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
159*53ee8cc1Swenshuai.xi // Type & Structure Declaration
160*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
161*53ee8cc1Swenshuai.xi /// MVD's capability
162*53ee8cc1Swenshuai.xi typedef struct _MVD_Caps
163*53ee8cc1Swenshuai.xi {
164*53ee8cc1Swenshuai.xi     MS_BOOL bMPEG2;
165*53ee8cc1Swenshuai.xi     MS_BOOL bMPEG4;
166*53ee8cc1Swenshuai.xi     MS_BOOL bVC1;
167*53ee8cc1Swenshuai.xi } MVD_Caps;
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi /// MVD driver info.
170*53ee8cc1Swenshuai.xi typedef struct _MVD_DrvInfo
171*53ee8cc1Swenshuai.xi {
172*53ee8cc1Swenshuai.xi     MS_U32 u32Resource;
173*53ee8cc1Swenshuai.xi     MS_U32 u32DeviceNum;
174*53ee8cc1Swenshuai.xi     MS_U32 u32FWVersion;
175*53ee8cc1Swenshuai.xi     MVD_Caps stCaps;
176*53ee8cc1Swenshuai.xi } MVD_DrvInfo;
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi /// Firmware status
179*53ee8cc1Swenshuai.xi typedef enum _MVD_DecStat
180*53ee8cc1Swenshuai.xi {
181*53ee8cc1Swenshuai.xi     E_MVD_STAT_IDLE             = 0x00,
182*53ee8cc1Swenshuai.xi     E_MVD_STAT_FIND_STARTCODE   = 0x01,//start code
183*53ee8cc1Swenshuai.xi     E_MVD_STAT_FIND_SPECIALCODE = 0x11,//special code [00_00_01_C5_ab_08_06_27]
184*53ee8cc1Swenshuai.xi                                        //for flush data using
185*53ee8cc1Swenshuai.xi     E_MVD_STAT_FIND_FRAMEBUFFER = 0x02,
186*53ee8cc1Swenshuai.xi     //fw is trying to find empty FB to continue decoding.
187*53ee8cc1Swenshuai.xi     //if hang in this state, please check "vsync" or AVSync.
188*53ee8cc1Swenshuai.xi     E_MVD_STAT_WAIT_DECODEDONE  = 0x03,
189*53ee8cc1Swenshuai.xi     E_MVD_STAT_DECODE_DONE      = 0x04,
190*53ee8cc1Swenshuai.xi     E_MVD_STAT_WAIT_VDFIFO      = 0x05,
191*53ee8cc1Swenshuai.xi     E_MVD_STAT_INIT_SUCCESS     = 0x06,
192*53ee8cc1Swenshuai.xi     E_MVD_STAT_UNKNOWN          = 0xff,
193*53ee8cc1Swenshuai.xi } MVD_DecStat;
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi /// MVD driver status
196*53ee8cc1Swenshuai.xi typedef struct _MVD_DrvStatus
197*53ee8cc1Swenshuai.xi {
198*53ee8cc1Swenshuai.xi //    MS_U32      u32FWVer;
199*53ee8cc1Swenshuai.xi     MVD_DecStat eDecStat;
200*53ee8cc1Swenshuai.xi //    MS_BOOL     bIsBusy;
201*53ee8cc1Swenshuai.xi     MS_U8       u8LastFWCmd;
202*53ee8cc1Swenshuai.xi } MVD_DrvStatus;
203*53ee8cc1Swenshuai.xi 
204*53ee8cc1Swenshuai.xi /// MVD stream types for dual decoders
205*53ee8cc1Swenshuai.xi typedef enum
206*53ee8cc1Swenshuai.xi {
207*53ee8cc1Swenshuai.xi     E_MVD_DRV_STREAM_NONE = 0,
208*53ee8cc1Swenshuai.xi     E_MVD_DRV_MAIN_STREAM,
209*53ee8cc1Swenshuai.xi     E_MVD_DRV_SUB_STREAM,
210*53ee8cc1Swenshuai.xi #ifdef VDEC3
211*53ee8cc1Swenshuai.xi     E_MVD_DRV_N_STREAM,
212*53ee8cc1Swenshuai.xi #else
213*53ee8cc1Swenshuai.xi     E_MVD_DRV_STREAM_MAX = E_MVD_DRV_SUB_STREAM,
214*53ee8cc1Swenshuai.xi #endif
215*53ee8cc1Swenshuai.xi } MVD_DRV_StreamType;
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi /// Enumerate CodecType that MVD supports
218*53ee8cc1Swenshuai.xi typedef enum _MVD_CodecType
219*53ee8cc1Swenshuai.xi {
220*53ee8cc1Swenshuai.xi     E_MVD_CODEC_MPEG2                    = 0x10,
221*53ee8cc1Swenshuai.xi     E_MVD_CODEC_MPEG4                    = 0x00,
222*53ee8cc1Swenshuai.xi     E_MVD_CODEC_MPEG4_SHORT_VIDEO_HEADER = 0x01,
223*53ee8cc1Swenshuai.xi     E_MVD_CODEC_DIVX311                  = 0x02,
224*53ee8cc1Swenshuai.xi     E_MVD_CODEC_FLV                      = 0x03,
225*53ee8cc1Swenshuai.xi     E_MVD_CODEC_VC1_ADV                  = 0x04,
226*53ee8cc1Swenshuai.xi     E_MVD_CODEC_VC1_MAIN                 = 0x05,
227*53ee8cc1Swenshuai.xi     E_MVD_CODEC_UNKNOWN                  = 0xff
228*53ee8cc1Swenshuai.xi } MVD_CodecType;
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi /// Mode of MVD input source
231*53ee8cc1Swenshuai.xi typedef enum _MVD_SrcMode
232*53ee8cc1Swenshuai.xi {
233*53ee8cc1Swenshuai.xi     E_MVD_FILE_MODE       = 0x00,
234*53ee8cc1Swenshuai.xi     E_MVD_SLQ_MODE        = 0x01,
235*53ee8cc1Swenshuai.xi     E_MVD_TS_MODE         = 0x02,
236*53ee8cc1Swenshuai.xi     E_MVD_SLQ_TBL_MODE    = 0x03,
237*53ee8cc1Swenshuai.xi     E_MVD_TS_FILE_MODE    = 0x04,
238*53ee8cc1Swenshuai.xi     E_MVD_SRC_UNKNOWN     = 0x05
239*53ee8cc1Swenshuai.xi } MVD_SrcMode;
240*53ee8cc1Swenshuai.xi 
241*53ee8cc1Swenshuai.xi /// AVSync mode for file playback
242*53ee8cc1Swenshuai.xi typedef enum
243*53ee8cc1Swenshuai.xi {
244*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_FREERUN  = 0,  ///Player didn't set PTS/DTS, so display freerun
245*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_PTS      = 1,  ///Player set PTS to MVD decoder
246*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_DTS      = 2,  ///Player set DTS to MVD decoder
247*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_STS      = 3,  ///SortedTimeStamp means decoder should sort timestamp
248*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_PTS_RVU  = 4,  ///Player set PTS to MVD decoder
249*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_DTS_RVU  = 5,  ///Player set DTS to MVD decoder
250*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_NEW_STS  = 6,  ///Player set PTS to MVD decoder
251*53ee8cc1Swenshuai.xi } MVD_TIMESTAMP_TYPE;
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi /// ErrCode obtained from firmware
254*53ee8cc1Swenshuai.xi typedef enum _MVD_ErrCode
255*53ee8cc1Swenshuai.xi {
256*53ee8cc1Swenshuai.xi     E_MVD_ERR_UNKNOWN            = 0,
257*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE              = 1,
258*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE        = 2,
259*53ee8cc1Swenshuai.xi     E_MVD_ERR_NOT_8_BIT          = 3,   //error_status : bits per pixel
260*53ee8cc1Swenshuai.xi     E_MVD_ERR_NERPRED_ENABLE     = 4,
261*53ee8cc1Swenshuai.xi     E_MVD_ERR_REDUCED_RES_ENABLE = 5,
262*53ee8cc1Swenshuai.xi     E_MVD_ERR_SCALABILITY        = 6,
263*53ee8cc1Swenshuai.xi     E_MVD_ERR_OTHER              = 7,
264*53ee8cc1Swenshuai.xi     E_MVD_ERR_H263_ERROR         = 8,
265*53ee8cc1Swenshuai.xi     E_MVD_ERR_RES_NOT_SUPPORT    = 9,   //error_status : none
266*53ee8cc1Swenshuai.xi     E_MVD_ERR_MPEG4_NOT_SUPPORT  = 10,  //error_status : none
267*53ee8cc1Swenshuai.xi     E_MVD_ERR_PROFILE_NOT_SUPPORT= 11,   //error_status : none
268*53ee8cc1Swenshuai.xi     E_MVD_ERR_RCV_ERROR_OCCUR= 12   //error_status : none
269*53ee8cc1Swenshuai.xi } MVD_ErrCode;
270*53ee8cc1Swenshuai.xi 
271*53ee8cc1Swenshuai.xi /// Detailed error status when error occurs
272*53ee8cc1Swenshuai.xi typedef enum _MVD_ErrStatus
273*53ee8cc1Swenshuai.xi {
274*53ee8cc1Swenshuai.xi     //error_status for E_MVD_ERR_SHAPE
275*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE_RECTANGULAR    = 0x10,
276*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE_BINARY         = 0x11,
277*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE_BINARY_ONLY    = 0x12,
278*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE_GRAYSCALE      = 0x13,
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi     //error_status for E_MVD_ERR_USED_SPRITE
281*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE_UNUSED   = 0x20, //sprite not used
282*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE_STATIC   = 0x21,
283*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE_GMC      = 0x22,
284*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE_RESERVED = 0x23,
285*53ee8cc1Swenshuai.xi 
286*53ee8cc1Swenshuai.xi     E_MVD_ERR_STATUS_NONE          = 0x77,
287*53ee8cc1Swenshuai.xi     E_MVD_ERR_STATUS_UNKOWN        = 0x00,
288*53ee8cc1Swenshuai.xi } MVD_ErrStatus;
289*53ee8cc1Swenshuai.xi 
290*53ee8cc1Swenshuai.xi /// Picture type of MPEG video
291*53ee8cc1Swenshuai.xi typedef enum _MVD_PicType
292*53ee8cc1Swenshuai.xi {
293*53ee8cc1Swenshuai.xi     E_MVD_PIC_I = 0,
294*53ee8cc1Swenshuai.xi     E_MVD_PIC_P = 1,
295*53ee8cc1Swenshuai.xi     E_MVD_PIC_B = 2,
296*53ee8cc1Swenshuai.xi     E_MVD_PIC_UNKNOWN = 0xf,
297*53ee8cc1Swenshuai.xi } MVD_PicType;
298*53ee8cc1Swenshuai.xi 
299*53ee8cc1Swenshuai.xi /// Mode of frame rate conversion
300*53ee8cc1Swenshuai.xi typedef enum _MVD_FrcMode {
301*53ee8cc1Swenshuai.xi     E_MVD_FRC_NORMAL = 0,
302*53ee8cc1Swenshuai.xi     E_MVD_FRC_DISP_TWICE = 1,
303*53ee8cc1Swenshuai.xi     E_MVD_FRC_3_2_PULLDOWN = 2,
304*53ee8cc1Swenshuai.xi     E_MVD_FRC_PAL_TO_NTSC = 3,
305*53ee8cc1Swenshuai.xi     E_MVD_FRC_NTSC_TO_PAL = 4,
306*53ee8cc1Swenshuai.xi     E_MVD_FRC_DISP_ONEFIELD = 5,//Removed, call MDrv_MVD_EnableDispOneField() instead.
307*53ee8cc1Swenshuai.xi } MVD_FrcMode;
308*53ee8cc1Swenshuai.xi 
309*53ee8cc1Swenshuai.xi /// MVD play mode
310*53ee8cc1Swenshuai.xi typedef enum
311*53ee8cc1Swenshuai.xi {
312*53ee8cc1Swenshuai.xi     E_MVD_PLAY          = 0x00,
313*53ee8cc1Swenshuai.xi     E_MVD_STEPDISP      = 0x01,
314*53ee8cc1Swenshuai.xi     E_MVD_PAUSE         = 0x02,
315*53ee8cc1Swenshuai.xi     E_MVD_FASTFORWARD   = 0x03,
316*53ee8cc1Swenshuai.xi     E_MVD_BACKFORWARD   = 0x04,
317*53ee8cc1Swenshuai.xi     E_MVD_UNKNOWMODE    = 0xff
318*53ee8cc1Swenshuai.xi } MVD_PlayMode;
319*53ee8cc1Swenshuai.xi 
320*53ee8cc1Swenshuai.xi /// Store the packet information used for SLQ table file mode
321*53ee8cc1Swenshuai.xi typedef struct
322*53ee8cc1Swenshuai.xi {
323*53ee8cc1Swenshuai.xi     MS_VIRT u32StAddr;    ///< Packet offset from bitstream buffer base address. unit: byte.
324*53ee8cc1Swenshuai.xi     MS_U32 u32Length;    ///< Packet size. unit: byte.
325*53ee8cc1Swenshuai.xi     MS_U32 u32TimeStamp; ///< Packet time stamp. unit: ms.
326*53ee8cc1Swenshuai.xi     MS_U32 u32ID_L;      ///< Packet ID low part.
327*53ee8cc1Swenshuai.xi     MS_U32 u32ID_H;      ///< Packet ID high part.
328*53ee8cc1Swenshuai.xi } MVD_PacketInfo;
329*53ee8cc1Swenshuai.xi 
330*53ee8cc1Swenshuai.xi ///MVD frame info data structure
331*53ee8cc1Swenshuai.xi typedef struct
332*53ee8cc1Swenshuai.xi {
333*53ee8cc1Swenshuai.xi     MS_U16  u16HorSize;
334*53ee8cc1Swenshuai.xi     MS_U16  u16VerSize;
335*53ee8cc1Swenshuai.xi     MS_U32  u32FrameRate;
336*53ee8cc1Swenshuai.xi     MS_U8   u8AspectRate;
337*53ee8cc1Swenshuai.xi     MS_U8   u8Interlace;
338*53ee8cc1Swenshuai.xi     MS_U8   u8AFD;
339*53ee8cc1Swenshuai.xi     MS_U16  u16par_width;
340*53ee8cc1Swenshuai.xi     MS_U16  u16par_height;
341*53ee8cc1Swenshuai.xi     MS_U16  u16SarWidth;
342*53ee8cc1Swenshuai.xi     MS_U16  u16SarHeight;
343*53ee8cc1Swenshuai.xi     MS_U16  u16CropRight;
344*53ee8cc1Swenshuai.xi     MS_U16  u16CropLeft;
345*53ee8cc1Swenshuai.xi     MS_U16  u16CropBottom;
346*53ee8cc1Swenshuai.xi     MS_U16  u16CropTop;
347*53ee8cc1Swenshuai.xi     MS_U16  u16Pitch;
348*53ee8cc1Swenshuai.xi     MS_U16  u16PTSInterval;
349*53ee8cc1Swenshuai.xi     MS_U8   u8MPEG1;
350*53ee8cc1Swenshuai.xi     MS_U8   u8PlayMode;
351*53ee8cc1Swenshuai.xi     MS_U8   u8FrcMode;
352*53ee8cc1Swenshuai.xi     MS_VIRT  u32DynScalingAddr;    ///Dynamic scaling address
353*53ee8cc1Swenshuai.xi     MS_U8   u8DynScalingDepth;    ///Dynamic scaling depth
354*53ee8cc1Swenshuai.xi     MS_U32  u32DynScalingBufSize;    ///Dynamic scaling BufSize
355*53ee8cc1Swenshuai.xi     MS_BOOL bEnableMIUSel;        ///Dynamic scaling DS buffer on miu1 or miu0
356*53ee8cc1Swenshuai.xi } MVD_FrameInfo;
357*53ee8cc1Swenshuai.xi 
358*53ee8cc1Swenshuai.xi /// MVD AVSync Configuration
359*53ee8cc1Swenshuai.xi typedef struct
360*53ee8cc1Swenshuai.xi {
361*53ee8cc1Swenshuai.xi     MS_U32  u32Delay;       //unit: ms
362*53ee8cc1Swenshuai.xi     MS_U16  u16Tolerance;   //unit: ms
363*53ee8cc1Swenshuai.xi     MS_BOOL bEnable;
364*53ee8cc1Swenshuai.xi     MS_U8   u8Rsvd;         //reserved
365*53ee8cc1Swenshuai.xi } MVD_AVSyncCfg;
366*53ee8cc1Swenshuai.xi 
367*53ee8cc1Swenshuai.xi /// MVD Command arguments
368*53ee8cc1Swenshuai.xi typedef struct
369*53ee8cc1Swenshuai.xi {
370*53ee8cc1Swenshuai.xi     MS_U8 Arg0;    ///< argument 0
371*53ee8cc1Swenshuai.xi     MS_U8 Arg1;    ///< argument 1
372*53ee8cc1Swenshuai.xi     MS_U8 Arg2;    ///< argument 2
373*53ee8cc1Swenshuai.xi     MS_U8 Arg3;    ///< argument 3
374*53ee8cc1Swenshuai.xi     MS_U8 Arg4;    ///< argument 4
375*53ee8cc1Swenshuai.xi     MS_U8 Arg5;    ///< argument 5
376*53ee8cc1Swenshuai.xi } MVD_CmdArg;
377*53ee8cc1Swenshuai.xi 
378*53ee8cc1Swenshuai.xi /// MVD commands needing handshake
379*53ee8cc1Swenshuai.xi typedef enum
380*53ee8cc1Swenshuai.xi {
381*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_PAUSE,
382*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SLQ_RST,
383*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_STOP,
384*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SKIP_DATA,
385*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SKIP_TO_PTS,
386*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SINGLE_STEP,
387*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SCALER_INFO,
388*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_GET_NXTDISPFRM,
389*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_PARSER_RST,
390*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_RST_CC608,
391*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_RST_CC708,
392*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_VIRTUAL_COMMAND,
393*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_FLUSHQUEUE_COMMAND,
394*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_VSYNC_CONTROL,
395*53ee8cc1Swenshuai.xi } MVD_HANDSHAKE_CMD;
396*53ee8cc1Swenshuai.xi 
397*53ee8cc1Swenshuai.xi 
398*53ee8cc1Swenshuai.xi 
399*53ee8cc1Swenshuai.xi typedef enum
400*53ee8cc1Swenshuai.xi {
401*53ee8cc1Swenshuai.xi     E_MVD_FB_REDUCTION_NONE = 0,        ///< FB reduction disable
402*53ee8cc1Swenshuai.xi     E_MVD_FB_REDUCTION_1_2 = 1,         ///< FB reduction 1/2
403*53ee8cc1Swenshuai.xi     E_MVD_FB_REDUCTION_1_4 = 2,         ///< FB reduction 1/4
404*53ee8cc1Swenshuai.xi } MVD_FB_Reduction_Type;
405*53ee8cc1Swenshuai.xi 
406*53ee8cc1Swenshuai.xi typedef struct
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi     MVD_FB_Reduction_Type LumaFBReductionMode;     ///< Luma frame buffer reduction mode.
409*53ee8cc1Swenshuai.xi     MVD_FB_Reduction_Type ChromaFBReductionMode;   ///< Chroma frame buffer reduction mode.
410*53ee8cc1Swenshuai.xi     MS_U8                 u8EnableAutoMode;        /// 0: Disable, 1: Enable
411*53ee8cc1Swenshuai.xi     MS_U8                 u8ReservedByte;          /// Reserved byte
412*53ee8cc1Swenshuai.xi } MVD_FB_Reduction;
413*53ee8cc1Swenshuai.xi 
414*53ee8cc1Swenshuai.xi /// Configuration of MVD firmware
415*53ee8cc1Swenshuai.xi typedef struct
416*53ee8cc1Swenshuai.xi {
417*53ee8cc1Swenshuai.xi     MVD_CodecType    eCodecType;        ///< Specify the active codec type
418*53ee8cc1Swenshuai.xi     MVD_SrcMode      eSrcMode;          ///< Specify the input source
419*53ee8cc1Swenshuai.xi     MS_U8            bDisablePESParsing;///< MVD parser enable/disable
420*53ee8cc1Swenshuai.xi     MS_BOOL          bNotReload;        ///< TRUE to not allow loading f/w after the 1st init to speed up.
421*53ee8cc1Swenshuai.xi     MVD_FB_Reduction stFBReduction;     ///< MVD Frame buffer reduction type
422*53ee8cc1Swenshuai.xi     MS_U16           u16FBReduceValue;
423*53ee8cc1Swenshuai.xi     MS_U8            u8FBMode;          ///driver internal attribute: SD or HD
424*53ee8cc1Swenshuai.xi     MS_U8            u8FBNum;           ///driver internal attribute: # of frames in FB
425*53ee8cc1Swenshuai.xi     MS_VIRT           u32FBUsedSize;     ///driver internal attribute: used size
426*53ee8cc1Swenshuai.xi } MVD_FWCfg;
427*53ee8cc1Swenshuai.xi 
428*53ee8cc1Swenshuai.xi /// The type of fw binary input source
429*53ee8cc1Swenshuai.xi typedef enum
430*53ee8cc1Swenshuai.xi {
431*53ee8cc1Swenshuai.xi     E_MVD_FW_SOURCE_NONE,       ///< No input fw.
432*53ee8cc1Swenshuai.xi     E_MVD_FW_SOURCE_DRAM,       ///< input source from DRAM.
433*53ee8cc1Swenshuai.xi     E_MVD_FW_SOURCE_FLASH,      ///< input source from FLASH.
434*53ee8cc1Swenshuai.xi } MVD_FWSrcType;
435*53ee8cc1Swenshuai.xi 
436*53ee8cc1Swenshuai.xi /// Configuration of memory layout
437*53ee8cc1Swenshuai.xi typedef struct
438*53ee8cc1Swenshuai.xi {
439*53ee8cc1Swenshuai.xi     MVD_FWSrcType eFWSrcType;         //!< the input FW source type.
440*53ee8cc1Swenshuai.xi     MS_VIRT     u32FWSrcVAddr;         //!< virtual address of input FW binary in DRAM
441*53ee8cc1Swenshuai.xi     MS_PHY      u32FWBinAddr;          //!< physical address in Flash/DRAM of FW code
442*53ee8cc1Swenshuai.xi     MS_SIZE     u32FWBinSize;
443*53ee8cc1Swenshuai.xi     MS_PHY      u32FWCodeAddr;
444*53ee8cc1Swenshuai.xi     MS_SIZE     u32FWCodeSize;
445*53ee8cc1Swenshuai.xi     MS_PHY      u32FBAddr;
446*53ee8cc1Swenshuai.xi     MS_SIZE     u32FBSize;
447*53ee8cc1Swenshuai.xi     MS_PHY      u32BSAddr;
448*53ee8cc1Swenshuai.xi     MS_SIZE     u32BSSize;
449*53ee8cc1Swenshuai.xi     MS_PHY u32DrvBufAddr;
450*53ee8cc1Swenshuai.xi     MS_SIZE     u32DrvBufSize;
451*53ee8cc1Swenshuai.xi     MS_PHY u32DynSacalingBufAddr;
452*53ee8cc1Swenshuai.xi     MS_SIZE     u32DynSacalingBufSize;
453*53ee8cc1Swenshuai.xi     MS_PHY u32Miu1BaseAddr;
454*53ee8cc1Swenshuai.xi     MS_PHY u32Miu2BaseAddr;
455*53ee8cc1Swenshuai.xi     MS_PHY u32Miu3BaseAddr;
456*53ee8cc1Swenshuai.xi     MS_BOOL    bFWMiuSel;
457*53ee8cc1Swenshuai.xi     MS_BOOL    bHWMiuSel;
458*53ee8cc1Swenshuai.xi     MS_U8      u8FWMiuSel;
459*53ee8cc1Swenshuai.xi     MS_U8      u8HWMiuSel;
460*53ee8cc1Swenshuai.xi     MS_U8      u8FBMiuSel;
461*53ee8cc1Swenshuai.xi     MS_BOOL    bEnableDynScale;       /// dynamic scaling control bit
462*53ee8cc1Swenshuai.xi     MS_BOOL    bSupportSDModeOnly;    /// Config from IP Check
463*53ee8cc1Swenshuai.xi } MVD_MEMCfg;
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi /// Return value of MVD driver
466*53ee8cc1Swenshuai.xi typedef enum
467*53ee8cc1Swenshuai.xi {
468*53ee8cc1Swenshuai.xi     E_MVD_RET_OK            = 1,
469*53ee8cc1Swenshuai.xi     E_MVD_RET_FAIL          = 0,
470*53ee8cc1Swenshuai.xi     E_MVD_RET_INVALID_PARAM = 2,
471*53ee8cc1Swenshuai.xi     E_MVD_RET_QUEUE_FULL    = 3,
472*53ee8cc1Swenshuai.xi     E_MVD_RET_TIME_OUT      = 4
473*53ee8cc1Swenshuai.xi } E_MVD_Result;
474*53ee8cc1Swenshuai.xi 
475*53ee8cc1Swenshuai.xi /// Mode of trick decoding
476*53ee8cc1Swenshuai.xi typedef enum
477*53ee8cc1Swenshuai.xi {
478*53ee8cc1Swenshuai.xi     E_MVD_TRICK_DEC_ALL = 0,
479*53ee8cc1Swenshuai.xi     E_MVD_TRICK_DEC_IP,
480*53ee8cc1Swenshuai.xi     E_MVD_TRICK_DEC_I,
481*53ee8cc1Swenshuai.xi     E_MVD_TRICK_DEC_UNKNOWN
482*53ee8cc1Swenshuai.xi } MVD_TrickDec;
483*53ee8cc1Swenshuai.xi 
484*53ee8cc1Swenshuai.xi typedef enum
485*53ee8cc1Swenshuai.xi {
486*53ee8cc1Swenshuai.xi     E_MVD_DISPLAY_PATH_MVOP_MAIN=0,
487*53ee8cc1Swenshuai.xi     E_MVD_DISPLAY_PATH_MVOP_SUB,
488*53ee8cc1Swenshuai.xi     E_MVD_DISPLAY_PATH_NONE
489*53ee8cc1Swenshuai.xi } MVD_DISPLAY_PATH;
490*53ee8cc1Swenshuai.xi 
491*53ee8cc1Swenshuai.xi typedef enum
492*53ee8cc1Swenshuai.xi {
493*53ee8cc1Swenshuai.xi     E_MVD_EX_INPUT_TSP_0 = 0,
494*53ee8cc1Swenshuai.xi     E_MVD_EX_INPUT_TSP_1,
495*53ee8cc1Swenshuai.xi     E_MVD_EX_INPUT_TSP_2,
496*53ee8cc1Swenshuai.xi     E_MVD_EX_INPUT_TSP_3,
497*53ee8cc1Swenshuai.xi     E_MVD_EX_INPUT_TSP_NONE = 0xFF,
498*53ee8cc1Swenshuai.xi } MVD_INPUT_TSP;
499*53ee8cc1Swenshuai.xi 
500*53ee8cc1Swenshuai.xi /// Speed type of playing
501*53ee8cc1Swenshuai.xi typedef enum
502*53ee8cc1Swenshuai.xi {
503*53ee8cc1Swenshuai.xi     E_MVD_SPEED_DEFAULT = 0,
504*53ee8cc1Swenshuai.xi     E_MVD_SPEED_FAST,
505*53ee8cc1Swenshuai.xi     E_MVD_SPEED_SLOW,
506*53ee8cc1Swenshuai.xi     E_MVD_SPEED_TYPE_UNKNOWN
507*53ee8cc1Swenshuai.xi } MVD_SpeedType;
508*53ee8cc1Swenshuai.xi 
509*53ee8cc1Swenshuai.xi /// MVD pattern type
510*53ee8cc1Swenshuai.xi typedef enum
511*53ee8cc1Swenshuai.xi {
512*53ee8cc1Swenshuai.xi     E_MVD_PATTERN_FLUSH = 0,           ///< Used after MDrv_MVD_Flush().
513*53ee8cc1Swenshuai.xi     E_MVD_PATTERN_FILEEND,             ///< Used for file end.
514*53ee8cc1Swenshuai.xi } MVD_PatternType;
515*53ee8cc1Swenshuai.xi 
516*53ee8cc1Swenshuai.xi /// MVD frame info structure
517*53ee8cc1Swenshuai.xi typedef struct
518*53ee8cc1Swenshuai.xi {
519*53ee8cc1Swenshuai.xi     MS_PHY u32LumaAddr;    ///< The start physical of luma data. Unit: byte.
520*53ee8cc1Swenshuai.xi     MS_PHY u32ChromaAddr;  ///< The start physcal of chroma data. Unit: byte.
521*53ee8cc1Swenshuai.xi     MS_U32 u32TimeStamp;       ///< Time stamp(DTS, PTS) of current displayed frame. Unit: 90khz.
522*53ee8cc1Swenshuai.xi     MS_U32 u32ID_L;            ///< low part of ID number set by MDrv_MVD_PushQueue().
523*53ee8cc1Swenshuai.xi     MS_U32 u32ID_H;            ///< high part of ID number set by MDrv_MVD_PushQueue().
524*53ee8cc1Swenshuai.xi     MS_U16 u16Pitch;           ///< The pitch of current frame.
525*53ee8cc1Swenshuai.xi     MS_U16 u16Width;           ///< pixel width of current frame.
526*53ee8cc1Swenshuai.xi     MS_U16 u16Height;          ///< pixel height of current frame.
527*53ee8cc1Swenshuai.xi     MS_U16 u16FrmIdx;          ///< index of current frame.
528*53ee8cc1Swenshuai.xi     MVD_PicType eFrmType;     ///< picture type: I, P, B frame
529*53ee8cc1Swenshuai.xi } MVD_FrmInfo;
530*53ee8cc1Swenshuai.xi 
531*53ee8cc1Swenshuai.xi /// MVD extension display info structure
532*53ee8cc1Swenshuai.xi typedef struct
533*53ee8cc1Swenshuai.xi {
534*53ee8cc1Swenshuai.xi     MS_U16 u16VSize;         /// vertical size from sequene_display_extension
535*53ee8cc1Swenshuai.xi     MS_U16 u16HSize;         /// horizontal size from sequene_display_extension
536*53ee8cc1Swenshuai.xi     MS_U16 u16VOffset;       /// vertical offset from picture_display_extension
537*53ee8cc1Swenshuai.xi     MS_U16 u16HOffset;       /// horizontal offset from picture_display_extension
538*53ee8cc1Swenshuai.xi } MVD_ExtDispInfo;
539*53ee8cc1Swenshuai.xi 
540*53ee8cc1Swenshuai.xi /// Type of frame info that can be queried
541*53ee8cc1Swenshuai.xi typedef enum
542*53ee8cc1Swenshuai.xi {
543*53ee8cc1Swenshuai.xi     E_MVD_FRMINFO_DISPLAY=0,   ///< Displayed frame.
544*53ee8cc1Swenshuai.xi     E_MVD_FRMINFO_DECODE =1,   ///< Decoded frame.
545*53ee8cc1Swenshuai.xi     E_MVD_FRMINFO_NEXT_DISPLAY =2,///< Next frame to be displayed.
546*53ee8cc1Swenshuai.xi } MVD_FrmInfoType;
547*53ee8cc1Swenshuai.xi 
548*53ee8cc1Swenshuai.xi typedef enum
549*53ee8cc1Swenshuai.xi {
550*53ee8cc1Swenshuai.xi     E_MVD_PTS_DISP = 0,          ///< Displayed frame pts.
551*53ee8cc1Swenshuai.xi     E_MVD_PTS_PRE_PAS = 1,      ///< Pre-parsing pts.
552*53ee8cc1Swenshuai.xi } MVD_PtsType;
553*53ee8cc1Swenshuai.xi 
554*53ee8cc1Swenshuai.xi typedef enum {
555*53ee8cc1Swenshuai.xi     E_MVD_FRAME_FLIP    = 0,
556*53ee8cc1Swenshuai.xi     E_MVD_FRAME_RELEASE = 1,
557*53ee8cc1Swenshuai.xi } MVD_FrmOpt;
558*53ee8cc1Swenshuai.xi 
559*53ee8cc1Swenshuai.xi ///MVD set debug mode
560*53ee8cc1Swenshuai.xi typedef enum
561*53ee8cc1Swenshuai.xi {
562*53ee8cc1Swenshuai.xi     E_MVD_EX_DBG_MODE_ORI = 0,
563*53ee8cc1Swenshuai.xi     E_MVD_EX_DBG_MODE_BYPASS_INSERT_START_CODE ,     /// for UT
564*53ee8cc1Swenshuai.xi     E_MVD_EX_DBG_MODE_BYPASS_DIVX_MC_PATCH,            /// for UT
565*53ee8cc1Swenshuai.xi     E_MVD_EX_DBG_MODE_NUM
566*53ee8cc1Swenshuai.xi } MVD_DbgMode;
567*53ee8cc1Swenshuai.xi 
568*53ee8cc1Swenshuai.xi typedef struct
569*53ee8cc1Swenshuai.xi {
570*53ee8cc1Swenshuai.xi     union
571*53ee8cc1Swenshuai.xi     {
572*53ee8cc1Swenshuai.xi         struct
573*53ee8cc1Swenshuai.xi         {
574*53ee8cc1Swenshuai.xi             MS_U32 bBypassInsertStartCode : 1;  // TRUE: for bypass insert start code for UT...
575*53ee8cc1Swenshuai.xi             MS_U32 bBypassDivxMCPatch : 1;      // TRUE: for bypass divx MC patch for UT...
576*53ee8cc1Swenshuai.xi         };
577*53ee8cc1Swenshuai.xi         MS_U32 value;
578*53ee8cc1Swenshuai.xi     };
579*53ee8cc1Swenshuai.xi }MVD_DbgModeCfg;
580*53ee8cc1Swenshuai.xi 
581*53ee8cc1Swenshuai.xi /// Attributes used by drvMVD & halMVD
582*53ee8cc1Swenshuai.xi /// Updated by halMVD, read-only for drvMVD
583*53ee8cc1Swenshuai.xi typedef struct
584*53ee8cc1Swenshuai.xi {
585*53ee8cc1Swenshuai.xi     MS_BOOL         bAVSyncOn;
586*53ee8cc1Swenshuai.xi     MS_BOOL         bDropErrFrm;
587*53ee8cc1Swenshuai.xi     MS_BOOL         bDropDispfrm;
588*53ee8cc1Swenshuai.xi     MS_BOOL         bDecodeIFrame;
589*53ee8cc1Swenshuai.xi     MS_BOOL         bStepDecode;
590*53ee8cc1Swenshuai.xi     MS_BOOL         bStepDisp;
591*53ee8cc1Swenshuai.xi     MS_BOOL         bStep2Pts;
592*53ee8cc1Swenshuai.xi     MS_BOOL         bSkip2Pts;
593*53ee8cc1Swenshuai.xi     MS_BOOL         bEnableLastFrmShow;
594*53ee8cc1Swenshuai.xi     MS_BOOL         bSlqTblSync;
595*53ee8cc1Swenshuai.xi     MS_U8           u8MstMode; //MStreamer mode=1; Non-MSt mode=0.
596*53ee8cc1Swenshuai.xi     MS_U8           u8McuMode; //MCU mode=1;
597*53ee8cc1Swenshuai.xi     MS_U8           u8DynScalingDepth;
598*53ee8cc1Swenshuai.xi     MVD_TrickDec    eTrickMode;
599*53ee8cc1Swenshuai.xi     MVD_FrcMode     eFrcMode;
600*53ee8cc1Swenshuai.xi     MVD_TIMESTAMP_TYPE eFileSyncMode;
601*53ee8cc1Swenshuai.xi     MVD_SpeedType   ePreSpeedType;
602*53ee8cc1Swenshuai.xi     MS_VIRT          u32UsrDataRd;
603*53ee8cc1Swenshuai.xi     MS_U32          u32IntCnt;      /// interrupt ocurred counter
604*53ee8cc1Swenshuai.xi     MVD_AVSyncCfg   stSyncCfg;
605*53ee8cc1Swenshuai.xi     MVD_DbgModeCfg  stDbgModeCfg;
606*53ee8cc1Swenshuai.xi     MS_BOOL         bExternalDSBuf;
607*53ee8cc1Swenshuai.xi } MVD_CtrlCfg;
608*53ee8cc1Swenshuai.xi 
609*53ee8cc1Swenshuai.xi /// MVD time code structure
610*53ee8cc1Swenshuai.xi typedef struct
611*53ee8cc1Swenshuai.xi {
612*53ee8cc1Swenshuai.xi     MS_U8   u8TimeCodeHr;   ///<  time_code_hours
613*53ee8cc1Swenshuai.xi     MS_U8   u8TimeCodeMin;  ///<  time_code_minutes
614*53ee8cc1Swenshuai.xi     MS_U8   u8TimeCodeSec;  ///<  time_code_seconds
615*53ee8cc1Swenshuai.xi     MS_U8   u8TimeCodePic;  ///<  time_code_pictures
616*53ee8cc1Swenshuai.xi 
617*53ee8cc1Swenshuai.xi     MS_U8   u8DropFrmFlag;  ///<  drop_frame_flag
618*53ee8cc1Swenshuai.xi     MS_U8   u8Reserved[3];  ///<  reserved fields for 4-byte alignment
619*53ee8cc1Swenshuai.xi } MVD_TimeCode;
620*53ee8cc1Swenshuai.xi 
621*53ee8cc1Swenshuai.xi /// Format of CC (Closed Caption)
622*53ee8cc1Swenshuai.xi typedef enum _MVD_CCFormat
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi     E_MVD_CC_NONE       = 0x00,
625*53ee8cc1Swenshuai.xi     E_MVD_CC_608        = 0x01, //For CC608 or 157
626*53ee8cc1Swenshuai.xi     E_MVD_CC_708        = 0x02, //For CC708
627*53ee8cc1Swenshuai.xi     E_MVD_CC_UNPACKED   = 0x03,
628*53ee8cc1Swenshuai.xi } MVD_CCFormat;
629*53ee8cc1Swenshuai.xi 
630*53ee8cc1Swenshuai.xi /// Type of CC
631*53ee8cc1Swenshuai.xi typedef enum _MVD_CCType
632*53ee8cc1Swenshuai.xi {
633*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_NONE = 0,
634*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_NTSC_FIELD1 = 1,
635*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_NTSC_FIELD2 = 2,
636*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_DTVCC = 3,
637*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_NTSC_TWOFIELD = 4,
638*53ee8cc1Swenshuai.xi } MVD_CCType;
639*53ee8cc1Swenshuai.xi 
640*53ee8cc1Swenshuai.xi /// Data structure of CC Configuration
641*53ee8cc1Swenshuai.xi typedef struct
642*53ee8cc1Swenshuai.xi {
643*53ee8cc1Swenshuai.xi     MVD_CCFormat eFormat;
644*53ee8cc1Swenshuai.xi     MVD_CCType   eType;
645*53ee8cc1Swenshuai.xi     MS_VIRT       u32BufStAdd;
646*53ee8cc1Swenshuai.xi     MS_U32       u32BufSize;
647*53ee8cc1Swenshuai.xi } MVD_CCCfg;
648*53ee8cc1Swenshuai.xi 
649*53ee8cc1Swenshuai.xi /// Info. of user data
650*53ee8cc1Swenshuai.xi typedef struct
651*53ee8cc1Swenshuai.xi {
652*53ee8cc1Swenshuai.xi     MS_U32 u32Pts;
653*53ee8cc1Swenshuai.xi     MS_U8  u8PicStruct;           /* picture_structure*/
654*53ee8cc1Swenshuai.xi     MS_U8  u8PicType;             /* picture type: 1->I picture, 2->P,3->B */
655*53ee8cc1Swenshuai.xi     MS_U8  u8TopFieldFirst;       /* Top field first: 1 if top field first*/
656*53ee8cc1Swenshuai.xi     MS_U8  u8RptFirstField;       /* Repeat first field: 1 if repeat field first*/
657*53ee8cc1Swenshuai.xi 
658*53ee8cc1Swenshuai.xi     MS_U16 u16TmpRef;            /* Temporal reference of the picture*/
659*53ee8cc1Swenshuai.xi     MS_U8  u8ByteCnt;
660*53ee8cc1Swenshuai.xi     MS_U8  u8Reserve;
661*53ee8cc1Swenshuai.xi 
662*53ee8cc1Swenshuai.xi     MS_U32 u32DataBuf;
663*53ee8cc1Swenshuai.xi } MVD_UsrDataInfo;
664*53ee8cc1Swenshuai.xi 
665*53ee8cc1Swenshuai.xi /// MVD interrupt events
666*53ee8cc1Swenshuai.xi typedef enum
667*53ee8cc1Swenshuai.xi {
668*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DISABLE_ALL    = 0,           ///< unregister all events notification
669*53ee8cc1Swenshuai.xi     E_MVD_EVENT_USER_DATA      = BIT(0),      ///< found user data
670*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DISP_VSYNC     = BIT(1),      ///< vsync interrupt
671*53ee8cc1Swenshuai.xi     E_MVD_EVENT_PIC_FOUND      = BIT(2),      ///<
672*53ee8cc1Swenshuai.xi     E_MVD_EVENT_FIRST_FRAME    = BIT(3),      ///< first frame decoded
673*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DISP_RDY       = BIT(4),      ///< MVD ready to display.
674*53ee8cc1Swenshuai.xi     E_MVD_EVENT_SEQ_FOUND      = BIT(5),      ///< found sequence header
675*53ee8cc1Swenshuai.xi     //E_MVD_EVENT_DEC_CC_FOUND = BIT(6),      ///< MVD found one user data with decoded frame.
676*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DEC_DATA_ERR   = BIT(7),      ///< ES Data error.
677*53ee8cc1Swenshuai.xi     E_MVD_EVENT_UNMUTE         = BIT(8),      ///< video unmute
678*53ee8cc1Swenshuai.xi     E_MVD_EVENT_USER_DATA_DISP = BIT(9),      ///< found user data in display order
679*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DEC_ERR        = BIT(10),     ///< MVD HW found decode error.
680*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DEC_I          = BIT(11),     ///< MVD HW decode I frame.
681*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DEC_ONE_FRAME  = BIT(15),     ///< Decode one frame done
682*53ee8cc1Swenshuai.xi     E_MVD_EVENT_XC_LOW_DEALY   = BIT(16),     ///< speed up the un-mute screen on XC.
683*53ee8cc1Swenshuai.xi } MVD_Event;
684*53ee8cc1Swenshuai.xi 
685*53ee8cc1Swenshuai.xi /// MVD clock speed
686*53ee8cc1Swenshuai.xi typedef enum
687*53ee8cc1Swenshuai.xi {
688*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_NONE = 0,
689*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_HIGHEST,
690*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_HIGH,
691*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_MEDIUM,
692*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_LOW,
693*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_LOWEST,
694*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_DEFAULT,
695*53ee8cc1Swenshuai.xi } MVD_EX_ClockSpeed;
696*53ee8cc1Swenshuai.xi 
697*53ee8cc1Swenshuai.xi //MVD CRC value
698*53ee8cc1Swenshuai.xi typedef struct
699*53ee8cc1Swenshuai.xi {
700*53ee8cc1Swenshuai.xi     MS_U32 u32HSize;
701*53ee8cc1Swenshuai.xi     MS_U32 u32VSize;
702*53ee8cc1Swenshuai.xi     MS_U32 u32Strip;
703*53ee8cc1Swenshuai.xi     MS_VIRT u32YStartAddr;
704*53ee8cc1Swenshuai.xi     MS_VIRT u32UVStartAddr;
705*53ee8cc1Swenshuai.xi }MVD_CrcIn;
706*53ee8cc1Swenshuai.xi 
707*53ee8cc1Swenshuai.xi typedef struct
708*53ee8cc1Swenshuai.xi {
709*53ee8cc1Swenshuai.xi     MS_U32 u32YCrc;
710*53ee8cc1Swenshuai.xi     MS_U32 u32UVCrc;
711*53ee8cc1Swenshuai.xi }MVD_CrcOut;
712*53ee8cc1Swenshuai.xi 
713*53ee8cc1Swenshuai.xi typedef struct
714*53ee8cc1Swenshuai.xi {
715*53ee8cc1Swenshuai.xi     MS_VIRT  u32DSBufAddr;       // Buffer Address
716*53ee8cc1Swenshuai.xi     MS_U32  u32DSBufSize;       // Buffer Size
717*53ee8cc1Swenshuai.xi }MVD_EX_ExternalDSBuf;
718*53ee8cc1Swenshuai.xi 
719*53ee8cc1Swenshuai.xi 
720*53ee8cc1Swenshuai.xi typedef struct
721*53ee8cc1Swenshuai.xi {
722*53ee8cc1Swenshuai.xi     MS_BOOL bHWBufferReMapping;
723*53ee8cc1Swenshuai.xi } MVD_Pre_Ctrl;
724*53ee8cc1Swenshuai.xi 
725*53ee8cc1Swenshuai.xi typedef struct
726*53ee8cc1Swenshuai.xi {
727*53ee8cc1Swenshuai.xi     MS_BOOL bColor_Descript;
728*53ee8cc1Swenshuai.xi     MS_U8 u8Color_Primaries;
729*53ee8cc1Swenshuai.xi     MS_U8 u8Transfer_Char;
730*53ee8cc1Swenshuai.xi     MS_U8 u8Matrix_Coef;
731*53ee8cc1Swenshuai.xi } MVD_Color_Info;
732*53ee8cc1Swenshuai.xi 
733*53ee8cc1Swenshuai.xi /// record origin stream type for MVD drv
734*53ee8cc1Swenshuai.xi typedef enum
735*53ee8cc1Swenshuai.xi {
736*53ee8cc1Swenshuai.xi     E_MVD_ORIGINAL_MAIN_STREAM = 0,
737*53ee8cc1Swenshuai.xi     E_MVD_ORIGINAL_SUB_STREAM,
738*53ee8cc1Swenshuai.xi     E_MVD_ORIGINAL_N_STREAM,
739*53ee8cc1Swenshuai.xi } MVD_Original_Stream;
740*53ee8cc1Swenshuai.xi 
741*53ee8cc1Swenshuai.xi typedef void (*MVD_InterruptCb)(MS_U32 u32CbData);
742*53ee8cc1Swenshuai.xi 
743*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
744*53ee8cc1Swenshuai.xi // Function Prototype Declaration
745*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
746*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetCfg(MS_U32 u32Id, MVD_FWCfg* fwCfg, MVD_MEMCfg* memCfg);
747*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetFWVer(MS_U32 u32Id);
748*53ee8cc1Swenshuai.xi void MDrv_MVD_SetDbgLevel(MS_U8 level);
749*53ee8cc1Swenshuai.xi const MVD_DrvInfo* MDrv_MVD_GetInfo(void);
750*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetLibVer(const MSIF_Version **ppVersion);
751*53ee8cc1Swenshuai.xi 
752*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetCodecInfo(MS_U32 u32Id, MVD_CodecType u8CodecType, MVD_SrcMode u8BSProviderMode, MS_U8 bDisablePESParsing);
753*53ee8cc1Swenshuai.xi void MDrv_MVD_SetDivXCfg(MS_U32 u32Id, MS_U8 u8MvAdjust, MS_U8 u8IdctSel);
754*53ee8cc1Swenshuai.xi 
755*53ee8cc1Swenshuai.xi void MDrv_MVD_SetFrameBuffAddr(MS_U32 u32Id, MS_VIRT u32addr);
756*53ee8cc1Swenshuai.xi void MDrv_MVD_GetFrameInfo(MS_U32 u32Id, MVD_FrameInfo *pinfo );
757*53ee8cc1Swenshuai.xi void MDrv_MVD_SetOverflowTH(MS_U32 u32Id, MS_U32 u32Threshold);
758*53ee8cc1Swenshuai.xi void MDrv_MVD_SetUnderflowTH(MS_U32 u32Id, MS_U32 u32Threshold);
759*53ee8cc1Swenshuai.xi 
760*53ee8cc1Swenshuai.xi void MDrv_MVD_RstIFrameDec(MS_U32 u32Id, MVD_CodecType eCodecType, MS_BOOL bShareBBU);
761*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsIFrameDecoding(MS_U32 u32Id);
762*53ee8cc1Swenshuai.xi 
763*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetSyncStatus(MS_U32 u32Id);
764*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsFreerun(MS_U32 u32Id);
765*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetIsIPicFound(MS_U32 u32Id);
766*53ee8cc1Swenshuai.xi 
767*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DecodeIFrame(MS_U32 u32Id, MS_PHY u32FrameBufAddr, MS_PHY u32StreamBufAddr, MS_PHY u32StreamBufEndAddr );
768*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetValidStreamFlag(MS_U32 u32Id);
769*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetChromaFormat(MS_U32 u32Id);
770*53ee8cc1Swenshuai.xi //for MM
771*53ee8cc1Swenshuai.xi void MDrv_MVD_SetFrameInfo(MS_U32 u32Id, MVD_FrameInfo *pinfo );
772*53ee8cc1Swenshuai.xi void MDrv_MVD_GetErrInfo(MS_U32 u32Id, MVD_ErrCode *errCode, MVD_ErrStatus *errStatus);
773*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetSkipPicCounter(MS_U32 u32Id);
774*53ee8cc1Swenshuai.xi 
775*53ee8cc1Swenshuai.xi void MDrv_MVD_SetSLQWritePtr(MS_U32 u32Id, MS_BOOL bCheckData);
776*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetSLQReadPtr(MS_U32 u32Id);
777*53ee8cc1Swenshuai.xi MVD_PicType MDrv_MVD_GetPicType(MS_U32 u32Id);
778*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetBitsRate(MS_U32 u32Id);
779*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetVideoRange(MS_U32 u32Id);
780*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetLowDelayFlag(MS_U32 u32Id);
781*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIs32PullDown(MS_U32 u32Id);
782*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsDynScalingEnabled(MS_U32 u32Id);
783*53ee8cc1Swenshuai.xi MS_S32 MDrv_MVD_GetPtsStcDiff(MS_U32 u32Id);
784*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetVpuStreamId(MS_U32 u32Id);
785*53ee8cc1Swenshuai.xi 
786*53ee8cc1Swenshuai.xi void MDrv_MVD_Pause(MS_U32 u32Id);
787*53ee8cc1Swenshuai.xi void MDrv_MVD_Resume(MS_U32 u32Id);
788*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_StepDisp(MS_U32 u32Id);
789*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsStepDispDone(MS_U32 u32Id);
790*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_StepDecode(MS_U32 u32Id);
791*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsStepDecodeDone(MS_U32 u32Id);
792*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SeekToPTS(MS_U32 u32Id, MS_U32 u32Pts);
793*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsStep2PtsDone(MS_U32 u32Id);
794*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SkipToPTS(MS_U32 u32Id, MS_U32 u32Pts);
795*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_TrickPlay(MS_U32 u32Id, MVD_TrickDec trickDec, MS_U8 u8DispDuration);
796*53ee8cc1Swenshuai.xi void MDrv_MVD_EnableForcePlay(MS_U32 u32Id);
797*53ee8cc1Swenshuai.xi 
798*53ee8cc1Swenshuai.xi void MDrv_MVD_RegSetBase(MS_VIRT u32RegBaseAddr);
799*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetFreeStream(MS_U32 *pu32Id, MVD_DRV_StreamType eStreamType);
800*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Init(MS_U32 u32Id, MVD_CodecType eCodecType, MS_BOOL bShareBBU);
801*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Exit(MS_U32 u32Id);
802*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Rst(MS_U32 u32Id,MVD_CodecType eCodecType, MS_BOOL bShareBBU);
803*53ee8cc1Swenshuai.xi 
804*53ee8cc1Swenshuai.xi void MDrv_MVD_Play(MS_U32 u32Id);
805*53ee8cc1Swenshuai.xi void MDrv_MVD_SetAVSync(MS_U32 u32Id, MS_BOOL bEnable, MS_U32 u32Delay);
806*53ee8cc1Swenshuai.xi void MDrv_MVD_SetAVSyncThreshold(MS_U32 u32Id, MS_U32 u32Th);
807*53ee8cc1Swenshuai.xi void MDrv_MVD_SetAVSyncFreerunThreshold(MS_U32 u32Id, MS_U32 u32Th);
808*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetAVSyncDelay(MS_U32 u32Id);
809*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsAVSyncOn(MS_U32 u32Id);
810*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsSyncRep(MS_U32 u32Id);
811*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsSyncSkip(MS_U32 u32Id);
812*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ChangeAVsync(MS_U32 u32Id, MS_BOOL bEnable, MS_U16 u16PTS);
813*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DispCtrl(MS_U32 u32Id, MS_BOOL bDecOrder, MS_BOOL bDropErr, MS_BOOL bDropDisp, MVD_FrcMode eFrcMode);
814*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DispRepeatField(MS_U32 u32Id, MS_BOOL bEnable);
815*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetColorFormat(MS_U32 u32Id);
816*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetMatrixCoef(MS_U32 u32Id);
817*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetActiveFormat(MS_U32 u32Id);
818*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetDispRdy(MS_U32 u32Id);
819*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Is1stFrmRdy(MS_U32 u32Id);
820*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetGOPCount(MS_U32 u32Id);
821*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetPicCounter(MS_U32 u32Id);
822*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetParserByteCnt(MS_U32 u32Id);
823*53ee8cc1Swenshuai.xi MVD_DecStat MDrv_MVD_GetDecodeStatus(MS_U32 u32Id);
824*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetLastCmd(MS_U32 u32Id);
825*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetVldErrCount(MS_U32 u32Id);
826*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DropErrorFrame(MS_U32 u32Id, MS_BOOL bDrop);
827*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_MVDCommand ( MS_U8 u8cmd, MVD_CmdArg *pstCmdArg );
828*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SkipData(MS_U32 u32Id);
829*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SkipToIFrame(MS_U32 u32Id);
830*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetCaps(MVD_Caps* pCaps);
831*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetMaxPixel(MS_U32 u32Id);
832*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetFrmRateIsSupported(MS_U32 u32Id);
833*53ee8cc1Swenshuai.xi 
834*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_DisableErrConceal(MS_U32 u32Id, MS_BOOL bDisable);
835*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_PushQueue(MS_U32 u32Id, MVD_PacketInfo* pInfo);
836*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_FlushQueue(MS_U32 u32Id);
837*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FlushDisplayBuf(MS_U32 u32Id);
838*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetQueueVacancy(MS_U32 u32Id, MS_BOOL bCached);
839*53ee8cc1Swenshuai.xi MS_VIRT MDrv_MVD_GetESReadPtr(MS_U32 u32Id);
840*53ee8cc1Swenshuai.xi MS_VIRT MDrv_MVD_GetESWritePtr(MS_U32 u32Id);
841*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_EnableLastFrameShow(MS_U32 u32Id, MS_BOOL bEnable);
842*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_IsDispFinish(MS_U32 u32Id);
843*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetSpeed(MS_U32 u32Id, MVD_SpeedType eSpeedType, MS_U8 u8Multiple);
844*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_ResetPTS(MS_U32 u32Id, MS_U32 u32PtsBase);
845*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetPTS(MS_U32 u32Id);
846*53ee8cc1Swenshuai.xi MS_U64 MDrv_MVD_GetU64PTS(MS_U32 u32Id,MVD_PtsType eType);
847*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetNextPTS(MS_U32 u32Id);
848*53ee8cc1Swenshuai.xi MVD_TrickDec MDrv_MVD_GetTrickMode(MS_U32 u32Id);
849*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsPlaying(MS_U32 u32Id);
850*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsIdle(MS_U32 u32Id);
851*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsSeqChg(MS_U32 u32Id);
852*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_DbgSetData(MS_U32 u32Id, MS_VIRT u32Addr, MS_U32 u32Data);
853*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_DbgGetData(MS_U32 u32Id, MS_VIRT u32Addr, MS_U32* u32Data);
854*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetDecodedFrameIdx (MS_U32 u32Id);
855*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetFileModeAVSync(MS_U32 u32Id, MVD_TIMESTAMP_TYPE eSyncMode);
856*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsAllBufferEmpty(MS_U32 u32Id);
857*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GenPattern(MS_U32 u32Id, MVD_PatternType ePattern, MS_PHY u32PAddr, MS_U32* pu32Size);
858*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetPatternInfo(void);
859*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDynScalingParam(MS_U32 u32Id, MS_PHY u32StAddr, MS_SIZE u32Size);
860*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetVirtualBox(MS_U32 u32Id, MS_U16 u16Width, MS_U16 u16Height);
861*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetBlueScreen(MS_U32 u32Id, MS_BOOL bEn);
862*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FRC_OnlyShowTopField(MS_U32 u32Id, MS_BOOL bEnable);
863*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_EnableInt(MS_U32 u32Id, MS_U32 bEn);
864*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_EnableDispOneField(MS_U32 u32Id, MS_BOOL bEn);
865*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetExtDispInfo(MS_U32 u32Id, MVD_ExtDispInfo* pInfo);
866*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetFrmInfo(MS_U32 u32Id, MVD_FrmInfoType eType, MVD_FrmInfo* pInfo);
867*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetTimeCode(MS_U32 u32Id, MVD_FrmInfoType eType, MVD_TimeCode* pInfo);
868*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetUsrDataIsAvailable(MS_U32 u32Id);
869*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetUsrDataInfo(MS_U32 u32Id, MVD_UsrDataInfo* pUsrInfo);
870*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetFreezeDisp(MS_U32 u32Id, MS_BOOL bEn);
871*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetDispCount(MS_U32 u32Id);
872*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetDropCount(MS_U32 u32Id);
873*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetXcLowDelayIntState(MS_U32 u32Id);
874*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetFdMaskDelayCount(MS_U32 u32Id, MS_U16 u16Cnt);
875*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetOutputFRCMode(MS_U32 u32Id, MS_U8 u8FrameRate, MS_U8 u8Interlace);
876*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetFRCDropType(MS_U32 u32Id, MS_U8 u8DropType);
877*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDisableSeqChange(MS_U32 u32Id, MS_BOOL bEnable);
878*53ee8cc1Swenshuai.xi 
879*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetMStreamerMode(MS_U32 u32Id, MS_U8 u8Mode);
880*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetMcuMode(MS_U32 u32Id, MS_U8 u8Mode);
881*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ForceInterlaceMode(MS_U32 u32Id, MS_U8 u8Mode);
882*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ForceProgressiveMode(MS_U32 u32Id, MS_U8 u8Mode);
883*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FrameFlip(MS_U32 u32Id, MS_U8 u8FrmIdx);
884*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FrameRelease(MS_U32 u32Id, MS_U8 u8FrmIdx);
885*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FrameCapture(MS_U32 u32Id, MS_U8 u8FrmIdx, MS_BOOL bEnable);
886*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ReleaseFdMask(MS_U32 u32Id, MS_BOOL bRls);
887*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ParserRstDone(MS_U32 u32Id, MS_BOOL bEnable);
888*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetVSizeAlign(MS_U32 u32Id, MS_BOOL bEnable);
889*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetAutoMute(MS_U32 u32Id, MS_BOOL bEnable);
890*53ee8cc1Swenshuai.xi 
891*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetSkipRepeatMode(MS_U32 u32Id, MS_U8 u8Mode);
892*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetSingleDecodeMode(MS_BOOL bEnable);
893*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FlushPTSBuf(MS_U32 u32Id,MS_BOOL bEnable);
894*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ShowDecodeOrder(MS_U32 u32Id, MS_U8 u8Mode);
895*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetCrcValue(MS_U32 u32Id, MVD_CrcIn *pCrcIn, MVD_CrcOut *pCrcOut);
896*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDbgMode(MS_U32 u32Id, MVD_DbgMode enDbgMode, MS_BOOL bEn);
897*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SuspendDynamicScale(MS_U32 u32Id, MS_BOOL bEnable);
898*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetSuspendDynamicScale(MS_U32 u32Id);
899*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetStereoType(MS_U32 u32Id);
900*53ee8cc1Swenshuai.xi void MDrv_MVD_DbgDump(MS_U32 u32Id);
901*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetDivxVer(MS_U32 u32Id);
902*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetIdctMode(MS_U32 u32Id, MS_U8 u8Mode);
903*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Init_Share_Mem(void);
904*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_PreSetCodecType(MS_U32 u32Id,MVD_CodecType eMvdCodecType ,MS_BOOL *bHDMode);
905*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetXCLowDelayPara(MS_U32 u32Id,MS_U32 u32Para);
906*53ee8cc1Swenshuai.xi MS_U8 MVD_GetHalIdx(MS_U32 u32Id);
907*53ee8cc1Swenshuai.xi MS_U32 MVD_GetStreamId(MS_U8 u8Idx);
908*53ee8cc1Swenshuai.xi void MDrv_MVD_Drop_One_PTS(MS_U32 u32Id);
909*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DisableEsFullStop(MS_U32 u32Id, MS_BOOL bDisable);
910*53ee8cc1Swenshuai.xi #define MVD_ENABLE_ISR
911*53ee8cc1Swenshuai.xi 
912*53ee8cc1Swenshuai.xi #ifdef MVD_ENABLE_ISR
913*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetIsrEvent(MS_U32 u32Id, MS_U32 eEvent, MVD_InterruptCb fnHandler);
914*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetIsrEvent(MS_U32 u32Id);
915*53ee8cc1Swenshuai.xi #else
916*53ee8cc1Swenshuai.xi #define MDrv_MVD_SetIsrEvent(x, y, z) (E_MVD_RET_OK)
917*53ee8cc1Swenshuai.xi #define MDrv_MVD_GetIsrEvent(x)     (MS_U32)0
918*53ee8cc1Swenshuai.xi #endif
919*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetSLQNum(MS_U32 u32Id);
920*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetDispQNum(MS_U32 u32Id);
921*53ee8cc1Swenshuai.xi 
922*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_EX_SetMVDClockSpeed(MVD_EX_ClockSpeed eClockSpeed);
923*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ShowFirstFrameDirect(MS_U32 u32Id,MS_BOOL bEnable);
924*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetSelfSeqChange(MS_U32 u32Id, MS_BOOL bEnable);
925*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetESBufferStatus(MS_U32 u32Id);
926*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetExternalDSBuffer(MS_U32 u32Id, MVD_EX_ExternalDSBuf *pExternalBuf);
927*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Field_Polarity_Display_One_field(MS_U32 u32Id, MS_BOOL bEnable,MS_U8 top_bottom);
928*53ee8cc1Swenshuai.xi 
929*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetShareMemoryBase(MS_U32 u32Id, MS_VIRT u32base);
930*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetShareMemoryOffset(MS_U32 u32Id, MS_VIRT *u32base);
931*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_EnableVPUSecurityMode(MS_BOOL enable);
932*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetSupport2ndMVOPInterface(void);
933*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_REE_RegisterMBX(void);
934*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_REE_SetSHMBaseAddr(MS_U32 U32Type,MS_PHY u32SHMAddr,MS_PHY u32SHMSize,MS_PHY u32MIU1Addr);
935*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetPVRSeamlessInfo(MS_U8 u8Idx,void* param);
936*53ee8cc1Swenshuai.xi 
937*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetExternal_CC608_Buffer(MS_U32 u32Id, MS_VIRT u32base,MS_U8 u8size);
938*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetExternal_CC708_Buffer(MS_U32 u32Id, MS_VIRT u32base,MS_U8 u8size);
939*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetPrebufferSize(MS_U32 u32Id, MS_U32 size);
940*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_HWBuffer_ReMappingMode(MS_U32 u32Id,MS_BOOL bEnable);
941*53ee8cc1Swenshuai.xi void MDrv_MVD_REE_GetSHMInformation(MS_U32 u32Id, MS_VIRT* u32SHMAddr, MS_VIRT* u32VsyncSHMOffset);
942*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_REE_GetVsyncExtShm(MS_U32 u32Id, MS_VIRT* u32SHMAddr, MS_VIRT* u32VsyncExtShmOffset);
943*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetTimeIncPredictParam(MS_U32 u32Id,MS_U32 u32Para);
944*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetDcodeTimeoutParam(MS_U32 u32Id,MS_BOOL enable,MS_U32 u32timeout);
945*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetFramebufferAutoMode(MS_U32 u32Id,MS_BOOL bEnable);
946*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Set_Smooth_Rewind(MS_U32 u32Id, MS_U8 bEnable);
947*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_IsAlive(MS_U32 u32Id);
948*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Set_Err_Tolerance(MS_U32 u32Id, MS_U16 u16Para);
949*53ee8cc1Swenshuai.xi void MVD_RecordStreamId(MS_U32 u32Id);
950*53ee8cc1Swenshuai.xi void MDrv_MVD_EnableAutoInsertDummyPattern(MS_U32 u32Id, MS_BOOL bEnable);
951*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_PVR_Seamless_mode(MS_U32 u32Id, MS_U8 u8Arg);
952*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDispFinishMode(MS_U32 u32Id,MS_U8 u8Mode);
953*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Set_MBX_param(MS_U8 u8APIMbxMsgClass);
954*53ee8cc1Swenshuai.xi void MDrv_MVD_SetDmxFrameRate(MS_U32 u32Id,MS_U32 u32Value);
955*53ee8cc1Swenshuai.xi void MDrv_MVD_SetDmxFrameRateBase(MS_U32 u32Id,MS_U32 u32Value);
956*53ee8cc1Swenshuai.xi void MDrv_MVD_TrickPlay2xAVSync(MS_U32 u32Id,MS_BOOL bEnable);
957*53ee8cc1Swenshuai.xi void MDrv_MVD_Dynamic_FB_Mode(MS_BOOL bEnable,MS_PHY u32Address,MS_U32 u32Size);
958*53ee8cc1Swenshuai.xi void MDrv_MVD_SetCMAInformation(void* cmaInitParam);
959*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_EnablePTSDetector(MS_U32 u32Id, MS_BOOL bEn);
960*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetAVSyncDispAutoDrop(MS_U32 u32Id,MS_BOOL bEnable);
961*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetDynmcDispPath(MS_U32 u32Id,MS_BOOL bConnect,MVD_DISPLAY_PATH eValue,MS_BOOL bPreSet);
962*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_PreConnectInputTsp(MS_U32 u32Id, MS_BOOL bEnable, MVD_INPUT_TSP eInputTsp, MVD_Original_Stream eStream);
963*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_DisablePBFrameMode(MS_U32 u32Id, MS_BOOL bEn);
964*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ReleaseFreeStream(MS_U32 u32Id);
965*53ee8cc1Swenshuai.xi MS_U8   MDrv_MVD_CheckFreeStream(MVD_Original_Stream eStream);
966*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetColorInfo(MS_U32 u32Id, MVD_Color_Info* pstColorInfo);
967*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDVXCShmAddr(MS_U32 u32Id, MS_PHY u32FWBaseAddr, MS_PHY u32DVXCShmAddr);
968*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Set_SlowSyncParam(MS_U32 u32Id, MS_U8 u8RepeatPeriod,MS_U8 u8DropPeriod);
969*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_VariableFrameRate(MS_U32 u32Id);
970*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_EX_GetMinTspDataSize(MS_U32 u32Id);
971*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_PUSI_Control(MS_U32 u32Id, MS_BOOL bEnable);
972*53ee8cc1Swenshuai.xi #endif
973*53ee8cc1Swenshuai.xi 
974*53ee8cc1Swenshuai.xi #ifdef __cplusplus
975*53ee8cc1Swenshuai.xi }
976*53ee8cc1Swenshuai.xi #endif
977*53ee8cc1Swenshuai.xi 
978*53ee8cc1Swenshuai.xi #endif
979