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