/* * Copyright (c) 2011 Intel Corporation. All Rights Reserved. * Copyright (c) Imagination Technologies Limited, UK * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* ****************************************************************************** Profile calculation masks ******************************************************************************/ #define iWMVA_MASK (0x08) #define iWMV9_MASK (0x80) /* system environment dependent switches */ //! Pack decoded bitplane bits into bytes (instead of 1-bit per byte) //#define BITPLANE_PACKED_BYTES //! Generate bitplane test vectors #define BITPLANE_TEST_VECTORS (0) //! Measure bitplane decode time #define BITPLANE_DECODE_TIME (0) //! Measure time spent parsing the picture header #define PARSE_HEADER_TIME (0) //! Use VC1 reference decoder implementation for bitplane decoding #define REFDEC_BITPLANE_DECODER (0) //! Interleave individual bitplanes into packed format #define VC1_INTERLEAVED_BITPLANE (1) //! Use MSVDX hardware for bitplane decoding #define VC1_BITPLANE_HARDWARE (0) /*****************************************************************************/ #if VC1_BITPLANE_HARDWARE //! VC1_INTERLEAVED_BITPLANE must be set to 0 when using MSVDX hardware for bitplane decoding #if VC1_INTERLEAVED_BITPLANE #error VC1_INTERLEAVED_BITPLANE must not be defined together with VC1_BITPLANE_HARDWARE #endif #endif /*****************************************************************************/ /* Possible combinations for bitplane decoding operation: + To use the hardware bitplane decoder, define VC1_BITPLANE_HARDWARE in the preprocessor definitions of um_drivers, set REFDEC_BITPLANE_DECODER to 1 and VC1_INTERLEAVED_BITPLANE to 0. + To use the software bitplane decoder, don't define VC1_BITPLANE_HARDWARE. There are two implementations of the decoder: - To use the VC1 reference decoder implementation, set REFDEC_BITPLANE_DECODER to 1. - Otherwise, set REFDEC_BITPLANE_DECODER to 0. + When using the software bitplane decoder, the data can be sent to the hardware in two formats. - Set VC1_INTERLEAVED_BITPLANE to 1, if using the three-plane interleaved format. - Otherwise, set VC1_INTERLEAVED_BITPLANE to 0. */ /*! ****************************************************************************** This enumeration defines PTYPE [All] ******************************************************************************/ typedef enum { WMF_PTYPE_I = 0, //!< I Picture WMF_PTYPE_P = 1, //!< P Picture WMF_PTYPE_B = 2, //!< B Picture WMF_PTYPE_BI = 3, //!< BI Picture WMF_PTYPE_SKIPPED = 4 //!< Skipped Picture } WMF_ePTYPE; /*! ****************************************************************************** This enumeration defines the stream profile ******************************************************************************/ typedef enum { WMF_PROFILE_SIMPLE = 0, //!< Simple profile WMF_PROFILE_MAIN = 1, //!< Main profile WMF_PROFILE_ADVANCED = 2, //!< Advanced profile (VC1 Only) WMF_PROFILE_UNDEFINED = 3, //!< Undefined profile } WMF_eProfile; /*! ****************************************************************************** This enumeration defines MVMODE [All] Tables 46-50 MVMODE and MVMODE2 ******************************************************************************/ typedef enum { WMF_MVMODE_1MV = 0, //!< 1 MV WMF_MVMODE_1MV_HALF_PEL_BILINEAR = 1, //!< 1 MV Half-pel bilinear WMF_MVMODE_1MV_HALF_PEL = 2, //!< 1 MV Half-pel WMF_MVMODE_MIXED_MV = 3, //!< Mixed MV WMF_MVMODE_INTENSITY_COMPENSATION = 4, //!< Intensity Compensation WMF_MVMODE_QUARTER_PEL_BICUBIC = 5, //!< Quarter pel bicubic } WMF_eMVMODE; /*! ****************************************************************************** This enumeration defines FCM [Advanced Profile Only] Table 41 gFCM_VlcTable ******************************************************************************/ typedef enum { VC1_FCM_P = 0, //!< 0 Progressive VC1_FCM_FRMI = 2, //!< 10 Frame-Interlace VC1_FCM_FLDI = 3, //!< 11 Field-Interlace } VC1_eFCM; /*! ****************************************************************************** This enumeration defines the BDU Start Code Suffixes \n 0x00 - 0x09 SMPTE Reserved \n 0x20 - 0x7F SMPTE Reserved \n 0x80 -0xFF Forbidden ******************************************************************************/ typedef enum { VC1_SCS_ENDOFSEQU = 0x0A, //!< End of sequence VC1_SCS_SLICE = 0x0B, //!< Slice VC1_SCS_FIELD = 0x0C, //!< Field VC1_SCS_PIC_LAYER = 0x0D, //!< Frame VC1_SCS_ENTRYPNT_LAYER = 0x0E, //!< Entry-point Header VC1_SCS_SEQ_LAYER = 0x0F, //!< Sequence Header VC1_SCS_SLICELVL_USERDATA = 0x1B, //!< Slice Level User Data VC1_SCS_FIELDLVL_USERDATA = 0x1C, //!< Field Level User Data VC1_SCS_PICLVL_USERDATA = 0x1D, //!< Frame Level User Data VC1_SCS_ENTRYPNTLVL_USERDATA = 0x1E, //!< Entry-point Level User Data VC1_SCS_SEQLVL_USERDATA = 0x1F, //!< Sequence Level User Data } VC1_eSCS; /*! Test if picture type is a reference (I or P) */ #define PIC_TYPE_IS_REF(Type) ((Type) == WMF_PTYPE_I || (Type) == WMF_PTYPE_P) /*! Test if picture type is intra (I or BI) */ #define PIC_TYPE_IS_INTRA(Type) ((Type) == WMF_PTYPE_I || (Type) == WMF_PTYPE_BI) /*! Test if picture type is inter (P or B) */ #define PIC_TYPE_IS_INTER(Type) ((Type) == WMF_PTYPE_P || (Type) == WMF_PTYPE_B) //! Maximum number of VLC tables for MB/block layer decode #define MAX_VLC_TABLES (12) #define COMPUTE_PULLBACK(s) (VC1_MB_SIZE*((s+15)/VC1_MB_SIZE)*4 - 4) /* 8.4.5.8 */ //! VC1 MB Parameter Stride #define VC1_MB_PARAM_STRIDE (128) #define VC1_MAX_NUM_BITPLANES (3) #define CABAC_RAM_WIDTH_IN_BITS (16) /* ****************************************************************************** Frame Dimension Parameters ******************************************************************************/ //! Number of pixels in each MB dimension #define VC1_MB_SIZE (16) //! Maximum resolution in frame width (X) #define VC1_MAX_X (4096) // 1920 //! Maximum resolution in frame height (Y) #define VC1_MAX_Y (2048) // 1080 //! Maximum resolution of frame #define VC1_MAX_RES (VC1_MAX_X*VC1_MAX_Y) //! Maximum number of MBs in frame width (X) #define VC1_MAX_NO_MBS_X ((VC1_MAX_X + VC1_MB_SIZE - 1)/VC1_MB_SIZE) //! Maximum number of MBs in frame height (Y) #define VC1_MAX_NO_MBS_Y ((VC1_MAX_Y + VC1_MB_SIZE - 1)/VC1_MB_SIZE) //! Maximum number of MBs in frame #define VC1_MAX_NO_MBS ((VC1_MAX_RES + (VC1_MB_SIZE*VC1_MB_SIZE) - 1) /(VC1_MB_SIZE*VC1_MB_SIZE)) //! Maximum number of bytes in bitplane #define BITPLANE_BYTES VC1_MAX_NO_MBS //! Maximum number of pan/scan windows per frame (VC1 Specification: 7.1.1.20) #define VC1_MAX_PANSCAN_WINDOWS (4)