mpeg3video.h
资源名称:NETVIDEO.rar [点击查看]
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:7k
源码类别:
流媒体/Mpeg4/MP4
开发平台:
Visual C++
- #ifndef MPEGVIDEO_H
- #define MPEGVIDEO_H
- #ifdef _WIN32
- #define SDL_THREADS
- #endif
- #ifdef _WIN32
- #include "systems.h"
- #endif
- #include "../bitstream.h"
- #include "../mpeg3private.inc"
- #include "idct.h"
- #include "slice.h"
- #include "../timecode.h"
- /* Added 03/38/96 by Alex de Jong : avoid IRIX GNU warning */
- #ifdef ERROR
- #undef ERROR
- #endif
- /* zig-zag scan */
- extern unsigned char mpeg3_zig_zag_scan_nommx[64];
- extern unsigned char mpeg3_zig_zag_scan_mmx[64];
- /* alternate scan */
- extern unsigned char mpeg3_alternate_scan_nommx[64];
- extern unsigned char mpeg3_alternate_scan_mmx[64];
- /* default intra quantization matrix */
- extern unsigned char mpeg3_default_intra_quantizer_matrix[64];
- /* Frame rate table must agree with the one in the encoder */
- extern double mpeg3_frame_rate_table[16];
- /* non-linear quantization coefficient table */
- extern unsigned char mpeg3_non_linear_mquant_table[32];
- #define CHROMA420 1 /* chroma_format */
- #define CHROMA422 2
- #define CHROMA444 3
- #define TOP_FIELD 1 /* picture structure */
- #define BOTTOM_FIELD 2
- #define FRAME_PICTURE 3
- #define SEQ_ID 1 /* extension start code IDs */
- #define DISP_ID 2
- #define QUANT_ID 3
- #define SEQSCAL_ID 5
- #define PANSCAN_ID 7
- #define CODING_ID 8
- #define SPATSCAL_ID 9
- #define TEMPSCAL_ID 10
- #define ERROR (-1)
- #define SC_NONE 0 /* scalable_mode */
- #define SC_DP 1
- #define SC_SPAT 2
- #define SC_SNR 3
- #define SC_TEMP 4
- #define I_TYPE 1 /* picture coding type */
- #define P_TYPE 2
- #define B_TYPE 3
- #define D_TYPE 4
- #define MB_INTRA 1 /* macroblock type */
- #define MB_PATTERN 2
- #define MB_BACKWARD 4
- #define MB_FORWARD 8
- #define MB_QUANT 16
- #define MB_WEIGHT 32
- #define MB_CLASS4 64
- #define MC_FIELD 1 /* motion_type */
- #define MC_FRAME 2
- #define MC_16X8 2
- #define MC_DMV 3
- #define MV_FIELD 0 /* mv_format */
- #define MV_FRAME 1
- typedef struct
- {
- int cpus;
- /* ================================= Seeking variables ========================= */
- mpeg3_bits_t *vstream;
- int decoder_initted;
- unsigned char **output_rows; /* Output frame buffer supplied by user */
- int in_x, in_y, in_w, in_h, out_w, out_h; /* Output dimensions */
- int row_span;
- int *x_table, *y_table; /* Location of every output pixel in the input */
- int color_model;
- int want_yvu; /* Want to return a YUV frame */
- char *y_output, *u_output, *v_output; /* Output pointers for a YUV frame */
- mpeg3_slice_t slice_decoders[MPEG3_MAX_CPUS]; /* One slice decoder for every CPU */
- int total_slice_decoders; /* Total slice decoders in use */
- mpeg3_slice_buffer_t slice_buffers[MPEG3_MAX_CPUS]; /* Buffers for holding the slice data */
- int total_slice_buffers; /* Total buffers in the array to be decompressed */
- int slice_buffers_initialized; /* Total buffers initialized in the array */
- #ifndef SDL_THREADS
- pthread_mutex_t slice_lock; /* Lock slice array while getting the next buffer */
- pthread_mutex_t test_lock;
- #else
- SDL_mutex *slice_lock;
- SDL_mutex *test_lock;
- #endif
- int blockreadsize;
- long maxframe; /* Max value of frame num to read */
- double percentage_seek; /* Perform a percentage seek before the next frame is read */
- int frame_seek; /* Perform a frame seek before the next frame is read */
- long framenum; /* Number of the next frame to be decoded */
- long last_number; /* Last framenum rendered */
- int found_seqhdr;
- long bitrate;
- mpeg3_timecode_t gop_timecode; /* Timecode for the last GOP header read. */
- int has_gops; /* Some streams have no GOPs so try sequence start codes instead */
- /* These are only available from elementary streams. */
- long frames_per_gop; /* Frames per GOP after the first GOP. */
- long first_gop_frames; /* Frames in the first GOP. */
- long first_frame; /* Number of first frame stored in timecode */
- long last_frame; /* Last frame in file */
- /* ================================= Compression variables ===================== */
- /* Malloced frame buffers. 2 refframes are swapped in and out. */
- /* while only 1 auxframe is used. */
- unsigned char *yuv_buffer[5]; /* Make YVU buffers contiguous for all frames */
- unsigned char *oldrefframe[3], *refframe[3], *auxframe[3];
- unsigned char *llframe0[3], *llframe1[3];
- unsigned char *mpeg3_zigzag_scan_table;
- unsigned char *mpeg3_alternate_scan_table;
- // Source for the next frame presentation
- unsigned char **output_src;
- /* Pointers to frame buffers. */
- unsigned char *newframe[3];
- int horizontal_size, vertical_size, mb_width, mb_height;
- int coded_picture_width, coded_picture_height;
- int chroma_format, chrom_width, chrom_height, blk_cnt;
- int pict_type;
- int forw_r_size, back_r_size, full_forw, full_back;
- int prog_seq, prog_frame;
- int h_forw_r_size, v_forw_r_size, h_back_r_size, v_back_r_size;
- int dc_prec, pict_struct, topfirst, frame_pred_dct, conceal_mv;
- int intravlc;
- int repeatfirst;
- int repeat_count; /* Number of times to repeat the current frame * 100 since floating point is impossible in MMX */
- int current_repeat; /* Number of times the current frame has been repeated * 100 */
- int secondfield;
- int skip_bframes;
- int stwc_table_index, llw, llh, hm, hn, vm, vn;
- int lltempref, llx0, lly0, llprog_frame, llfieldsel;
- int matrix_coefficients;
- int framerate_code;
- float frame_rate;
- long *cr_to_r, *cr_to_g, *cb_to_g, *cb_to_b;
- long *cr_to_r_ptr, *cr_to_g_ptr, *cb_to_g_ptr, *cb_to_b_ptr;
- int have_mmx;
- int intra_quantizer_matrix[64], non_intra_quantizer_matrix[64];
- int chroma_intra_quantizer_matrix[64], chroma_non_intra_quantizer_matrix[64];
- int mpeg2;
- int qscale_type, altscan; /* picture coding extension */
- int pict_scal; /* picture spatial scalable extension */
- int scalable_mode; /* sequence scalable extension */
- } mpeg3video_t;
- /* VIDEO */
- mpeg3video_t* mpeg3video_new(int is_video_stream, int cpus);
- int mpeg3video_delete(mpeg3video_t *video);
- int mpeg3video_read_frame(mpeg3video_t *video,
- unsigned char *input,
- long input_size,
- unsigned char **output_rows,
- int in_x,
- int in_y,
- int in_w,
- int in_h,
- int out_w,
- int out_h,
- int color_model);
- int mpeg3video_get_header(mpeg3video_t *video, int dont_repeat);
- int mpeg3video_initdecoder(mpeg3video_t *video);
- int mpeg3video_read_yuvframe_ptr(mpeg3video_t *video,
- unsigned char *input,
- long input_size,
- char **y_output,
- char **u_output,
- char **v_output);
- #endif