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

Audio

开发平台:

Visual C++

  1. /*!
  2.  **************************************************************************
  3.  * file defines.h
  4.  *
  5.  * brief
  6.  *    Header file containing some useful global definitions.
  7.  *
  8.  * author
  9.  *    Detlev Marpe
  10.  *    Copyright (C) 2000 HEINRICH HERTZ INSTITUTE All Rights Reserved.
  11.  *
  12.  * date
  13.  *    21. March 2001
  14.  **************************************************************************
  15.  */
  16. #ifndef _DEFINES_H_
  17. #define _DEFINES_H_
  18. #if defined _DEBUG
  19. # define TRACE           1     //!< 0:Trace off 1:Trace on 2:detailed CABAC context information
  20. #else
  21. # define TRACE           0      //!< 0:Trace off 1:Trace on 2:detailed CABAC context information
  22. #endif
  23. #define DUMP_DPB                  0    //!< Dump DPB info for debug purposes
  24. #define PAIR_FIELDS_IN_OUTPUT     0    //!< Pair field pictures for output purposes
  25. #define IMGTYPE                   1    //!< Define imgpel size type. 0 implies byte (cannot handle >8 bit depths) and 1 implies unsigned short
  26. #define ENABLE_HIGH444_CTX        1    //!< Enables field context types for CABAC. If disabled, results in speedup for progressive content.
  27. #define ZEROSNR                   0    //!< PSNR computation method
  28. #define ENABLE_OUTPUT_TONEMAPPING 1    //!< enable tone map the output if tone mapping SEI present
  29. //#define MAX_NUM_SLICES 150
  30. #define MAX_NUM_SLICES 50
  31. #define MAX_REFERENCE_PICTURES 32               //!< H.264 allows 32 fields
  32. #define MAX_CODED_FRAME_SIZE 8000000         //!< bytes for one frame
  33. //FREXT Profile IDC definitions
  34. #define FREXT_HP        100      //!< YUV 4:2:0/8 "High"
  35. #define FREXT_Hi10P     110      //!< YUV 4:2:0/10 "High 10"
  36. #define FREXT_Hi422     122      //!< YUV 4:2:2/10 "High 4:2:2"
  37. #define FREXT_Hi444     244      //!< YUV 4:4:4/14 "High 4:4:4"
  38. #define FREXT_CAVLC444   44      //!< YUV 4:4:4/14 "CAVLC 4:4:4"
  39. enum {
  40.   YUV400 = 0,
  41.   YUV420 = 1,
  42.   YUV422 = 2,
  43.   YUV444 = 3
  44. } color_formats;
  45. // CAVLC
  46. enum {
  47.   LUMA              =  0,
  48.   LUMA_INTRA16x16DC =  1,
  49.   LUMA_INTRA16x16AC =  2,
  50.   CB                =  3,
  51.   CB_INTRA16x16DC   =  4,
  52.   CB_INTRA16x16AC   =  5,
  53.   CR                =  8,
  54.   CR_INTRA16x16DC   =  9,
  55.   CR_INTRA16x16AC   = 10
  56. } CAVLCBlockTypes;
  57. //--- block types for CABAC ----
  58. enum {
  59.   LUMA_16DC     =   0,
  60.   LUMA_16AC     =   1,
  61.   LUMA_8x8      =   2,
  62.   LUMA_8x4      =   3,
  63.   LUMA_4x8      =   4,
  64.   LUMA_4x4      =   5,
  65.   CHROMA_DC     =   6,
  66.   CHROMA_AC     =   7,
  67.   CHROMA_DC_2x4 =   8,
  68.   CHROMA_DC_4x4 =   9,
  69.   CB_16DC       =  10,
  70.   CB_16AC       =  11,
  71.   CB_8x8        =  12,
  72.   CB_8x4        =  13,
  73.   CB_4x8        =  14,
  74.   CB_4x4        =  15,
  75.   CR_16DC       =  16,
  76.   CR_16AC       =  17,
  77.   CR_8x8        =  18,
  78.   CR_8x4        =  19,
  79.   CR_4x8        =  20,
  80.   CR_4x4        =  21
  81. } CABACBlockTypes;
  82. #if (ENABLE_HIGH444_CTX == 1)
  83. # define NUM_BLOCK_TYPES 22  
  84. #else
  85. # define NUM_BLOCK_TYPES 10
  86. #endif
  87. //#define _LEAKYBUCKET_
  88. enum {
  89.   PSKIP        =  0,
  90.   BSKIP_DIRECT =  0,
  91.   P16x16       =  1,
  92.   P16x8        =  2,
  93.   P8x16        =  3,
  94.   SMB8x8       =  4,
  95.   SMB8x4       =  5,
  96.   SMB4x8       =  6,
  97.   SMB4x4       =  7,
  98.   P8x8         =  8,
  99.   I4MB         =  9,
  100.   I16MB        = 10,
  101.   IBLOCK       = 11,
  102.   SI4MB        = 12,
  103.   I8MB         = 13,
  104.   IPCM         = 14,
  105.   MAXMODE      = 15
  106. } MBModeTypes;
  107. #define IS_INTRA(MB)    ((MB)->mb_type==I4MB  || (MB)->mb_type==I16MB ||(MB)->mb_type==IPCM || (MB)->mb_type==I8MB || (MB)->mb_type==SI4MB)
  108. #define IS_NEWINTRA(MB) ((MB)->mb_type==I16MB  || (MB)->mb_type==IPCM)
  109. #define IS_OLDINTRA(MB) ((MB)->mb_type==I4MB)
  110. #define IS_INTER(MB)    ((MB)->mb_type!=I4MB  && (MB)->mb_type!=I16MB && (MB)->mb_type!=I8MB  && (MB)->mb_type!=IPCM)
  111. #define IS_INTERMV(MB)  ((MB)->mb_type!=I4MB  && (MB)->mb_type!=I16MB && (MB)->mb_type!=I8MB  && (MB)->mb_type!=0 && (MB)->mb_type!=IPCM)
  112. #define IS_DIRECT(MB)   ((MB)->mb_type==0     && (img->type==B_SLICE ))
  113. #define IS_COPY(MB)     ((MB)->mb_type==0     && (img->type==P_SLICE || img->type==SP_SLICE))
  114. #define IS_P8x8(MB)     ((MB)->mb_type==P8x8)
  115. #define TOTRUN_NUM       15
  116. #define RUNBEFORE_NUM     7
  117. #define RUNBEFORE_NUM_M1  6
  118. // Quantization parameter range
  119. #define MIN_QP          0
  120. #define MAX_QP          51
  121. #define BLOCK_SIZE      4
  122. #define BLOCK_SIZE_8x8  8
  123. #define SMB_BLOCK_SIZE  8
  124. #define BLOCK_PIXELS    16
  125. #define BLOCK_SHIFT     2
  126. #define MB_BLOCK_SIZE   16
  127. #define MB_PIXELS       256    // MB_BLOCK_SIZE * MB_BLOCK_SIZE
  128. #define BLOCK_MULTIPLE  4      // (MB_BLOCK_SIZE/BLOCK_SIZE)
  129. #define NO_INTRA_PMODE  9      //!< number of intra prediction modes
  130. // 4x4 intra prediction modes 
  131. enum {
  132.   VERT_PRED            = 0,
  133.   HOR_PRED             = 1,
  134.   DC_PRED              = 2,
  135.   DIAG_DOWN_LEFT_PRED  = 3,
  136.   DIAG_DOWN_RIGHT_PRED = 4,
  137.   VERT_RIGHT_PRED      = 5,
  138.   HOR_DOWN_PRED        = 6,
  139.   VERT_LEFT_PRED       = 7,
  140.   HOR_UP_PRED          = 8
  141. } I4x4PredModes;
  142. // 16x16 intra prediction modes
  143. enum {
  144.   VERT_PRED_16 = 0,
  145.   HOR_PRED_16  = 1,
  146.   DC_PRED_16   = 2,
  147.   PLANE_16     = 3
  148. } I16x16PredModes;
  149. // 8x8 chroma intra prediction modes
  150. enum {
  151.   DC_PRED_8   = 0,
  152.   HOR_PRED_8  = 1,
  153.   VERT_PRED_8 = 2,
  154.   PLANE_8     = 3
  155. } I8x8PredModes;
  156. // MV Prediction types
  157. enum {
  158.   MVPRED_MEDIAN   = 0,
  159.   MVPRED_L        = 1,
  160.   MVPRED_U        = 2,
  161.   MVPRED_UR       = 3
  162. };
  163. enum {
  164.   EOS = 1,    //!< End Of Sequence
  165.   SOP = 2,    //!< Start Of Picture
  166.   SOS = 3     //!< Start Of Slice
  167. };
  168. enum {
  169.   DECODING_OK     = 0,
  170.   SEARCH_SYNC     = 1,
  171.   PICTURE_DECODED = 2
  172. };
  173. #define INVALIDINDEX  (-135792468)
  174. //Start code and Emulation Prevention need this to be defined in identical manner at encoder and decoder
  175. #define ZEROBYTES_SHORTSTARTCODE 2 //indicates the number of zero bytes in the short start-code prefix
  176. #define MAX_PLANE   3
  177. #define IS_INDEPENDENT(IMG) ((IMG)->separate_colour_plane_flag)
  178. #define IS_FREXT_PROFILE(profile_idc) ( profile_idc>=FREXT_HP || profile_idc == FREXT_CAVLC444 )
  179. #define HI_INTRA_ONLY_PROFILE (((active_sps->profile_idc>=FREXT_Hi10P)&&(active_sps->constrained_set3_flag))||(active_sps->profile_idc==FREXT_CAVLC444)) 
  180. #endif