1*53ee8cc1Swenshuai.xi //<MStar Software> 2*53ee8cc1Swenshuai.xi //****************************************************************************** 3*53ee8cc1Swenshuai.xi // MStar Software 4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved. 5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are 6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by 7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties. 8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all 9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written 10*53ee8cc1Swenshuai.xi // permission has been granted by MStar. 11*53ee8cc1Swenshuai.xi // 12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you 13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to 14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations: 15*53ee8cc1Swenshuai.xi // 16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar 17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof. 18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any 19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms. 20*53ee8cc1Swenshuai.xi // 21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be 22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar 23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties. 24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately 25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of 26*53ee8cc1Swenshuai.xi // such third party`s software. 27*53ee8cc1Swenshuai.xi // 28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as 29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s 30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any 31*53ee8cc1Swenshuai.xi // third party. 32*53ee8cc1Swenshuai.xi // 33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any 34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including 35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of 36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free 37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any 38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may 39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software. 40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or 41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or 42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use. 43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected 44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your 45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both 46*53ee8cc1Swenshuai.xi // parties in writing. 47*53ee8cc1Swenshuai.xi // 48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or 49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of 50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product 51*53ee8cc1Swenshuai.xi // ("Services"). 52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in 53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty 54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply. 55*53ee8cc1Swenshuai.xi // 56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels 57*53ee8cc1Swenshuai.xi // or otherwise: 58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service 59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification; 60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person, 61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance 62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or 63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right. 64*53ee8cc1Swenshuai.xi // 65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws 66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules. 67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally 68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association, 69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration 70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance 71*53ee8cc1Swenshuai.xi // with the said Rules. 72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall 73*53ee8cc1Swenshuai.xi // be English. 74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties. 75*53ee8cc1Swenshuai.xi // 76*53ee8cc1Swenshuai.xi //****************************************************************************** 77*53ee8cc1Swenshuai.xi //<MStar Software> 78*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////////////////////// 79*53ee8cc1Swenshuai.xi // 80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc. 81*53ee8cc1Swenshuai.xi // All rights reserved. 82*53ee8cc1Swenshuai.xi // 83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained 84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of 85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence 86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient. 87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure, 88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling, 89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential 90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the 91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom. 92*53ee8cc1Swenshuai.xi // 93*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////////////////////// 94*53ee8cc1Swenshuai.xi 95*53ee8cc1Swenshuai.xi /////////////////////////////////////////////////////////////////////////////////////////////////// 96*53ee8cc1Swenshuai.xi /// 97*53ee8cc1Swenshuai.xi /// @file apiVDEC.h 98*53ee8cc1Swenshuai.xi /// @brief VDEC API 99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc. 100*53ee8cc1Swenshuai.xi /////////////////////////////////////////////////////////////////////////////////////////////////// 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi #ifndef _API_VDEC_H_ 103*53ee8cc1Swenshuai.xi #define _API_VDEC_H_ 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xi #include "MsDevice.h" 106*53ee8cc1Swenshuai.xi #include "MsTypes.h" 107*53ee8cc1Swenshuai.xi #ifdef __cplusplus 108*53ee8cc1Swenshuai.xi extern "C" 109*53ee8cc1Swenshuai.xi { 110*53ee8cc1Swenshuai.xi #endif 111*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 112*53ee8cc1Swenshuai.xi // Macro and Define 113*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 114*53ee8cc1Swenshuai.xi #define MSIF_VDEC_LIB_CODE {'V','D','E','C'} 115*53ee8cc1Swenshuai.xi #define MSIF_VDEC_LIBVER {'0','E'} 116*53ee8cc1Swenshuai.xi #define MSIF_VDEC_BUILDNUM {'0','2'} 117*53ee8cc1Swenshuai.xi #define MSIF_VDEC_CHANGELIST {'0','0','6','8','9','1','8','8'} 118*53ee8cc1Swenshuai.xi 119*53ee8cc1Swenshuai.xi /// Version string. 120*53ee8cc1Swenshuai.xi #define VDEC_API_VERSION /* Character String for DRV/API version */ \ 121*53ee8cc1Swenshuai.xi MSIF_TAG, /* 'MSIF' */ \ 122*53ee8cc1Swenshuai.xi MSIF_CLASS, /* '00' */ \ 123*53ee8cc1Swenshuai.xi MSIF_CUS, /* 0x0000 */ \ 124*53ee8cc1Swenshuai.xi MSIF_MOD, /* 0x0000 */ \ 125*53ee8cc1Swenshuai.xi MSIF_CHIP, \ 126*53ee8cc1Swenshuai.xi MSIF_CPU, \ 127*53ee8cc1Swenshuai.xi MSIF_VDEC_LIB_CODE, /* IP__ */ \ 128*53ee8cc1Swenshuai.xi MSIF_VDEC_LIBVER, /* 0.0 ~ Z.Z */ \ 129*53ee8cc1Swenshuai.xi MSIF_VDEC_BUILDNUM, /* 00 ~ 99 */ \ 130*53ee8cc1Swenshuai.xi MSIF_VDEC_CHANGELIST, /* CL# */ \ 131*53ee8cc1Swenshuai.xi MSIF_OS 132*53ee8cc1Swenshuai.xi 133*53ee8cc1Swenshuai.xi #define VDEC_DEFAULT_DBG_MSG_LEVEL E_VDEC_DBG_LEVEL_DBG 134*53ee8cc1Swenshuai.xi #define VDEC_RVD_BROKEN_BY_US 0x80000000 135*53ee8cc1Swenshuai.xi #define VDEC_MVD_PIC_START_FLAG 0x40000000 136*53ee8cc1Swenshuai.xi #define VDEC_BIT(_bit_) (1 << (_bit_)) 137*53ee8cc1Swenshuai.xi #ifndef VDEC_CAP_SYSTEM_PREGET_FB_MEM_USAGE_SIZE 138*53ee8cc1Swenshuai.xi #define VDEC_CAP_SYSTEM_PREGET_FB_MEM_USAGE_SIZE 139*53ee8cc1Swenshuai.xi #endif 140*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 141*53ee8cc1Swenshuai.xi // Type and Structure 142*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 143*53ee8cc1Swenshuai.xi 144*53ee8cc1Swenshuai.xi #define VDEC_FPA_TYPE_CHECKERBOARD_INTERLEAVING 0 145*53ee8cc1Swenshuai.xi #define VDEC_FPA_TYPE_COLUMN_INTERLEAVEING 1 146*53ee8cc1Swenshuai.xi #define VDEC_FPA_TYPE_ROW_INTERLEAVEING 2 147*53ee8cc1Swenshuai.xi #define VDEC_FPA_TYPE_SIDE_BY_SIDE_PACKING 3 148*53ee8cc1Swenshuai.xi #define VDEC_FPA_TYPE_TOP_BOTTOM_PACKING 4 149*53ee8cc1Swenshuai.xi #define VDEC_FPA_TYPE_TEMPORAL_INTERLEAVING_FRM 5 150*53ee8cc1Swenshuai.xi 151*53ee8cc1Swenshuai.xi /// Decoder event enumerator. 152*53ee8cc1Swenshuai.xi typedef enum 153*53ee8cc1Swenshuai.xi { 154*53ee8cc1Swenshuai.xi /// turn off all event 155*53ee8cc1Swenshuai.xi E_VDEC_EVENT_OFF = 0x00, 156*53ee8cc1Swenshuai.xi /// display one frame/field 157*53ee8cc1Swenshuai.xi E_VDEC_EVENT_DISP_ONE = VDEC_BIT(0), 158*53ee8cc1Swenshuai.xi /// repeat one frame/field 159*53ee8cc1Swenshuai.xi E_VDEC_EVENT_DISP_REPEAT = VDEC_BIT(1), 160*53ee8cc1Swenshuai.xi /// one CC data should be displayed 161*53ee8cc1Swenshuai.xi E_VDEC_EVENT_DISP_WITH_CC = VDEC_BIT(2), 162*53ee8cc1Swenshuai.xi /// decode one frame 163*53ee8cc1Swenshuai.xi E_VDEC_EVENT_DEC_ONE = VDEC_BIT(3), 164*53ee8cc1Swenshuai.xi /// decode one I frame 165*53ee8cc1Swenshuai.xi E_VDEC_EVENT_DEC_I = VDEC_BIT(4), 166*53ee8cc1Swenshuai.xi /// decode error 167*53ee8cc1Swenshuai.xi E_VDEC_EVENT_DEC_ERR = VDEC_BIT(5), 168*53ee8cc1Swenshuai.xi /// display information is changed 169*53ee8cc1Swenshuai.xi E_VDEC_EVENT_DISP_INFO_CHG = VDEC_BIT(6), 170*53ee8cc1Swenshuai.xi /// find user data 171*53ee8cc1Swenshuai.xi E_VDEC_EVENT_USER_DATA_FOUND = VDEC_BIT(7), 172*53ee8cc1Swenshuai.xi /// display information ready after be changed 173*53ee8cc1Swenshuai.xi E_VDEC_EVENT_DISP_INFO_RDY = VDEC_BIT(8), 174*53ee8cc1Swenshuai.xi /// first frame decoded 175*53ee8cc1Swenshuai.xi E_VDEC_EVENT_FIRST_FRAME = VDEC_BIT(9), 176*53ee8cc1Swenshuai.xi /// first picture found 177*53ee8cc1Swenshuai.xi E_VDEC_EVENT_PIC_FOUND = VDEC_BIT(10), 178*53ee8cc1Swenshuai.xi /// video is ready to display (no garbage and avsync done) 179*53ee8cc1Swenshuai.xi E_VDEC_EVENT_VIDEO_UNMUTE = VDEC_BIT(11), 180*53ee8cc1Swenshuai.xi /// new sequence header found 181*53ee8cc1Swenshuai.xi E_VDEC_EVENT_SEQ_HDR_FOUND = VDEC_BIT(12), 182*53ee8cc1Swenshuai.xi /// active format description found 183*53ee8cc1Swenshuai.xi E_VDEC_EVENT_AFD_FOUND = VDEC_BIT(13), 184*53ee8cc1Swenshuai.xi // ES data invalid 185*53ee8cc1Swenshuai.xi E_VDEC_EVENT_ES_DATA_ERR = VDEC_BIT(14), 186*53ee8cc1Swenshuai.xi /// speed up the un-mute screen on XC. 187*53ee8cc1Swenshuai.xi E_VDEC_EVENT_XC_LOW_DEALY = VDEC_BIT(16) 188*53ee8cc1Swenshuai.xi } VDEC_EventFlag; 189*53ee8cc1Swenshuai.xi 190*53ee8cc1Swenshuai.xi //define VDEC CB type 191*53ee8cc1Swenshuai.xi typedef enum 192*53ee8cc1Swenshuai.xi { 193*53ee8cc1Swenshuai.xi E_VDEC_CB_MAIN = 0, 194*53ee8cc1Swenshuai.xi E_VDEC_CB_SUB, 195*53ee8cc1Swenshuai.xi } VDEC_CB_TYPE; 196*53ee8cc1Swenshuai.xi 197*53ee8cc1Swenshuai.xi /// Codec type enumerator 198*53ee8cc1Swenshuai.xi typedef enum 199*53ee8cc1Swenshuai.xi { 200*53ee8cc1Swenshuai.xi ///Unsupported codec type 201*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_NONE = 0, 202*53ee8cc1Swenshuai.xi ///MPEG-1 / MPEG-2 203*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_MPEG2, 204*53ee8cc1Swenshuai.xi ///H263 (short video header) 205*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_H263, 206*53ee8cc1Swenshuai.xi ///MPEG4 (default) 207*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_MPEG4, 208*53ee8cc1Swenshuai.xi ///MPEG4 (Divx311) 209*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_DIVX311, 210*53ee8cc1Swenshuai.xi ///MPEG4 (Divx412) 211*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_DIVX412, 212*53ee8cc1Swenshuai.xi ///FLV 213*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_FLV, 214*53ee8cc1Swenshuai.xi ///VC1 advanced profile (VC1) 215*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_VC1_ADV, 216*53ee8cc1Swenshuai.xi ///VC1 main profile (RCV) 217*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_VC1_MAIN, 218*53ee8cc1Swenshuai.xi ///Real Video version 8 219*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_RV8, 220*53ee8cc1Swenshuai.xi ///Real Video version 9 and 10 221*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_RV9, 222*53ee8cc1Swenshuai.xi ///H264 223*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_H264, 224*53ee8cc1Swenshuai.xi ///AVS 225*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_AVS, 226*53ee8cc1Swenshuai.xi ///MJPEG 227*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_MJPEG, 228*53ee8cc1Swenshuai.xi ///MVC 229*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_MVC, 230*53ee8cc1Swenshuai.xi ///VP8 231*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_VP8, 232*53ee8cc1Swenshuai.xi ///HEVC 233*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_HEVC, 234*53ee8cc1Swenshuai.xi ///VP9 235*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_VP9, 236*53ee8cc1Swenshuai.xi ///HEVC_DV 237*53ee8cc1Swenshuai.xi E_VDEC_CODEC_TYPE_HEVC_DV 238*53ee8cc1Swenshuai.xi } VDEC_CodecType; 239*53ee8cc1Swenshuai.xi 240*53ee8cc1Swenshuai.xi /// Input source select enumerator 241*53ee8cc1Swenshuai.xi typedef enum 242*53ee8cc1Swenshuai.xi { 243*53ee8cc1Swenshuai.xi ///DTV mode 244*53ee8cc1Swenshuai.xi E_VDEC_SRC_MODE_DTV = 0, 245*53ee8cc1Swenshuai.xi ///TS file mode 246*53ee8cc1Swenshuai.xi E_VDEC_SRC_MODE_TS_FILE, 247*53ee8cc1Swenshuai.xi ///generic file mode 248*53ee8cc1Swenshuai.xi E_VDEC_SRC_MODE_FILE, 249*53ee8cc1Swenshuai.xi /// TS file and dual ES buffer mode 250*53ee8cc1Swenshuai.xi E_VDEC_SRC_MODE_TS_FILE_DUAL_ES, 251*53ee8cc1Swenshuai.xi ///generic file and dual ES buffer mode 252*53ee8cc1Swenshuai.xi E_VDEC_SRC_MODE_FILE_DUAL_ES, 253*53ee8cc1Swenshuai.xi } VDEC_SrcMode; 254*53ee8cc1Swenshuai.xi 255*53ee8cc1Swenshuai.xi /// Function return enumerator 256*53ee8cc1Swenshuai.xi typedef enum 257*53ee8cc1Swenshuai.xi { 258*53ee8cc1Swenshuai.xi ///failed 259*53ee8cc1Swenshuai.xi E_VDEC_FAIL = 0, 260*53ee8cc1Swenshuai.xi ///success 261*53ee8cc1Swenshuai.xi E_VDEC_OK, 262*53ee8cc1Swenshuai.xi ///invalid parameter 263*53ee8cc1Swenshuai.xi E_VDEC_RET_INVALID_PARAM, 264*53ee8cc1Swenshuai.xi ///access not allow 265*53ee8cc1Swenshuai.xi E_VDEC_RET_ILLEGAL_ACCESS, 266*53ee8cc1Swenshuai.xi ///hardware abnormal 267*53ee8cc1Swenshuai.xi E_VDEC_RET_HARDWARE_BREAKDOWN, 268*53ee8cc1Swenshuai.xi ///unsupported 269*53ee8cc1Swenshuai.xi E_VDEC_RET_UNSUPPORTED, 270*53ee8cc1Swenshuai.xi ///timeout 271*53ee8cc1Swenshuai.xi E_VDEC_RET_TIMEOUT, 272*53ee8cc1Swenshuai.xi ///not ready 273*53ee8cc1Swenshuai.xi E_VDEC_RET_NOT_READY, 274*53ee8cc1Swenshuai.xi ///not initial 275*53ee8cc1Swenshuai.xi E_VDEC_RET_NOT_INIT, 276*53ee8cc1Swenshuai.xi ///not exit after last initialization 277*53ee8cc1Swenshuai.xi E_VDEC_RET_NOT_EXIT, 278*53ee8cc1Swenshuai.xi ///not running, counter does not change 279*53ee8cc1Swenshuai.xi E_VDEC_RET_NOT_RUNNING, 280*53ee8cc1Swenshuai.xi } VDEC_Result; 281*53ee8cc1Swenshuai.xi 282*53ee8cc1Swenshuai.xi /// Action enumerator of display commands 283*53ee8cc1Swenshuai.xi typedef enum 284*53ee8cc1Swenshuai.xi { 285*53ee8cc1Swenshuai.xi /// Action- display frame 286*53ee8cc1Swenshuai.xi E_VDEC_DISP_ACTION_DISPLAY = 1, 287*53ee8cc1Swenshuai.xi /// Action - release frame 288*53ee8cc1Swenshuai.xi E_VDEC_DISP_ACTION_RELEASE, 289*53ee8cc1Swenshuai.xi } VDEC_DispCmdAction; 290*53ee8cc1Swenshuai.xi 291*53ee8cc1Swenshuai.xi /// Freeze picture select after flush decoder 292*53ee8cc1Swenshuai.xi typedef enum 293*53ee8cc1Swenshuai.xi { 294*53ee8cc1Swenshuai.xi /// Freeze at current display picture 295*53ee8cc1Swenshuai.xi E_VDEC_FREEZE_AT_CUR_PIC = 1, 296*53ee8cc1Swenshuai.xi /// Freeze at the latest decode picture 297*53ee8cc1Swenshuai.xi E_VDEC_FREEZE_AT_LAST_PIC, 298*53ee8cc1Swenshuai.xi } VDEC_FreezePicSelect; 299*53ee8cc1Swenshuai.xi 300*53ee8cc1Swenshuai.xi /// Error code enumerator 301*53ee8cc1Swenshuai.xi typedef enum 302*53ee8cc1Swenshuai.xi { 303*53ee8cc1Swenshuai.xi E_VDEC_ERR_CODE_BASE = 0x01000000, 304*53ee8cc1Swenshuai.xi E_VDEC_ERR_CODE_NOT_SUPPORT, 305*53ee8cc1Swenshuai.xi E_VDEC_ERR_CODE_ILLEGAL_ACCESS, 306*53ee8cc1Swenshuai.xi E_VDEC_ERR_CODE_FRMRATE_NOT_SUPPORT, 307*53ee8cc1Swenshuai.xi E_VDEC_ERR_CODE_DIVX_PLUS_UNSUPPORTED, 308*53ee8cc1Swenshuai.xi E_VDEC_ERR_CODE_EXCEED_HW_CAP, ///over hw capability ex : avc 4k + avc 4k 309*53ee8cc1Swenshuai.xi E_VDEC_ERR_CODE_CODEC_COMPARE_CASE1, ///Hash key error 310*53ee8cc1Swenshuai.xi E_VDEC_ERR_CODE_CODEC_COMPARE_CASE2, ///Hash key error 311*53ee8cc1Swenshuai.xi 312*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_BASE = 0x02000000, 313*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_SHAPE , 314*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_USED_SPRITE , 315*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_NOT_8_BIT , ///< error_status : bits per pixel 316*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_NERPRED_ENABLE , 317*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_REDUCED_RES_ENABLE , 318*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_SCALABILITY , 319*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_OTHER , 320*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_H263_ERROR , 321*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_RES_NOT_SUPPORT , ///< error_status : none 322*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_MPEG4_NOT_SUPPORT , ///< error_status : none 323*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_PROFILE_NOT_SUPPORT , ///< error_status : none 324*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_RCV_ERROR_OCCUR , ///< error_status : none 325*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_VC1_NOT_SUPPORT , ///< error_status : none 326*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_UNKNOW_CODEC_NOT_SUPPORT , ///< error_status : none 327*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_SLQ_TBL_NOT_SUPPORT , ///< error_status : none 328*53ee8cc1Swenshuai.xi E_VDEC_MVD_ERR_CODE_FRAME_BUF_NOT_ENOUGH , ///< error_status : none 329*53ee8cc1Swenshuai.xi 330*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_BASE = 0x03000000, 331*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_GENERAL_BASE = (0x0000|E_VDEC_HVD_ERR_CODE_BASE), 332*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_OUT_OF_SPEC , 333*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_UNKNOW_ERR, 334*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_HW_BREAK_DOWN, 335*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_HW_DEC_TIMEOUT, 336*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_OUT_OF_MEMORY, 337*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_UNKNOWN_CODEC, 338*53ee8cc1Swenshuai.xi // AVC 339*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVC_BASE = (0x1000|E_VDEC_HVD_ERR_CODE_BASE), 340*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVC_SPS_BROKEN, 341*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVC_SPS_NOT_IN_SPEC, 342*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVC_SPS_NOT_ENOUGH_FRM, ///< DPB size at specified level is smaller than the specified number of reference frames. This is not allowed 343*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVC_PPS_BROKEN, ///< PPS is not valid 344*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVC_REF_LIST, 345*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVC_NO_REF, 346*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVC_RES, 347*53ee8cc1Swenshuai.xi // AVS 348*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVS_BASE = (0x2000|E_VDEC_HVD_ERR_CODE_BASE), 349*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_AVS_RES, 350*53ee8cc1Swenshuai.xi // RM 351*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_BASE = (0x3000|E_VDEC_HVD_ERR_CODE_BASE), 352*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_PACKET_HEADER, 353*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_FRAME_HEADER, 354*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_SLICE_HEADER, 355*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_BYTE_CNT, 356*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_DISP_TIMEOUT, 357*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_NO_REF, 358*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_VLC, 359*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_SIZE, 360*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_RM_RES, 361*53ee8cc1Swenshuai.xi 362*53ee8cc1Swenshuai.xi E_VDEC_RVD_ERR_CODE_BASE = 0x04000000, 363*53ee8cc1Swenshuai.xi E_VDEC_RVD_ERR_CODE_PACKET_HEADER, ///< packet header version error 364*53ee8cc1Swenshuai.xi E_VDEC_RVD_ERR_CODE_FRAME_HEADER, ///< frame type error 365*53ee8cc1Swenshuai.xi E_VDEC_RVD_ERR_CODE_SLICE_HEADER, ///< slice header error 366*53ee8cc1Swenshuai.xi E_VDEC_RVD_ERR_CODE_DECODE_TIMEOUT, ///< decode MB timeout 367*53ee8cc1Swenshuai.xi E_VDEC_RVD_ERR_CODE_OUT_OF_MEMORY, ///< frame buffer is out of memory 368*53ee8cc1Swenshuai.xi E_VDEC_RVD_ERR_CODE_BYTE_POS, ///< can not find in ID table 369*53ee8cc1Swenshuai.xi E_VDEC_RVD_ERR_CODE_DISPLAY_TIMEOUT,/// 370*53ee8cc1Swenshuai.xi 371*53ee8cc1Swenshuai.xi E_VDEC_MJPEG_ERR_CODE_BASE = 0x05000000, 372*53ee8cc1Swenshuai.xi E_VDEC_HVD_ERR_CODE_MJPEG_RES, 373*53ee8cc1Swenshuai.xi } VDEC_ErrCode; 374*53ee8cc1Swenshuai.xi 375*53ee8cc1Swenshuai.xi /// Frame rate conversion mode enumerator 376*53ee8cc1Swenshuai.xi typedef enum 377*53ee8cc1Swenshuai.xi { 378*53ee8cc1Swenshuai.xi /// Disable FRC mode. 379*53ee8cc1Swenshuai.xi E_VDEC_FRC_NORMAL = 0, 380*53ee8cc1Swenshuai.xi /// Output rate is twice of input rate (ex. 30p to 60p) 381*53ee8cc1Swenshuai.xi E_VDEC_FRC_DISP_TWICE, 382*53ee8cc1Swenshuai.xi /// 3:2 pulldown mode (ex. 24p to 60i or 60p) 383*53ee8cc1Swenshuai.xi E_VDEC_FRC_3_2_PULLDOWN, 384*53ee8cc1Swenshuai.xi /// PAL to NTSC conversion (50i to 60i) 385*53ee8cc1Swenshuai.xi E_VDEC_FRC_PAL_TO_NTSC, 386*53ee8cc1Swenshuai.xi /// NTSC to PAL conversion (60i to 50i) 387*53ee8cc1Swenshuai.xi E_VDEC_FRC_NTSC_TO_PAL, 388*53ee8cc1Swenshuai.xi /// Output rate 50P ->60P 389*53ee8cc1Swenshuai.xi E_VDEC_FRC_MODE_50P_60P, 390*53ee8cc1Swenshuai.xi /// Output rate 60P ->50P 391*53ee8cc1Swenshuai.xi E_VDEC_FRC_MODE_60P_50P, 392*53ee8cc1Swenshuai.xi } VDEC_FrcMode; 393*53ee8cc1Swenshuai.xi 394*53ee8cc1Swenshuai.xi /// Trick decode mode enumerator 395*53ee8cc1Swenshuai.xi typedef enum 396*53ee8cc1Swenshuai.xi { 397*53ee8cc1Swenshuai.xi /// decode all frame 398*53ee8cc1Swenshuai.xi E_VDEC_TRICK_DEC_ALL = 0, 399*53ee8cc1Swenshuai.xi /// decode all except of non-reference frame 400*53ee8cc1Swenshuai.xi E_VDEC_TRICK_DEC_IP, 401*53ee8cc1Swenshuai.xi /// only decode I frame 402*53ee8cc1Swenshuai.xi E_VDEC_TRICK_DEC_I, 403*53ee8cc1Swenshuai.xi } VDEC_TrickDec; 404*53ee8cc1Swenshuai.xi 405*53ee8cc1Swenshuai.xi /// Display speed setting enumerator 406*53ee8cc1Swenshuai.xi typedef enum 407*53ee8cc1Swenshuai.xi { 408*53ee8cc1Swenshuai.xi /// default speed type 409*53ee8cc1Swenshuai.xi E_VDEC_SPEED_DEFAULT = 0, 410*53ee8cc1Swenshuai.xi /// fast display 411*53ee8cc1Swenshuai.xi E_VDEC_SPEED_FAST, 412*53ee8cc1Swenshuai.xi /// slow display 413*53ee8cc1Swenshuai.xi E_VDEC_SPEED_SLOW, 414*53ee8cc1Swenshuai.xi } VDEC_SpeedType; 415*53ee8cc1Swenshuai.xi 416*53ee8cc1Swenshuai.xi /// The display speed enumerator 417*53ee8cc1Swenshuai.xi typedef enum 418*53ee8cc1Swenshuai.xi { 419*53ee8cc1Swenshuai.xi /// Normal display speed. 420*53ee8cc1Swenshuai.xi E_VDEC_DISP_SPEED_1X = 1, 421*53ee8cc1Swenshuai.xi /// 2X 422*53ee8cc1Swenshuai.xi E_VDEC_DISP_SPEED_2X = 2, 423*53ee8cc1Swenshuai.xi /// 4X 424*53ee8cc1Swenshuai.xi E_VDEC_DISP_SPEED_4X = 4, 425*53ee8cc1Swenshuai.xi /// 8X 426*53ee8cc1Swenshuai.xi E_VDEC_DISP_SPEED_8X = 8, 427*53ee8cc1Swenshuai.xi /// 16X 428*53ee8cc1Swenshuai.xi E_VDEC_DISP_SPEED_16X = 16, 429*53ee8cc1Swenshuai.xi /// 32X 430*53ee8cc1Swenshuai.xi E_VDEC_DISP_SPEED_32X = 32, 431*53ee8cc1Swenshuai.xi } VDEC_DispSpeed; 432*53ee8cc1Swenshuai.xi 433*53ee8cc1Swenshuai.xi /// Motion JPEG down scale factor enumerator 434*53ee8cc1Swenshuai.xi typedef enum 435*53ee8cc1Swenshuai.xi { 436*53ee8cc1Swenshuai.xi ///Original size 437*53ee8cc1Swenshuai.xi E_VDEC_MJPEG_SCALE_1to1 = 0, 438*53ee8cc1Swenshuai.xi ///Down scale to 1/2 439*53ee8cc1Swenshuai.xi E_VDEC_MJPEG_SCALE_2to1, 440*53ee8cc1Swenshuai.xi ///Down scale to 1/4 441*53ee8cc1Swenshuai.xi E_VDEC_MJPEG_SCALE_4to1, 442*53ee8cc1Swenshuai.xi ///Down scale to 1/8 443*53ee8cc1Swenshuai.xi E_VDEC_MJPEG_SCALE_8to1, 444*53ee8cc1Swenshuai.xi } VDEC_MJpegScaleFactor; 445*53ee8cc1Swenshuai.xi 446*53ee8cc1Swenshuai.xi /// Timestamp type of command queue 447*53ee8cc1Swenshuai.xi typedef enum 448*53ee8cc1Swenshuai.xi { 449*53ee8cc1Swenshuai.xi ///without timestamp information 450*53ee8cc1Swenshuai.xi E_VDEC_TIME_STAMP_NONE = 0, 451*53ee8cc1Swenshuai.xi ///PTS (Presentation Time Stamp) 452*53ee8cc1Swenshuai.xi E_VDEC_TIME_STAMP_PTS, 453*53ee8cc1Swenshuai.xi ///DTS (Decode Time Stamp) 454*53ee8cc1Swenshuai.xi E_VDEC_TIME_STAMP_DTS, 455*53ee8cc1Swenshuai.xi ///STS (Sorted Time Stamp) 456*53ee8cc1Swenshuai.xi E_VDEC_TIME_STAMP_STS, 457*53ee8cc1Swenshuai.xi ///PTS_RVU (Presentation Time Stamp) 458*53ee8cc1Swenshuai.xi E_VDEC_TIME_STAMP_PTS_MPEG_DIRECTV_SD, 459*53ee8cc1Swenshuai.xi ///DTS_RVU (Decode Time Stamp) 460*53ee8cc1Swenshuai.xi E_VDEC_TIME_STAMP_DTS_MPEG_DIRECTV_SD, 461*53ee8cc1Swenshuai.xi 462*53ee8cc1Swenshuai.xi } VDEC_TimeStampType; 463*53ee8cc1Swenshuai.xi 464*53ee8cc1Swenshuai.xi /// Debug level of VDEC 465*53ee8cc1Swenshuai.xi typedef enum 466*53ee8cc1Swenshuai.xi { 467*53ee8cc1Swenshuai.xi /// Disable all uart messages. 468*53ee8cc1Swenshuai.xi E_VDEC_DBG_LEVEL_NONE = 0, 469*53ee8cc1Swenshuai.xi /// Only output error messages 470*53ee8cc1Swenshuai.xi E_VDEC_DBG_LEVEL_ERR, 471*53ee8cc1Swenshuai.xi /// Output general messages, and above. 472*53ee8cc1Swenshuai.xi E_VDEC_DBG_LEVEL_INFO, 473*53ee8cc1Swenshuai.xi /// Output debug messages, and above. 474*53ee8cc1Swenshuai.xi E_VDEC_DBG_LEVEL_DBG, 475*53ee8cc1Swenshuai.xi /// Output function tracing messages, and above. 476*53ee8cc1Swenshuai.xi E_VDEC_DBG_LEVEL_TRACE, 477*53ee8cc1Swenshuai.xi /// Output FW messages. 478*53ee8cc1Swenshuai.xi E_VDEC_DBG_LEVEL_FW, 479*53ee8cc1Swenshuai.xi } VDEC_DbgLevel; 480*53ee8cc1Swenshuai.xi 481*53ee8cc1Swenshuai.xi /// Type of FW source 482*53ee8cc1Swenshuai.xi typedef enum 483*53ee8cc1Swenshuai.xi { 484*53ee8cc1Swenshuai.xi E_VDEC_FW_SOURCE_NONE, 485*53ee8cc1Swenshuai.xi E_VDEC_FW_SOURCE_DRAM, 486*53ee8cc1Swenshuai.xi E_VDEC_FW_SOURCE_FLASH, 487*53ee8cc1Swenshuai.xi }VDEC_FWSourceType; 488*53ee8cc1Swenshuai.xi 489*53ee8cc1Swenshuai.xi /// Format of CC (Closed Caption) 490*53ee8cc1Swenshuai.xi typedef enum 491*53ee8cc1Swenshuai.xi { 492*53ee8cc1Swenshuai.xi E_VDEC_CC_NONE = 0x00, 493*53ee8cc1Swenshuai.xi E_VDEC_CC_608 = 0x01, //For CC608 or 157 494*53ee8cc1Swenshuai.xi E_VDEC_CC_708 = 0x02, //For CC708 495*53ee8cc1Swenshuai.xi E_VDEC_CC_UNPACKED = 0x03, 496*53ee8cc1Swenshuai.xi } VDEC_CCFormat; 497*53ee8cc1Swenshuai.xi 498*53ee8cc1Swenshuai.xi /// Type of CC 499*53ee8cc1Swenshuai.xi typedef enum 500*53ee8cc1Swenshuai.xi { 501*53ee8cc1Swenshuai.xi E_VDEC_CC_TYPE_NONE = 0, 502*53ee8cc1Swenshuai.xi E_VDEC_CC_TYPE_NTSC_FIELD1 = 1, 503*53ee8cc1Swenshuai.xi E_VDEC_CC_TYPE_NTSC_FIELD2 = 2, 504*53ee8cc1Swenshuai.xi E_VDEC_CC_TYPE_DTVCC = 3, 505*53ee8cc1Swenshuai.xi E_VDEC_CC_TYPE_NTSC_TWOFIELD = 4, 506*53ee8cc1Swenshuai.xi } VDEC_CCType; 507*53ee8cc1Swenshuai.xi 508*53ee8cc1Swenshuai.xi typedef enum 509*53ee8cc1Swenshuai.xi { 510*53ee8cc1Swenshuai.xi E_VDEC_CC_GET_BUFF_START = 0x1, 511*53ee8cc1Swenshuai.xi E_VDEC_CC_GET_BUFF_SIZE, 512*53ee8cc1Swenshuai.xi E_VDEC_CC_GET_708_ENABLE 513*53ee8cc1Swenshuai.xi } VDEC_CCInfoCmd; 514*53ee8cc1Swenshuai.xi 515*53ee8cc1Swenshuai.xi typedef enum 516*53ee8cc1Swenshuai.xi { 517*53ee8cc1Swenshuai.xi E_VDEC_STAGE_STOP = 0, 518*53ee8cc1Swenshuai.xi E_VDEC_STAGE_INIT, 519*53ee8cc1Swenshuai.xi E_VDEC_STAGE_PLAY, 520*53ee8cc1Swenshuai.xi E_VDEC_STAGE_PAUSE, 521*53ee8cc1Swenshuai.xi } VDEC_Stage; 522*53ee8cc1Swenshuai.xi 523*53ee8cc1Swenshuai.xi 524*53ee8cc1Swenshuai.xi typedef enum 525*53ee8cc1Swenshuai.xi { 526*53ee8cc1Swenshuai.xi /// Used before MApi_VDEC_Flush(). 527*53ee8cc1Swenshuai.xi E_VDEC_PATTERN_FLUSH = 0, 528*53ee8cc1Swenshuai.xi /// Used after MApi_VDEC_EnableLastFrameShow(). 529*53ee8cc1Swenshuai.xi E_VDEC_PATTERN_FILEEND, 530*53ee8cc1Swenshuai.xi }VDEC_PatternType; 531*53ee8cc1Swenshuai.xi 532*53ee8cc1Swenshuai.xi typedef enum 533*53ee8cc1Swenshuai.xi { 534*53ee8cc1Swenshuai.xi E_VDEC_FW_STATUS_FLAG_NONE = 0, 535*53ee8cc1Swenshuai.xi E_VDEC_FW_STATUS_FLAG_SEEK_TO_I = VDEC_BIT(0), 536*53ee8cc1Swenshuai.xi }VDEC_FW_STATUS_FLAG; 537*53ee8cc1Swenshuai.xi 538*53ee8cc1Swenshuai.xi typedef struct 539*53ee8cc1Swenshuai.xi { 540*53ee8cc1Swenshuai.xi MS_BOOL bInit; 541*53ee8cc1Swenshuai.xi MS_BOOL bIdle; 542*53ee8cc1Swenshuai.xi VDEC_Stage eStage; 543*53ee8cc1Swenshuai.xi } VDEC_Status; 544*53ee8cc1Swenshuai.xi 545*53ee8cc1Swenshuai.xi typedef struct 546*53ee8cc1Swenshuai.xi { 547*53ee8cc1Swenshuai.xi MS_U32 u32Tmp; 548*53ee8cc1Swenshuai.xi } VDEC_Info; 549*53ee8cc1Swenshuai.xi 550*53ee8cc1Swenshuai.xi typedef enum 551*53ee8cc1Swenshuai.xi { 552*53ee8cc1Swenshuai.xi E_VDEC_FRM_TYPE_I = 0, 553*53ee8cc1Swenshuai.xi E_VDEC_FRM_TYPE_P, 554*53ee8cc1Swenshuai.xi E_VDEC_FRM_TYPE_B, 555*53ee8cc1Swenshuai.xi E_VDEC_FRM_TYPE_OTHER, 556*53ee8cc1Swenshuai.xi } VDEC_FrameType; 557*53ee8cc1Swenshuai.xi 558*53ee8cc1Swenshuai.xi typedef enum 559*53ee8cc1Swenshuai.xi { 560*53ee8cc1Swenshuai.xi E_VDEC_FIELDTYPE_NONE, ///< No field. 561*53ee8cc1Swenshuai.xi E_VDEC_FIELDTYPE_TOP, ///< Top field only. 562*53ee8cc1Swenshuai.xi E_VDEC_FIELDTYPE_BOTTOM,///< Bottom field only. 563*53ee8cc1Swenshuai.xi E_VDEC_FIELDTYPE_BOTH, ///< Both fields. 564*53ee8cc1Swenshuai.xi } VDEC_FieldType; 565*53ee8cc1Swenshuai.xi 566*53ee8cc1Swenshuai.xi typedef enum 567*53ee8cc1Swenshuai.xi { 568*53ee8cc1Swenshuai.xi E_VDEC_PATTERN_BEFORE_FRM = 0, 569*53ee8cc1Swenshuai.xi E_VDEC_PATTERN_AFTER_FRM, 570*53ee8cc1Swenshuai.xi E_VDEC_PATTERN_SKIP_DATA, 571*53ee8cc1Swenshuai.xi } VDEC_PatchPattern; 572*53ee8cc1Swenshuai.xi 573*53ee8cc1Swenshuai.xi typedef enum 574*53ee8cc1Swenshuai.xi { 575*53ee8cc1Swenshuai.xi E_VDEC_PIC_STRUCTURE_RSV = 0, //reserved 576*53ee8cc1Swenshuai.xi E_VDEC_PIC_STRUCTURE_TOP, 577*53ee8cc1Swenshuai.xi E_VDEC_PIC_STRUCTURE_BOT, 578*53ee8cc1Swenshuai.xi E_VDEC_PIC_STRCUTURE_FRM, 579*53ee8cc1Swenshuai.xi } VDEC_PicStructure; 580*53ee8cc1Swenshuai.xi 581*53ee8cc1Swenshuai.xi //VDEC set clock speed 582*53ee8cc1Swenshuai.xi typedef enum 583*53ee8cc1Swenshuai.xi { 584*53ee8cc1Swenshuai.xi E_VDEC_CLOCK_SPEED_NONE = 0, 585*53ee8cc1Swenshuai.xi E_VDEC_CLOCK_SPEED_HIGHEST, 586*53ee8cc1Swenshuai.xi E_VDEC_CLOCK_SPEED_HIGH, 587*53ee8cc1Swenshuai.xi E_VDEC_CLOCK_SPEED_MEDIUM, 588*53ee8cc1Swenshuai.xi E_VDEC_CLOCK_SPEED_LOW, 589*53ee8cc1Swenshuai.xi E_VDEC_CLOCK_SPEED_LOWEST, 590*53ee8cc1Swenshuai.xi E_VDEC_CLOCK_SPEED_DEFAULT, 591*53ee8cc1Swenshuai.xi } VDEC_ClockSpeed; 592*53ee8cc1Swenshuai.xi 593*53ee8cc1Swenshuai.xi //VDEC user command id 594*53ee8cc1Swenshuai.xi typedef enum 595*53ee8cc1Swenshuai.xi { 596*53ee8cc1Swenshuai.xi //Group1:Set Control command 597*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_CONTROL_BASE = 0x0000, 598*53ee8cc1Swenshuai.xi VDEC_USER_CMD_REPEAT_LAST_FIELD, // Param: 1(ON), 0(OFF) 599*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AVSYNC_REPEAT_TH, // Param:0x01 ~ 0xFF(repeat times), 0xFF:always repeat when av is not sync 600*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DISP_ONE_FIELD, // Param: 1(ON), 0(OFF) 601*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FD_MASK_DELAY_COUNT, // Param: unit is in vsync base for mute the fd_mask 602*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FRC_OUTPUT, // Param: the address of VDEC_FRC_OutputParam 603*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FRC_DROP_TYPE, // Param: 1(FRC_DROP_FIELD), 0(FRC_DROP_FRAME), default:0 604*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FAST_DISPLAY, // Param: TRUE(Fast display), FALSE(Display until synced) 605*53ee8cc1Swenshuai.xi VDEC_USER_CMD_IGNORE_ERR_REF, // Param: TRUE(Ignore error reference), FALSE(Enable error reference handle) 606*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FORCE_FOLLOW_DTV_SPEC, // Param: 1(ON), 0(OFF) 607*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AVC_MIN_FRM_GAP, // Param: Set the theshold of H264 frame gap, 0xFFFFFFFF don't care frame gap 608*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DISABLE_SEQ_CHG, // Param: 1(Disable), 0(Enable) 609*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AVC_DISABLE_ANTI_VDEAD, // Param: 1(Disable), 0(Enable) 610*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DTV_RESET_MVD_PARSER, // 611*53ee8cc1Swenshuai.xi VDEC_USER_CMD_PVR_FLUSH_FRAME_BUFFER, // 612*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_DTV_USER_DATA_MODE, // Param: 0(Support normal DVB CC, default case), 1(Support ATSC DirectTV CC), 2,3,4(Reserved) 613*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_SINGLE_TASK_MODE, // Param: 0(default case), 1(single task mode) for dual decoder 614*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FORCE_INTERLACE_MODE, // Param: 0(Disable), 1(Enable) DTV, TS-File mode force into interlace mode when framerate is 25 or 30 615*53ee8cc1Swenshuai.xi VDEC_USER_CMD_RELEASE_FD_MASK, 616*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_DECODE_MODE, 617*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SHOW_DECODE_ORDER, // Param: 1(Disable), 0(Enable) 618*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SUPPORT_AVC_TO_MVC, // Param: 0(Do not support), 1(Support AVC to MVC) 619*53ee8cc1Swenshuai.xi VDEC_USER_CMD_3DLR_VIEW_EXCHANGE, // Param: 0(Disable), 1(View L/R exhange) 620*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FORCE_AUTO_MUTE, // param: 0(default case), 1(Enable) 621*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_VSIZE_ALIGN, // Param: 0(Disable), 1(Enable) 622*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AVC_DISP_IGNORE_CROP, // Param: 0(Disable), 1(Enable) 623*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_DISP_FINISH_MODE, // Param: 0(Original), 1(Strict) 624*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_AVSYNC_MODE, // Param: 0(Original), 1(Strict) 625*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_CC608_INFO_ENHANCE_MODE, // Param: 0(Disable), 1(Enable) 626*53ee8cc1Swenshuai.xi VDEC_USER_CMD_PUSH_DISPQ_WITH_REF_NUM, // Param: 0(Disable), 1(Enable) 627*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_IDCT_MODE, //Param: 0(Original), 1(new IDCT) 628*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DROP_ERR_FRAME, // Param: 0(Disable), 1(Enable) 629*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SHOW_FIRST_FRAME_DIRECT, // Param: 0(Disable), 1(Enable), Push first frame to display queue directly.. 630*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_XC_LOW_DELAY_PARA, // Param: arg0 for diff_field_number... 631*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AUTO_EXHAUST_ES_MODE, // Param: set the upper bound (arg[31:16]), and lower bound (arg[15:0])of ES level, Unit = 1KBytes, Auto drop display to consume ES data as soon as possible when ES level is higher than upper bound 632*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_MIN_TSP_DATA_SIZE, // Param: Resize HVD_FW_AVC_ES_MIN_TSP_DATA_SIZE 633*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AVC_SUPPORT_REF_NUM_OVER_MAX_DPB_SIZE, // Param: 0(Disable), 1(Enable) 634*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FRAMEBUFFER_AUTO_MODE, // Param: 0(Disable), 1(Enable) 635*53ee8cc1Swenshuai.xi #if defined(UFO_PUBLIC_HEADER_700)||defined(UFO_PUBLIC_HEADER_500_3)||defined(UFO_PUBLIC_HEADER_500)||defined(UFO_PUBLIC_HEADER_300) 636*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AUTO_DROP_DISPLAY_QUEUE, // Param: 0(Disable), N = 1~16: Drop display queue when display queue above than N frames. 637*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_PTS_US_MODE, //Param: 1(enable), 0(disable ) PTS output by micro second level, 638*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FORCE_PROGRESSIVE_MODE, // Param: 0(Disable), 1(Enable) 639*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AVC_NEW_SLOW_MOTION, // Param: 0(Disable), 1(Enable) 640*53ee8cc1Swenshuai.xi VDEC_USER_CMD_USE_CPB_REMOVAL_DEALY, // Param: 0(Disable), 1(Enable) 641*53ee8cc1Swenshuai.xi VDEC_USER_CMD_RETURN_INVALID_AFD, // Param: 0(Disable), 1(Enable) 642*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_DV_XC_SHM_ADDR, // Param: PHY Addr for communicating with XC Dolby Vision DM/Comp 643*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_ENABLE_HDR, // Param: 0(Disable), 1(Enable) 644*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DISABLE_PBFRAME_MODE, // Param: 1(Disable), 0(Enable) 645*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_SLOW_SYNC, //Param: VDEC_EX_Slow_Sync, u8RepeatPeriod: 0(disable), 1~0xFF(Repeat Period, repeat one every u8RepeatPeriod display), u8DropPeriod: 0(disable), 1~0xFF(Drop Period, Drop one every u8DropPeriod display) 646*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_FRAMEBUFF2, // Param[0]=Addr and Param[1]=size for the second frame buffer 647*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_TRICKPLAY_2X_MODE, //Param:0(vsync),1(avsync) 648*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FRC_ONLY_SHOW_TOP_FIELD, // Param: 0(Disable), 1(Enable) only show top filed for FRC mode 649*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DISABLE_ES_FULL_STOP, // Param: 0(Enable), 1(Disable) ES FULL STOP mode 650*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DIRECT_STC_MODE, // Param: stc in ms; 0x0~0x1FFFFFFFF/90, vdec fw use this value as stc; 0xFFFFFFFF, disable ths feature 651*53ee8cc1Swenshuai.xi #endif 652*53ee8cc1Swenshuai.xi #if defined(UFO_PUBLIC_HEADER_212) 653*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AUTO_DROP_DISPLAY_QUEUE, // Param: 0(Disable), N = 1~16: Drop display queue when display queue above than N frames. 654*53ee8cc1Swenshuai.xi VDEC_USER_CMD_USE_CPB_REMOVAL_DEALY, // Param: 0(Disable), 1(Enable) 655*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_PTS_US_MODE, //Param: 1(enable), 0(disable ) PTS output by micro second level, 656*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FORCE_PROGRESSIVE_MODE, // Param: 0(Disable), 1(Enable) 657*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_TRICKPLAY_2X_MODE, //Param:0(vsync),1(avsync) 658*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FRC_ONLY_SHOW_TOP_FIELD, // Param: 0(Disable), 1(Enable) only show top filed for FRC mode 659*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DISABLE_ES_FULL_STOP, // Param: 0(Enable), 1(Disable) ES FULL STOP mode 660*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DIRECT_STC_MODE, // Param: stc in ms; 0x0~0x1FFFFFFFF/90, vdec fw use this value as stc; 0xFFFFFFFF, disable ths feature 661*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AVC_NEW_SLOW_MOTION, // Param: 0(Disable), 1(Enable) 662*53ee8cc1Swenshuai.xi VDEC_USER_CMD_RETURN_INVALID_AFD, // Param: 0(Disable), 1(Enable) 663*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_SLOW_SYNC, //Param: VDEC_EX_Slow_Sync, u8RepeatPeriod: 0(disable), 1~0xFF(Repeat Period, repeat one every u8RepeatPeriod display), u8DropPeriod: 0(disable), 1~0xFF(Drop Period, Drop one every u8DropPeriod display) 664*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_FRAMEBUFF2, // Param[0]=Addr and Param[1]=size for the second frame buffer 665*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DISABLE_PBFRAME_MODE, // Param: 1(Disable), 0(Enable) 666*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_DV_XC_SHM_ADDR, // Param: PHY Addr for communicating with XC Dolby Vision DM/Comp 667*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_ENABLE_HDR, // Param: 0(Disable), 1(Enable) 668*53ee8cc1Swenshuai.xi #endif 669*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_BUFFER_INFO, //Param: VDEC_EX_BufferInfo 670*53ee8cc1Swenshuai.xi VDEC_USER_CMD_HDR10_UPDATE_PERFRAME, 671*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_CODEC_CONFIG, 672*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_VP94K2KCHECK, 673*53ee8cc1Swenshuai.xi VDEC_USER_CMD_PUSI_CONTROL, 674*53ee8cc1Swenshuai.xi 675*53ee8cc1Swenshuai.xi 676*53ee8cc1Swenshuai.xi VDEC_USER_CMD_MVC_SET_CMD_BASE = 0x0800, 677*53ee8cc1Swenshuai.xi VDEC_USER_CMD_MVC_BBU2_PUSH_PACKET, // Param: Packet Info. 678*53ee8cc1Swenshuai.xi VDEC_USER_CMD_MVC_BBU2_FIRE_DECCMD, // Param: Non 679*53ee8cc1Swenshuai.xi 680*53ee8cc1Swenshuai.xi //Group2:Get Control command 681*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_CONTROL_BASE = 0x1000, 682*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_CHROMA_TYPE, 683*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_REAL_FRAMERATE, // Get Real FrameRate reported by decoder 684*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_COLOR_MATRIX, // Get color matrix coefficients reported by decoder 685*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_DYNSCALE_ENABLED, // Get if DynamicScaling is enabled by firmware 686*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_ORI_INTERLACE_MODE, 687*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_FPA_SEI, // Get Frame Packing Arrangment information 688*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_U64PTS, 689*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_FB_USAGE_MEM, // Get FrameBuufer Size needed by decoder 690*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_XC_LOW_DELAY_INT_STATE, // Get xc_low_delay int state... 691*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_FLUSH_PATTEN_ENTRY_NUM, // Get Flush patten push based (unit : times) 692*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_FW_STATUS_FLAG, 693*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_DS_BUF_MIU_SEL, 694*53ee8cc1Swenshuai.xi #if defined(UFO_PUBLIC_HEADER_700)||defined(UFO_PUBLIC_HEADER_300) 695*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_PVRSEAMLESS_INFO, 696*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_PRE_PAS_U64PTS, // Get Pre-parsing PTS 697*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_SEQ_CHANGE_INFO, // Get the reason why seq changes, parameter is MS_U32, definition is VDEC_SeqChangeInfo 698*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_MIN_TSP_DATA_SIZE, 699*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_CLLI_SEI, 700*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_DISP_QUEUE_EMPTY, 701*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_BUFFER_INFO, 702*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_NEXT_DISP_FRAME_QOS_INFO, 703*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_NOT_SUPPORT_INFO, 704*53ee8cc1Swenshuai.xi #endif 705*53ee8cc1Swenshuai.xi #if defined(UFO_PUBLIC_HEADER_500)||defined(UFO_PUBLIC_HEADER_500_3) 706*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_PRE_PAS_U64PTS, // Get Pre-parsing PTS 707*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_SEQ_CHANGE_INFO, // Get the reason why seq changes, parameter is MS_U32, definition is VDEC_SeqChangeInfo 708*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_DISP_QUEUE_EMPTY, 709*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_NOT_SUPPORT_INFO, 710*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_PVRSEAMLESS_INFO, 711*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_MIN_TSP_DATA_SIZE, 712*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_CLLI_SEI, 713*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_BUFFER_INFO, 714*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_NEXT_DISP_FRAME_QOS_INFO, 715*53ee8cc1Swenshuai.xi #endif 716*53ee8cc1Swenshuai.xi #if defined(UFO_PUBLIC_HEADER_212) 717*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_PVRSEAMLESS_INFO, 718*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_PRE_PAS_U64PTS, // Get Pre-parsing PTS 719*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_SEQ_CHANGE_INFO, // Get the reason why seq changes, parameter is MS_U32, definition is VDEC_SeqChangeInfo 720*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_MIN_TSP_DATA_SIZE, 721*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_CLLI_SEI, 722*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_DISP_QUEUE_EMPTY, 723*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_BUFFER_INFO, 724*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_NEXT_DISP_FRAME_QOS_INFO, 725*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_NOT_SUPPORT_INFO, 726*53ee8cc1Swenshuai.xi #endif 727*53ee8cc1Swenshuai.xi 728*53ee8cc1Swenshuai.xi VDEC_USER_CMD_MVC_GET_CMD_BASE = 0x1800, 729*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_MVC_SUB_FRAME_DISP_INFO, // Param: VDEC_FrameInfo pointer. 730*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_MVC_BBU2_DECQ_VACANCY, // Param: BBU2 Dec Q Vacancy. 731*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_MVC_ES2_READ_PTR, // Param: ES2 read pointer. 732*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_MVC_ES2_WRITE_PTR, // Param: ES2 Write pointer. 733*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_ES_QUANTITY, // Param: Get ES buffer Level. 734*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_ES2_QUANTITY, // Param: Get ES2 buffer Level. 735*53ee8cc1Swenshuai.xi VDEC_USER_CMD_GET_MAIN_STREAM_ID, // Param: Get main stream ID. 736*53ee8cc1Swenshuai.xi 737*53ee8cc1Swenshuai.xi //Group3:System Preset Control command====================== 738*53ee8cc1Swenshuai.xi //Group3-1:Common system Preset Control command 739*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SYSTEM_PRESET_CONTROL_BASE = 0x2000, 740*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SYSTEM_PRESET_VPU_CLOCK, //Param: VDEC_EX_ClockSpeed 741*53ee8cc1Swenshuai.xi 742*53ee8cc1Swenshuai.xi //Group3-2:HVD System Preset Control command 743*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SYSTEM_PRESET_HVD_BASE = 0x2100, 744*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SYSTEM_PRESET_HVD_CLOCK, //Param: VDEC_EX_ClockSpeed 745*53ee8cc1Swenshuai.xi 746*53ee8cc1Swenshuai.xi //Group3-3:MVD System Preset Control command 747*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SYSTEM_PRESET_MVD_BASE = 0x2200, 748*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SYSTEM_PRESET_MVD_CLOCK, //Param: VDEC_EX_ClockSpeed 749*53ee8cc1Swenshuai.xi VDEC_USER_CMD_VPU_SECURITY_MODE, //Param: 0:disable,1:enable 750*53ee8cc1Swenshuai.xi 751*53ee8cc1Swenshuai.xi //Group4:Preset Control command============================= 752*53ee8cc1Swenshuai.xi VDEC_USER_CMD_PRESET_CONTROL_BASE = 0x2300, 753*53ee8cc1Swenshuai.xi VDEC_USER_CMD_HVD_ONE_PENDING_BUFFER_MODE, //Param: 0(Disable), 1(Enable), use only one pending buffer instead of two for HVD 754*53ee8cc1Swenshuai.xi VDEC_USER_CMD_MVD_HWBUFFER_REMAPPING_MODE, //Param: 0(Disable), 1(Enable), Allcate HW buffer to start of frame buffer 755*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FRAMERATE_HANDLING, //Param: 1000~60000, Set frame rate when the sequence did not have frame rate info. The unit is (param/1000)fps, Ex: 30000 = 30.000 fps 756*53ee8cc1Swenshuai.xi //Param: 0xFFFFFFFF, use default frame rate when no frame rate info in header 757*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_SHAREMEMORY_BASE, 758*53ee8cc1Swenshuai.xi VDEC_USER_CMD_HVD_COL_BBU_MODE, //Param: HVD use colocated BBU mode, 0: disable, 1: enable /*johnny.ko*/ 759*53ee8cc1Swenshuai.xi VDEC_USER_CMD_HVD_IAPGN_BUF_SHARE_BW_MODE, //Param: HVD IAP GN Buffer address, 760*53ee8cc1Swenshuai.xi VDEC_USER_CMD_DTV_DEBUG_MODE, 761*53ee8cc1Swenshuai.xi VDEC_USER_CMD_HVD_TS_IN_BBU_MODE, 762*53ee8cc1Swenshuai.xi VDEC_USER_CMD_AUTO_ARRANGE_FRAMEBUFFER_USAGE, 763*53ee8cc1Swenshuai.xi VDEC_USER_CMD_THUMBNAIL_MODE, 764*53ee8cc1Swenshuai.xi VDEC_USER_CMD_FORCE_8BIT_DEC_MODE, 765*53ee8cc1Swenshuai.xi VDEC_USER_CMD_MFCODEC_MODE, //Param: VDEC_EX_MFCodec_mode 766*53ee8cc1Swenshuai.xi VDEC_USER_CMD_VDEC_FEATURE, //AP control VDEC features 767*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SET_DISPLAY_MODE, 768*53ee8cc1Swenshuai.xi VDEC_USER_CMD_CAL_FRAMERATE, 769*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SETPOWERSTATE, 770*53ee8cc1Swenshuai.xi 771*53ee8cc1Swenshuai.xi //Group5:System PreGet Control command====================== 772*53ee8cc1Swenshuai.xi //Group5-1:Common system Preget Control command 773*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SYSTEM_PREGET_CONTROL_BASE = 0x4000, 774*53ee8cc1Swenshuai.xi VDEC_USER_CMD_SYSTEM_PREGET_FB_MEMORY_USAGE_SIZE, 775*53ee8cc1Swenshuai.xi 776*53ee8cc1Swenshuai.xi } VDEC_User_Cmd; 777*53ee8cc1Swenshuai.xi 778*53ee8cc1Swenshuai.xi //VDEC FW TYPE 779*53ee8cc1Swenshuai.xi typedef enum 780*53ee8cc1Swenshuai.xi { 781*53ee8cc1Swenshuai.xi VDEC_FW_TYPE_MVD = 0, 782*53ee8cc1Swenshuai.xi VDEC_FW_TYPE_HVD, 783*53ee8cc1Swenshuai.xi } VDEC_FwType; 784*53ee8cc1Swenshuai.xi 785*53ee8cc1Swenshuai.xi //VDEC FB reduction type 786*53ee8cc1Swenshuai.xi typedef enum 787*53ee8cc1Swenshuai.xi { 788*53ee8cc1Swenshuai.xi VDEC_FB_REDUCTION_NONE = 0, 789*53ee8cc1Swenshuai.xi VDEC_FB_REDUCTION_1_2, 790*53ee8cc1Swenshuai.xi VDEC_FB_REDUCTION_1_4 791*53ee8cc1Swenshuai.xi } VDEC_FBReductionType; 792*53ee8cc1Swenshuai.xi 793*53ee8cc1Swenshuai.xi //VDEC XC_LOW_DELAY 794*53ee8cc1Swenshuai.xi typedef enum 795*53ee8cc1Swenshuai.xi { 796*53ee8cc1Swenshuai.xi // no any XC_LOW_DELAY event happened. 797*53ee8cc1Swenshuai.xi VDEC_XC_LOW_DELAY_NONE = 0x00, 798*53ee8cc1Swenshuai.xi // XC_LOW_DELAY event for disable black screen. 799*53ee8cc1Swenshuai.xi VDEC_XC_DISABLE_BLACK_SCREEN = VDEC_BIT(0), 800*53ee8cc1Swenshuai.xi // XC_LOW_DELAY event for release force_read_bank. 801*53ee8cc1Swenshuai.xi VDEC_XC_RELEASE_FORCE_READ_BANK = VDEC_BIT(1), 802*53ee8cc1Swenshuai.xi // XC_LOW_DELAY event for release bob_mode. 803*53ee8cc1Swenshuai.xi VDEC_XC_RELEASE_BOB_MODE = VDEC_BIT(2), 804*53ee8cc1Swenshuai.xi } VDEC_XcLowDelayType; 805*53ee8cc1Swenshuai.xi 806*53ee8cc1Swenshuai.xi // VDEC SEQ change info 807*53ee8cc1Swenshuai.xi typedef enum 808*53ee8cc1Swenshuai.xi { 809*53ee8cc1Swenshuai.xi // seq change due to first sequence 810*53ee8cc1Swenshuai.xi VDEC_SEQ_CHANGE_FIRST_TIME = VDEC_BIT(0), 811*53ee8cc1Swenshuai.xi // seq chagne due to resolution 812*53ee8cc1Swenshuai.xi VDEC_SEQ_CHANGE_RESOLUTION = VDEC_BIT(1), 813*53ee8cc1Swenshuai.xi // seq chagne due to picture type 814*53ee8cc1Swenshuai.xi VDEC_SEQ_CHANGE_PICTURE_TYPE = VDEC_BIT(2), 815*53ee8cc1Swenshuai.xi // seq chagne due to aspect ratio 816*53ee8cc1Swenshuai.xi VDEC_SEQ_CHANGE_ASPECT_RATIO = VDEC_BIT(3), 817*53ee8cc1Swenshuai.xi // seq chagne due to frame rate 818*53ee8cc1Swenshuai.xi VDEC_SEQ_CHANGE_FRAME_RATE = VDEC_BIT(4), 819*53ee8cc1Swenshuai.xi // seq chagne due to HDR info 820*53ee8cc1Swenshuai.xi VDEC_SEQ_CHANGE_HDR_INFO = VDEC_BIT(5), 821*53ee8cc1Swenshuai.xi } VDEC_SeqChangeInfo; 822*53ee8cc1Swenshuai.xi 823*53ee8cc1Swenshuai.xi 824*53ee8cc1Swenshuai.xi /// Data structure of CC Configuration 825*53ee8cc1Swenshuai.xi typedef struct 826*53ee8cc1Swenshuai.xi { 827*53ee8cc1Swenshuai.xi /// 608 / 708 828*53ee8cc1Swenshuai.xi VDEC_CCFormat eFormat; 829*53ee8cc1Swenshuai.xi /// CC type 830*53ee8cc1Swenshuai.xi VDEC_CCType eType; 831*53ee8cc1Swenshuai.xi /// CC data start address 832*53ee8cc1Swenshuai.xi MS_VIRT u32BufStAdd; 833*53ee8cc1Swenshuai.xi /// CC data size 834*53ee8cc1Swenshuai.xi MS_U32 u32BufSize; 835*53ee8cc1Swenshuai.xi } VDEC_CCCfg; 836*53ee8cc1Swenshuai.xi 837*53ee8cc1Swenshuai.xi /// Information for display setting 838*53ee8cc1Swenshuai.xi typedef struct 839*53ee8cc1Swenshuai.xi { 840*53ee8cc1Swenshuai.xi ///Bitstream horizontal size 841*53ee8cc1Swenshuai.xi MS_U16 u16HorSize; 842*53ee8cc1Swenshuai.xi ///Bitstream vertical size 843*53ee8cc1Swenshuai.xi MS_U16 u16VerSize; 844*53ee8cc1Swenshuai.xi ///Frame rate 845*53ee8cc1Swenshuai.xi MS_U32 u32FrameRate; 846*53ee8cc1Swenshuai.xi ///Interlace flag 847*53ee8cc1Swenshuai.xi MS_U8 u8Interlace; 848*53ee8cc1Swenshuai.xi ///Active format description 849*53ee8cc1Swenshuai.xi MS_U8 u8AFD; 850*53ee8cc1Swenshuai.xi ///Sample aspect rate width 851*53ee8cc1Swenshuai.xi MS_U16 u16SarWidth; 852*53ee8cc1Swenshuai.xi ///Sample aspect rate height 853*53ee8cc1Swenshuai.xi MS_U16 u16SarHeight; 854*53ee8cc1Swenshuai.xi ///Right cropping 855*53ee8cc1Swenshuai.xi MS_U16 u16CropRight; 856*53ee8cc1Swenshuai.xi ///Left cropping 857*53ee8cc1Swenshuai.xi MS_U16 u16CropLeft; 858*53ee8cc1Swenshuai.xi ///Bottom cropping 859*53ee8cc1Swenshuai.xi MS_U16 u16CropBottom; 860*53ee8cc1Swenshuai.xi ///Top cropping 861*53ee8cc1Swenshuai.xi MS_U16 u16CropTop; 862*53ee8cc1Swenshuai.xi ///Pitch 863*53ee8cc1Swenshuai.xi MS_U16 u16Pitch; 864*53ee8cc1Swenshuai.xi ///Interval of PTS 865*53ee8cc1Swenshuai.xi MS_U16 u16PTSInterval; 866*53ee8cc1Swenshuai.xi ///MPEG1 flag 867*53ee8cc1Swenshuai.xi MS_U8 u8MPEG1; 868*53ee8cc1Swenshuai.xi ///Play mode (fixme) 869*53ee8cc1Swenshuai.xi MS_U8 u8PlayMode; 870*53ee8cc1Swenshuai.xi ///FRC mode 871*53ee8cc1Swenshuai.xi MS_U8 u8FrcMode; 872*53ee8cc1Swenshuai.xi ///Aspect ratio code 873*53ee8cc1Swenshuai.xi MS_U8 u8AspectRate; 874*53ee8cc1Swenshuai.xi ///if FALSE, set VOP as mono mode (only for H264) 875*53ee8cc1Swenshuai.xi MS_BOOL bWithChroma; 876*53ee8cc1Swenshuai.xi /// if true, color space is xvYCC (Y from 16 to 235 and Cb , Cr from 16 to 240). 877*53ee8cc1Swenshuai.xi /// if false, color space is BT.601/709 (Y from 0 to 255 and Cb , Cr from 0 to 255). 878*53ee8cc1Swenshuai.xi /// only MPEG might be with BT.601/709 879*53ee8cc1Swenshuai.xi MS_BOOL bColorInXVYCC; 880*53ee8cc1Swenshuai.xi ///Dynamic scaling buffer address 881*53ee8cc1Swenshuai.xi MS_VIRT u32DynScalingAddr; 882*53ee8cc1Swenshuai.xi ///Dynamic scaling buffer size 883*53ee8cc1Swenshuai.xi MS_U32 u32DynScalingSize; 884*53ee8cc1Swenshuai.xi ///Dynamic scaling depth 885*53ee8cc1Swenshuai.xi MS_U8 u8DynScalingDepth; 886*53ee8cc1Swenshuai.xi ///Dynamic scaling DS buffer on miu1 or miu0 887*53ee8cc1Swenshuai.xi MS_BOOL bEnableMIUSel; 888*53ee8cc1Swenshuai.xi ///Display width 889*53ee8cc1Swenshuai.xi MS_U32 u32AspectWidth; 890*53ee8cc1Swenshuai.xi ///Display height 891*53ee8cc1Swenshuai.xi MS_U32 u32AspectHeight; 892*53ee8cc1Swenshuai.xi } VDEC_DispInfo; 893*53ee8cc1Swenshuai.xi 894*53ee8cc1Swenshuai.xi /// System configuration 895*53ee8cc1Swenshuai.xi typedef struct 896*53ee8cc1Swenshuai.xi { 897*53ee8cc1Swenshuai.xi ///FW binary start address 898*53ee8cc1Swenshuai.xi MS_PHY u32FWBinaryAddr; 899*53ee8cc1Swenshuai.xi ///FW binary size 900*53ee8cc1Swenshuai.xi MS_U32 u32FWBinarySize; 901*53ee8cc1Swenshuai.xi ///FW code buffer start address 902*53ee8cc1Swenshuai.xi MS_PHY u32CodeBufAddr; 903*53ee8cc1Swenshuai.xi ///FW code buffer size 904*53ee8cc1Swenshuai.xi MS_U32 u32CodeBufSize; 905*53ee8cc1Swenshuai.xi ///Frame buffer start address 906*53ee8cc1Swenshuai.xi MS_PHY u32FrameBufAddr; 907*53ee8cc1Swenshuai.xi ///Frame buffer size 908*53ee8cc1Swenshuai.xi MS_U32 u32FrameBufSize; 909*53ee8cc1Swenshuai.xi ///Bitstream buffer start address 910*53ee8cc1Swenshuai.xi MS_PHY u32BitstreamBufAddr; 911*53ee8cc1Swenshuai.xi ///Bitstream buffer size 912*53ee8cc1Swenshuai.xi MS_U32 u32BitstreamBufSize; 913*53ee8cc1Swenshuai.xi ///Driver process buffer start address 914*53ee8cc1Swenshuai.xi MS_PHY u32DrvProcBufAddr; 915*53ee8cc1Swenshuai.xi ///Driver process buffer size 916*53ee8cc1Swenshuai.xi MS_U32 u32DrvProcBufSize; 917*53ee8cc1Swenshuai.xi ///VLC table Binary address (RM only) 918*53ee8cc1Swenshuai.xi MS_PHY u32VlcBinarySrcAddr; 919*53ee8cc1Swenshuai.xi ///VLC table Binary size 920*53ee8cc1Swenshuai.xi MS_U32 u32VlcTabBinarySize; 921*53ee8cc1Swenshuai.xi ///Debug level setting 922*53ee8cc1Swenshuai.xi VDEC_DbgLevel eDbgMsgLevel; 923*53ee8cc1Swenshuai.xi ///FW source type seeting 924*53ee8cc1Swenshuai.xi VDEC_FWSourceType eFWSourceType; 925*53ee8cc1Swenshuai.xi } VDEC_SysCfg; 926*53ee8cc1Swenshuai.xi 927*53ee8cc1Swenshuai.xi /// Video information 928*53ee8cc1Swenshuai.xi typedef struct 929*53ee8cc1Swenshuai.xi { 930*53ee8cc1Swenshuai.xi ///input source mode 931*53ee8cc1Swenshuai.xi VDEC_SrcMode eSrcMode; 932*53ee8cc1Swenshuai.xi /// timestamp type of command queue 933*53ee8cc1Swenshuai.xi VDEC_TimeStampType eTimeStampType; 934*53ee8cc1Swenshuai.xi /// MJPEG scale factor 935*53ee8cc1Swenshuai.xi VDEC_MJpegScaleFactor eMJpegScaleFactor; 936*53ee8cc1Swenshuai.xi /// should be TRUE when codec type is H264 and container is MKV and MP4(MOV) 937*53ee8cc1Swenshuai.xi MS_BOOL bWithoutNalStCode; 938*53ee8cc1Swenshuai.xi /// needless when CodecType is MJPEG and divx311 939*53ee8cc1Swenshuai.xi MS_U32 u32FrameRate; 940*53ee8cc1Swenshuai.xi MS_U32 u32FrameRateBase; 941*53ee8cc1Swenshuai.xi /// if divx311; use u16Width[0]; only need other elements when RV8 942*53ee8cc1Swenshuai.xi MS_U16 u16Width[8]; 943*53ee8cc1Swenshuai.xi /// if divx311; use u16Height[0]; only need other elements when RV8 944*53ee8cc1Swenshuai.xi MS_U16 u16Height[8]; 945*53ee8cc1Swenshuai.xi /// video number sizes (for RM) 946*53ee8cc1Swenshuai.xi MS_U16 u16NumSizes; 947*53ee8cc1Swenshuai.xi } VDEC_VideoInfo; 948*53ee8cc1Swenshuai.xi 949*53ee8cc1Swenshuai.xi /// Frame information 950*53ee8cc1Swenshuai.xi typedef struct 951*53ee8cc1Swenshuai.xi { 952*53ee8cc1Swenshuai.xi /// frame buffer base + the start offset of current displayed luma data. Unit: byte. 953*53ee8cc1Swenshuai.xi MS_PHY u32LumaAddr; 954*53ee8cc1Swenshuai.xi /// frame buffer base + the start offset of current displayed chroma data. Unit: byte. 955*53ee8cc1Swenshuai.xi MS_PHY u32ChromaAddr; 956*53ee8cc1Swenshuai.xi /// Time stamp(DTS, PTS) of current displayed frame. Unit: ms (todo: 90khz) 957*53ee8cc1Swenshuai.xi MS_U32 u32TimeStamp; 958*53ee8cc1Swenshuai.xi /// low part of ID number 959*53ee8cc1Swenshuai.xi MS_U32 u32ID_L; 960*53ee8cc1Swenshuai.xi /// high part of ID number or timestamp 961*53ee8cc1Swenshuai.xi MS_U32 u32ID_H; 962*53ee8cc1Swenshuai.xi /// pitch 963*53ee8cc1Swenshuai.xi MS_U16 u16Pitch; 964*53ee8cc1Swenshuai.xi /// width 965*53ee8cc1Swenshuai.xi MS_U16 u16Width; 966*53ee8cc1Swenshuai.xi /// height 967*53ee8cc1Swenshuai.xi MS_U16 u16Height; 968*53ee8cc1Swenshuai.xi ///< Frame type: I, P, B frame 969*53ee8cc1Swenshuai.xi VDEC_FrameType eFrameType; 970*53ee8cc1Swenshuai.xi ///< Field type: Top, Bottom, Both 971*53ee8cc1Swenshuai.xi VDEC_FieldType eFieldType; 972*53ee8cc1Swenshuai.xi } VDEC_FrameInfo; 973*53ee8cc1Swenshuai.xi 974*53ee8cc1Swenshuai.xi /// Extension display information 975*53ee8cc1Swenshuai.xi typedef struct 976*53ee8cc1Swenshuai.xi { 977*53ee8cc1Swenshuai.xi /// vertical size from sequene_display_extension 978*53ee8cc1Swenshuai.xi MS_U16 u16VSize; 979*53ee8cc1Swenshuai.xi /// horizontal size from sequene_display_extension 980*53ee8cc1Swenshuai.xi MS_U16 u16HSize; 981*53ee8cc1Swenshuai.xi /// vertical offset from picture_display_extension 982*53ee8cc1Swenshuai.xi MS_S16 s16VOffset; 983*53ee8cc1Swenshuai.xi /// horizontal offset from picture_display_extension 984*53ee8cc1Swenshuai.xi MS_S16 s16HOffset; 985*53ee8cc1Swenshuai.xi } VDEC_ExtDispInfo; 986*53ee8cc1Swenshuai.xi 987*53ee8cc1Swenshuai.xi /// Display frame information 988*53ee8cc1Swenshuai.xi typedef struct 989*53ee8cc1Swenshuai.xi { 990*53ee8cc1Swenshuai.xi ///< frame information 991*53ee8cc1Swenshuai.xi VDEC_FrameInfo stFrmInfo; 992*53ee8cc1Swenshuai.xi ///< firmware private data 993*53ee8cc1Swenshuai.xi MS_U32 u32PriData; 994*53ee8cc1Swenshuai.xi ///< index used by apiVDEC to manage VDEC_DispQ[][] 995*53ee8cc1Swenshuai.xi MS_U32 u32Idx; 996*53ee8cc1Swenshuai.xi ///< display information 997*53ee8cc1Swenshuai.xi VDEC_DispInfo stDispInfo; 998*53ee8cc1Swenshuai.xi } VDEC_DispFrame; 999*53ee8cc1Swenshuai.xi 1000*53ee8cc1Swenshuai.xi /// Time code structure 1001*53ee8cc1Swenshuai.xi typedef struct 1002*53ee8cc1Swenshuai.xi { 1003*53ee8cc1Swenshuai.xi /// time_code_hours 1004*53ee8cc1Swenshuai.xi MS_U8 u8TimeCodeHr; 1005*53ee8cc1Swenshuai.xi /// time_code_minutes 1006*53ee8cc1Swenshuai.xi MS_U8 u8TimeCodeMin; 1007*53ee8cc1Swenshuai.xi /// time_code_seconds 1008*53ee8cc1Swenshuai.xi MS_U8 u8TimeCodeSec; 1009*53ee8cc1Swenshuai.xi /// time_code_pictures 1010*53ee8cc1Swenshuai.xi MS_U8 u8TimeCodePic; 1011*53ee8cc1Swenshuai.xi /// drop_frame_flag 1012*53ee8cc1Swenshuai.xi MS_U8 u8DropFrmFlag; 1013*53ee8cc1Swenshuai.xi /// reserved fields for 4-byte alignment 1014*53ee8cc1Swenshuai.xi MS_U8 u8Reserved[3]; 1015*53ee8cc1Swenshuai.xi } VDEC_TimeCode; 1016*53ee8cc1Swenshuai.xi 1017*53ee8cc1Swenshuai.xi /// VDEC frame buffer reduction 1018*53ee8cc1Swenshuai.xi typedef struct 1019*53ee8cc1Swenshuai.xi { 1020*53ee8cc1Swenshuai.xi VDEC_FBReductionType eLumaFBReduction; 1021*53ee8cc1Swenshuai.xi VDEC_FBReductionType eChromaFBReduction; 1022*53ee8cc1Swenshuai.xi MS_BOOL bEnableAutoMode; /// 0: Disable, 1: Enable 1023*53ee8cc1Swenshuai.xi } VDEC_FBReduction; 1024*53ee8cc1Swenshuai.xi 1025*53ee8cc1Swenshuai.xi /// Initial parameter 1026*53ee8cc1Swenshuai.xi typedef struct 1027*53ee8cc1Swenshuai.xi { 1028*53ee8cc1Swenshuai.xi /// codec type 1029*53ee8cc1Swenshuai.xi VDEC_CodecType eCodecType; 1030*53ee8cc1Swenshuai.xi /// system configuration 1031*53ee8cc1Swenshuai.xi VDEC_SysCfg SysConfig; 1032*53ee8cc1Swenshuai.xi /// video information from container 1033*53ee8cc1Swenshuai.xi VDEC_VideoInfo VideoInfo; 1034*53ee8cc1Swenshuai.xi /// dynamic scaling control bit 1035*53ee8cc1Swenshuai.xi MS_BOOL EnableDynaScale; 1036*53ee8cc1Swenshuai.xi /// switch for display decode error frame or not 1037*53ee8cc1Swenshuai.xi MS_BOOL bDisableDropErrFrame; 1038*53ee8cc1Swenshuai.xi /// switch for error concealment 1039*53ee8cc1Swenshuai.xi MS_BOOL bDisableErrConceal; 1040*53ee8cc1Swenshuai.xi /// enable repeat last field when repeat happened at interlace stream 1041*53ee8cc1Swenshuai.xi MS_BOOL bRepeatLastField; 1042*53ee8cc1Swenshuai.xi /// threshold to judge error frame 1043*53ee8cc1Swenshuai.xi MS_U8 u8ErrThreshold; 1044*53ee8cc1Swenshuai.xi /// dynamic scaling virtual box Width 1045*53ee8cc1Swenshuai.xi MS_U32 u32DSVirtualBoxWidth; 1046*53ee8cc1Swenshuai.xi /// dynamic scaling virtual box Height 1047*53ee8cc1Swenshuai.xi MS_U32 u32DSVirtualBoxHeight; 1048*53ee8cc1Swenshuai.xi } VDEC_InitParam; 1049*53ee8cc1Swenshuai.xi 1050*53ee8cc1Swenshuai.xi /// Initial parameter, version = 1 1051*53ee8cc1Swenshuai.xi typedef struct 1052*53ee8cc1Swenshuai.xi { 1053*53ee8cc1Swenshuai.xi /// init param version : 1 1054*53ee8cc1Swenshuai.xi MS_U32 u32Version; 1055*53ee8cc1Swenshuai.xi /// codec type 1056*53ee8cc1Swenshuai.xi VDEC_CodecType eCodecType; 1057*53ee8cc1Swenshuai.xi /// system configuration 1058*53ee8cc1Swenshuai.xi VDEC_SysCfg SysConfig; 1059*53ee8cc1Swenshuai.xi /// video information from container 1060*53ee8cc1Swenshuai.xi VDEC_VideoInfo VideoInfo; 1061*53ee8cc1Swenshuai.xi /// dynamic scaling control bit 1062*53ee8cc1Swenshuai.xi MS_BOOL EnableDynaScale; 1063*53ee8cc1Swenshuai.xi /// switch for display decode error frame or not 1064*53ee8cc1Swenshuai.xi MS_BOOL bDisableDropErrFrame; 1065*53ee8cc1Swenshuai.xi /// switch for error concealment 1066*53ee8cc1Swenshuai.xi MS_BOOL bDisableErrConceal; 1067*53ee8cc1Swenshuai.xi /// enable repeat last field when repeat happened at interlace stream 1068*53ee8cc1Swenshuai.xi MS_BOOL bRepeatLastField; 1069*53ee8cc1Swenshuai.xi /// threshold to judge error frame 1070*53ee8cc1Swenshuai.xi MS_U8 u8ErrThreshold; 1071*53ee8cc1Swenshuai.xi /// dynamic scaling virtual box Width 1072*53ee8cc1Swenshuai.xi MS_U32 u32DSVirtualBoxWidth; 1073*53ee8cc1Swenshuai.xi /// dynamic scaling virtual box Height 1074*53ee8cc1Swenshuai.xi MS_U32 u32DSVirtualBoxHeight; 1075*53ee8cc1Swenshuai.xi /// vdec frame buffer reduction setting 1076*53ee8cc1Swenshuai.xi VDEC_FBReduction stFBReduction; 1077*53ee8cc1Swenshuai.xi } VDEC_InitParam_EX1; 1078*53ee8cc1Swenshuai.xi 1079*53ee8cc1Swenshuai.xi /// Decode Command 1080*53ee8cc1Swenshuai.xi typedef struct 1081*53ee8cc1Swenshuai.xi { 1082*53ee8cc1Swenshuai.xi /// ID (high 4-bytes) or timestamp of payload (high byte) 1083*53ee8cc1Swenshuai.xi MS_U32 u32ID_H; 1084*53ee8cc1Swenshuai.xi /// ID (low 4-bytes) 1085*53ee8cc1Swenshuai.xi MS_U32 u32ID_L; 1086*53ee8cc1Swenshuai.xi /// start address of payload 1087*53ee8cc1Swenshuai.xi MS_U32 u32StAddr; 1088*53ee8cc1Swenshuai.xi /// size of payload 1089*53ee8cc1Swenshuai.xi MS_U32 u32Size; 1090*53ee8cc1Swenshuai.xi /// timestamp of payload 1091*53ee8cc1Swenshuai.xi MS_U32 u32Timestamp; 1092*53ee8cc1Swenshuai.xi } VDEC_DecCmd; 1093*53ee8cc1Swenshuai.xi 1094*53ee8cc1Swenshuai.xi /// Display Command 1095*53ee8cc1Swenshuai.xi typedef struct 1096*53ee8cc1Swenshuai.xi { 1097*53ee8cc1Swenshuai.xi /// ID (high 4-bytes) 1098*53ee8cc1Swenshuai.xi MS_U32 u32ID_H; 1099*53ee8cc1Swenshuai.xi /// ID (low 4-bytes) 1100*53ee8cc1Swenshuai.xi MS_U32 u32ID_L; 1101*53ee8cc1Swenshuai.xi /// action of command 1102*53ee8cc1Swenshuai.xi VDEC_DispCmdAction eAction; 1103*53ee8cc1Swenshuai.xi } VDEC_DispCmd; 1104*53ee8cc1Swenshuai.xi 1105*53ee8cc1Swenshuai.xi typedef struct 1106*53ee8cc1Swenshuai.xi { 1107*53ee8cc1Swenshuai.xi MS_BOOL bEnable; 1108*53ee8cc1Swenshuai.xi MS_U32 u32Delay; 1109*53ee8cc1Swenshuai.xi MS_U16 u16Tolerance; 1110*53ee8cc1Swenshuai.xi } VDEC_AVSyncCfg; 1111*53ee8cc1Swenshuai.xi 1112*53ee8cc1Swenshuai.xi 1113*53ee8cc1Swenshuai.xi typedef void (*VDEC_EventCb)(MS_U32 eFlag, void *param); 1114*53ee8cc1Swenshuai.xi 1115*53ee8cc1Swenshuai.xi typedef struct 1116*53ee8cc1Swenshuai.xi { 1117*53ee8cc1Swenshuai.xi MS_U32 u32Version; 1118*53ee8cc1Swenshuai.xi /// top, bottom or frame 1119*53ee8cc1Swenshuai.xi VDEC_PicStructure u8PicStructure; 1120*53ee8cc1Swenshuai.xi MS_U8 u8TopFieldFirst; 1121*53ee8cc1Swenshuai.xi MS_U16 u16TempRef; 1122*53ee8cc1Swenshuai.xi MS_U32 u32Pts; 1123*53ee8cc1Swenshuai.xi /// address of cc data 1124*53ee8cc1Swenshuai.xi MS_U32 u32UserDataBuf; 1125*53ee8cc1Swenshuai.xi /// size of cc data 1126*53ee8cc1Swenshuai.xi MS_U32 u32UserDataSize; 1127*53ee8cc1Swenshuai.xi } VDEC_CC_Info; 1128*53ee8cc1Swenshuai.xi 1129*53ee8cc1Swenshuai.xi ///CC input parameters for mstar proprietary CC library 1130*53ee8cc1Swenshuai.xi typedef struct 1131*53ee8cc1Swenshuai.xi { 1132*53ee8cc1Swenshuai.xi MS_U32 u32Ver; ///version of this structure 1133*53ee8cc1Swenshuai.xi MS_U32 u32Val; 1134*53ee8cc1Swenshuai.xi } VDEC_CC_InputPara; 1135*53ee8cc1Swenshuai.xi 1136*53ee8cc1Swenshuai.xi typedef struct 1137*53ee8cc1Swenshuai.xi { 1138*53ee8cc1Swenshuai.xi MS_U32 u32OutputFrameRate; ///< output frame rate, unit:vsync count 1139*53ee8cc1Swenshuai.xi MS_U8 u8Interlace; ///< output scan:0:progress, 1:interlace 1140*53ee8cc1Swenshuai.xi } VDEC_FRC_OutputParam; 1141*53ee8cc1Swenshuai.xi 1142*53ee8cc1Swenshuai.xi typedef struct 1143*53ee8cc1Swenshuai.xi { 1144*53ee8cc1Swenshuai.xi MS_U8 u8Frm_packing_arr_cnl_flag; 1145*53ee8cc1Swenshuai.xi MS_U8 u8Frm_packing_arr_type; 1146*53ee8cc1Swenshuai.xi MS_U8 u8content_interpretation_type; 1147*53ee8cc1Swenshuai.xi MS_U8 u1Quincunx_sampling_flag; 1148*53ee8cc1Swenshuai.xi 1149*53ee8cc1Swenshuai.xi MS_U8 u1Spatial_flipping_flag; 1150*53ee8cc1Swenshuai.xi MS_U8 u1Frame0_flipping_flag; 1151*53ee8cc1Swenshuai.xi MS_U8 u1Field_views_flag; 1152*53ee8cc1Swenshuai.xi MS_U8 u1Current_frame_is_frame0_flag; 1153*53ee8cc1Swenshuai.xi 1154*53ee8cc1Swenshuai.xi MS_U8 u1Frame0_self_contained_flag; 1155*53ee8cc1Swenshuai.xi MS_U8 u1Frame1_self_contained_flag; 1156*53ee8cc1Swenshuai.xi MS_U8 u4Frame0_grid_position_x; 1157*53ee8cc1Swenshuai.xi MS_U8 u4Frame0_grid_position_y; 1158*53ee8cc1Swenshuai.xi 1159*53ee8cc1Swenshuai.xi MS_U8 u4Frame1_grid_position_x; 1160*53ee8cc1Swenshuai.xi MS_U8 u4Frame1_grid_position_y; 1161*53ee8cc1Swenshuai.xi MS_U8 u8Reserved01; 1162*53ee8cc1Swenshuai.xi MS_U8 u8Reserved02; 1163*53ee8cc1Swenshuai.xi }VDEC_Frame_packing_SEI; 1164*53ee8cc1Swenshuai.xi 1165*53ee8cc1Swenshuai.xi typedef enum 1166*53ee8cc1Swenshuai.xi { 1167*53ee8cc1Swenshuai.xi E_VDEC_TRICKPLAY2X_COUNTVSYNC = 0, 1168*53ee8cc1Swenshuai.xi E_VDEC_TRICKPLAY2X_AVSYNC 1169*53ee8cc1Swenshuai.xi }VDEC_TrickPlay2xMode; 1170*53ee8cc1Swenshuai.xi 1171*53ee8cc1Swenshuai.xi 1172*53ee8cc1Swenshuai.xi typedef struct 1173*53ee8cc1Swenshuai.xi { 1174*53ee8cc1Swenshuai.xi VDEC_CodecType eCodecType; 1175*53ee8cc1Swenshuai.xi MS_PHY u32DataAddr; 1176*53ee8cc1Swenshuai.xi MS_U32 u32MemUsageSize; 1177*53ee8cc1Swenshuai.xi MS_U16 u16DataSize; 1178*53ee8cc1Swenshuai.xi } VDEC_FbMemUsage_Param; 1179*53ee8cc1Swenshuai.xi 1180*53ee8cc1Swenshuai.xi typedef struct 1181*53ee8cc1Swenshuai.xi { 1182*53ee8cc1Swenshuai.xi MS_U8 u8RepeatPeriod; 1183*53ee8cc1Swenshuai.xi MS_U8 u8DropPeriod; 1184*53ee8cc1Swenshuai.xi }VDEC_Slow_Sync; 1185*53ee8cc1Swenshuai.xi 1186*53ee8cc1Swenshuai.xi 1187*53ee8cc1Swenshuai.xi 1188*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1189*53ee8cc1Swenshuai.xi // Function and Variable 1190*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1191*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetLibVer(const MSIF_Version **ppVersion); 1192*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetInfo(const VDEC_Info **ppInfo); 1193*53ee8cc1Swenshuai.xi MS_BOOL MApi_VDEC_GetStatus(VDEC_Status *pStatus); 1194*53ee8cc1Swenshuai.xi MS_BOOL MApi_VDEC_CheckCaps(VDEC_CodecType eCodecType); 1195*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_EnableTurboMode(MS_BOOL bEnable); 1196*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_Init(VDEC_InitParam *pInitParam); 1197*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_Init_EX(void *pInfo, MS_U32 u32Size); 1198*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_Rst(void); 1199*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_Exit(void); 1200*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CheckDispInfoRdy(void); 1201*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetFrcMode(VDEC_FrcMode eFrcMode); 1202*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetDynScalingParams( MS_PHY u32Addr , MS_U32 u32Size); 1203*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetDbgLevel(VDEC_DbgLevel eDbgLevel); 1204*53ee8cc1Swenshuai.xi 1205*53ee8cc1Swenshuai.xi 1206*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_Play(void); 1207*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_Pause(void); 1208*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_Resume(void); 1209*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_StepDisp(void); 1210*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsStepDispDone(void); 1211*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_StepDecode(void); 1212*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsStepDecodeDone(void); 1213*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetTrickMode(VDEC_TrickDec eTrickDec); 1214*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetBlockDisplay(MS_BOOL bEnable); 1215*53ee8cc1Swenshuai.xi 1216*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_EnableESBuffMalloc(MS_BOOL bEnable); 1217*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetESBuffVacancy(void* pData); 1218*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetESBuff(MS_U32 u32ReqSize, MS_U32* u32AvailSize, MS_PHY* u32Addr); 1219*53ee8cc1Swenshuai.xi 1220*53ee8cc1Swenshuai.xi /* 1221*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_PushQueue(MS_U32 u32StAddr, 1222*53ee8cc1Swenshuai.xi MS_U32 u32Size, 1223*53ee8cc1Swenshuai.xi MS_U32 u32Timestamp, 1224*53ee8cc1Swenshuai.xi MS_U32 u32ID_H, 1225*53ee8cc1Swenshuai.xi MS_U32 u32ID_L); 1226*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetQueueVacancy(void); 1227*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_FlushQueue(void); 1228*53ee8cc1Swenshuai.xi */ 1229*53ee8cc1Swenshuai.xi 1230*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_PushDecQ(VDEC_DecCmd *pCmd); 1231*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_PushDispQ(VDEC_DispCmd *pCmd); 1232*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_Flush(VDEC_FreezePicSelect eFreezePic); 1233*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_EnableLastFrameShow(MS_BOOL bEnable); 1234*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetSpeed(VDEC_SpeedType eSpeedType, VDEC_DispSpeed eSpeed); 1235*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetFreezeDisp(MS_BOOL bEnable); 1236*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetBlueScreen(MS_BOOL bOn); 1237*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_ResetPTS(MS_U32 u32PtsBase); 1238*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_AVSyncOn(MS_BOOL bOn, MS_U32 u32SyncDelay, MS_U16 u16SyncTolerance); 1239*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetAVSyncFreerunThreshold(MS_U32 u32Threshold ); 1240*53ee8cc1Swenshuai.xi 1241*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetDispInfo(VDEC_DispInfo *pDispinfo); 1242*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsAVSyncOn(void); 1243*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsWithValidStream(void); 1244*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsDispFinish(void); 1245*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsFrameRdy(void); 1246*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsIFrameFound(void); 1247*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsSeqChg(void); 1248*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsReachSync(void); 1249*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsFreerun(void); 1250*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsStartSync(void); 1251*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsWithLowDelay(void); 1252*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsAllBufferEmpty(void); 1253*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetExtDispInfo(VDEC_ExtDispInfo *pExtDispinfo); 1254*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetDecFrameInfo(VDEC_FrameInfo *pFrmInfo); 1255*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetDispFrameInfo(VDEC_FrameInfo *pFrmInfo); 1256*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetNextDispFrame(VDEC_DispFrame** ppDispFrm); 1257*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_DisplayFrame(VDEC_DispFrame *pDispFrm); 1258*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_ReleaseFrame(VDEC_DispFrame *pDispFrm); 1259*53ee8cc1Swenshuai.xi 1260*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetDecTimeCode(VDEC_TimeCode* pTimeCode); 1261*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetDispTimeCode(VDEC_TimeCode* pTimeCode); 1262*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetEvent(MS_U32 u32EnableEvent, VDEC_EventCb pfn, void* param); 1263*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_UnsetEvent(MS_U32 u32EnableEvent); 1264*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetEvent_EX(VDEC_CB_TYPE cb_type, MS_U32 u32EnableEvent, VDEC_EventCb pfn, void* param); 1265*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_UnsetEvent_EX(VDEC_CB_TYPE cb_type, MS_U32 u32EnableEvent); 1266*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetEventInfo(MS_U32* u32EventFlag); 1267*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetPatchPattern(VDEC_PatchPattern ePatternType, MS_U32 *pu32Staddr, MS_U32 *pu32Len); 1268*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_FireDecCmd(void); 1269*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SeekToPTS(MS_U32 u32PTS); 1270*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SkipToPTS(MS_U32 u32PTS); 1271*53ee8cc1Swenshuai.xi 1272*53ee8cc1Swenshuai.xi // Advanced Settings / Mode 1273*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_DisableDeblocking(MS_BOOL bDisable); 1274*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_DisableQuarterPixel(MS_BOOL bDisable); 1275*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetAutoRmLstZeroByte(MS_BOOL bOn); 1276*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetBalanceBW(MS_U8 u8QuarPixelTH, MS_U8 u8DeBlockingTH, MS_U8 u8UpperBound, MS_U8 u8SafeCoef); 1277*53ee8cc1Swenshuai.xi 1278*53ee8cc1Swenshuai.xi MS_U8 MApi_VDEC_GetActiveFormat(void); 1279*53ee8cc1Swenshuai.xi MS_U8 MApi_VDEC_GetColourPrimaries(void); 1280*53ee8cc1Swenshuai.xi MS_U8 MApi_VDEC_GetGOPCnt(void); 1281*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetESWritePtr(void); 1282*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetESReadPtr(void); 1283*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetPTS(void); 1284*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetNextPTS(void); 1285*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetErrCode(void); 1286*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetErrCnt(void); 1287*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetBitsRate(void); 1288*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetFrameCnt(void); 1289*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetSkipCnt(void); 1290*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetDropCnt(void); 1291*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetDecQVacancy(void); 1292*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetDispQVacancy(void); 1293*53ee8cc1Swenshuai.xi MS_BOOL MApi_VDEC_Is32PullDown(void); 1294*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_IsAlive(void); 1295*53ee8cc1Swenshuai.xi MS_S64 MApi_VDEC_GetVideoPtsStcDelta(void); 1296*53ee8cc1Swenshuai.xi MS_BOOL MApi_VDEC_IsCCAvailable(void); 1297*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetCCInfo(void *pInfo, MS_U32 u32Size); 1298*53ee8cc1Swenshuai.xi 1299*53ee8cc1Swenshuai.xi VDEC_TrickDec MApi_VDEC_GetTrickMode(void); 1300*53ee8cc1Swenshuai.xi VDEC_CodecType MApi_VDEC_GetActiveCodecType(void); 1301*53ee8cc1Swenshuai.xi 1302*53ee8cc1Swenshuai.xi VDEC_Result MDrv_VDEC_GenPattern(VDEC_PatternType ePatternType , MS_PHY u32Addr , MS_U32* u32Size); 1303*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GenPattern(VDEC_PatternType ePatternType, MS_PHY u32Addr, MS_U32 *pu32Size); 1304*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetPatternLeastLength(VDEC_PatternType ePatternType ); 1305*53ee8cc1Swenshuai.xi 1306*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_MHEG_DecodeIFrame(MS_PHY u32FrameBufAddr, 1307*53ee8cc1Swenshuai.xi MS_PHY u32SrcSt, 1308*53ee8cc1Swenshuai.xi MS_PHY u32SrcEnd); 1309*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_MHEG_IsIFrameDecoding(void); 1310*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_MHEG_RstIFrameDec(void); 1311*53ee8cc1Swenshuai.xi 1312*53ee8cc1Swenshuai.xi //ATSC Closed Caption control 1313*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_StartParsing(VDEC_CCCfg *pCCParam); 1314*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_StopParsing(void); 1315*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_GetWritePtr(MS_U32 *pWrite); 1316*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_GetReadPtr(MS_U32 *pRead); 1317*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_UpdateReadPtr(MS_U32 u32EachPacketSize); 1318*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_GetIsOverflow(MS_BOOL *pbOverflow); 1319*53ee8cc1Swenshuai.xi 1320*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_Init(MS_U32 *pIn); 1321*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_SetCfg(VDEC_CCFormat eFmt, VDEC_CCType eType, MS_U32 *pIn); 1322*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_SetBuffStartAdd(VDEC_CCFormat eFmt, MS_U32 *pIn); 1323*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_UpdateWriteAdd(VDEC_CCFormat eFmt, MS_U32 *pIn); 1324*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_UpdateReadAdd(VDEC_CCFormat eFmt, MS_U32 *pIn); 1325*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_DisableParsing(VDEC_CCFormat eFmt); 1326*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_GetIsRstDone(VDEC_CCFormat eFmt); 1327*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_CC_GetIsBuffOverflow(VDEC_CCFormat eFmt); 1328*53ee8cc1Swenshuai.xi MS_PHY MApi_VDEC_CC_GetWriteAdd(VDEC_CCFormat eFmt); 1329*53ee8cc1Swenshuai.xi MS_PHY MApi_VDEC_CC_GetReadAdd(VDEC_CCFormat eFmt); 1330*53ee8cc1Swenshuai.xi 1331*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_DbgCmd(MS_U32 u8Cmd, MS_U32 u32CmdArg); 1332*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_DbgSetData(MS_VIRT u32Addr, MS_U32 u32Data); 1333*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_DbgGetData(MS_VIRT u32Addr, MS_U32 *u32Data); 1334*53ee8cc1Swenshuai.xi 1335*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SetControl(VDEC_User_Cmd cmd_id, MS_VIRT param); 1336*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_PreSetControl(VDEC_User_Cmd cmd_id, MS_U32 param); 1337*53ee8cc1Swenshuai.xi 1338*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetFwVersion(VDEC_FwType eFwType); 1339*53ee8cc1Swenshuai.xi 1340*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_GetDispCnt(void); 1341*53ee8cc1Swenshuai.xi 1342*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_GetControl(VDEC_User_Cmd cmd_id, MS_U32 *param); 1343*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_FlushPTSBuf(void); 1344*53ee8cc1Swenshuai.xi 1345*53ee8cc1Swenshuai.xi //System preseting function, it should be called when system init. 1346*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_SystemPreSetControl(VDEC_User_Cmd cmd_id, void *pParam); 1347*53ee8cc1Swenshuai.xi 1348*53ee8cc1Swenshuai.xi 1349*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetPowerState(EN_POWER_MODE u16PowerState); 1350*53ee8cc1Swenshuai.xi 1351*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetLibVer(const MSIF_Version **ppVersion); 1352*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetInfo(const VDEC_Info **ppInfo); 1353*53ee8cc1Swenshuai.xi MS_BOOL MApi_VDEC_V2_GetStatus(VDEC_Status *pStatus); 1354*53ee8cc1Swenshuai.xi MS_BOOL MApi_VDEC_V2_CheckCaps(VDEC_CodecType eCodecType); 1355*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_EnableTurboMode(MS_BOOL bEnable); 1356*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_Init(VDEC_InitParam *pInitParam); 1357*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_Init_EX(void *pInfo, MS_U32 u32Size); 1358*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_Rst(void); 1359*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_Exit(MS_BOOL); 1360*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CheckDispInfoRdy(void); 1361*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetFrcMode(VDEC_FrcMode eFrcMode); 1362*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetDynScalingParams( MS_PHY u32Addr , MS_U32 u32Size); 1363*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_Play(void); 1364*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_Pause(void); 1365*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_Resume(void); 1366*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_StepDisp(void); 1367*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsStepDispDone(void); 1368*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SeekToPTS(MS_U32 u32PTS); 1369*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SkipToPTS(MS_U32 u32PTS); 1370*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_StepDecode(void); 1371*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsStepDecodeDone(void); 1372*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetTrickMode(VDEC_TrickDec eTrickDec); 1373*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_PushDecQ(VDEC_DecCmd *pCmd); 1374*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_FireDecCmd(void); 1375*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetDecQVacancy(void); 1376*53ee8cc1Swenshuai.xi MS_BOOL MApi_VDEC_V2_IsCCAvailable(void); 1377*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetCCInfo(void *pInfo, MS_U32 u32Size); 1378*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_Flush(VDEC_FreezePicSelect eFreezePic); 1379*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetESWritePtr(void); 1380*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetESReadPtr(void); 1381*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_EnableLastFrameShow(MS_BOOL bEnable); 1382*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsDispFinish(void); 1383*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetSpeed(VDEC_SpeedType eSpeedType, VDEC_DispSpeed eSpeed); 1384*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsFrameRdy(void); 1385*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetFreezeDisp(MS_BOOL bEnable); 1386*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetBlueScreen(MS_BOOL bOn); 1387*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_ResetPTS(MS_U32 u32PtsBase); 1388*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_AVSyncOn(MS_BOOL bOn, MS_U32 u32SyncDelay, MS_U16 u16SyncTolerance); 1389*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetAVSyncFreerunThreshold(MS_U32 u32Threshold ); 1390*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsAVSyncOn(void); 1391*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetPTS(void); 1392*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetNextPTS(void); 1393*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsStartSync(void); 1394*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsReachSync(void); 1395*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsFreerun(void); 1396*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_MHEG_DecodeIFrame(MS_PHY u32FrameBufAddr, 1397*53ee8cc1Swenshuai.xi MS_PHY u32SrcSt, 1398*53ee8cc1Swenshuai.xi MS_PHY u32SrcEnd); 1399*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_MHEG_IsIFrameDecoding(void); 1400*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_MHEG_RstIFrameDec(void); 1401*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetErrCode(void); 1402*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetErrCnt(void); 1403*53ee8cc1Swenshuai.xi VDEC_CodecType MApi_VDEC_V2_GetActiveCodecType(void); 1404*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetBitsRate(void); 1405*53ee8cc1Swenshuai.xi MS_BOOL MApi_VDEC_V2_Is32PullDown(void); 1406*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsAlive(void); 1407*53ee8cc1Swenshuai.xi MS_S64 MApi_VDEC_V2_GetVideoPtsStcDelta(void); 1408*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsWithValidStream(void); 1409*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsIFrameFound(void); 1410*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsWithLowDelay(void); 1411*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsAllBufferEmpty(void); 1412*53ee8cc1Swenshuai.xi MS_U8 MApi_VDEC_V2_GetGOPCnt(void); 1413*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetFrameCnt(void); 1414*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetSkipCnt(void); 1415*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetDropCnt(void); 1416*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetDispInfo(VDEC_DispInfo *pDispinfo); 1417*53ee8cc1Swenshuai.xi VDEC_TrickDec MApi_VDEC_V2_GetTrickMode(void); 1418*53ee8cc1Swenshuai.xi MS_U8 MApi_VDEC_V2_GetActiveFormat(void); 1419*53ee8cc1Swenshuai.xi MS_U8 MApi_VDEC_V2_GetColourPrimaries(void); 1420*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetHWKey(MS_U8 *pu8Key); 1421*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_IsSeqChg(void); 1422*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetDbgLevel(VDEC_DbgLevel eDbgLevel); 1423*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetDecFrameInfo(VDEC_FrameInfo* pFrmInfo); 1424*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetDispFrameInfo(VDEC_FrameInfo *pFrmInfo); 1425*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetExtDispInfo(VDEC_ExtDispInfo *pExtDispinfo); 1426*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetDecTimeCode(VDEC_TimeCode* pTimeCode); 1427*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetDispTimeCode(VDEC_TimeCode* pTimeCode); 1428*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_StartParsing(VDEC_CCCfg* pCCParam); 1429*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_StopParsing(void); 1430*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_GetWritePtr(MS_U32* pu32Write); 1431*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_GetReadPtr(MS_U32* pu32Write); 1432*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_UpdateReadPtr(MS_U32 u32EachPacketSize); 1433*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_GetIsOverflow(MS_BOOL* pbOverflow); 1434*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetEvent(MS_U32 u32EnableEvent, VDEC_EventCb pfn, void* param); 1435*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_UnsetEvent(MS_U32 u32EnableEvent); 1436*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetEvent_EX(VDEC_CB_TYPE cb_type, MS_U32 u32EnableEvent, VDEC_EventCb pfn, void* param); 1437*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_UnsetEvent_EX(VDEC_CB_TYPE cb_type, MS_U32 u32EnableEvent); 1438*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetEventInfo(MS_U32* u32EventFlag); 1439*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GenPattern(VDEC_PatternType ePatternType, MS_PHY u32Addr, MS_U32 *pu32Size); 1440*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetPatternLeastLength(VDEC_PatternType ePatternType ); 1441*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_DisableDeblocking(MS_BOOL bDisable); 1442*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_DisableQuarterPixel(MS_BOOL bDisable); 1443*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetAutoRmLstZeroByte(MS_BOOL bOn); 1444*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetBalanceBW(MS_U8 u8QuarPixelTH, MS_U8 u8DeBlockingTH, MS_U8 u8UpperBound, MS_U8 u8SafeCoef); 1445*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_DbgDumpStatus(void); 1446*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetControl(VDEC_User_Cmd cmd_id, MS_U32 param); 1447*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetControl(VDEC_User_Cmd cmd_id, MS_U32 *param); 1448*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetDispCnt(void); 1449*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetFwVersion(VDEC_FwType eFwType); 1450*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_SetBlockDisplay(MS_BOOL bEnable); 1451*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_EnableESBuffMalloc(MS_BOOL bEnable); 1452*53ee8cc1Swenshuai.xi MS_U32 MApi_VDEC_V2_GetESBuffVacancy(void* pData); 1453*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetESBuff(MS_U32 u32ReqSize, MS_U32* u32AvailSize, MS_PHY* u32Addr); 1454*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_GetNextDispFrame(VDEC_DispFrame** ppDispFrm); 1455*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_DisplayFrame(VDEC_DispFrame *pDispFrm); 1456*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_DisplayFrame(VDEC_DispFrame *pDispFrm); 1457*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_FlushPTSBuf(void); 1458*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CaptureFrame(MS_U32 u32FrmPriData, MS_BOOL bEnable); 1459*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_Init(MS_U32 *pIn); 1460*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_SetCfg(VDEC_CCFormat eFmt, VDEC_CCType eType, MS_U32 *pIn); 1461*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_SetBuffStartAdd(VDEC_CCFormat eFmt, MS_U32 *pIn); 1462*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_UpdateWriteAdd(VDEC_CCFormat eFmt, MS_U32 *pIn); 1463*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_UpdateReadAdd(VDEC_CCFormat eFmt, MS_U32 *pIn); 1464*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_DisableParsing(VDEC_CCFormat eFmt); 1465*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_GetInfo(VDEC_CCFormat eFmt, VDEC_CCInfoCmd eCmd, MS_U32 *pOut); 1466*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_GetIsRstDone(VDEC_CCFormat eFmt); 1467*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_GetIsBuffOverflow(VDEC_CCFormat eFmt); 1468*53ee8cc1Swenshuai.xi MS_PHY MApi_VDEC_V2_CC_GetWriteAdd(VDEC_CCFormat eFmt); 1469*53ee8cc1Swenshuai.xi MS_PHY MApi_VDEC_V2_CC_GetReadAdd(VDEC_CCFormat eFmt); 1470*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_SystemPreSetControl(VDEC_User_Cmd cmd_id, void *pParam); 1471*53ee8cc1Swenshuai.xi VDEC_Result MApi_VDEC_V2_CC_PreSetControl(VDEC_User_Cmd cmd_id, MS_U32 param); 1472*53ee8cc1Swenshuai.xi 1473*53ee8cc1Swenshuai.xi 1474*53ee8cc1Swenshuai.xi 1475*53ee8cc1Swenshuai.xi 1476*53ee8cc1Swenshuai.xi 1477*53ee8cc1Swenshuai.xi 1478*53ee8cc1Swenshuai.xi #ifdef __cplusplus 1479*53ee8cc1Swenshuai.xi } 1480*53ee8cc1Swenshuai.xi #endif 1481*53ee8cc1Swenshuai.xi 1482*53ee8cc1Swenshuai.xi #endif // _API_VDEC_H_ 1483