| /* |
| * 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) |