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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef _DIVX4_H_
  2. #define _DIVX4_H_
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif 
  6. #if ((! defined(ARCH_IS_BIG_ENDIAN)) && (! defined (WIN32)) && (! defined (LINUX)) && (! defined(__linux)) )
  7. #define ARCH_IS_BIG_ENDIAN
  8. #endif
  9. /*********************************************************************************
  10.  * Decoder part                                                                  *
  11.  *********************************************************************************/
  12. /* decore commands */
  13. #define DEC_OPT_MEMORY_REQS 0
  14. #define DEC_OPT_INIT 1
  15. #define DEC_OPT_RELEASE 2
  16. #define DEC_OPT_SETPP 3 
  17. #define DEC_OPT_SETOUT 4 
  18. #define DEC_OPT_FRAME 5
  19. #define DEC_OPT_FRAME_311 6
  20. #define DEC_OPT_SETPP2 7
  21. #define DEC_OPT_VERSION 8
  22. /* return values */
  23. #define DEC_OK 0
  24. #define DEC_MEMORY 1
  25. #define DEC_BAD_FORMAT 2
  26. #define DEC_EXIT 3
  27. /* yuv colour formats */
  28. #define DEC_YUY2 1
  29. #define DEC_YUV2  DEC_YUY2
  30. #define DEC_UYVY 2
  31. #define DEC_420 3
  32. #define DEC_YV12 13
  33. /* rgb colour formats */
  34. #define DEC_RGB32 4 
  35. #define DEC_RGB24 5 
  36. #define DEC_RGB555 6 
  37. #define DEC_RGB565 7
  38. #define DEC_RGB32_INV 8
  39. #define DEC_RGB24_INV 9
  40. #define DEC_RGB555_INV  10
  41. #define DEC_RGB565_INV  11
  42. /* return pointers to initial buffers
  43.    equivalent to XVID_CSP_USER */  
  44. #define DEC_USER 12
  45. /* output structure for DEC_USER */
  46. typedef struct
  47. {
  48. void *y;
  49. void *u;
  50. void *v;
  51. int stride_y;
  52. int stride_uv;
  53. } DEC_PICTURE;
  54. typedef struct
  55. {
  56. unsigned long mp4_edged_ref_buffers_size;
  57. unsigned long mp4_edged_for_buffers_size;
  58. unsigned long mp4_edged_back_buffers_size;
  59. unsigned long mp4_display_buffers_size;
  60. unsigned long mp4_state_size;
  61. unsigned long mp4_tables_size;
  62. unsigned long mp4_stream_size;
  63. unsigned long mp4_reference_size;
  64. } DEC_MEM_REQS;
  65. typedef struct 
  66. {
  67. void * mp4_edged_ref_buffers;  
  68. void * mp4_edged_for_buffers; 
  69. void * mp4_edged_back_buffers;
  70. void * mp4_display_buffers;
  71. void * mp4_state;
  72. void * mp4_tables;
  73. void * mp4_stream;
  74. void * mp4_reference;
  75. } DEC_BUFFERS;
  76. typedef struct 
  77. {
  78. int x_dim; /* frame width */
  79. int y_dim; /* frame height */
  80. int output_format;
  81. int time_incr;
  82. DEC_BUFFERS buffers;
  83. } DEC_PARAM;
  84. typedef struct
  85. {
  86. void *bmp; /* pointer to output buffer */
  87. void *bitstream; /* input bit stream */
  88. long length; /* length of bitstream */
  89. int render_flag;
  90. unsigned int stride;
  91. } DEC_FRAME;
  92. typedef struct
  93. {
  94. int intra;
  95. int *quant_store;
  96. int quant_stride;
  97. } DEC_FRAME_INFO;
  98. /* configure postprocessing */
  99. typedef struct
  100. {
  101. int postproc_level; /* ranging from 0 to 100 */ 
  102. } DEC_SET;
  103. int decore( unsigned long handle, unsigned long dec_opt, void* param1, void* param2);
  104. /*********************************************************************************
  105.  * Encoder part                                                                  *
  106.  *********************************************************************************/
  107. /**
  108.     Structure passed as an argument when creating encoder.
  109.     You have to initialize at least x_dim and y_dim ( valid range:
  110. 0<x_dim<=1920, 0<y_dim<=1280, both dimensions should be even ).
  111.     You can set all other values to 0, in which case they'll be initialized
  112.     to default values, or specify them directly.
  113.     On success 'handle' member will contain non-zero handle to initialized 
  114.     encoder.
  115. **/
  116. typedef struct _ENC_PARAM_
  117. {
  118. int x_dim; // the x dimension of the frames to be encoded
  119. int y_dim; // the y dimension of the frames to be encoded
  120. float framerate; // the frame rate of the sequence to be encoded, in frames/second
  121. int bitrate; // the bitrate of the target encoded stream, in bits/second
  122. int rc_period; // the intended rate control averaging period
  123. int rc_reaction_period; // the reaction period for rate control
  124. int rc_reaction_ratio; // the ratio for down/up rate control
  125. int max_quantizer; // the upper limit of the quantizer
  126. int min_quantizer; // the lower limit of the quantizer
  127. int max_key_interval; // the maximum interval between key frames
  128. int use_bidirect; // use bidirectional coding
  129. int deinterlace; // fast deinterlace
  130. int quality; // the quality of compression ( 1 - fastest, 5 - best )
  131. int obmc; // flag to enable overlapped block motion compensation mode
  132. void *handle; // will be filled by encore
  133. }
  134. ENC_PARAM;
  135. // encore2
  136. /**
  137.     Structure passed as a first argument when encoding a frame.
  138.     Both pointers should be non-NULL. You are responsible for allocation
  139.     of bitstream buffer, its size should be large enough to hold a frame.
  140.     Checks for buffer overflow are too expensive and it will be almost
  141.     impossible to recover from such overflow. Thus, no checks for buffer
  142.     overflow will be done.
  143.     Theoretical upper limit of frame size is around 6 bytes/pixel
  144.     or 2.5 Mb for 720x576 frame.
  145.     On success 'length' will contain number of bytes written into the stream.
  146. **/
  147. typedef struct _ENC_FRAME_
  148. {
  149.     void *image; // the image frame to be encoded
  150.     void *bitstream; // the buffer for encoded bitstream
  151.     int length; // the length of the encoded bitstream
  152.     int colorspace; // the format of image frame
  153.     int quant; // quantizer for this frame; only used in VBR modes
  154.     int intra; // force this frame to be intra/inter; only used in VBR 2-pass
  155.     void *mvs; // optional pointer to array of motion vectors
  156. }
  157. ENC_FRAME;
  158. /**
  159.     Structure passed as a second optional argument when encoding a frame.
  160.     On successful return its members are filled with parameters of encoded
  161.     stream.
  162. **/
  163.     typedef struct _ENC_RESULT_
  164.     {
  165. int is_key_frame; // the current frame is encoded as a key frame
  166. int quantizer; // the quantizer used for this frame
  167. int texture_bits; // amount of bits spent on coding DCT coeffs
  168. int motion_bits; // amount of bits spend on coding motion
  169. int total_bits; // sum of two previous fields
  170.     }
  171.     ENC_RESULT;
  172. // the prototype of the encore() - main encode engine entrance
  173. int encore(void *handle, // handle               - the handle of the calling entity, must be unique
  174.        int enc_opt, // enc_opt              - the option for encoding, see below
  175.        void *param1, // param1               - the parameter 1 (its actually meaning depends on enc_opt
  176.        void *param2); // param2               - the parameter 2 (its actually meaning depends on enc_opt
  177. // encore options (the enc_opt parameter of encore())
  178. #define ENC_OPT_INIT    0 // initialize the encoder, return a handle
  179. #define ENC_OPT_RELEASE 1 // release all the resource associated with the handle
  180. #define ENC_OPT_ENCODE  2 // encode a single frame
  181. #define ENC_OPT_ENCODE_VBR 3 // encode a single frame, not using internal rate control algorithm
  182. #define ENC_OPT_VERSION 4
  183. #define ENCORE_VERSION 20010807
  184.      
  185. // return code of encore()
  186. #define ENC_FAIL -1
  187. #define ENC_OK 0
  188. #define ENC_MEMORY 1
  189. #define ENC_BAD_FORMAT 2
  190. /** Common 24-bit RGB, order of components b-g-r **/
  191. #define ENC_CSP_RGB24  0
  192. /** Planar YUV, U & V subsampled by 2 in both directions, 
  193.     average 12 bit per pixel; order of components y-v-u **/
  194. #define ENC_CSP_YV12 1
  195. /** Packed YUV, U and V subsampled by 2 horizontally,
  196.     average 16 bit per pixel; order of components y-u-y-v **/
  197. #define ENC_CSP_YUY2 2
  198. /** Same as above, but order of components is u-y-v-y **/
  199. #define ENC_CSP_UYVY 3
  200. /** Same as ENC_CSP_YV12, but chroma components are swapped ( order y-u-v ) **/
  201. #define ENC_CSP_I420 4
  202. /** Same as above **/
  203. #define ENC_CSP_IYUV ENC_CSP_I420
  204. #ifdef __cplusplus
  205. }
  206. #endif 
  207. #endif // _DIVX4_H_