xref: /utopia/UTPA2-700.0.x/modules/vdec_v2/drv/mvd_ex/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(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 // Type & Structure Declaration
148*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
149*53ee8cc1Swenshuai.xi /// MVD's capability
150*53ee8cc1Swenshuai.xi typedef struct _MVD_Caps
151*53ee8cc1Swenshuai.xi {
152*53ee8cc1Swenshuai.xi     MS_BOOL bMPEG2;
153*53ee8cc1Swenshuai.xi     MS_BOOL bMPEG4;
154*53ee8cc1Swenshuai.xi     MS_BOOL bVC1;
155*53ee8cc1Swenshuai.xi } MVD_Caps;
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi /// MVD driver info.
158*53ee8cc1Swenshuai.xi typedef struct _MVD_DrvInfo
159*53ee8cc1Swenshuai.xi {
160*53ee8cc1Swenshuai.xi     MS_U32 u32Resource;
161*53ee8cc1Swenshuai.xi     MS_U32 u32DeviceNum;
162*53ee8cc1Swenshuai.xi     MS_U32 u32FWVersion;
163*53ee8cc1Swenshuai.xi     MVD_Caps stCaps;
164*53ee8cc1Swenshuai.xi } MVD_DrvInfo;
165*53ee8cc1Swenshuai.xi 
166*53ee8cc1Swenshuai.xi /// Firmware status
167*53ee8cc1Swenshuai.xi typedef enum _MVD_DecStat
168*53ee8cc1Swenshuai.xi {
169*53ee8cc1Swenshuai.xi     E_MVD_STAT_IDLE             = 0x00,
170*53ee8cc1Swenshuai.xi     E_MVD_STAT_FIND_STARTCODE   = 0x01,//start code
171*53ee8cc1Swenshuai.xi     E_MVD_STAT_FIND_SPECIALCODE = 0x11,//special code [00_00_01_C5_ab_08_06_27]
172*53ee8cc1Swenshuai.xi                                        //for flush data using
173*53ee8cc1Swenshuai.xi     E_MVD_STAT_FIND_FRAMEBUFFER = 0x02,
174*53ee8cc1Swenshuai.xi     //fw is trying to find empty FB to continue decoding.
175*53ee8cc1Swenshuai.xi     //if hang in this state, please check "vsync" or AVSync.
176*53ee8cc1Swenshuai.xi     E_MVD_STAT_WAIT_DECODEDONE  = 0x03,
177*53ee8cc1Swenshuai.xi     E_MVD_STAT_DECODE_DONE      = 0x04,
178*53ee8cc1Swenshuai.xi     E_MVD_STAT_WAIT_VDFIFO      = 0x05,
179*53ee8cc1Swenshuai.xi     E_MVD_STAT_INIT_SUCCESS     = 0x06,
180*53ee8cc1Swenshuai.xi     E_MVD_STAT_UNKNOWN          = 0xff,
181*53ee8cc1Swenshuai.xi } MVD_DecStat;
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi /// MVD driver status
184*53ee8cc1Swenshuai.xi typedef struct _MVD_DrvStatus
185*53ee8cc1Swenshuai.xi {
186*53ee8cc1Swenshuai.xi //    MS_U32      u32FWVer;
187*53ee8cc1Swenshuai.xi     MVD_DecStat eDecStat;
188*53ee8cc1Swenshuai.xi //    MS_BOOL     bIsBusy;
189*53ee8cc1Swenshuai.xi     MS_U8       u8LastFWCmd;
190*53ee8cc1Swenshuai.xi } MVD_DrvStatus;
191*53ee8cc1Swenshuai.xi 
192*53ee8cc1Swenshuai.xi /// MVD stream types for dual decoders
193*53ee8cc1Swenshuai.xi typedef enum
194*53ee8cc1Swenshuai.xi {
195*53ee8cc1Swenshuai.xi     E_MVD_DRV_STREAM_NONE = 0,
196*53ee8cc1Swenshuai.xi     E_MVD_DRV_MAIN_STREAM,
197*53ee8cc1Swenshuai.xi     E_MVD_DRV_SUB_STREAM,
198*53ee8cc1Swenshuai.xi     E_MVD_DRV_STREAM_MAX = E_MVD_DRV_SUB_STREAM,
199*53ee8cc1Swenshuai.xi } MVD_DRV_StreamType;
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi /// Enumerate CodecType that MVD supports
202*53ee8cc1Swenshuai.xi typedef enum _MVD_CodecType
203*53ee8cc1Swenshuai.xi {
204*53ee8cc1Swenshuai.xi     E_MVD_CODEC_MPEG2                    = 0x10,
205*53ee8cc1Swenshuai.xi     E_MVD_CODEC_MPEG4                    = 0x00,
206*53ee8cc1Swenshuai.xi     E_MVD_CODEC_MPEG4_SHORT_VIDEO_HEADER = 0x01,
207*53ee8cc1Swenshuai.xi     E_MVD_CODEC_DIVX311                  = 0x02,
208*53ee8cc1Swenshuai.xi     E_MVD_CODEC_FLV                      = 0x03,
209*53ee8cc1Swenshuai.xi     E_MVD_CODEC_VC1_ADV                  = 0x04,
210*53ee8cc1Swenshuai.xi     E_MVD_CODEC_VC1_MAIN                 = 0x05,
211*53ee8cc1Swenshuai.xi     E_MVD_CODEC_UNKNOWN                  = 0xff
212*53ee8cc1Swenshuai.xi } MVD_CodecType;
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi /// Mode of MVD input source
215*53ee8cc1Swenshuai.xi typedef enum _MVD_SrcMode
216*53ee8cc1Swenshuai.xi {
217*53ee8cc1Swenshuai.xi     E_MVD_FILE_MODE       = 0x00,
218*53ee8cc1Swenshuai.xi     E_MVD_SLQ_MODE        = 0x01,
219*53ee8cc1Swenshuai.xi     E_MVD_TS_MODE         = 0x02,
220*53ee8cc1Swenshuai.xi     E_MVD_SLQ_TBL_MODE    = 0x03,
221*53ee8cc1Swenshuai.xi     E_MVD_TS_FILE_MODE    = 0x04,
222*53ee8cc1Swenshuai.xi     E_MVD_SRC_UNKNOWN     = 0x05
223*53ee8cc1Swenshuai.xi } MVD_SrcMode;
224*53ee8cc1Swenshuai.xi 
225*53ee8cc1Swenshuai.xi /// AVSync mode for file playback
226*53ee8cc1Swenshuai.xi typedef enum
227*53ee8cc1Swenshuai.xi {
228*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_FREERUN  = 0,  ///Player didn't set PTS/DTS, so display freerun
229*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_PTS      = 1,  ///Player set PTS to MVD decoder
230*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_DTS      = 2,  ///Player set DTS to MVD decoder
231*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_STS      = 3,  ///SortedTimeStamp means decoder should sort timestamp
232*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_PTS_RVU  = 4,  ///Player set PTS to MVD decoder
233*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_DTS_RVU  = 5,  ///Player set DTS to MVD decoder
234*53ee8cc1Swenshuai.xi     E_MVD_TIMESTAMP_NEW_STS  = 6,  ///Player set PTS to MVD decoder
235*53ee8cc1Swenshuai.xi } MVD_TIMESTAMP_TYPE;
236*53ee8cc1Swenshuai.xi 
237*53ee8cc1Swenshuai.xi /// ErrCode obtained from firmware
238*53ee8cc1Swenshuai.xi typedef enum _MVD_ErrCode
239*53ee8cc1Swenshuai.xi {
240*53ee8cc1Swenshuai.xi     E_MVD_ERR_UNKNOWN            = 0,
241*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE              = 1,
242*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE        = 2,
243*53ee8cc1Swenshuai.xi     E_MVD_ERR_NOT_8_BIT          = 3,   //error_status : bits per pixel
244*53ee8cc1Swenshuai.xi     E_MVD_ERR_NERPRED_ENABLE     = 4,
245*53ee8cc1Swenshuai.xi     E_MVD_ERR_REDUCED_RES_ENABLE = 5,
246*53ee8cc1Swenshuai.xi     E_MVD_ERR_SCALABILITY        = 6,
247*53ee8cc1Swenshuai.xi     E_MVD_ERR_OTHER              = 7,
248*53ee8cc1Swenshuai.xi     E_MVD_ERR_H263_ERROR         = 8,
249*53ee8cc1Swenshuai.xi     E_MVD_ERR_RES_NOT_SUPPORT    = 9,   //error_status : none
250*53ee8cc1Swenshuai.xi     E_MVD_ERR_MPEG4_NOT_SUPPORT  = 10,  //error_status : none
251*53ee8cc1Swenshuai.xi     E_MVD_ERR_PROFILE_NOT_SUPPORT= 11,   //error_status : none
252*53ee8cc1Swenshuai.xi     E_MVD_ERR_RCV_ERROR_OCCUR= 12   //error_status : none
253*53ee8cc1Swenshuai.xi } MVD_ErrCode;
254*53ee8cc1Swenshuai.xi 
255*53ee8cc1Swenshuai.xi /// Detailed error status when error occurs
256*53ee8cc1Swenshuai.xi typedef enum _MVD_ErrStatus
257*53ee8cc1Swenshuai.xi {
258*53ee8cc1Swenshuai.xi     //error_status for E_MVD_ERR_SHAPE
259*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE_RECTANGULAR    = 0x10,
260*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE_BINARY         = 0x11,
261*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE_BINARY_ONLY    = 0x12,
262*53ee8cc1Swenshuai.xi     E_MVD_ERR_SHAPE_GRAYSCALE      = 0x13,
263*53ee8cc1Swenshuai.xi 
264*53ee8cc1Swenshuai.xi     //error_status for E_MVD_ERR_USED_SPRITE
265*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE_UNUSED   = 0x20, //sprite not used
266*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE_STATIC   = 0x21,
267*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE_GMC      = 0x22,
268*53ee8cc1Swenshuai.xi     E_MVD_ERR_USED_SPRITE_RESERVED = 0x23,
269*53ee8cc1Swenshuai.xi 
270*53ee8cc1Swenshuai.xi     E_MVD_ERR_STATUS_NONE          = 0x77,
271*53ee8cc1Swenshuai.xi     E_MVD_ERR_STATUS_UNKOWN        = 0x00,
272*53ee8cc1Swenshuai.xi } MVD_ErrStatus;
273*53ee8cc1Swenshuai.xi 
274*53ee8cc1Swenshuai.xi /// Picture type of MPEG video
275*53ee8cc1Swenshuai.xi typedef enum _MVD_PicType
276*53ee8cc1Swenshuai.xi {
277*53ee8cc1Swenshuai.xi     E_MVD_PIC_I = 0,
278*53ee8cc1Swenshuai.xi     E_MVD_PIC_P = 1,
279*53ee8cc1Swenshuai.xi     E_MVD_PIC_B = 2,
280*53ee8cc1Swenshuai.xi     E_MVD_PIC_UNKNOWN = 0xf,
281*53ee8cc1Swenshuai.xi } MVD_PicType;
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi /// Mode of frame rate conversion
284*53ee8cc1Swenshuai.xi typedef enum _MVD_FrcMode {
285*53ee8cc1Swenshuai.xi     E_MVD_FRC_NORMAL = 0,
286*53ee8cc1Swenshuai.xi     E_MVD_FRC_DISP_TWICE = 1,
287*53ee8cc1Swenshuai.xi     E_MVD_FRC_3_2_PULLDOWN = 2,
288*53ee8cc1Swenshuai.xi     E_MVD_FRC_PAL_TO_NTSC = 3,
289*53ee8cc1Swenshuai.xi     E_MVD_FRC_NTSC_TO_PAL = 4,
290*53ee8cc1Swenshuai.xi     E_MVD_FRC_DISP_ONEFIELD = 5,//Removed, call MDrv_MVD_EnableDispOneField() instead.
291*53ee8cc1Swenshuai.xi } MVD_FrcMode;
292*53ee8cc1Swenshuai.xi 
293*53ee8cc1Swenshuai.xi /// MVD play mode
294*53ee8cc1Swenshuai.xi typedef enum
295*53ee8cc1Swenshuai.xi {
296*53ee8cc1Swenshuai.xi     E_MVD_PLAY          = 0x00,
297*53ee8cc1Swenshuai.xi     E_MVD_STEPDISP      = 0x01,
298*53ee8cc1Swenshuai.xi     E_MVD_PAUSE         = 0x02,
299*53ee8cc1Swenshuai.xi     E_MVD_FASTFORWARD   = 0x03,
300*53ee8cc1Swenshuai.xi     E_MVD_BACKFORWARD   = 0x04,
301*53ee8cc1Swenshuai.xi     E_MVD_UNKNOWMODE    = 0xff
302*53ee8cc1Swenshuai.xi } MVD_PlayMode;
303*53ee8cc1Swenshuai.xi 
304*53ee8cc1Swenshuai.xi /// Store the packet information used for SLQ table file mode
305*53ee8cc1Swenshuai.xi typedef struct
306*53ee8cc1Swenshuai.xi {
307*53ee8cc1Swenshuai.xi     MS_VIRT u32StAddr;    ///< Packet offset from bitstream buffer base address. unit: byte.
308*53ee8cc1Swenshuai.xi     MS_U32 u32Length;    ///< Packet size. unit: byte.
309*53ee8cc1Swenshuai.xi     MS_U32 u32TimeStamp; ///< Packet time stamp. unit: ms.
310*53ee8cc1Swenshuai.xi     MS_U32 u32ID_L;      ///< Packet ID low part.
311*53ee8cc1Swenshuai.xi     MS_U32 u32ID_H;      ///< Packet ID high part.
312*53ee8cc1Swenshuai.xi } MVD_PacketInfo;
313*53ee8cc1Swenshuai.xi 
314*53ee8cc1Swenshuai.xi ///MVD frame info data structure
315*53ee8cc1Swenshuai.xi typedef struct
316*53ee8cc1Swenshuai.xi {
317*53ee8cc1Swenshuai.xi     MS_U16  u16HorSize;
318*53ee8cc1Swenshuai.xi     MS_U16  u16VerSize;
319*53ee8cc1Swenshuai.xi     MS_U32  u32FrameRate;
320*53ee8cc1Swenshuai.xi     MS_U8   u8AspectRate;
321*53ee8cc1Swenshuai.xi     MS_U8   u8Interlace;
322*53ee8cc1Swenshuai.xi     MS_U8   u8AFD;
323*53ee8cc1Swenshuai.xi     MS_U16  u16par_width;
324*53ee8cc1Swenshuai.xi     MS_U16  u16par_height;
325*53ee8cc1Swenshuai.xi     MS_U16  u16SarWidth;
326*53ee8cc1Swenshuai.xi     MS_U16  u16SarHeight;
327*53ee8cc1Swenshuai.xi     MS_U16  u16CropRight;
328*53ee8cc1Swenshuai.xi     MS_U16  u16CropLeft;
329*53ee8cc1Swenshuai.xi     MS_U16  u16CropBottom;
330*53ee8cc1Swenshuai.xi     MS_U16  u16CropTop;
331*53ee8cc1Swenshuai.xi     MS_U16  u16Pitch;
332*53ee8cc1Swenshuai.xi     MS_U16  u16PTSInterval;
333*53ee8cc1Swenshuai.xi     MS_U8   u8MPEG1;
334*53ee8cc1Swenshuai.xi     MS_U8   u8PlayMode;
335*53ee8cc1Swenshuai.xi     MS_U8   u8FrcMode;
336*53ee8cc1Swenshuai.xi     MS_VIRT  u32DynScalingAddr;    ///Dynamic scaling address
337*53ee8cc1Swenshuai.xi     MS_U8   u8DynScalingDepth;    ///Dynamic scaling depth
338*53ee8cc1Swenshuai.xi     MS_U32  u32DynScalingBufSize;    ///Dynamic scaling BufSize
339*53ee8cc1Swenshuai.xi     MS_BOOL bEnableMIUSel;        ///Dynamic scaling DS buffer on miu1 or miu0
340*53ee8cc1Swenshuai.xi } MVD_FrameInfo;
341*53ee8cc1Swenshuai.xi 
342*53ee8cc1Swenshuai.xi /// MVD AVSync Configuration
343*53ee8cc1Swenshuai.xi typedef struct
344*53ee8cc1Swenshuai.xi {
345*53ee8cc1Swenshuai.xi     MS_U32  u32Delay;       //unit: ms
346*53ee8cc1Swenshuai.xi     MS_U16  u16Tolerance;   //unit: ms
347*53ee8cc1Swenshuai.xi     MS_BOOL bEnable;
348*53ee8cc1Swenshuai.xi     MS_U8   u8Rsvd;         //reserved
349*53ee8cc1Swenshuai.xi } MVD_AVSyncCfg;
350*53ee8cc1Swenshuai.xi 
351*53ee8cc1Swenshuai.xi /// MVD Command arguments
352*53ee8cc1Swenshuai.xi typedef struct
353*53ee8cc1Swenshuai.xi {
354*53ee8cc1Swenshuai.xi     MS_U8 Arg0;    ///< argument 0
355*53ee8cc1Swenshuai.xi     MS_U8 Arg1;    ///< argument 1
356*53ee8cc1Swenshuai.xi     MS_U8 Arg2;    ///< argument 2
357*53ee8cc1Swenshuai.xi     MS_U8 Arg3;    ///< argument 3
358*53ee8cc1Swenshuai.xi     MS_U8 Arg4;    ///< argument 4
359*53ee8cc1Swenshuai.xi     MS_U8 Arg5;    ///< argument 5
360*53ee8cc1Swenshuai.xi } MVD_CmdArg;
361*53ee8cc1Swenshuai.xi 
362*53ee8cc1Swenshuai.xi /// MVD commands needing handshake
363*53ee8cc1Swenshuai.xi typedef enum
364*53ee8cc1Swenshuai.xi {
365*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_PAUSE,
366*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SLQ_RST,
367*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_STOP,
368*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SKIP_DATA,
369*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SKIP_TO_PTS,
370*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SINGLE_STEP,
371*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_SCALER_INFO,
372*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_GET_NXTDISPFRM,
373*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_PARSER_RST,
374*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_RST_CC608,
375*53ee8cc1Swenshuai.xi     MVD_HANDSHAKE_RST_CC708
376*53ee8cc1Swenshuai.xi } MVD_HANDSHAKE_CMD;
377*53ee8cc1Swenshuai.xi 
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi 
380*53ee8cc1Swenshuai.xi typedef enum
381*53ee8cc1Swenshuai.xi {
382*53ee8cc1Swenshuai.xi     E_MVD_FB_REDUCTION_NONE = 0,        ///< FB reduction disable
383*53ee8cc1Swenshuai.xi     E_MVD_FB_REDUCTION_1_2 = 1,         ///< FB reduction 1/2
384*53ee8cc1Swenshuai.xi     E_MVD_FB_REDUCTION_1_4 = 2,         ///< FB reduction 1/4
385*53ee8cc1Swenshuai.xi } MVD_FB_Reduction_Type;
386*53ee8cc1Swenshuai.xi 
387*53ee8cc1Swenshuai.xi typedef struct
388*53ee8cc1Swenshuai.xi {
389*53ee8cc1Swenshuai.xi     MVD_FB_Reduction_Type LumaFBReductionMode;     ///< Luma frame buffer reduction mode.
390*53ee8cc1Swenshuai.xi     MVD_FB_Reduction_Type ChromaFBReductionMode;   ///< Chroma frame buffer reduction mode.
391*53ee8cc1Swenshuai.xi     MS_U8                 u8EnableAutoMode;        /// 0: Disable, 1: Enable
392*53ee8cc1Swenshuai.xi     MS_U8                 u8ReservedByte;          /// Reserved byte
393*53ee8cc1Swenshuai.xi } MVD_FB_Reduction;
394*53ee8cc1Swenshuai.xi 
395*53ee8cc1Swenshuai.xi /// Configuration of MVD firmware
396*53ee8cc1Swenshuai.xi typedef struct
397*53ee8cc1Swenshuai.xi {
398*53ee8cc1Swenshuai.xi     MVD_CodecType    eCodecType;        ///< Specify the active codec type
399*53ee8cc1Swenshuai.xi     MVD_SrcMode      eSrcMode;          ///< Specify the input source
400*53ee8cc1Swenshuai.xi     MS_U8            bDisablePESParsing;///< MVD parser enable/disable
401*53ee8cc1Swenshuai.xi     MS_BOOL          bNotReload;        ///< TRUE to not allow loading f/w after the 1st init to speed up.
402*53ee8cc1Swenshuai.xi     MVD_FB_Reduction stFBReduction;     ///< MVD Frame buffer reduction type
403*53ee8cc1Swenshuai.xi     MS_U16           u16FBReduceValue;
404*53ee8cc1Swenshuai.xi     MS_U8            u8FBMode;          ///driver internal attribute: SD or HD
405*53ee8cc1Swenshuai.xi     MS_U8            u8FBNum;           ///driver internal attribute: # of frames in FB
406*53ee8cc1Swenshuai.xi     MS_VIRT           u32FBUsedSize;     ///driver internal attribute: used size
407*53ee8cc1Swenshuai.xi } MVD_FWCfg;
408*53ee8cc1Swenshuai.xi 
409*53ee8cc1Swenshuai.xi /// The type of fw binary input source
410*53ee8cc1Swenshuai.xi typedef enum
411*53ee8cc1Swenshuai.xi {
412*53ee8cc1Swenshuai.xi     E_MVD_FW_SOURCE_NONE,       ///< No input fw.
413*53ee8cc1Swenshuai.xi     E_MVD_FW_SOURCE_DRAM,       ///< input source from DRAM.
414*53ee8cc1Swenshuai.xi     E_MVD_FW_SOURCE_FLASH,      ///< input source from FLASH.
415*53ee8cc1Swenshuai.xi } MVD_FWSrcType;
416*53ee8cc1Swenshuai.xi 
417*53ee8cc1Swenshuai.xi /// Configuration of memory layout
418*53ee8cc1Swenshuai.xi typedef struct
419*53ee8cc1Swenshuai.xi {
420*53ee8cc1Swenshuai.xi     MVD_FWSrcType eFWSrcType;         //!< the input FW source type.
421*53ee8cc1Swenshuai.xi     MS_VIRT     u32FWSrcVAddr;         //!< virtual address of input FW binary in DRAM
422*53ee8cc1Swenshuai.xi     MS_PHY u32FWBinAddr;          //!< physical address in Flash/DRAM of FW code
423*53ee8cc1Swenshuai.xi     MS_VIRT     u32FWBinSize;
424*53ee8cc1Swenshuai.xi     MS_PHY u32FWCodeAddr;
425*53ee8cc1Swenshuai.xi     MS_VIRT     u32FWCodeSize;
426*53ee8cc1Swenshuai.xi     MS_PHY u32FBAddr;
427*53ee8cc1Swenshuai.xi     MS_VIRT     u32FBSize;
428*53ee8cc1Swenshuai.xi     MS_PHY u32BSAddr;
429*53ee8cc1Swenshuai.xi     MS_VIRT     u32BSSize;
430*53ee8cc1Swenshuai.xi     MS_PHY u32DrvBufAddr;
431*53ee8cc1Swenshuai.xi     MS_VIRT     u32DrvBufSize;
432*53ee8cc1Swenshuai.xi     MS_PHY u32DynSacalingBufAddr;
433*53ee8cc1Swenshuai.xi     MS_VIRT     u32DynSacalingBufSize;
434*53ee8cc1Swenshuai.xi     MS_PHY u32Miu1BaseAddr;
435*53ee8cc1Swenshuai.xi     MS_PHY u32Miu2BaseAddr;
436*53ee8cc1Swenshuai.xi     MS_PHY u32Miu3BaseAddr;
437*53ee8cc1Swenshuai.xi     MS_BOOL    bFWMiuSel;
438*53ee8cc1Swenshuai.xi     MS_BOOL    bHWMiuSel;
439*53ee8cc1Swenshuai.xi     MS_U8      u8FWMiuSel;
440*53ee8cc1Swenshuai.xi     MS_U8      u8HWMiuSel;
441*53ee8cc1Swenshuai.xi     MS_BOOL    bEnableDynScale;       /// dynamic scaling control bit
442*53ee8cc1Swenshuai.xi     MS_BOOL    bSupportSDModeOnly;    /// Config from IP Check
443*53ee8cc1Swenshuai.xi } MVD_MEMCfg;
444*53ee8cc1Swenshuai.xi 
445*53ee8cc1Swenshuai.xi /// Return value of MVD driver
446*53ee8cc1Swenshuai.xi typedef enum
447*53ee8cc1Swenshuai.xi {
448*53ee8cc1Swenshuai.xi     E_MVD_RET_OK            = 1,
449*53ee8cc1Swenshuai.xi     E_MVD_RET_FAIL          = 0,
450*53ee8cc1Swenshuai.xi     E_MVD_RET_INVALID_PARAM = 2,
451*53ee8cc1Swenshuai.xi     E_MVD_RET_QUEUE_FULL    = 3,
452*53ee8cc1Swenshuai.xi     E_MVD_RET_TIME_OUT      = 4
453*53ee8cc1Swenshuai.xi } E_MVD_Result;
454*53ee8cc1Swenshuai.xi 
455*53ee8cc1Swenshuai.xi /// Mode of trick decoding
456*53ee8cc1Swenshuai.xi typedef enum
457*53ee8cc1Swenshuai.xi {
458*53ee8cc1Swenshuai.xi     E_MVD_TRICK_DEC_ALL = 0,
459*53ee8cc1Swenshuai.xi     E_MVD_TRICK_DEC_IP,
460*53ee8cc1Swenshuai.xi     E_MVD_TRICK_DEC_I,
461*53ee8cc1Swenshuai.xi     E_MVD_TRICK_DEC_UNKNOWN
462*53ee8cc1Swenshuai.xi } MVD_TrickDec;
463*53ee8cc1Swenshuai.xi 
464*53ee8cc1Swenshuai.xi /// Speed type of playing
465*53ee8cc1Swenshuai.xi typedef enum
466*53ee8cc1Swenshuai.xi {
467*53ee8cc1Swenshuai.xi     E_MVD_SPEED_DEFAULT = 0,
468*53ee8cc1Swenshuai.xi     E_MVD_SPEED_FAST,
469*53ee8cc1Swenshuai.xi     E_MVD_SPEED_SLOW,
470*53ee8cc1Swenshuai.xi     E_MVD_SPEED_TYPE_UNKNOWN
471*53ee8cc1Swenshuai.xi } MVD_SpeedType;
472*53ee8cc1Swenshuai.xi 
473*53ee8cc1Swenshuai.xi /// MVD pattern type
474*53ee8cc1Swenshuai.xi typedef enum
475*53ee8cc1Swenshuai.xi {
476*53ee8cc1Swenshuai.xi     E_MVD_PATTERN_FLUSH = 0,           ///< Used after MDrv_MVD_Flush().
477*53ee8cc1Swenshuai.xi     E_MVD_PATTERN_FILEEND,             ///< Used for file end.
478*53ee8cc1Swenshuai.xi } MVD_PatternType;
479*53ee8cc1Swenshuai.xi 
480*53ee8cc1Swenshuai.xi /// MVD frame info structure
481*53ee8cc1Swenshuai.xi typedef struct
482*53ee8cc1Swenshuai.xi {
483*53ee8cc1Swenshuai.xi     MS_PHY u32LumaAddr;    ///< The start physical of luma data. Unit: byte.
484*53ee8cc1Swenshuai.xi     MS_PHY u32ChromaAddr;  ///< The start physcal of chroma data. Unit: byte.
485*53ee8cc1Swenshuai.xi     MS_U32 u32TimeStamp;       ///< Time stamp(DTS, PTS) of current displayed frame. Unit: 90khz.
486*53ee8cc1Swenshuai.xi     MS_U32 u32ID_L;            ///< low part of ID number set by MDrv_MVD_PushQueue().
487*53ee8cc1Swenshuai.xi     MS_U32 u32ID_H;            ///< high part of ID number set by MDrv_MVD_PushQueue().
488*53ee8cc1Swenshuai.xi     MS_U16 u16Pitch;           ///< The pitch of current frame.
489*53ee8cc1Swenshuai.xi     MS_U16 u16Width;           ///< pixel width of current frame.
490*53ee8cc1Swenshuai.xi     MS_U16 u16Height;          ///< pixel height of current frame.
491*53ee8cc1Swenshuai.xi     MS_U16 u16FrmIdx;          ///< index of current frame.
492*53ee8cc1Swenshuai.xi     MVD_PicType eFrmType;     ///< picture type: I, P, B frame
493*53ee8cc1Swenshuai.xi } MVD_FrmInfo;
494*53ee8cc1Swenshuai.xi 
495*53ee8cc1Swenshuai.xi /// MVD extension display info structure
496*53ee8cc1Swenshuai.xi typedef struct
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi     MS_U16 u16VSize;         /// vertical size from sequene_display_extension
499*53ee8cc1Swenshuai.xi     MS_U16 u16HSize;         /// horizontal size from sequene_display_extension
500*53ee8cc1Swenshuai.xi     MS_U16 u16VOffset;       /// vertical offset from picture_display_extension
501*53ee8cc1Swenshuai.xi     MS_U16 u16HOffset;       /// horizontal offset from picture_display_extension
502*53ee8cc1Swenshuai.xi } MVD_ExtDispInfo;
503*53ee8cc1Swenshuai.xi 
504*53ee8cc1Swenshuai.xi /// Type of frame info that can be queried
505*53ee8cc1Swenshuai.xi typedef enum
506*53ee8cc1Swenshuai.xi {
507*53ee8cc1Swenshuai.xi     E_MVD_FRMINFO_DISPLAY=0,   ///< Displayed frame.
508*53ee8cc1Swenshuai.xi     E_MVD_FRMINFO_DECODE =1,   ///< Decoded frame.
509*53ee8cc1Swenshuai.xi     E_MVD_FRMINFO_NEXT_DISPLAY =2,///< Next frame to be displayed.
510*53ee8cc1Swenshuai.xi } MVD_FrmInfoType;
511*53ee8cc1Swenshuai.xi 
512*53ee8cc1Swenshuai.xi typedef enum {
513*53ee8cc1Swenshuai.xi     E_MVD_FRAME_FLIP    = 0,
514*53ee8cc1Swenshuai.xi     E_MVD_FRAME_RELEASE = 1,
515*53ee8cc1Swenshuai.xi } MVD_FrmOpt;
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi ///MVD set debug mode
518*53ee8cc1Swenshuai.xi typedef enum
519*53ee8cc1Swenshuai.xi {
520*53ee8cc1Swenshuai.xi     E_MVD_EX_DBG_MODE_ORI = 0,
521*53ee8cc1Swenshuai.xi     E_MVD_EX_DBG_MODE_BYPASS_INSERT_START_CODE , 	/// for UT
522*53ee8cc1Swenshuai.xi     E_MVD_EX_DBG_MODE_BYPASS_DIVX_MC_PATCH,			/// for UT
523*53ee8cc1Swenshuai.xi     E_MVD_EX_DBG_MODE_NUM
524*53ee8cc1Swenshuai.xi } MVD_DbgMode;
525*53ee8cc1Swenshuai.xi 
526*53ee8cc1Swenshuai.xi typedef struct
527*53ee8cc1Swenshuai.xi {
528*53ee8cc1Swenshuai.xi 	union
529*53ee8cc1Swenshuai.xi 	{
530*53ee8cc1Swenshuai.xi 		struct
531*53ee8cc1Swenshuai.xi 		{
532*53ee8cc1Swenshuai.xi 			MS_U32 bBypassInsertStartCode : 1;  // TRUE: for bypass insert start code for UT...
533*53ee8cc1Swenshuai.xi 			MS_U32 bBypassDivxMCPatch : 1;      // TRUE: for bypass divx MC patch for UT...
534*53ee8cc1Swenshuai.xi 		};
535*53ee8cc1Swenshuai.xi 		MS_U32 value;
536*53ee8cc1Swenshuai.xi 	};
537*53ee8cc1Swenshuai.xi }MVD_DbgModeCfg;
538*53ee8cc1Swenshuai.xi 
539*53ee8cc1Swenshuai.xi /// Attributes used by drvMVD & halMVD
540*53ee8cc1Swenshuai.xi /// Updated by halMVD, read-only for drvMVD
541*53ee8cc1Swenshuai.xi typedef struct
542*53ee8cc1Swenshuai.xi {
543*53ee8cc1Swenshuai.xi     MS_BOOL         bAVSyncOn;
544*53ee8cc1Swenshuai.xi     MS_BOOL         bDropErrFrm;
545*53ee8cc1Swenshuai.xi     MS_BOOL         bDropDispfrm;
546*53ee8cc1Swenshuai.xi     MS_BOOL         bDecodeIFrame;
547*53ee8cc1Swenshuai.xi     MS_BOOL         bStepDecode;
548*53ee8cc1Swenshuai.xi     MS_BOOL         bStepDisp;
549*53ee8cc1Swenshuai.xi     MS_BOOL         bStep2Pts;
550*53ee8cc1Swenshuai.xi     MS_BOOL         bSkip2Pts;
551*53ee8cc1Swenshuai.xi     MS_BOOL         bEnableLastFrmShow;
552*53ee8cc1Swenshuai.xi     MS_BOOL         bSlqTblSync;
553*53ee8cc1Swenshuai.xi     MS_U8           u8MstMode; //MStreamer mode=1; Non-MSt mode=0.
554*53ee8cc1Swenshuai.xi     MS_U8           u8McuMode; //MCU mode=1;
555*53ee8cc1Swenshuai.xi     MS_U8           u8DynScalingDepth;
556*53ee8cc1Swenshuai.xi     MVD_TrickDec    eTrickMode;
557*53ee8cc1Swenshuai.xi     MVD_FrcMode     eFrcMode;
558*53ee8cc1Swenshuai.xi     MVD_TIMESTAMP_TYPE eFileSyncMode;
559*53ee8cc1Swenshuai.xi     MVD_SpeedType   ePreSpeedType;
560*53ee8cc1Swenshuai.xi     MS_VIRT          u32UsrDataRd;
561*53ee8cc1Swenshuai.xi     MS_U32          u32IntCnt;      /// interrupt ocurred counter
562*53ee8cc1Swenshuai.xi     MVD_AVSyncCfg   stSyncCfg;
563*53ee8cc1Swenshuai.xi     MVD_DbgModeCfg  stDbgModeCfg;
564*53ee8cc1Swenshuai.xi     MS_BOOL         bExternalDSBuf;
565*53ee8cc1Swenshuai.xi } MVD_CtrlCfg;
566*53ee8cc1Swenshuai.xi 
567*53ee8cc1Swenshuai.xi /// MVD time code structure
568*53ee8cc1Swenshuai.xi typedef struct
569*53ee8cc1Swenshuai.xi {
570*53ee8cc1Swenshuai.xi     MS_U8   u8TimeCodeHr;   ///<  time_code_hours
571*53ee8cc1Swenshuai.xi     MS_U8   u8TimeCodeMin;  ///<  time_code_minutes
572*53ee8cc1Swenshuai.xi     MS_U8   u8TimeCodeSec;  ///<  time_code_seconds
573*53ee8cc1Swenshuai.xi     MS_U8   u8TimeCodePic;  ///<  time_code_pictures
574*53ee8cc1Swenshuai.xi 
575*53ee8cc1Swenshuai.xi     MS_U8   u8DropFrmFlag;  ///<  drop_frame_flag
576*53ee8cc1Swenshuai.xi     MS_U8   u8Reserved[3];  ///<  reserved fields for 4-byte alignment
577*53ee8cc1Swenshuai.xi } MVD_TimeCode;
578*53ee8cc1Swenshuai.xi 
579*53ee8cc1Swenshuai.xi /// Format of CC (Closed Caption)
580*53ee8cc1Swenshuai.xi typedef enum _MVD_CCFormat
581*53ee8cc1Swenshuai.xi {
582*53ee8cc1Swenshuai.xi     E_MVD_CC_NONE       = 0x00,
583*53ee8cc1Swenshuai.xi     E_MVD_CC_608        = 0x01, //For CC608 or 157
584*53ee8cc1Swenshuai.xi     E_MVD_CC_708        = 0x02, //For CC708
585*53ee8cc1Swenshuai.xi     E_MVD_CC_UNPACKED   = 0x03,
586*53ee8cc1Swenshuai.xi } MVD_CCFormat;
587*53ee8cc1Swenshuai.xi 
588*53ee8cc1Swenshuai.xi /// Type of CC
589*53ee8cc1Swenshuai.xi typedef enum _MVD_CCType
590*53ee8cc1Swenshuai.xi {
591*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_NONE = 0,
592*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_NTSC_FIELD1 = 1,
593*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_NTSC_FIELD2 = 2,
594*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_DTVCC = 3,
595*53ee8cc1Swenshuai.xi     E_MVD_CC_TYPE_NTSC_TWOFIELD = 4,
596*53ee8cc1Swenshuai.xi } MVD_CCType;
597*53ee8cc1Swenshuai.xi 
598*53ee8cc1Swenshuai.xi /// Data structure of CC Configuration
599*53ee8cc1Swenshuai.xi typedef struct
600*53ee8cc1Swenshuai.xi {
601*53ee8cc1Swenshuai.xi     MVD_CCFormat eFormat;
602*53ee8cc1Swenshuai.xi     MVD_CCType   eType;
603*53ee8cc1Swenshuai.xi     MS_VIRT       u32BufStAdd;
604*53ee8cc1Swenshuai.xi     MS_U32       u32BufSize;
605*53ee8cc1Swenshuai.xi } MVD_CCCfg;
606*53ee8cc1Swenshuai.xi 
607*53ee8cc1Swenshuai.xi /// Info. of user data
608*53ee8cc1Swenshuai.xi typedef struct
609*53ee8cc1Swenshuai.xi {
610*53ee8cc1Swenshuai.xi     MS_U32 u32Pts;
611*53ee8cc1Swenshuai.xi     MS_U8  u8PicStruct;           /* picture_structure*/
612*53ee8cc1Swenshuai.xi     MS_U8  u8PicType;             /* picture type: 1->I picture, 2->P,3->B */
613*53ee8cc1Swenshuai.xi     MS_U8  u8TopFieldFirst;       /* Top field first: 1 if top field first*/
614*53ee8cc1Swenshuai.xi     MS_U8  u8RptFirstField;       /* Repeat first field: 1 if repeat field first*/
615*53ee8cc1Swenshuai.xi 
616*53ee8cc1Swenshuai.xi     MS_U16 u16TmpRef;            /* Temporal reference of the picture*/
617*53ee8cc1Swenshuai.xi     MS_U8  u8ByteCnt;
618*53ee8cc1Swenshuai.xi     MS_U8  u8Reserve;
619*53ee8cc1Swenshuai.xi 
620*53ee8cc1Swenshuai.xi     MS_U32 u32DataBuf;
621*53ee8cc1Swenshuai.xi } MVD_UsrDataInfo;
622*53ee8cc1Swenshuai.xi 
623*53ee8cc1Swenshuai.xi /// MVD interrupt events
624*53ee8cc1Swenshuai.xi typedef enum
625*53ee8cc1Swenshuai.xi {
626*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DISABLE_ALL    = 0,           ///< unregister all events notification
627*53ee8cc1Swenshuai.xi     E_MVD_EVENT_USER_DATA      = BIT(0),      ///< found user data
628*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DISP_VSYNC     = BIT(1),      ///< vsync interrupt
629*53ee8cc1Swenshuai.xi     E_MVD_EVENT_PIC_FOUND      = BIT(2),      ///<
630*53ee8cc1Swenshuai.xi     E_MVD_EVENT_FIRST_FRAME    = BIT(3),      ///< first frame decoded
631*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DISP_RDY       = BIT(4),      ///< MVD ready to display.
632*53ee8cc1Swenshuai.xi     E_MVD_EVENT_SEQ_FOUND      = BIT(5),      ///< found sequence header
633*53ee8cc1Swenshuai.xi     //E_MVD_EVENT_DEC_CC_FOUND = BIT(6),      ///< MVD found one user data with decoded frame.
634*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DEC_DATA_ERR   = BIT(7),      ///< ES Data error.
635*53ee8cc1Swenshuai.xi     E_MVD_EVENT_UNMUTE         = BIT(8),      ///< video unmute
636*53ee8cc1Swenshuai.xi     E_MVD_EVENT_USER_DATA_DISP = BIT(9),      ///< found user data in display order
637*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DEC_ERR        = BIT(10),     ///< MVD HW found decode error.
638*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DEC_I          = BIT(11),     ///< MVD HW decode I frame.
639*53ee8cc1Swenshuai.xi     E_MVD_EVENT_DEC_ONE_FRAME  = BIT(15),     ///< Decode one frame done
640*53ee8cc1Swenshuai.xi     E_MVD_EVENT_XC_LOW_DEALY   = BIT(16),     ///< speed up the un-mute screen on XC.
641*53ee8cc1Swenshuai.xi } MVD_Event;
642*53ee8cc1Swenshuai.xi 
643*53ee8cc1Swenshuai.xi /// MVD clock speed
644*53ee8cc1Swenshuai.xi typedef enum
645*53ee8cc1Swenshuai.xi {
646*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_NONE = 0,
647*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_HIGHEST,
648*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_HIGH,
649*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_MEDIUM,
650*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_LOW,
651*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_LOWEST,
652*53ee8cc1Swenshuai.xi     E_MVD_EX_CLOCK_SPEED_DEFAULT,
653*53ee8cc1Swenshuai.xi } MVD_EX_ClockSpeed;
654*53ee8cc1Swenshuai.xi 
655*53ee8cc1Swenshuai.xi //MVD CRC value
656*53ee8cc1Swenshuai.xi typedef struct
657*53ee8cc1Swenshuai.xi {
658*53ee8cc1Swenshuai.xi     MS_U32 u32HSize;
659*53ee8cc1Swenshuai.xi     MS_U32 u32VSize;
660*53ee8cc1Swenshuai.xi     MS_U32 u32Strip;
661*53ee8cc1Swenshuai.xi     MS_VIRT u32YStartAddr;
662*53ee8cc1Swenshuai.xi     MS_VIRT u32UVStartAddr;
663*53ee8cc1Swenshuai.xi }MVD_CrcIn;
664*53ee8cc1Swenshuai.xi 
665*53ee8cc1Swenshuai.xi typedef struct
666*53ee8cc1Swenshuai.xi {
667*53ee8cc1Swenshuai.xi     MS_U32 u32YCrc;
668*53ee8cc1Swenshuai.xi     MS_U32 u32UVCrc;
669*53ee8cc1Swenshuai.xi }MVD_CrcOut;
670*53ee8cc1Swenshuai.xi 
671*53ee8cc1Swenshuai.xi typedef struct
672*53ee8cc1Swenshuai.xi {
673*53ee8cc1Swenshuai.xi     MS_VIRT  u32DSBufAddr;       // Buffer Address
674*53ee8cc1Swenshuai.xi     MS_U32  u32DSBufSize;       // Buffer Size
675*53ee8cc1Swenshuai.xi }MVD_EX_ExternalDSBuf;
676*53ee8cc1Swenshuai.xi 
677*53ee8cc1Swenshuai.xi 
678*53ee8cc1Swenshuai.xi typedef struct
679*53ee8cc1Swenshuai.xi {
680*53ee8cc1Swenshuai.xi     MS_BOOL bHWBufferReMapping;
681*53ee8cc1Swenshuai.xi } MVD_Pre_Ctrl;
682*53ee8cc1Swenshuai.xi 
683*53ee8cc1Swenshuai.xi 
684*53ee8cc1Swenshuai.xi typedef void (*MVD_InterruptCb)(MS_U32 u32CbData);
685*53ee8cc1Swenshuai.xi 
686*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
687*53ee8cc1Swenshuai.xi // Function Prototype Declaration
688*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
689*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetCfg(MS_U32 u32Id, MVD_FWCfg* fwCfg, MVD_MEMCfg* memCfg);
690*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetFWVer(MS_U32 u32Id);
691*53ee8cc1Swenshuai.xi void MDrv_MVD_SetDbgLevel(MS_U8 level);
692*53ee8cc1Swenshuai.xi const MVD_DrvInfo* MDrv_MVD_GetInfo(void);
693*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetLibVer(const MSIF_Version **ppVersion);
694*53ee8cc1Swenshuai.xi 
695*53ee8cc1Swenshuai.xi void MDrv_MVD_SetCodecInfo(MS_U32 u32Id, MVD_CodecType u8CodecType, MVD_SrcMode u8BSProviderMode, MS_U8 bDisablePESParsing);
696*53ee8cc1Swenshuai.xi void MDrv_MVD_SetDivXCfg(MS_U32 u32Id, MS_U8 u8MvAdjust, MS_U8 u8IdctSel);
697*53ee8cc1Swenshuai.xi 
698*53ee8cc1Swenshuai.xi void MDrv_MVD_SetFrameBuffAddr(MS_U32 u32Id, MS_VIRT u32addr);
699*53ee8cc1Swenshuai.xi void MDrv_MVD_GetFrameInfo(MS_U32 u32Id, MVD_FrameInfo *pinfo );
700*53ee8cc1Swenshuai.xi void MDrv_MVD_SetOverflowTH(MS_U32 u32Id, MS_U32 u32Threshold);
701*53ee8cc1Swenshuai.xi void MDrv_MVD_SetUnderflowTH(MS_U32 u32Id, MS_U32 u32Threshold);
702*53ee8cc1Swenshuai.xi 
703*53ee8cc1Swenshuai.xi void MDrv_MVD_RstIFrameDec(MS_U32 u32Id,MVD_CodecType eCodecType);
704*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsIFrameDecoding(MS_U32 u32Id);
705*53ee8cc1Swenshuai.xi 
706*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetSyncStatus(MS_U32 u32Id);
707*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsFreerun(MS_U32 u32Id);
708*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetIsIPicFound(MS_U32 u32Id);
709*53ee8cc1Swenshuai.xi 
710*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DecodeIFrame(MS_U32 u32Id, MS_PHY u32FrameBufAddr, MS_PHY u32StreamBufAddr, MS_PHY u32StreamBufEndAddr );
711*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetValidStreamFlag(MS_U32 u32Id);
712*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetChromaFormat(MS_U32 u32Id);
713*53ee8cc1Swenshuai.xi //for MM
714*53ee8cc1Swenshuai.xi void MDrv_MVD_SetFrameInfo(MS_U32 u32Id, MVD_FrameInfo *pinfo );
715*53ee8cc1Swenshuai.xi void MDrv_MVD_GetErrInfo(MS_U32 u32Id, MVD_ErrCode *errCode, MVD_ErrStatus *errStatus);
716*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetSkipPicCounter(MS_U32 u32Id);
717*53ee8cc1Swenshuai.xi 
718*53ee8cc1Swenshuai.xi void MDrv_MVD_SetSLQWritePtr(MS_U32 u32Id, MS_BOOL bCheckData);
719*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetSLQReadPtr(MS_U32 u32Id);
720*53ee8cc1Swenshuai.xi 
721*53ee8cc1Swenshuai.xi MVD_PicType MDrv_MVD_GetPicType(MS_U32 u32Id);
722*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetBitsRate(MS_U32 u32Id);
723*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetVideoRange(MS_U32 u32Id);
724*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetLowDelayFlag(MS_U32 u32Id);
725*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIs32PullDown(MS_U32 u32Id);
726*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsDynScalingEnabled(MS_U32 u32Id);
727*53ee8cc1Swenshuai.xi MS_S32 MDrv_MVD_GetPtsStcDiff(MS_U32 u32Id);
728*53ee8cc1Swenshuai.xi 
729*53ee8cc1Swenshuai.xi void MDrv_MVD_Pause(MS_U32 u32Id);
730*53ee8cc1Swenshuai.xi void MDrv_MVD_Resume(MS_U32 u32Id);
731*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_StepDisp(MS_U32 u32Id);
732*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsStepDispDone(MS_U32 u32Id);
733*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_StepDecode(MS_U32 u32Id);
734*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsStepDecodeDone(MS_U32 u32Id);
735*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SeekToPTS(MS_U32 u32Id, MS_U32 u32Pts);
736*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsStep2PtsDone(MS_U32 u32Id);
737*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SkipToPTS(MS_U32 u32Id, MS_U32 u32Pts);
738*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_TrickPlay(MS_U32 u32Id, MVD_TrickDec trickDec, MS_U8 u8DispDuration);
739*53ee8cc1Swenshuai.xi void MDrv_MVD_EnableForcePlay(MS_U32 u32Id);
740*53ee8cc1Swenshuai.xi 
741*53ee8cc1Swenshuai.xi void MDrv_MVD_RegSetBase(MS_VIRT u32RegBaseAddr);
742*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetFreeStream(MS_U32 *pu32Id, MVD_DRV_StreamType eStreamType);
743*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Init(MS_U32 u32Id,MVD_CodecType eCodecType);
744*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Exit(MS_U32 u32Id);
745*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Rst(MS_U32 u32Id,MVD_CodecType eCodecType);
746*53ee8cc1Swenshuai.xi 
747*53ee8cc1Swenshuai.xi void MDrv_MVD_Play(MS_U32 u32Id);
748*53ee8cc1Swenshuai.xi void MDrv_MVD_SetAVSync(MS_U32 u32Id, MS_BOOL bEnable, MS_U32 u32Delay);
749*53ee8cc1Swenshuai.xi void MDrv_MVD_SetAVSyncThreshold(MS_U32 u32Id, MS_U32 u32Th);
750*53ee8cc1Swenshuai.xi void MDrv_MVD_SetAVSyncFreerunThreshold(MS_U32 u32Id, MS_U32 u32Th);
751*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetAVSyncDelay(MS_U32 u32Id);
752*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsAVSyncOn(MS_U32 u32Id);
753*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsSyncRep(MS_U32 u32Id);
754*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetIsSyncSkip(MS_U32 u32Id);
755*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ChangeAVsync(MS_U32 u32Id, MS_BOOL bEnable, MS_U16 u16PTS);
756*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DispCtrl(MS_U32 u32Id, MS_BOOL bDecOrder, MS_BOOL bDropErr, MS_BOOL bDropDisp, MVD_FrcMode eFrcMode);
757*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DispRepeatField(MS_U32 u32Id, MS_BOOL bEnable);
758*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetColorFormat(MS_U32 u32Id);
759*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetMatrixCoef(MS_U32 u32Id);
760*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetActiveFormat(MS_U32 u32Id);
761*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetDispRdy(MS_U32 u32Id);
762*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Is1stFrmRdy(MS_U32 u32Id);
763*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetGOPCount(MS_U32 u32Id);
764*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetPicCounter(MS_U32 u32Id);
765*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetParserByteCnt(MS_U32 u32Id);
766*53ee8cc1Swenshuai.xi MVD_DecStat MDrv_MVD_GetDecodeStatus(MS_U32 u32Id);
767*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetLastCmd(MS_U32 u32Id);
768*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetVldErrCount(MS_U32 u32Id);
769*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_DropErrorFrame(MS_U32 u32Id, MS_BOOL bDrop);
770*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_MVDCommand ( MS_U8 u8cmd, MVD_CmdArg *pstCmdArg );
771*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SkipData(MS_U32 u32Id);
772*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SkipToIFrame(MS_U32 u32Id);
773*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetCaps(MVD_Caps* pCaps);
774*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetFrmRateIsSupported(MS_U32 u32Id);
775*53ee8cc1Swenshuai.xi 
776*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_DisableErrConceal(MS_U32 u32Id, MS_BOOL bDisable);
777*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_PushQueue(MS_U32 u32Id, MVD_PacketInfo* pInfo);
778*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_FlushQueue(MS_U32 u32Id);
779*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FlushDisplayBuf(MS_U32 u32Id);
780*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetQueueVacancy(MS_U32 u32Id, MS_BOOL bCached);
781*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetESReadPtr(MS_U32 u32Id);
782*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetESWritePtr(MS_U32 u32Id);
783*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_EnableLastFrameShow(MS_U32 u32Id, MS_BOOL bEnable);
784*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_IsDispFinish(MS_U32 u32Id);
785*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetSpeed(MS_U32 u32Id, MVD_SpeedType eSpeedType, MS_U8 u8Multiple);
786*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_ResetPTS(MS_U32 u32Id, MS_U32 u32PtsBase);
787*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetPTS(MS_U32 u32Id);
788*53ee8cc1Swenshuai.xi MS_U64 MDrv_MVD_GetU64PTS(MS_U32 u32Id);
789*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetNextPTS(MS_U32 u32Id);
790*53ee8cc1Swenshuai.xi MVD_TrickDec MDrv_MVD_GetTrickMode(MS_U32 u32Id);
791*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsPlaying(MS_U32 u32Id);
792*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsIdle(MS_U32 u32Id);
793*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsSeqChg(MS_U32 u32Id);
794*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_DbgSetData(MS_U32 u32Id, MS_VIRT u32Addr, MS_U32 u32Data);
795*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_DbgGetData(MS_U32 u32Id, MS_VIRT u32Addr, MS_U32* u32Data);
796*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetDecodedFrameIdx (MS_U32 u32Id);
797*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetFileModeAVSync(MS_U32 u32Id, MVD_TIMESTAMP_TYPE eSyncMode);
798*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_IsAllBufferEmpty(MS_U32 u32Id);
799*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GenPattern(MS_U32 u32Id, MVD_PatternType ePattern, MS_PHY u32PAddr, MS_U32* pu32Size);
800*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetPatternInfo(void);
801*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDynScalingParam(MS_U32 u32Id, MS_PHY u32StAddr, MS_VIRT u32Size);
802*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetVirtualBox(MS_U32 u32Id, MS_U16 u16Width, MS_U16 u16Height);
803*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetBlueScreen(MS_U32 u32Id, MS_BOOL bEn);
804*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_EnableInt(MS_U32 u32Id, MS_U32 bEn);
805*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_EnableDispOneField(MS_U32 u32Id, MS_BOOL bEn);
806*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetExtDispInfo(MS_U32 u32Id, MVD_ExtDispInfo* pInfo);
807*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetFrmInfo(MS_U32 u32Id, MVD_FrmInfoType eType, MVD_FrmInfo* pInfo);
808*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetTimeCode(MS_U32 u32Id, MVD_FrmInfoType eType, MVD_TimeCode* pInfo);
809*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetUsrDataIsAvailable(MS_U32 u32Id);
810*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetUsrDataInfo(MS_U32 u32Id, MVD_UsrDataInfo* pUsrInfo);
811*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetFreezeDisp(MS_U32 u32Id, MS_BOOL bEn);
812*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetDispCount(MS_U32 u32Id);
813*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetXcLowDelayIntState(MS_U32 u32Id);
814*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetFdMaskDelayCount(MS_U32 u32Id, MS_U16 u16Cnt);
815*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetOutputFRCMode(MS_U32 u32Id, MS_U8 u8FrameRate, MS_U8 u8Interlace);
816*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetFRCDropType(MS_U32 u32Id, MS_U8 u8DropType);
817*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDisableSeqChange(MS_U32 u32Id, MS_BOOL bEnable);
818*53ee8cc1Swenshuai.xi 
819*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetMStreamerMode(MS_U32 u32Id, MS_U8 u8Mode);
820*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetMcuMode(MS_U32 u32Id, MS_U8 u8Mode);
821*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FrameFlip(MS_U32 u32Id, MS_U8 u8FrmIdx);
822*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FrameRelease(MS_U32 u32Id, MS_U8 u8FrmIdx);
823*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FrameCapture(MS_U32 u32Id, MS_U8 u8FrmIdx, MS_BOOL bEnable);
824*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ReleaseFdMask(MS_U32 u32Id, MS_BOOL bRls);
825*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ParserRstDone(MS_U32 u32Id, MS_BOOL bEnable);
826*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetVSizeAlign(MS_U32 u32Id, MS_BOOL bEnable);
827*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetAutoMute(MS_U32 u32Id, MS_BOOL bEnable);
828*53ee8cc1Swenshuai.xi 
829*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetSkipRepeatMode(MS_U32 u32Id, MS_U8 u8Mode);
830*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetSingleDecodeMode(MS_BOOL bEnable);
831*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_FlushPTSBuf(MS_U32 u32Id,MS_BOOL bEnable);
832*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ShowDecodeOrder(MS_U32 u32Id, MS_U8 u8Mode);
833*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_GetCrcValue(MS_U32 u32Id, MVD_CrcIn *pCrcIn, MVD_CrcOut *pCrcOut);
834*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDbgMode(MS_U32 u32Id, MVD_DbgMode enDbgMode, MS_BOOL bEn);
835*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SuspendDynamicScale(MS_U32 u32Id, MS_BOOL bEnable);
836*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetSuspendDynamicScale(MS_U32 u32Id);
837*53ee8cc1Swenshuai.xi void MDrv_MVD_DbgDump(MS_U32 u32Id);
838*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetDivxVer(MS_U32 u32Id);
839*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetIdctMode(MS_U32 u32Id, MS_U8 u8Mode);
840*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Init_Share_Mem(void);
841*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_PreSetCodecType(MS_U32 u32Id,MVD_CodecType eMvdCodecType ,MS_BOOL *bHDMode);
842*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetXCLowDelayPara(MS_U32 u32Id,MS_U32 u32Para);
843*53ee8cc1Swenshuai.xi void MDrv_MVD_Drop_One_PTS(MS_U32 u32Id);
844*53ee8cc1Swenshuai.xi 
845*53ee8cc1Swenshuai.xi #define MVD_ENABLE_ISR
846*53ee8cc1Swenshuai.xi 
847*53ee8cc1Swenshuai.xi #ifdef MVD_ENABLE_ISR
848*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetIsrEvent(MS_U32 u32Id, MS_U32 eEvent, MVD_InterruptCb fnHandler);
849*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetIsrEvent(MS_U32 u32Id);
850*53ee8cc1Swenshuai.xi #else
851*53ee8cc1Swenshuai.xi #define MDrv_MVD_SetIsrEvent(x, y, z) (E_MVD_RET_OK)
852*53ee8cc1Swenshuai.xi #define MDrv_MVD_GetIsrEvent(x)     (MS_U32)0
853*53ee8cc1Swenshuai.xi #endif
854*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetSLQNum(MS_U32 u32Id);
855*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetDispQNum(MS_U32 u32Id);
856*53ee8cc1Swenshuai.xi 
857*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_EX_SetMVDClockSpeed(MVD_EX_ClockSpeed eClockSpeed);
858*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_ShowFirstFrameDirect(MS_U32 u32Id,MS_BOOL bEnable);
859*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetSelfSeqChange(MS_U32 u32Id, MS_BOOL bEnable);
860*53ee8cc1Swenshuai.xi MS_U8 MDrv_MVD_GetESBufferStatus(MS_U32 u32Id);
861*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetExternalDSBuffer(MS_U32 u32Id, MVD_EX_ExternalDSBuf *pExternalBuf);
862*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_Field_Polarity_Display_One_field(MS_U32 u32Id, MS_BOOL bEnable,MS_U8 top_bottom);
863*53ee8cc1Swenshuai.xi 
864*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetShareMemoryBase(MS_U32 u32Id, MS_U32 u32base);
865*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetShareMemoryOffset(MS_U32 u32Id, MS_U32 *u32base);
866*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_EnableVPUSecurityMode(MS_BOOL enable);
867*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_GetSupport2ndMVOPInterface(void);
868*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_REE_RegisterMBX(void);
869*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_REE_SetSHMBaseAddr(void);
870*53ee8cc1Swenshuai.xi MS_U32 MDrv_MVD_GetVsyncBridgeAddr(MS_U32 u32Id);
871*53ee8cc1Swenshuai.xi 
872*53ee8cc1Swenshuai.xi 
873*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetExternal_CC608_Buffer(MS_U32 u32Id, MS_U32 u32base,MS_U8 u8size);
874*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetExternal_CC708_Buffer(MS_U32 u32Id, MS_U32 u32base,MS_U8 u8size);
875*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetPrebufferSize(MS_U32 u32Id, MS_U32 size);
876*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_HWBuffer_ReMappingMode(MS_U32 u32Id,MS_BOOL bEnable);
877*53ee8cc1Swenshuai.xi void MDrv_MVD_REE_GetSHMInformation(MS_VIRT* u32SHMAddr,MS_U32* u32VsyncSHMOffset);
878*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetTimeIncPredictParam(MS_U32 u32Id,MS_U32 u32Para);
879*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetDcodeTimeoutParam(MS_U32 u32Id,MS_BOOL enable,MS_U32 u32timeout);
880*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MVD_SetFramebufferAutoMode(MS_U32 u32Id,MS_BOOL bEnable);
881*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Set_Smooth_Rewind(MS_U32 u32Id, MS_U8 bEnable);
882*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_IsAlive(MS_U32 u32Id);
883*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_Set_Err_Tolerance(MS_U32 u32Id, MS_U16 u16Para);
884*53ee8cc1Swenshuai.xi void MDrv_MVD_EnableAutoInsertDummyPattern(MS_U32 u32Id, MS_BOOL bEnable);
885*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_PVR_Seamless_mode(MS_U32 u32Id, MS_U8 u8Arg);
886*53ee8cc1Swenshuai.xi E_MVD_Result MDrv_MVD_SetDispFinishMode(MS_U32 u32Id,MS_U8 u8Mode);
887*53ee8cc1Swenshuai.xi 
888*53ee8cc1Swenshuai.xi 
889*53ee8cc1Swenshuai.xi #endif
890*53ee8cc1Swenshuai.xi 
891*53ee8cc1Swenshuai.xi #ifdef __cplusplus
892*53ee8cc1Swenshuai.xi }
893*53ee8cc1Swenshuai.xi #endif
894*53ee8cc1Swenshuai.xi 
895*53ee8cc1Swenshuai.xi #endif
896