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