mpegvideo.h
上传用户:jxp0626
上传日期:2007-01-08
资源大小:102k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Unix_Linux

  1. /* mpegencode.c */
  2. /* Start codes. */
  3. #define SEQ_END_CODE 0x000001b7
  4. #define SEQ_START_CODE 0x000001b3
  5. #define GOP_START_CODE 0x000001b8
  6. #define PICTURE_START_CODE 0x00000100
  7. #define SLICE_MIN_START_CODE 0x00000101
  8. #define SLICE_MAX_START_CODE 0x000001af
  9. #define EXT_START_CODE 0x000001b5
  10. #define USER_START_CODE 0x000001b2
  11. /* Macros for picture code type. */
  12. #define I_TYPE 1
  13. #define P_TYPE 2
  14. #define B_TYPE 3
  15. enum OutputFormat {
  16.     FMT_MPEG1,
  17.     FMT_H263,
  18.     FMT_MJPEG,
  19. };
  20. #define MPEG_BUF_SIZE (16 * 1024)
  21. typedef struct MpegEncContext {
  22.     /* the following parameters must be initialized before encoding */
  23.     int width, height; /* picture size. must be a multiple of 16 */
  24.     int gop_size;
  25.     int frame_rate; /* number of frames per second */
  26.     int intra_only; /* if true, only intra pictures are generated */
  27.     int bit_rate;        /* wanted bit rate */
  28.     enum OutputFormat out_format; /* output format */
  29.     int h263_rv10; /* use RV10 variation for H263 */
  30.     int h263_pred; /* use DIVX (aka mpeg4) ac/dc predictions */
  31.     /* the following fields are managed internally by the encoder */
  32.     /* bit output */
  33.     PutBitContext pb;
  34.     /* sequence parameters */
  35.     int picture_number;
  36.     int fake_picture_number; /* picture number at the bitstream frame rate */
  37.     int gop_picture_number; /* index of the first picture of a GOP */
  38.     int mb_width, mb_height;
  39.     UINT8 *new_picture[3];     /* picture to be compressed */
  40.     UINT8 *last_picture[3];    /* previous picture */
  41.     UINT8 *current_picture[3]; /* buffer to store the decompressed current picture */
  42.     int last_dc[3]; /* last DC values for MPEG1 */
  43.     INT16 *dc_val[3]; /* used for mpeg4 DC prediction */
  44.     int y_dc_scale, c_dc_scale;
  45.     int qscale;
  46.     int pict_type;
  47.     int frame_rate_index;
  48.     /* motion compensation */
  49.     int f_code; /* resolution */
  50.     int last_motion_x, last_motion_y;
  51.     INT16 (*motion_val)[2]; /* used for MV prediction */
  52.     int full_search;
  53.     /* macroblock layer */
  54.     int mb_x, mb_y;
  55.     int mb_incr;
  56.     int mb_intra;
  57.     /* matrix transmitted in the bitstream */
  58.     UINT8 init_intra_matrix[64];
  59.     /* precomputed matrix (combine qscale and DCT renorm) */
  60.     int intra_matrix[64];
  61.     int non_intra_matrix[64];
  62.     int block_last_index[6];  /* last non zero coefficient in block */
  63.     void *opaque; /* private data for the user */
  64.     /* bit rate control */
  65.     int I_frame_bits;    /* wanted number of bits per I frame */
  66.     int P_frame_bits;    /* same for P frame */
  67.     long long wanted_bits;
  68.     long long total_bits;
  69.     struct MJpegContext *mjpeg_ctx;
  70. } MpegEncContext;
  71. extern const UINT8 zigzag_direct[64];
  72. /* motion_est.c */
  73. int estimate_motion(MpegEncContext *s, 
  74.                     int mb_x, int mb_y,
  75.                     int *mx_ptr, int *my_ptr);
  76. /* h263enc.c */
  77. void h263_encode_mb(MpegEncContext *s, 
  78.                     DCTELEM block[6][64],
  79.                     int motion_x, int motion_y);
  80. void h263_picture_header(MpegEncContext *s, int picture_number);
  81. void rv10_encode_picture_header(MpegEncContext *s, int picture_number);
  82. void h263_dc_scale(MpegEncContext *s);
  83. void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);
  84. /* mjpegenc.c */
  85. int mjpeg_init(MpegEncContext *s);
  86. void mjpeg_close(MpegEncContext *s);
  87. void mjpeg_encode_mb(MpegEncContext *s, 
  88.                      DCTELEM block[6][64]);
  89. void mjpeg_picture_header(MpegEncContext *s);
  90. void mjpeg_picture_trailer(MpegEncContext *s);