www.pudn.com > AvsVideoCodec.rar > global.h


 /* 
***************************************************************************** 
* COPYRIGHT AND WARRANTY INFORMATION 
* 
* Copyright 2003, Advanced Audio Video Coding Standard, Part II 
* 
* DISCLAIMER OF WARRANTY 
* 
* The contents of this file are subject to the Mozilla Public License 
* Version 1.1 (the "License"); you may not use this file except in 
* compliance with the License. You may obtain a copy of the License at 
* http://www.mozilla.org/MPL/ 
* 
* Software distributed under the License is distributed on an "AS IS" 
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the 
* License for the specific language governing rights and limitations under 
* the License. 
*                      
* THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE AVS PATENT POLICY. 
* The AVS Working Group doesn't represent or warrant that the programs 
* furnished here under are free of infringement of any third-party patents. 
* Commercial implementations of AVS, including shareware, may be 
* subject to royalty fees to patent holders. Information regarding 
* the AVS patent policy for standardization procedure is available at  
* AVS Web site http://www.avs.org.cn. Patent Licensing is outside 
* of AVS Working Group. 
* 
* The Original Code is Reference Software for China National Standard  
* GB/T 20090.2-2006 (short for AVS-P2 or AVS Video) at version RM52J. 
* 
* The Initial Developer of the Original Code is Video subgroup of AVS 
* Workinggroup (Audio and Video coding Standard Working Group of China). 
* Contributors:   Guoping Li,    Siwei Ma,    Jian Lou,    Qiang Wang ,  
*   Jianwen Chen,Haiwu Zhao,  Xiaozhen Zheng, Junhao Zheng, Zhiming Wang 
*  
****************************************************************************** 
*/ 
 
 
 
/* 
************************************************************************************* 
* File name: global.h 
* Function:  global definitions for for AVS decoder. 
* 
************************************************************************************* 
*/ 
 
#ifndef _GLOBAL_H_ 
#define _GLOBAL_H_ 
 
#include                               //!< for FILE 
#include "defines.h" 
 
#ifdef WIN32 
  #define  snprintf _snprintf 
#endif 
 
//digipro_1 
#define TQ_16 0 
 
typedef enum { 
  FIELD, 
  FRAME 
} PictureStrufcture; //cjw 20051219   //!< New enum for field processing 
 
 
//! Boolean Type 
typedef enum { 
  FALSE, 
		TRUE 
} Boolean; 
 
typedef unsigned char   byte;                   //!<  8 bit unsigned 
typedef int             int32; 
typedef unsigned int    u_int32; 
 
// global picture format dependend buffers, mem allocation in decod.c ****************** 
int  **refFrArr;                                //!< Array for reference frames of each block 
byte **imgY;                                    //!< array for the decoded luma component 
byte ***imgUV;                                  //!< array for the chroma component 
 
// B pictures 
byte **imgY_prev; 
byte ***imgUV_prev; 
 
byte **imgY_ref;                                //!< reference frame find snr 
byte ***imgUV_ref; 
 
// B pictures 
int  Bframe_ctr; 
byte prevP_tr, nextP_tr, P_interval; 
int  frame_no; 
 
int  **refFrArr_frm; 
byte **imgY_frm; 
byte ***imgUV_frm; 
int  **refFrArr_top; 
int  **refFrArr_bot; 
 
 
byte **imgY_top; 
byte **imgY_bot; 
byte ***imgUV_top; 
byte ***imgUV_bot; 
 
int  *parity_fld; 
 
byte **mref_frm[2];                               //!< 1/1 pix luma for direct interpolation 
byte **mcef_frm[2][2];                              //!< pix chroma 
 
byte **mref_fld[4];                               //!< 1/1 pix luma for direct interpolation 
byte **mcef_fld[4][2];      
 
byte nextP_tr_frm, nextP_tr_fld; 
 
#define ET_SIZE 300      //!< size of error text buffer 
char errortext[ET_SIZE]; //!< buffer for error message for exit with error() 
 
/*********************************************************************** 
 * T y p e    d e f i n i t i o n s    f o r    T M L 
 *********************************************************************** 
 */ 
 
//! definition of AVS syntax elements 
typedef enum { 
  SE_HEADER, 
  SE_PTYPE, 
  SE_MBTYPE, 
  SE_REFFRAME, 
  SE_INTRAPREDMODE, 
  SE_MVD, 
  SE_CBP_INTRA, 
  SE_LUM_DC_INTRA, 
  SE_CHR_DC_INTRA, 
  SE_LUM_AC_INTRA, 
  SE_CHR_AC_INTRA, 
  SE_CBP_INTER, 
  SE_LUM_DC_INTER, 
  SE_CHR_DC_INTER, 
  SE_LUM_AC_INTER, 
  SE_CHR_AC_INTER, 
  SE_DELTA_QUANT_INTER, 
  SE_DELTA_QUANT_INTRA, 
  SE_BFRAME, 
  SE_EOS, 
  SE_MAX_ELEMENTS //!< number of maximum syntax elements, this MUST be the last one! 
} SE_type;        // substituting the definitions in element.h 
 
typedef enum { 
  INTER_MB, 
  INTRA_MB_4x4, 
  INTRA_MB_16x16 
} IntraInterDecision; 
 
typedef enum { 
  BITS_TOTAL_MB, 
  BITS_HEADER_MB, 
  BITS_INTER_MB, 
  BITS_CBP_MB, 
  BITS_COEFF_Y_MB, 
  BITS_COEFF_UV_MB, 
  MAX_BITCOUNTER_MB 
} BitCountType; 
 
typedef enum { 
  P_IMG = 0, 
  B_IMG, 
  I_IMG, 
} PictureType; 
/*Lou 1016 Start*/ 
typedef enum{ 
  NS_BLOCK, 
    VS_BLOCK 
}SmbMode; 
/*Lou 1016 End*/ 
 
/*********************************************************************** 
 * N e w   D a t a    t y p e s   f o r    T M L 
 *********************************************************************** 
 */ 
 
struct img_par; 
struct inp_par; 
struct stat_par; 
 
//! Syntaxelement 
typedef struct syntaxelement 
{ 
  int           type;                  //!< type of syntax element for data part. 
  int           value1;                //!< numerical value of syntax element 
  int           value2;                //!< for blocked symbols, e.g. run/level 
  int           len;                   //!< length of code 
  int           inf;                   //!< info part of UVLC code 
  unsigned int  bitpattern;            //!< UVLC bitpattern 
  int           context;               //!< CABAC context 
  int           k;                     //!< CABAC context for coeff_count,uv 
  int           golomb_grad;    //!< Needed if type is a golomb element 
  int           golomb_maxlevels; //!< If this is zero, do not use the golomb coding 
#if TRACE 
  #define       TRACESTRING_SIZE 100           //!< size of trace string 
  char          tracestring[TRACESTRING_SIZE]; //!< trace string 
#endif 
 
  //! for mapping of UVLC to syntaxElement 
  void    (*mapping)(int len, int info, int *value1, int *value2); 
} SyntaxElement; 
 
//! Macroblock 
typedef struct macroblock 
{ 
  int           qp; 
  int           slice_nr; 
  int           delta_quant;          //!< for rate control 
  struct macroblock   *mb_available[3][3]; /*!< pointer to neighboring MBs in a 3x3 window of current MB, which is located at [1][1] 
                                                NULL pointer identifies neighboring MBs which are unavailable */ 
   
  // some storage of macroblock syntax elements for global access 
  int           mb_type; 
  int           mvd[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE][2];      //!< indices correspond to [forw,backw][block_y][block_x][x,y] 
  int           cbp, cbp_blk ; 
  unsigned long cbp_bits; 
 
  int           b8mode[4]; 
  int           b8pdir[4]; 
	int           mb_type_2; 
	int           c_ipred_mode_2;       //!< chroma intra prediction mode 
	int           dct_mode; 
 
  int           c_ipred_mode;       //!< chroma intra prediction mode 
  int           lf_disable; 
  int           lf_alpha_c0_offset; 
  int           lf_beta_offset; 
} Macroblock; 
 
//! Bitstream 
typedef struct 
{ 
  // CABAC Decoding 
  int           read_len;           //!< actual position in the codebuffer, CABAC only 
  int           code_len;           //!< overall codebuffer length, CABAC only 
  // UVLC Decoding 
  int           frame_bitoffset;    //!< actual position in the codebuffer, bit-oriented, UVLC only 
  int           bitstream_length;   //!< over codebuffer lnegth, byte oriented, UVLC only 
  // ErrorConcealment 
  byte          *streamBuffer;      //!< actual codebuffer for read bytes 
} Bitstream; 
 
//****************************** ~DM *********************************** 
 
// image parameters 
typedef struct img_par 
{ 
  int number;                                 //