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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef _XVID_H_
  2. #define _XVID_H_
  3. #ifndef _WIN32
  4. #include <config.h>
  5. #endif
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif 
  9. // ==========================================
  10. // global
  11. // ==========================================
  12. // API Version: 2.0
  13. #define API_VERSION ((2 << 16) | (0))
  14. // cpu features
  15. #define XVID_CPU_MMX 0x00000001
  16. #define XVID_CPU_MMXEXT 0x00000002
  17. #define XVID_CPU_SSE 0x00000004
  18. #define XVID_CPU_SSE2 0x00000008
  19. #define XVID_CPU_3DNOW 0x00000010
  20. #define XVID_CPU_3DNOWEXT 0x00000020
  21. #define XVID_CPU_TSC 0x00000040
  22. #define XVID_CPU_FORCE 0x80000000
  23. // colorspaces
  24. #define XVID_CSP_RGB24  0
  25. #define XVID_CSP_YV12 1
  26. #define XVID_CSP_YUY2 2
  27. #define XVID_CSP_UYVY 3
  28. #define XVID_CSP_I420 4
  29. #define XVID_CSP_RGB555 10
  30. #define XVID_CSP_RGB565 11
  31. #define XVID_CSP_USER 12
  32. #define XVID_CSP_YVYU 1002
  33. #define XVID_CSP_RGB32  1000
  34. #define XVID_CSP_NULL  9999
  35. #define XVID_CSP_VFLIP 0x80000000 // flip mask
  36. // error
  37. #define XVID_ERR_FAIL -1
  38. #define XVID_ERR_OK 0
  39. #define XVID_ERR_MEMORY 1
  40. #define XVID_ERR_FORMAT 2
  41. typedef struct 
  42. {
  43. int cpu_flags;
  44. int api_version;
  45. int core_build;
  46. } XVID_INIT_PARAM;
  47. int xvid_init(void *handle, int opt,
  48.   void *param1, void *param2);
  49. // ==========================================
  50. // decoder
  51. // ==========================================
  52. #define XVID_QUICK_DECODE 0x00000010 /* increases decoding speed but reduces quality */
  53. typedef struct 
  54. {
  55. int width;
  56. int height;
  57. void *handle;
  58. } XVID_DEC_PARAM;
  59. typedef struct
  60. {
  61. int general;
  62. void * bitstream;
  63. int length;
  64. void * image;
  65. int stride;
  66. int colorspace;
  67. } XVID_DEC_FRAME;
  68. // decoder options
  69. #define XVID_DEC_DECODE 0
  70. #define XVID_DEC_CREATE 1
  71. #define XVID_DEC_DESTROY 2
  72. #define XVID_DEC_ALLOC          3
  73. #define XVID_DEC_FIND_VOL       4
  74. int xvid_decore(void * handle,
  75. int opt,
  76. void * param1,
  77. void * param2);
  78. // ==========================================
  79. // encoder
  80. // ==========================================
  81. /* Do not rely on the VALUES of these constants, they may be changed at any time */
  82. #define XVID_VALID_FLAGS 0x80000000
  83. #define XVID_CUSTOM_QMATRIX 0x00000004 /* use custom quant matrix */ 
  84. #define XVID_H263QUANT 0x00000010
  85. #define XVID_MPEGQUANT 0x00000020
  86. #define XVID_HALFPEL 0x00000040 /* use halfpel interpolation */
  87. #define XVID_ADAPTIVEQUANT 0x00000080
  88. #define XVID_LUMIMASKING 0x00000100
  89. #define XVID_LATEINTRA 0x00000200
  90. #define XVID_INTERLACING 0x00000400 /* enable interlaced encoding */
  91. #define XVID_TOPFIELDFIRST 0x00000800 /* set top-field-first flag (cosmetic only) */
  92. #define XVID_ALTERNATESCAN 0x00001000 /* ?? sets alternate vertical scan flag */
  93. #define XVID_HINTEDME_GET 0x00002000 /* receive mv hint data from core (1st pass) */
  94. #define XVID_HINTEDME_SET 0x00004000 /* send mv hint data to core (2nd pass) */
  95. #define XVID_INTER4V 0x00008000
  96. #define XVID_ME_ZERO 0x00010000
  97. #define XVID_ME_LOGARITHMIC 0x00020000
  98. #define XVID_ME_FULLSEARCH 0x00040000
  99. #define XVID_ME_PMVFAST 0x00080000
  100. #define XVID_ME_EPZS 0x00100000
  101. #define PMV_HALFPELDIAMOND16  0x00010000
  102. #define PMV_HALFPELREFINE16  0x00020000
  103. #define PMV_EXTSEARCH16  0x00040000 /* extend PMV by more searches */
  104. #define PMV_EARLYSTOP16     0x00080000
  105. #define PMV_QUICKSTOP16     0x00100000  /* like early, but without any more refinement */
  106. #define PMV_UNRESTRICTED16    0x00200000 /* unrestricted ME, not implemented */
  107. #define PMV_OVERLAPPING16    0x00400000 /* overlapping ME, not implemented */
  108. #define PMV_USESQUARES16 0x00800000
  109. #define PMV_HALFPELDIAMOND8  0x01000000
  110. #define PMV_HALFPELREFINE8  0x02000000
  111. #define PMV_EXTSEARCH8  0x04000000  /* extend PMV by more searches */
  112. #define PMV_EARLYSTOP8     0x08000000
  113. #define PMV_QUICKSTOP8     0x10000000  /* like early, but without any more refinement */
  114. #define PMV_UNRESTRICTED8    0x20000000 /* unrestricted ME, not implemented */
  115. #define PMV_OVERLAPPING8    0x40000000 /* overlapping ME, not implemented */
  116. #define PMV_USESQUARES8 0x80000000
  117. typedef struct
  118. {
  119. int width, height;
  120. int fincr, fbase; // frame increment, fbase. each frame = "fincr/fbase" seconds
  121. int bitrate; // the bitrate of the target encoded stream, in bits/second
  122. int rc_buffersize; // the rate control buffersize / max. allowed deviation
  123. int max_quantizer; // the upper limit of the quantizer
  124. int min_quantizer; // the lower limit of the quantizer
  125. int max_key_interval; // the maximum interval between key frames
  126. void * handle; // [out] encoder instance handle
  127. } XVID_ENC_PARAM;
  128. typedef struct
  129. {
  130. int x;
  131. int y;
  132. } VECTOR;
  133. typedef struct
  134. {
  135. int mode; // macroblock mode
  136. VECTOR mvs[4];
  137. } MVBLOCKHINT;
  138. typedef struct
  139. {
  140. int intra; // frame intra choice
  141. int fcode; // frame fcode
  142. MVBLOCKHINT * block; // caller-allocated array of block hints (mb_width * mb_height)
  143. } MVFRAMEHINT;
  144. typedef struct
  145. {
  146. int rawhints; // if set, use MVFRAMEHINT, else use compressed buffer
  147. MVFRAMEHINT mvhint;
  148. void * hintstream; // compressed hint buffer
  149. int hintlength; // length of buffer (bytes)
  150. } HINTINFO;
  151. typedef struct
  152. {
  153. int general; // [in] general options
  154.     int motion; // [in] ME options
  155. void * bitstream; // [in] bitstream ptr
  156. int length; // [out] bitstream length (bytes)
  157. void * image; // [in] image ptr
  158.     int colorspace; // [in] source colorspace
  159. #ifdef MPEG4IP
  160. // [in] image ptr YUV planes
  161. void* image_y;
  162. void* image_u;
  163. void* image_v;
  164. int stride; // [in] byte length of y scanline
  165. #endif
  166. unsigned char *quant_intra_matrix; // [in] custom intra qmatrix
  167. unsigned char *quant_inter_matrix; // [in] custom inter qmatrix
  168.     int quant; // [in] frame quantizer (vbr)
  169.     int intra; // [in] force intra frame (vbr only)
  170. // [out] intra state
  171. HINTINFO hint; // [in/out] mv hint information
  172. } XVID_ENC_FRAME;
  173. typedef struct
  174. {
  175. int quant; // [out] frame quantizer
  176. int hlength; // [out] header length (bytes)
  177. int kblks, mblks, ublks; // [out]
  178. #ifdef MPEG4IP
  179. // [out] reconstructed image
  180. void* image_y;
  181. void* image_u;
  182. void* image_v;
  183. int stride_y;
  184. int stride_uv;
  185. #endif
  186. } XVID_ENC_STATS;
  187. #define XVID_ENC_ENCODE 0
  188. #define XVID_ENC_CREATE 1
  189. #define XVID_ENC_DESTROY 2
  190. int xvid_encore(void * handle,
  191. int opt,
  192. void * param1,
  193. void * param2);
  194. #ifdef __cplusplus
  195. }
  196. #endif 
  197. #endif /* _XVID_H_ */