encoder.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /**************************************************************************
  2.  *
  3.  *  Modifications:
  4.  *
  5.  *  22.08.2001 added support for EXT_MODE encoding mode
  6.  *             support for EXTENDED API
  7.  *  22.08.2001 fixed bug in iDQtab
  8.  *
  9.  *  Michael Militzer <isibaar@videocoding.de>
  10.  *
  11.  **************************************************************************/
  12. #ifndef _ENCODER_H_
  13. #define _ENCODER_H_
  14. #include "xvid.h"
  15. #include "portab.h"
  16. #include "global.h"
  17. #include "image/image.h"
  18. #define H263_QUANT 0
  19. #define MPEG4_QUANT 1
  20. typedef uint32_t bool;
  21. typedef enum
  22. {
  23.     I_VOP = 0,
  24.     P_VOP = 1
  25. }
  26. VOP_TYPE;
  27. /***********************************
  28.        Encoding Parameters
  29. ************************************/ 
  30. typedef struct
  31. {
  32.     uint32_t width;
  33.     uint32_t height;
  34. uint32_t edged_width;
  35. uint32_t edged_height;
  36. uint32_t mb_width;
  37. uint32_t mb_height;
  38.     VOP_TYPE coding_type;
  39.     /* rounding type; alternate 0-1 after each interframe */
  40.     uint32_t rounding_type;
  41. /* 1 <= fixed_code <= 4
  42.    automatically adjusted using motion vector statistics inside
  43.  */
  44.     uint32_t fixed_code;
  45.     uint32_t quant;
  46. uint32_t quant_type;
  47. uint32_t motion_flags;
  48. uint32_t global_flags;
  49. #ifdef MPEG4IP
  50. uint16_t fincr;
  51. uint16_t fbase;
  52. uint8_t  time_inc_bits;
  53. #endif
  54. HINTINFO * hint;
  55. } MBParam;
  56. typedef struct
  57. {
  58.     int iTextBits;
  59.     float fMvPrevSigma;
  60.     int iMvSum;
  61.     int iMvCount;
  62. int kblks;
  63. int mblks;
  64. int ublks;
  65. }
  66. Statistics;
  67. typedef struct
  68. {
  69.     MBParam mbParam;
  70.     int iFrameNum;
  71.     int iMaxKeyInterval;
  72. int lum_masking;
  73. int bitrate;
  74. // images
  75.     IMAGE sCurrent;
  76.     IMAGE sReference;
  77. #ifdef _DEBUG
  78. IMAGE sOriginal;
  79. #endif
  80.     IMAGE vInterH;
  81.     IMAGE vInterV;
  82. IMAGE vInterVf;
  83.     IMAGE vInterHV;
  84. IMAGE vInterHVf;
  85. // macroblock
  86. MACROBLOCK * pMBs;
  87.     Statistics sStat;
  88. }
  89. Encoder;
  90. // indicates no quantizer changes in INTRA_Q/INTER_Q modes
  91. #define NO_CHANGE 64
  92. void init_encoder(uint32_t cpu_flags);
  93. int encoder_create(XVID_ENC_PARAM * pParam);
  94. int encoder_destroy(Encoder * pEnc);
  95. int encoder_encode(Encoder * pEnc, XVID_ENC_FRAME * pFrame, XVID_ENC_STATS * pResult);
  96. static __inline uint8_t get_fcode(uint16_t sr)
  97. {
  98.     if (sr <= 16)
  99. return 1;
  100.     else if (sr <= 32) 
  101. return 2;
  102.     else if (sr <= 64)
  103. return 3;
  104.     else if (sr <= 128)
  105. return 4;
  106.     else if (sr <= 256)
  107. return 5;
  108.     else if (sr <= 512)
  109. return 6;
  110.     else if (sr <= 1024)
  111. return 7;
  112.     else
  113. return 0;
  114. }
  115. #endif /* _ENCODER_H_ */