xref: /utopia/UTPA2-700.0.x/mxlib/include/drvRVD.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 /// @file   drvRVD.h
97*53ee8cc1Swenshuai.xi /// @brief  RVD Driver Interface
98*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
99*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
100*53ee8cc1Swenshuai.xi #ifndef _DRV_RVD_H_
101*53ee8cc1Swenshuai.xi #define _DRV_RVD_H_
102*53ee8cc1Swenshuai.xi #ifdef __cplusplus
103*53ee8cc1Swenshuai.xi extern "C"
104*53ee8cc1Swenshuai.xi {
105*53ee8cc1Swenshuai.xi #endif
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
108*53ee8cc1Swenshuai.xi //  Driver Capability
109*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
110*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
111*53ee8cc1Swenshuai.xi // Constant & Macro Definition
112*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
115*53ee8cc1Swenshuai.xi //  Macro and Define
116*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
117*53ee8cc1Swenshuai.xi #define MSIF_RVD_LIB_CODE    {'R','V','D','_'}    //Lib code
118*53ee8cc1Swenshuai.xi #define MSIF_RVD_LIBVER      {'0','1'}            //LIB version
119*53ee8cc1Swenshuai.xi #define MSIF_RVD_BUILDNUM    {'0','1'}            //Build Number
120*53ee8cc1Swenshuai.xi #define MSIF_RVD_CHANGELIST  {'0','0','1','3','2','9','3','7'} //P4 ChangeList Number
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
124*53ee8cc1Swenshuai.xi /// @brief \b RVD_DRV_VERSION : RVD Version
125*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
126*53ee8cc1Swenshuai.xi #define RVD_DRV_VERSION                 /* Character String for DRV/API version             */  \
127*53ee8cc1Swenshuai.xi     MSIF_TAG,                           /* 'MSIF'                                           */  \
128*53ee8cc1Swenshuai.xi     MSIF_CLASS,                         /* '00'                                             */  \
129*53ee8cc1Swenshuai.xi     MSIF_CUS,                           /* 0x0000                                           */  \
130*53ee8cc1Swenshuai.xi     MSIF_MOD,                           /* 0x0000                                           */  \
131*53ee8cc1Swenshuai.xi     MSIF_CHIP,                                                                                  \
132*53ee8cc1Swenshuai.xi     MSIF_CPU,                                                                                   \
133*53ee8cc1Swenshuai.xi     MSIF_RVD_LIB_CODE,                  /* IP__                                             */  \
134*53ee8cc1Swenshuai.xi     MSIF_RVD_LIBVER,                    /* 0.0 ~ Z.Z                                        */  \
135*53ee8cc1Swenshuai.xi     MSIF_RVD_BUILDNUM,                  /* 00 ~ 99                                          */  \
136*53ee8cc1Swenshuai.xi     MSIF_RVD_CHANGELIST,                /* CL#                                              */  \
137*53ee8cc1Swenshuai.xi     MSIF_OS
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
140*53ee8cc1Swenshuai.xi //  Type and Structure
141*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
144*53ee8cc1Swenshuai.xi /// @brief \b Name: RVD_InterruptCb
145*53ee8cc1Swenshuai.xi /// @brief \b Description:  RVD Interrupt callback pointer
146*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
147*53ee8cc1Swenshuai.xi typedef void (*RVD_InterruptCb)(void);
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
150*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: E_RVD_DEBUG_LEVEL
151*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  SHOW MGS DEBUG LEVEL of RVD
152*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
153*53ee8cc1Swenshuai.xi typedef enum
154*53ee8cc1Swenshuai.xi {
155*53ee8cc1Swenshuai.xi     E_RVD_DEBUG_NONE = 0x0,  ///< Disable all uart message
156*53ee8cc1Swenshuai.xi     E_RVD_DEBUG_INF  = 0x01, ///< output general message
157*53ee8cc1Swenshuai.xi     E_RVD_DEBUG_DRV  = 0x02, ///< output drv layer message
158*53ee8cc1Swenshuai.xi     E_RVD_DEBUG_HAL  = 0x04, ///< output hal layer message
159*53ee8cc1Swenshuai.xi     E_RVD_DEBUG_ERR  = 0x08  ///< Only output error message
160*53ee8cc1Swenshuai.xi } RVD_DebugLevel;
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
163*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_DisplayMode
164*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  RVD Trick(Play)Mode (F/W used)
165*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
166*53ee8cc1Swenshuai.xi typedef enum
167*53ee8cc1Swenshuai.xi {
168*53ee8cc1Swenshuai.xi     E_RVD_DISPLAYMODE_NULL = 0x7000, ///<Display null
169*53ee8cc1Swenshuai.xi     E_RVD_DISPLAYMODE_SHOW = 0x7001, ///<Show Display
170*53ee8cc1Swenshuai.xi     E_RVD_DISPLAYMODE_DONE = 0x7002  ///<Display completed(One frame showed)
171*53ee8cc1Swenshuai.xi }  RVD_DisplayMode;
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
174*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_Skip_Decode
175*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The RVD decoding frame types.
176*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
177*53ee8cc1Swenshuai.xi typedef enum
178*53ee8cc1Swenshuai.xi {
179*53ee8cc1Swenshuai.xi     E_RVD_TRICKMODE_DECODE_ALL = 0, ///<DECODE ALL
180*53ee8cc1Swenshuai.xi     E_RVD_TRICKMODE_DECODE_I   = 1, ///<DECODE I Frame only
181*53ee8cc1Swenshuai.xi     E_RVD_TRICKMODE_DECODE_IP  = 2  ///<DECODE I P Frame
182*53ee8cc1Swenshuai.xi }  RVD_TrickMode;//FOR PLAYER USED
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
185*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_FWSourceType
186*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The type of fw binary input source
187*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
188*53ee8cc1Swenshuai.xi typedef enum
189*53ee8cc1Swenshuai.xi {
190*53ee8cc1Swenshuai.xi     E_RVD_FW_SOURCE_NONE,  ///< No input fw.
191*53ee8cc1Swenshuai.xi     E_RVD_FW_SOURCE_DRAM,  ///< input source from DRAM.
192*53ee8cc1Swenshuai.xi     E_RVD_FW_SOURCE_FLASH, ///< input source from FLASH.
193*53ee8cc1Swenshuai.xi }RVD_FWSourceType;
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
196*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Name: RVD_DrvStatus
197*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Description:  Store the RVD driver status
198*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
199*53ee8cc1Swenshuai.xi typedef struct
200*53ee8cc1Swenshuai.xi {
201*53ee8cc1Swenshuai.xi     MS_BOOL bInit;   ///< - TRUE: Initialization success.  - FALSE: Initialization failed or not initialized yet.
202*53ee8cc1Swenshuai.xi     MS_BOOL bBusy;   ///< - TRUE: Driver is processing  - FALSE: Driver is Idle.
203*53ee8cc1Swenshuai.xi } RVD_DrvStatus;
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
206*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_RVType
207*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The RVD RV Version flag
208*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
209*53ee8cc1Swenshuai.xi typedef enum
210*53ee8cc1Swenshuai.xi {
211*53ee8cc1Swenshuai.xi     E_RVD_RVTYPE_FLAGRV8 = 0,///<Real Video version 8
212*53ee8cc1Swenshuai.xi     E_RVD_RVTYPE_FLAGRV9 = 1 ///<Real Video version 9
213*53ee8cc1Swenshuai.xi }  RVD_RVType;
214*53ee8cc1Swenshuai.xi 
215*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
216*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: E_RVD_Result
217*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  General result of RVD functions
218*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
219*53ee8cc1Swenshuai.xi typedef enum
220*53ee8cc1Swenshuai.xi {
221*53ee8cc1Swenshuai.xi     E_RVD_RET_FAIL           = 0, ///< General fail cases.
222*53ee8cc1Swenshuai.xi     E_RVD_RET_SUCCESS        = 1, ///< Action success.
223*53ee8cc1Swenshuai.xi     E_RVD_RET_UNSUPPORTED    = 2, ///< Function is not supported by RVD driver.
224*53ee8cc1Swenshuai.xi     E_RVD_RET_ILLEGAL_ACCESS = 3, ///< Illegal access. like driver not initialized.
225*53ee8cc1Swenshuai.xi     E_RVD_RET_TIMEOUT        = 4, ///< Action timeout.
226*53ee8cc1Swenshuai.xi     E_RVD_RET_NOTREADY       = 5, ///< Action not ready. User needs to call it again later.
227*53ee8cc1Swenshuai.xi     E_RVD_RET_INVALID_PARAM  = 6, ///< Function has invalid input.
228*53ee8cc1Swenshuai.xi     E_RVD_RET_RE_INIT             ///< RVD driver had initialized.Avoid create new task for RVD
229*53ee8cc1Swenshuai.xi }  RVD_Result;
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
232*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_User_Cmd
233*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  General command of RVD functions
234*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
235*53ee8cc1Swenshuai.xi typedef enum
236*53ee8cc1Swenshuai.xi {
237*53ee8cc1Swenshuai.xi     E_RVD_CMD_NULL = 0x0, // Null
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi     // Base
240*53ee8cc1Swenshuai.xi     E_RVD_CMD_NEW_BASE = 0x00010000,//Rvd cmd based
241*53ee8cc1Swenshuai.xi 
242*53ee8cc1Swenshuai.xi     //*********************************
243*53ee8cc1Swenshuai.xi     // Action
244*53ee8cc1Swenshuai.xi     //*********************************
245*53ee8cc1Swenshuai.xi     E_RVD_CMD_TYPE_ACTION_MASK = (0x0100|E_RVD_CMD_NEW_BASE),
246*53ee8cc1Swenshuai.xi     // state machine action
247*53ee8cc1Swenshuai.xi     E_RVD_CMD_PLAY,            // AVCH264_CMD_GO
248*53ee8cc1Swenshuai.xi     E_RVD_CMD_PAUSE,           // AVCH264_CMD_PAUSE
249*53ee8cc1Swenshuai.xi     E_RVD_CMD_STOP,            // AVCH264_CMD_STOP
250*53ee8cc1Swenshuai.xi     // run-time action
251*53ee8cc1Swenshuai.xi     E_RVD_CMD_STEP_DECODE,     // AVCH264_CMD_STEP
252*53ee8cc1Swenshuai.xi     E_RVD_CMD_FLUSH,           // BBU: AVCH264_CMD_DROP ,  DISP: AVCH264_CMD_FLUSH_DISPLAY , AVCH264_CMD_SKIPTOI
253*53ee8cc1Swenshuai.xi     // internal control action
254*53ee8cc1Swenshuai.xi     E_RVD_CMD_MIN_FRAME_GAP,   // For file mode only; AVCH264_CMD_MIN_FRAME_GAP
255*53ee8cc1Swenshuai.xi     E_RVD_CMD_DIS_VDEAD,       // 1: on :For PVR , file mode only ; 0 : off: AVCH264_CMD_DIS_VDEAD
256*53ee8cc1Swenshuai.xi     E_RVD_CMD_FLUSH_DEC_Q,     // DECODED: AVCH264_CMD_FLUSH_QUEUE
257*53ee8cc1Swenshuai.xi     E_RVD_CMD_BLUE_SCREEN,
258*53ee8cc1Swenshuai.xi     E_RVD_CMD_FREEZE_IMG,
259*53ee8cc1Swenshuai.xi     E_RVD_CMD_JUMP_TO_PTS,     // JUMP TO PTS POSITION
260*53ee8cc1Swenshuai.xi     E_RVD_CMD_SKIP_TO_PTS,
261*53ee8cc1Swenshuai.xi     E_RVD_CMD_SYNC_TOLERANCE,
262*53ee8cc1Swenshuai.xi     E_RVD_CMD_SYNC_VIDEO_DELAY,
263*53ee8cc1Swenshuai.xi     E_RVD_CMD_FREERUN_THRESHOLD,// 0x1010F
264*53ee8cc1Swenshuai.xi 
265*53ee8cc1Swenshuai.xi     //*********************************
266*53ee8cc1Swenshuai.xi     // FW settings ( only for driver init)
267*53ee8cc1Swenshuai.xi     //*********************************
268*53ee8cc1Swenshuai.xi     E_RVD_CMD_SETTINGS_MASK = (0x0200|E_RVD_CMD_NEW_BASE),
269*53ee8cc1Swenshuai.xi     E_RVD_CMD_DYNAMIC_SCALE,   // 0x10201
270*53ee8cc1Swenshuai.xi     E_RVD_CMD_SCALER_INFO,     // 0x10202
271*53ee8cc1Swenshuai.xi 
272*53ee8cc1Swenshuai.xi     //*********************************
273*53ee8cc1Swenshuai.xi     // Mode ( for AP run-time)
274*53ee8cc1Swenshuai.xi     //*********************************
275*53ee8cc1Swenshuai.xi     E_RVD_CMD_MODE_MASK = (0x0300|E_RVD_CMD_NEW_BASE),
276*53ee8cc1Swenshuai.xi     E_RVD_CMD_SKIP_DEC,        // E_HVD_DECODE_ALL ;E_HVD_DECODE_I;E_HVD_DECODE_IP; AVCH264_CMD_DEC_I , AVCH264_CMD_SKIP_NONREF
277*53ee8cc1Swenshuai.xi     E_RVD_CMD_SYNC_ACTIVE,     // 0: sync off; 1: sync on
278*53ee8cc1Swenshuai.xi     E_RVD_CMD_DISP_SPEED,      // AVCH264_CMD_TRICKY  0,1: normal speed N(>0): show N times, slow motion Nx(2,4...) ; N(<0): FF speed Nx(-2,-4,...) AVCH264_CMD_2X_SPEED
279*53ee8cc1Swenshuai.xi     E_RVD_CMD_DISP_ERR_FRM,    // True: display and error frame; FALSE: not show error frame ; AVCH264_CMD_ERR_TH
280*53ee8cc1Swenshuai.xi     E_RVD_CMD_ERR_CONCEAL,     // 1: on ; 0: off ; AVCH264_CMD_PASTE
281*53ee8cc1Swenshuai.xi     E_RVD_CMD_DROP_DISP_AUTO,  // ??? can we input no arg, 1:on AVCH264_CMD_DISP_DROP, 0:off AVCH264_CMD_DIS_DISP_DROP
282*53ee8cc1Swenshuai.xi     E_RVD_CMD_DROP_DISP_ONCE,  // AVCH264_CMD_DROP_CNT
283*53ee8cc1Swenshuai.xi     E_RVD_CMD_DISP_REPEAT_MAX, // Display repeat times
284*53ee8cc1Swenshuai.xi 
285*53ee8cc1Swenshuai.xi     //*********************************
286*53ee8cc1Swenshuai.xi     // test cmd
287*53ee8cc1Swenshuai.xi     //*********************************
288*53ee8cc1Swenshuai.xi     E_RVD_CMD_TEST_MASK = (0x0400|E_RVD_CMD_NEW_BASE),
289*53ee8cc1Swenshuai.xi     E_RVD_CMD_ENABLE_LAST_FRAME_SHOW,
290*53ee8cc1Swenshuai.xi     E_RVD_CMD_ISR_TYPE
291*53ee8cc1Swenshuai.xi } RVD_User_Cmd;
292*53ee8cc1Swenshuai.xi 
293*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
294*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Name: RVD_FileInfo
295*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Description:  RVD file information
296*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
297*53ee8cc1Swenshuai.xi typedef struct
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi     MS_U16 RV_Version;      ///< Real Video Bitstream version
300*53ee8cc1Swenshuai.xi     MS_U16 ulNumSizes;      ///< Real Video Number sizes
301*53ee8cc1Swenshuai.xi     MS_U16 ulPicSizes_w[8]; ///< Real Video file width
302*53ee8cc1Swenshuai.xi     MS_U16 ulPicSizes_h[8]; ///< Real Video file height
303*53ee8cc1Swenshuai.xi     MS_U16 ulBufMode;       ///< Info F/W support HD/SD
304*53ee8cc1Swenshuai.xi     MS_U32 ulFBAddr;        ///< Frame buffer start addr
305*53ee8cc1Swenshuai.xi     MS_U32 ulFBSize;        ///< Frame Buffer total size + IAP size (need to be protected)
306*53ee8cc1Swenshuai.xi     MS_U32 ulVLCAddr;       ///< VLC Table address size :0x20000
307*53ee8cc1Swenshuai.xi } RVD_FileInfo;
308*53ee8cc1Swenshuai.xi 
309*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
310*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Name: RVD_MiuInfo
311*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Description:  Store the RVD driver info
312*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
313*53ee8cc1Swenshuai.xi typedef struct
314*53ee8cc1Swenshuai.xi {
315*53ee8cc1Swenshuai.xi     MS_BOOL bRVD_MiuSel;       ///<Miu select
316*53ee8cc1Swenshuai.xi     MS_BOOL bRVD_FWBinInMIU1;  ///<FW Binary source on miu 1
317*53ee8cc1Swenshuai.xi     MS_BOOL bRVD_VLCBinInMIU1; ///<VLC Binary source on miu 1
318*53ee8cc1Swenshuai.xi     MS_BOOL bRVD_HWinMIU1;     ///<RVD H/W run on miu 1
319*53ee8cc1Swenshuai.xi     MS_BOOL bRVD_FWinMIU1;     ///<RVD F/W run on miu 1
320*53ee8cc1Swenshuai.xi     MS_U32 u32VLC_DstAddr;     ///<VLC Binary source addr
321*53ee8cc1Swenshuai.xi     MS_U32 u32VLC_DstSize;     ///<VLC Binary source size
322*53ee8cc1Swenshuai.xi     MS_U32 u32VLC_ScrAddr;     ///<VLC Binary source addr
323*53ee8cc1Swenshuai.xi     MS_U32 u32VLC_ScrSize;     ///<VLC Binary source size
324*53ee8cc1Swenshuai.xi     MS_U32 u32FW_ScrAddr;      ///<F/W source addr
325*53ee8cc1Swenshuai.xi     MS_U32 u32FW_ScrSize;      ///<F/W source size
326*53ee8cc1Swenshuai.xi     MS_U32 u32FW_DstAddr;      ///<F/W Dst addr
327*53ee8cc1Swenshuai.xi     MS_U32 u32FW_PhyAddr;      ///<F/W size <remove late>
328*53ee8cc1Swenshuai.xi     MS_U32 u32BDMAFlag;        ///<BDMA action flag
329*53ee8cc1Swenshuai.xi } RVD_MiuInfo;
330*53ee8cc1Swenshuai.xi extern RVD_MiuInfo gRVDInfo;
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
333*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Name: RVD_Packet_ID
334*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Description:  RVD Packet ID
335*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
336*53ee8cc1Swenshuai.xi typedef struct
337*53ee8cc1Swenshuai.xi {
338*53ee8cc1Swenshuai.xi     MS_U32 u32PacketID_HI; ///< RVD Packet ID High Addr
339*53ee8cc1Swenshuai.xi     MS_U32 u32PacketID_LO; ///< RVD Packet ID Low Addr
340*53ee8cc1Swenshuai.xi 
341*53ee8cc1Swenshuai.xi } RVD_Packet_ID;
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
344*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Name: RVD_MEMCfg
345*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Description:  RVD Memory Config
346*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
347*53ee8cc1Swenshuai.xi typedef struct
348*53ee8cc1Swenshuai.xi {
349*53ee8cc1Swenshuai.xi     RVD_FWSourceType eFWSourceType; ///< the input FW source type.
350*53ee8cc1Swenshuai.xi     MS_U32 u32FWAddr;               ///<RVD Open bin address
351*53ee8cc1Swenshuai.xi     MS_U32 u32FWSize;               ///<RVD Open bin size
352*53ee8cc1Swenshuai.xi     MS_U32 u32FBAddr;               ///<RVD Frame buffer start address
353*53ee8cc1Swenshuai.xi     MS_U32 u32FBSize;               ///<RVD Frame buffer size
354*53ee8cc1Swenshuai.xi     MS_U32 u32BSAddr;               ///<RVD Bitstream buffer start address
355*53ee8cc1Swenshuai.xi     MS_U32 u32BSSize;               ///<RVD Bitstream buffer size
356*53ee8cc1Swenshuai.xi     MS_U32 u32PBAddr;               ///<RVD Dummy data process buffer start address
357*53ee8cc1Swenshuai.xi     MS_U32 u32PBSize;               ///<RVD Dummy data process buffer size
358*53ee8cc1Swenshuai.xi     MS_U32 u32FWBinAddr;            ///<RVD open binary data process buffer start address
359*53ee8cc1Swenshuai.xi     MS_U32 u32FWBinSize;            ///<RVD open binary data process buffer size
360*53ee8cc1Swenshuai.xi     MS_U32 u32VLCBinAddr;           ///<RVD open binary data process buffer start address
361*53ee8cc1Swenshuai.xi     MS_U32 u32VLCBinSize;           ///<RVD open binary data process buffer size
362*53ee8cc1Swenshuai.xi } RVD_MEMCfg;
363*53ee8cc1Swenshuai.xi 
364*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
365*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Name: RVD_FrameInfo
366*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Description:  Used for RVD Video Crop
367*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
368*53ee8cc1Swenshuai.xi typedef struct
369*53ee8cc1Swenshuai.xi {
370*53ee8cc1Swenshuai.xi     MS_U16 u16HorSize;        ///<RVD Pic weight
371*53ee8cc1Swenshuai.xi     MS_U16 u16VerSize;        ///<RVD Pic height
372*53ee8cc1Swenshuai.xi     MS_U16 u16Sar_width;      ///<RVD Par width ratio
373*53ee8cc1Swenshuai.xi     MS_U16 u16Sar_height;     ///<RVD Par height ratio
374*53ee8cc1Swenshuai.xi     MS_U8 u8par_width;        ///<RVD Par width ratio
375*53ee8cc1Swenshuai.xi     MS_U8 u8par_height;       ///<RVD Par height ratio
376*53ee8cc1Swenshuai.xi     MS_U16 u16FrameRate;      ///<RVD Frame Rate;
377*53ee8cc1Swenshuai.xi     MS_U16 u16CropRight;      ///<RVD Crop Right
378*53ee8cc1Swenshuai.xi     MS_U16 u16CropLeft;       ///<RVD Crop Left
379*53ee8cc1Swenshuai.xi     MS_U16 u16CropBottom;     ///<RVD Crop Bottom
380*53ee8cc1Swenshuai.xi     MS_U16 u16CropTop;        ///<RVD Crop Top
381*53ee8cc1Swenshuai.xi     MS_U32 u32DynScalingAddr; ///<DS Addr
382*53ee8cc1Swenshuai.xi     MS_U8 u8DynScalingDepth;  ///<DS depth
383*53ee8cc1Swenshuai.xi     MS_BOOL bEnableMIUSel;    ///<enable  miu select (DS used)
384*53ee8cc1Swenshuai.xi     MS_U32 u32AspectWidth;    ///Display width
385*53ee8cc1Swenshuai.xi     MS_U32 u32AspectHeight;   ///Display height
386*53ee8cc1Swenshuai.xi } RVD_FrameInfo;
387*53ee8cc1Swenshuai.xi 
388*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
389*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Name: RVD_FrameBuff_Info
390*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Description:  Get current frame info
391*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
392*53ee8cc1Swenshuai.xi typedef struct
393*53ee8cc1Swenshuai.xi {
394*53ee8cc1Swenshuai.xi     MS_U32 u32LumaAddr;   ///< frame buffer base + the start offset of current displayed luma data. Unit: byte.
395*53ee8cc1Swenshuai.xi     MS_U32 u32ChromaAddr; ///< frame buffer base + the start offset of current displayed chroma data. Unit: byte.
396*53ee8cc1Swenshuai.xi     MS_U32 u32TimeStamp;  ///< Time stamp(DTS, PTS) of current displayed frame. Unit: ms (todo: 90khz)
397*53ee8cc1Swenshuai.xi     MS_U32 u32ID_L;       ///< low part of ID number decided by MDrv_RVD_PushQueue(). (todo)
398*53ee8cc1Swenshuai.xi     MS_U32 u32ID_H;       ///< high part of ID number decided by MDrv_RVD_PushQueue(). (todo)
399*53ee8cc1Swenshuai.xi     MS_U16 u16FrmType;    ///< RVD_Picture_Type, picture type: I, P, B frame ---> T_RVPicCodType (temp)
400*53ee8cc1Swenshuai.xi     MS_U16 u16Pitch;      ///<RVD frame pitch
401*53ee8cc1Swenshuai.xi     MS_U16 u16Width;      ///<RVD frame width
402*53ee8cc1Swenshuai.xi     MS_U16 u16Height;     ///<RVD frame hight
403*53ee8cc1Swenshuai.xi } RVD_FrameBuff_Info;
404*53ee8cc1Swenshuai.xi 
405*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
406*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: E_RVD_CMD_SKIP_DEC_ARG
407*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The argument of Skip Decode Mode
408*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
409*53ee8cc1Swenshuai.xi typedef enum
410*53ee8cc1Swenshuai.xi {
411*53ee8cc1Swenshuai.xi     E_RVD_SKIP_DECB_NONE = 0,
412*53ee8cc1Swenshuai.xi     E_RVD_SKIP_DECB_ONCE,
413*53ee8cc1Swenshuai.xi     E_RVD_SKIP_DECB_ALL
414*53ee8cc1Swenshuai.xi } RVD_CmdSkipDecArg;
415*53ee8cc1Swenshuai.xi 
416*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
417*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: E_RVD_CMD_AV_SYNC_ARG
418*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The argument of AV Sync Mode
419*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
420*53ee8cc1Swenshuai.xi typedef enum
421*53ee8cc1Swenshuai.xi {
422*53ee8cc1Swenshuai.xi     E_RVD_FREERUN = -1,
423*53ee8cc1Swenshuai.xi     E_RVD_DISABLE = 0,
424*53ee8cc1Swenshuai.xi     E_RVD_VIDEO_DELAY
425*53ee8cc1Swenshuai.xi } RVD_CmdAVSyncArg;
426*53ee8cc1Swenshuai.xi 
427*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
428*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: E_RVD_CMD_DISP_SPEED_ARG
429*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The argument of Display Speed
430*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
431*53ee8cc1Swenshuai.xi typedef enum
432*53ee8cc1Swenshuai.xi {
433*53ee8cc1Swenshuai.xi     E_RVD_SPEED_SLOW,
434*53ee8cc1Swenshuai.xi     E_RVD_SPEED_NORMAL,
435*53ee8cc1Swenshuai.xi     E_RVD_SPEED_FF
436*53ee8cc1Swenshuai.xi } RVD_CmdDispSpeedArg;
437*53ee8cc1Swenshuai.xi 
438*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
439*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: E_RVD_CMD_DROP_DISP_AUTO_ARG
440*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The argument of DROP DISPLAY
441*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
442*53ee8cc1Swenshuai.xi typedef enum
443*53ee8cc1Swenshuai.xi {
444*53ee8cc1Swenshuai.xi     E_RVD_DROPDISPAUTO_DISABLE = 0, ///< drop once, drop the number of non-ref frames
445*53ee8cc1Swenshuai.xi     E_RVD_DROPDISPAUTO_ENABLE       ///< automatic drop mode, drop frame if display queue is more than threshold
446*53ee8cc1Swenshuai.xi } RVD_CmdDropDispAutoArg;
447*53ee8cc1Swenshuai.xi 
448*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
449*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_Disp_Speed
450*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The current mode type of RVD display speed
451*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
452*53ee8cc1Swenshuai.xi typedef enum
453*53ee8cc1Swenshuai.xi {
454*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_FF_32X    = -32, ///< Speed fast forward 32x.
455*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_FF_16X    = -16, ///< Speed fast forward 16x.
456*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_FF_8X     = -8,  ///< Speed fast forward 8x.
457*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_FF_4X     = -4,  ///< Speed fast forward 4x.
458*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_FF_2X     = -2,  ///< Speed fast forward 2x.
459*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_NORMAL_1X = 1,   ///< Normal display speed.
460*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_SF_2X     = 2,   ///< Slow forward 2X.
461*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_SF_4X     = 4,   ///< Slow forward 4X.
462*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_SF_8X     = 8,   ///< Slow forward 8X.
463*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_SF_16X    = 16,  ///< Slow forward 16X.
464*53ee8cc1Swenshuai.xi     E_RVD_DISP_SPEED_SF_32X    = 32,  ///< Slow forward 32X.
465*53ee8cc1Swenshuai.xi }RVD_Disp_Speed;
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
468*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_Drop_Disp
469*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The current mode type of RVD dropping decoded frames.
470*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
471*53ee8cc1Swenshuai.xi typedef enum
472*53ee8cc1Swenshuai.xi {
473*53ee8cc1Swenshuai.xi     E_RVD_DROP_DISPLAY_AUTO = (1<<0),
474*53ee8cc1Swenshuai.xi     E_RVD_DROP_DISPLAY_ONCE = (1<<1),
475*53ee8cc1Swenshuai.xi }RVD_Drop_Disp;
476*53ee8cc1Swenshuai.xi 
477*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
478*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_MMAP_Type
479*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:Memory Config
480*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
481*53ee8cc1Swenshuai.xi typedef enum
482*53ee8cc1Swenshuai.xi {
483*53ee8cc1Swenshuai.xi     E_RVD_MMAP_FW      = 0, //firmware
484*53ee8cc1Swenshuai.xi     E_RVD_MMAP_BS      = 1, //bitstream buffer
485*53ee8cc1Swenshuai.xi     E_RVD_MMAP_FB      = 2, //frame buffer
486*53ee8cc1Swenshuai.xi     E_RVD_MMAP_PB      = 3, //process buffer
487*53ee8cc1Swenshuai.xi     E_RVD_MMAP_FW_BIN  = 4, //firmware binary format
488*53ee8cc1Swenshuai.xi     E_RVD_MMAP_VLC_BIN = 5, //VLC table binary format
489*53ee8cc1Swenshuai.xi     E_RVD_MMAP_ALL     = 6  //get all memory map
490*53ee8cc1Swenshuai.xi } RVD_MMAP_Type;
491*53ee8cc1Swenshuai.xi 
492*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
493*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_ActionMode
494*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:Action Mode
495*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
496*53ee8cc1Swenshuai.xi typedef enum
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi     E_RVD_ACTIONMODE_IDEL       = 0, //action mode in idel
499*53ee8cc1Swenshuai.xi     E_RVD_ACTIONMODE_PLAY       = 1, //play mode
500*53ee8cc1Swenshuai.xi     E_RVD_ACTIONMODE_PAUSE      = 2, //pause mode
501*53ee8cc1Swenshuai.xi     E_RVD_ACTIONMODE_STOP       = 3, //stop mode
502*53ee8cc1Swenshuai.xi     E_RVD_ACTIONMODE_STEPDECODE = 4  //step play mode
503*53ee8cc1Swenshuai.xi } RVD_ActionMode;
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
506*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_ActionMode
507*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:Action Mode
508*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
509*53ee8cc1Swenshuai.xi typedef enum
510*53ee8cc1Swenshuai.xi {
511*53ee8cc1Swenshuai.xi     E_RVD_PICCODTYPE_INTRAPIC,        /* 0 (00) */
512*53ee8cc1Swenshuai.xi     E_RVD_PICCODTYPE_FORCED_INTRAPIC, /* 1 (01) */
513*53ee8cc1Swenshuai.xi     E_RVD_PICCODTYPE_INTERPIC,        /* 2 (10) */
514*53ee8cc1Swenshuai.xi     E_RVD_PICCODTYPE_TRUEBPIC         /* 3 (11) */
515*53ee8cc1Swenshuai.xi } RVD_PicCodType;
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
518*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_StatusType
519*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:Status Type
520*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
521*53ee8cc1Swenshuai.xi typedef enum
522*53ee8cc1Swenshuai.xi {
523*53ee8cc1Swenshuai.xi     E_RVD_STATUSTYPE_AVSYNCON               = BIT(0), ///AV Sync mode on
524*53ee8cc1Swenshuai.xi     E_RVD_STATUSTYPE_IFRAMEFOUND            = BIT(1), ///The I frame found
525*53ee8cc1Swenshuai.xi     E_RVD_STATUSTYPE_PLAYBACK_FINISH        = BIT(2), ///the display finish
526*53ee8cc1Swenshuai.xi     E_RVD_STATUSTYPE_ENABLE_LAST_FRAME_SHOW = BIT(3), ///the last frame show be enabled
527*53ee8cc1Swenshuai.xi     E_RVD_STATUSTYPE_BLUE_SCREEN            = BIT(4), ///the blue screen had be enabled
528*53ee8cc1Swenshuai.xi     E_RVD_STATUSTYPE_FREEZE_IMG             = BIT(5), ///the freeze img had be enabled
529*53ee8cc1Swenshuai.xi     E_RVD_STATUSTYPE_SKIP_DECODE            = BIT(6),
530*53ee8cc1Swenshuai.xi     E_RVD_STATUSTYPE_1ST_FRAMERDY           = BIT(7)
531*53ee8cc1Swenshuai.xi } RVD_StatusType;
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
534*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: RVD_ErrorCode
535*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:Error code reported by F/W
536*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
537*53ee8cc1Swenshuai.xi typedef enum
538*53ee8cc1Swenshuai.xi {
539*53ee8cc1Swenshuai.xi     E_ERROR_NONE = 0,       ///no error
540*53ee8cc1Swenshuai.xi     E_ERROR_PACKET_HEADER,  ///< packet header version error
541*53ee8cc1Swenshuai.xi     E_ERROR_FRAME_HEADER,   ///< frame type error
542*53ee8cc1Swenshuai.xi     E_ERROR_SLICE_HEADER,   ///<slice header error
543*53ee8cc1Swenshuai.xi     E_ERROR_DECODE_TIMEOUT, ///< decode MB timeout
544*53ee8cc1Swenshuai.xi     E_ERROR_OUT_OF_MEMORY,  ///< frame buffer is out of memory
545*53ee8cc1Swenshuai.xi     E_ERROR_BYTE_POS,       ///< can not find in ID table
546*53ee8cc1Swenshuai.xi     E_ERROR_DISPLAY_TIMEOUT
547*53ee8cc1Swenshuai.xi } RVD_ErrorCode;
548*53ee8cc1Swenshuai.xi 
549*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
550*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Name: RVD_DrvInfo
551*53ee8cc1Swenshuai.xi /// @brief \b Struct \b Description:  Store the RVD driver information
552*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
553*53ee8cc1Swenshuai.xi typedef struct
554*53ee8cc1Swenshuai.xi {
555*53ee8cc1Swenshuai.xi     MS_BOOL bRVD;     ///< - TRUE: HW does support RM.  - FALSE: HW does not support RM.
556*53ee8cc1Swenshuai.xi     MS_U32 HWversion; ///<- HW version number.
557*53ee8cc1Swenshuai.xi     MS_U32 FWversion; ///<  FW version number.
558*53ee8cc1Swenshuai.xi }RVD_DrvInfo;
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
561*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Name: HVD_ISR_Event
562*53ee8cc1Swenshuai.xi /// @brief \b Enum \b Description:  The information type of ISR event.
563*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------------
564*53ee8cc1Swenshuai.xi typedef enum
565*53ee8cc1Swenshuai.xi {
566*53ee8cc1Swenshuai.xi     E_RVD_ISR_NONE                 = 0,       ///< disable ISR
567*53ee8cc1Swenshuai.xi     // DISP
568*53ee8cc1Swenshuai.xi     E_RVD_ISR_DISP_ONE             = BIT(0),  ///< RVD display one frame on screen.
569*53ee8cc1Swenshuai.xi     E_RVD_ISR_DISP_REPEAT          = BIT(1),  ///< The current displayed frame is repeated frame.
570*53ee8cc1Swenshuai.xi     E_RVD_ISR_DISP_WITH_CC         = BIT(2),  ///< Current displayed frame should be displayed with user data.
571*53ee8cc1Swenshuai.xi     // DEC
572*53ee8cc1Swenshuai.xi     E_RVD_ISR_DEC_ONE              = BIT(8),  ///< RVD decoded one frame done.
573*53ee8cc1Swenshuai.xi     E_RVD_ISR_DEC_I                = BIT(9),  ///< RVD decoded one I frame done.
574*53ee8cc1Swenshuai.xi     E_RVD_ISR_DEC_HW_ERR           = BIT(10), ///< RVD HW found decode error.
575*53ee8cc1Swenshuai.xi     E_RVD_ISR_DEC_CC_FOUND         = BIT(11), ///< RVD found one user data with decoded frame.
576*53ee8cc1Swenshuai.xi     E_RVD_ISR_DEC_DISP_INFO_CHANGE = BIT(12), ///< RVD found display information change.
577*53ee8cc1Swenshuai.xi     E_RVD_ISR_DEC_DATA_ERR         = BIT(13), ///< RVD HW found decode error.
578*53ee8cc1Swenshuai.xi } RVD_ISR_Event;
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi /************* RVD debug define *************/
581*53ee8cc1Swenshuai.xi #define RVD_MSG_INF(format, args...)  do{if(MDrv_RVD_IsDbgEnable(E_RVD_DEBUG_INF)) printf(format, ##args);}while(0) ///< output general message
582*53ee8cc1Swenshuai.xi #define RVD_MSG_DRV(format, args...)  do{if(MDrv_RVD_IsDbgEnable(E_RVD_DEBUG_DRV)) printf(format, ##args);}while(0)///< output drv layer message
583*53ee8cc1Swenshuai.xi #define RVD_MSG_HAL(format, args...)  do{if(MDrv_RVD_IsDbgEnable(E_RVD_DEBUG_HAL)) printf(format, ##args);}while(0)///< output hal layer message
584*53ee8cc1Swenshuai.xi #define RVD_MSG_ERR(format, args...)  do{if(MDrv_RVD_IsDbgEnable(E_RVD_DEBUG_ERR)) printf(format, ##args);}while(0)///< Only output error message
585*53ee8cc1Swenshuai.xi 
586*53ee8cc1Swenshuai.xi 
587*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
588*53ee8cc1Swenshuai.xi //  Function and Variable
589*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
590*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetBBU_OffsetLength(MS_U32 u32Address,MS_U32 u32offset, MS_U32 u32length);
591*53ee8cc1Swenshuai.xi extern MS_S16 MDrv_RVD_GetQmemSwBbuVacancy(void);
592*53ee8cc1Swenshuai.xi extern void MDrv_RVD_GetFrameSize(MS_U16*  u16Width,MS_U16*  u16Height);
593*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetBBUStartAddr(void);
594*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetTimeStamp(void);
595*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetDecodeCnt(void);
596*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetBBUDepth(MS_U32 u32Rptr);
597*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetBBUReadPtr(MS_U32 u32Rptr);
598*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetBBUWritePtr(MS_U32 u32Wptr);
599*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetBBUReadPtr(void);
600*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetBBUWritePtr(void);
601*53ee8cc1Swenshuai.xi extern MS_U16 MDrv_RVD_GetBBUDepth(void);
602*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetPictureSize(MS_U16 u16Width, MS_U16 u16Height);
603*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetDisplay(RVD_DisplayMode u32PlayMode);
604*53ee8cc1Swenshuai.xi extern void MDrv_RVD_PushBBU (MS_U32 u32offset, MS_U32 u32length ,RVD_Packet_ID *rvdPackerInfo);
605*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetFileInfo(RVD_FileInfo *pFileInfo);
606*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_Init(RVD_FileInfo *pFileInfo,RVD_MEMCfg* memCfg);
607*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_EnableDynamicScaling(MS_BOOL bEnable);
608*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetVirtualBox(MS_U16 u16Width, MS_U16 u16Height);
609*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetDynScalingParam(MS_U32 u32StAddr, MS_U32 u32Size);
610*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_FlushQueue(void);
611*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetESReadPtr(void);
612*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_ReadSVDProgramCounter(void);
613*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_ChkCmdRdy(void);
614*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetCmd(RVD_User_Cmd u32Command,MS_U32 u32Argument);
615*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetSpeed(RVD_Disp_Speed u32DispSpeed);
616*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_IsDbgEnable(MS_U8 u8DbgLevel);
617*53ee8cc1Swenshuai.xi extern MS_U8 MDrv_RVD_GetDbgLevel(void);
618*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetDbgLevel(MS_U8 u8DbgLevel);
619*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetCfg( RVD_MEMCfg* memCfg);
620*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetOSRegBase(MS_U32 u32RegBaseAddr );
621*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetFrameCnt(void);
622*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetESWritePtr(void);
623*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_CheckDispInfoRdy(void);
624*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_CheckCaps(void);
625*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_IsTSPlaying(void);
626*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetTrickMode(RVD_TrickMode u32TrickMode);
627*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_Play(void);
628*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_AVSyncOn(MS_BOOL  bEnable,MS_U16 u16SyncDelay, MS_U16 u16SyncTolerance);
629*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_IsAVSyncOn(void);
630*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_Pause(void);
631*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_Exit(void);
632*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_Resume(void);
633*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_EnableLastFrameShowed(MS_BOOL bEnabled);
634*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_StepPlay(void);
635*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_IsStepPlayDone(void);
636*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_IsIdle(void);
637*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_IsDispFinish(void);
638*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_IsIFrameFound(void);
639*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetErrCode(void);
640*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_DbgGetData(MS_U32 u32Addr , MS_U32 *u32Data);
641*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_GetLibVer(const MSIF_Version **ppVersion);
642*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_DispSetupDone(void);
643*53ee8cc1Swenshuai.xi extern RVD_Result  MDrv_RVD_GetDispInfo(RVD_FrameInfo *pinfo);
644*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_GetStatus( RVD_DrvStatus *pstatus);
645*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetBBU_ID(MS_U32 u32Address,MS_U32 u32Byte_Pos,MS_U32 u32ID_High, MS_U32 u32ID_Low);
646*53ee8cc1Swenshuai.xi const RVD_DrvInfo* MDrv_RVD_GetInfo( void );
647*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetIDReadPtr(void);
648*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetIDWritePtr(void);
649*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetIDWritePtr(MS_U32 u32Wptr);
650*53ee8cc1Swenshuai.xi extern void MDrv_RVD_SetIDReadPtr(MS_U32 u32Wptr);
651*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_GetFrameInfo(RVD_FrameBuff_Info *framebuffinfo ,MS_BOOL bGETDISP);
652*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_SetForceISR(MS_BOOL bEnable);
653*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_GetISRInfo( RVD_ISR_Event* eType );
654*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_SetEnableISR(MS_BOOL bEnable);
655*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetISREvent(RVD_ISR_Event eEvent ,RVD_InterruptCb fnISRHandler );
656*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetDispRepeatCnt(MS_U32 u32Num);
657*53ee8cc1Swenshuai.xi //extern void MDrv_RVD_ResetSTCBase(MS_U32 u32time_ms);
658*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_JumpToPTS(MS_U32 u32time_ms);
659*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SkipToPTS(MS_U32 u32time_ms);
660*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetTrickMode(void);
661*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_IsStepDecodeDone(void);
662*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_StepDecode(void);
663*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_Rst(void );
664*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetFreezeImg(MS_BOOL bEnabled);
665*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetBlueScreen(MS_BOOL bEnabled);
666*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_FireDecCmd(void);
667*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_RVD_Is1stFrameRdy(void);
668*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetDecErrCnt(void);
669*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetDataErrCnt(void);
670*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetSkipCnt(void);
671*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetDropCnt(void);
672*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_RVD_GetDispQueNum(void);
673*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_DbgSetCmd(RVD_User_Cmd u32Command,MS_U32 u32Argument);
674*53ee8cc1Swenshuai.xi extern void MDrv_RVD_DbgSetData(MS_U32 u32Addr,MS_U32 data);
675*53ee8cc1Swenshuai.xi extern void MDrv_RVD_Dump_Status(void);
676*53ee8cc1Swenshuai.xi #if 0
677*53ee8cc1Swenshuai.xi #if defined(REDLION_LINUX_KERNEL_ENVI)
678*53ee8cc1Swenshuai.xi extern MS_S32 _DRV_RVD_ISRHandler(void);
679*53ee8cc1Swenshuai.xi #else
680*53ee8cc1Swenshuai.xi extern void _DRV_RVD_ISRHandler(void);
681*53ee8cc1Swenshuai.xi #endif
682*53ee8cc1Swenshuai.xi #endif
683*53ee8cc1Swenshuai.xi 
684*53ee8cc1Swenshuai.xi extern void MDrv_RVD_EnableTurboFWMode(MS_BOOL bEnable);
685*53ee8cc1Swenshuai.xi 
686*53ee8cc1Swenshuai.xi extern RVD_Result MDrv_RVD_SetAVSyncFreerunThreshold(MS_U32 u32Th);
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi #ifdef __cplusplus
689*53ee8cc1Swenshuai.xi }
690*53ee8cc1Swenshuai.xi #endif
691*53ee8cc1Swenshuai.xi 
692*53ee8cc1Swenshuai.xi #endif // _DRV_RVD_H_
693*53ee8cc1Swenshuai.xi 
694*53ee8cc1Swenshuai.xi 
695