defines.h
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:9k
源码类别:

Audio

开发平台:

Visual C++

  1. /*!
  2.  **************************************************************************
  3.  * file defines.h
  4.  *
  5.  * brief
  6.  *    Header file containing some useful global definitions
  7.  *
  8.  * author
  9.  *    Main contributors (see contributors.h for copyright, address and affiliation details)
  10.  *     - Detlev Marpe
  11.  *     - Karsten S黨ring                 <suehring@hhi.de> 
  12.  *     - Alexis Michael Tourapis         <alexismt@ieee.org> 
  13.  *   
  14.  *
  15.  * date
  16.  *    21. March 2001
  17.  **************************************************************************
  18.  */
  19. #ifndef _DEFINES_H_
  20. #define _DEFINES_H_
  21. #if defined _DEBUG
  22. #define TRACE               0       //!< 0:Trace off 1:Trace on 2:detailed CABAC context information
  23. #else
  24. #define TRACE               0       //!< 0:Trace off 1:Trace on 2:detailed CABAC context information
  25. #endif
  26. #define JM                  "14 (FRExt)"
  27. #define VERSION             "14.2"
  28. #define EXT_VERSION         "(FRExt)"
  29. #define GET_METIME          1       //!< Enables or disables ME computation time
  30. #define DUMP_DPB            0       //!< Dump DPB for debug purposes
  31. #define IMGTYPE             1       //!< Define imgpel size type. 0 implies byte (cannot handle >8 bit depths) and 1 implies unsigned short
  32. #define ENABLE_FIELD_CTX    1       //!< Enables field context types for CABAC. If disabled, results in speedup for progressive content.
  33. #define ENABLE_HIGH444_CTX  1       //!< Enables field context types for CABAC. If disabled, results in speedup for progressive content.
  34. #define DEBUG_BITDEPTH      0       //!< Ensures that > 8 bit content have no values that would result in out of range results
  35. #define MAX_RC_MODE              3
  36. #define RC_MAX_TEMPORAL_LEVELS   5
  37. //#define BEST_NZ_COEFF 1   // yuwen 2005.11.03 => for high complexity mode decision (CAVLC, #TotalCoeff)
  38. //AVC Profile IDC definitions
  39. #define BASELINE         66      //!< YUV 4:2:0/8  "Baseline"
  40. #define MAIN             77      //!< YUV 4:2:0/8  "Main"
  41. #define EXTENDED         88      //!< YUV 4:2:0/8  "Extended"
  42. #define FREXT_HP        100      //!< YUV 4:2:0/8 "High"
  43. #define FREXT_Hi10P     110      //!< YUV 4:2:0/10 "High 10"
  44. #define FREXT_Hi422     122      //!< YUV 4:2:2/10 "High 4:2:2"
  45. #define FREXT_Hi444     244      //!< YUV 4:4:4/14 "High 4:4:4"
  46. #define FREXT_CAVLC444   44      //!< YUV 4:4:4/14 "CAVLC 4:4:4"
  47. #define ZEROSNR           1
  48. // CAVLC
  49. enum {
  50.   LUMA              =  0,
  51.   LUMA_INTRA16x16DC =  1,
  52.   LUMA_INTRA16x16AC =  2,
  53.   CB                =  3,
  54.   CB_INTRA16x16DC   =  4,
  55.   CB_INTRA16x16AC   =  5,
  56.   CR                =  8,
  57.   CR_INTRA16x16DC   =  9,
  58.   CR_INTRA16x16AC   = 10
  59. } CAVLCBlockTypes;
  60. #define LEVEL_NUM         6
  61. #define TOTRUN_NUM       15
  62. #define RUNBEFORE_NUM     7
  63. #define RUNBEFORE_NUM_M1  6
  64. #define CAVLC_LEVEL_LIMIT 2063
  65. //--- block types for CABAC
  66. enum {
  67.   LUMA_16DC     =   0,
  68.   LUMA_16AC     =   1,
  69.   LUMA_8x8      =   2,
  70.   LUMA_8x4      =   3,
  71.   LUMA_4x8      =   4,
  72.   LUMA_4x4      =   5,
  73.   CHROMA_DC     =   6,
  74.   CHROMA_AC     =   7,
  75.   CHROMA_DC_2x4 =   8,
  76.   CHROMA_DC_4x4 =   9,
  77.   CB_16DC       =  10,
  78.   CB_16AC       =  11,
  79.   CB_8x8        =  12,
  80.   CB_8x4        =  13,
  81.   CB_4x8        =  14,
  82.   CB_4x4        =  15,
  83.   CR_16DC       =  16,
  84.   CR_16AC       =  17,
  85.   CR_8x8        =  18,
  86.   CR_8x4        =  19,
  87.   CR_4x8        =  20,
  88.   CR_4x4        =  21
  89. } CABACBlockTypes;
  90. #if (ENABLE_HIGH444_CTX == 1)
  91. # define NUM_BLOCK_TYPES 22  
  92. #else
  93. # define NUM_BLOCK_TYPES 10
  94. #endif
  95. #define _FULL_SEARCH_RANGE_
  96. #define _ADAPT_LAST_GROUP_
  97. #define _CHANGE_QP_
  98. #define _LEAKYBUCKET_
  99. // ---------------------------------------------------------------------------------
  100. // FLAGS and DEFINES for new chroma intra prediction, Dzung Hoang
  101. // Threshold values to zero out quantized transform coefficients.
  102. // Recommend that _CHROMA_COEFF_COST_ be low to improve chroma quality
  103. #define _LUMA_COEFF_COST_       4 //!< threshold for luma coeffs
  104. #define _CHROMA_COEFF_COST_     4 //!< threshold for chroma coeffs, used to be 7
  105. #define _LUMA_MB_COEFF_COST_    5 //!< threshold for luma coeffs of inter Macroblocks
  106. #define _LUMA_8x8_COEFF_COST_   5 //!< threshold for luma coeffs of 8x8 Inter Partition
  107. #define IMG_PAD_SIZE           20 //!< Number of pixels padded around the reference frame (>=4)
  108. #define IMG_PAD_SIZE_TIMES4    80 //!< Number of pixels padded around the reference frame in subpel units(>=16)
  109. #define MAX_VALUE       999999   //!< used for start value for some variables
  110. #define INVALIDINDEX  (-135792468)
  111. #define P8x8    8
  112. #define I4MB    9
  113. #define I16MB   10
  114. #define IBLOCK  11
  115. #define SI4MB   12
  116. #define I8MB    13
  117. #define IPCM    14
  118. #define MAXMODE 15
  119. #define  LAMBDA_ACCURACY_BITS         16
  120. #define  LAMBDA_FACTOR(lambda)        ((int)((double)(1 << LAMBDA_ACCURACY_BITS) * lambda + 0.5))
  121. #define  WEIGHTED_COST(factor,bits)   (((factor) * (bits)) >> LAMBDA_ACCURACY_BITS)
  122. #define  MV_COST(f,s,cx,cy,px,py)    (WEIGHTED_COST(f,mvbits[((cx) << (s)) - px] + mvbits[((cy) << (s)) - py]))
  123. #define  MV_COST_SMP(f,cx,cy,px,py)  (WEIGHTED_COST(f,mvbits[cx - px] + mvbits[cy - py]))
  124. #define  REF_COST(f,ref,list_offset) (WEIGHTED_COST(f,((listXsize[list_offset]<=1)? 0:refbits[(ref)])))
  125. #define IS_INTRA(MB)    ((MB)->mb_type==I4MB  || (MB)->mb_type==I16MB || (MB)->mb_type==I8MB || (MB)->mb_type==IPCM)
  126. #define IS_NEWINTRA(MB) ((MB)->mb_type==I16MB)
  127. #define IS_OLDINTRA(MB) ((MB)->mb_type==I4MB)
  128. #define IS_IPCM(MB)     ((MB)->mb_type==IPCM)
  129. #define IS_INTER(MB)    ((MB)->mb_type!=I4MB  && (MB)->mb_type!=I16MB && (MB)->mb_type!=I8MB)
  130. #define IS_INTERMV(MB)  ((MB)->mb_type!=I4MB  && (MB)->mb_type!=I16MB && (MB)->mb_type!=I8MB  && (MB)->mb_type!=0)
  131. #define IS_DIRECT(MB)   ((MB)->mb_type==0     && (img->type==B_SLICE))
  132. #define IS_COPY(MB)     ((MB)->mb_type==0     && (img->type==P_SLICE||img ->type==SP_SLICE))
  133. #define IS_P8x8(MB)     ((MB)->mb_type==P8x8)
  134. // Quantization parameter range
  135. #define MIN_QP          0
  136. #define MAX_QP          51
  137. #define SHIFT_QP        12
  138. // Direct Mode types
  139. enum {
  140.   DIR_TEMPORAL = 0, //!< Temporal Direct Mode
  141.   DIR_SPATIAL  = 1 //!< Spatial Direct Mode
  142. } DirectModes;
  143. #define MAX_REFERENCE_PICTURES 32
  144. #define BLOCK_SHIFT            2
  145. #define BLOCK_SIZE             4
  146. #define BLOCK_SIZE_8x8         8
  147. #define MB_BLOCK_SIZE         16
  148. #define MB_PIXELS            256 //(MB_BLOCK_SIZE * MB_BLOCK_SIZE)
  149. #define MB_PIXELS_SHIFT        8 // log2(MB_BLOCK_SIZE * MB_BLOCK_SIZE)
  150. #define MB_BLOCK_SHIFT         4
  151. #define BLOCK_MULTIPLE         4  //(MB_BLOCK_SIZE/BLOCK_SIZE)
  152. #define MB_BLOCK_PARTITIONS   16  //(BLOCK_MULTIPLE * BLOCK_MULTIPLE)
  153. #define BLOCK_CONTEXT         64  //(4 * MB_BLOCK_PARTITIONS)
  154. // These variables relate to the subpel accuracy supported by the software (1/4)
  155. #define BLOCK_SIZE_SP      16  // BLOCK_SIZE << 2
  156. #define BLOCK_SIZE_8x8_SP  32  // BLOCK_SIZE8x8 << 2
  157. // number of intra prediction modes
  158. #define NO_INTRA_PMODE  9
  159. // 4x4 intra prediction modes
  160. enum {
  161.   VERT_PRED            = 0,
  162.   HOR_PRED             = 1,
  163.   DC_PRED              = 2,
  164.   DIAG_DOWN_LEFT_PRED  = 3,
  165.   DIAG_DOWN_RIGHT_PRED = 4,
  166.   VERT_RIGHT_PRED      = 5,
  167.   HOR_DOWN_PRED        = 6,
  168.   VERT_LEFT_PRED       = 7,
  169.   HOR_UP_PRED          = 8
  170. } I4x4PredModes;
  171. // 16x16 intra prediction modes
  172. enum {
  173.   VERT_PRED_16   = 0,
  174.   HOR_PRED_16    = 1,
  175.   DC_PRED_16     = 2,
  176.   PLANE_16       = 3
  177. } I16x16PredModes;
  178. // 8x8 chroma intra prediction modes
  179. enum {
  180.   DC_PRED_8     =  0,
  181.   HOR_PRED_8    =  1,
  182.   VERT_PRED_8   =  2,
  183.   PLANE_8       =  3
  184. } I8x8PredModes;
  185. #define INIT_FRAME_RATE 30
  186. enum {
  187.   EOS = 1,    //!< End Of Sequence
  188.   SOP = 2,    //!< Start Of Picture
  189.   SOS = 3     //!< Start Of Slice
  190. };
  191. // MV Prediction types
  192. enum {
  193.   MVPRED_MEDIAN   = 0,
  194.   MVPRED_L        = 1,
  195.   MVPRED_U        = 2,
  196.   MVPRED_UR       = 3
  197. } MVPredTypes;
  198. #define MAX_SYMBOLS_PER_MB  1200  //!< Maximum number of different syntax elements for one MB
  199.                                   // CAVLC needs more symbols per MB
  200. #define MAX_PART_NR     3 /*!< Maximum number of different data partitions.
  201.                                Some reasonable number which should reflect
  202.                                what is currently defined in the SE2Partition map (elements.h) */
  203. //Start code and Emulation Prevention need this to be defined in identical manner at encoder and decoder
  204. #define ZEROBYTES_SHORTSTARTCODE 2 //indicates the number of zero bytes in the short start-code prefix
  205. #define Q_BITS          15
  206. #define DQ_BITS         6
  207. #define Q_BITS_8        16
  208. #define DQ_BITS_8       6
  209. // Context Adaptive Lagrange Multiplier (CALM)
  210. #define CALM_MF_FACTOR_THRESHOLD 512.0
  211. #define MAX_PLANE       3
  212. #define IS_INDEPENDENT(INP) (INP->separate_colour_plane_flag)
  213. #define IS_FREXT_PROFILE(profile_idc) ( profile_idc>=FREXT_HP || profile_idc == FREXT_CAVLC444 )
  214. typedef unsigned char byte;     //!< byte type definition
  215. #endif