📄 main.h
字号:
//----------------------------------------------------------------------------
// AVI2MPG main header
//----------------------------------------------------------------------------
#define STRICT
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#ifndef MAXPATH
#define MAXPATH 260
#endif
#ifndef MAXFILE
#define MAXFILE 256
#endif
#ifdef MPEGMAIN
#define EXTERN
#else
#define EXTERN extern
#endif
#define FALSE 0
#define TRUE 1
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <netinet/in.h>
#include "common.h"
#include "mplex.h"
#include "ringbuffy.h"
#define MPEG_MPEG1 0
#define MPEG_VCD 1
#define MPEG_MPEG2 2
#define MPEG_SVCD 3
#define MPEG_DVD 4
#define COMPBITRATE_NONE 0
#define COMPBITRATE_AVG 1
#define COMPBITRATE_MAX 2
#define PULLDOWN_NONE 0
#define PULLDOWN_23 1
#define PULLDOWN_32 2
#define PULLDOWN_AUTO 3
#define TIMESTAMPS_ALL 0
#define TIMESTAMPS_IPONLY 1
#define TIMESTAMPS_IONLY 2
#define PICTURE_START_CODE 0x100L
#define SLICE_MIN_START 0x101L
#define SLICE_MAX_START 0x1AFL
#define USER_START_CODE 0x1B2L
#define SEQ_START_CODE 0x1B3L
#define EXT_START_CODE 0x1B5L
#define SEQ_END_CODE 0x1B7L
#define GOP_START_CODE 0x1B8L
#define ISO_END_CODE 0x1B9L
#define PACK_START_CODE 0x1BAL
#define SYSTEM_START_CODE 0x1BBL
/* picture coding type */
#define I_TYPE 1
#define P_TYPE 2
#define B_TYPE 3
#define D_TYPE 4
/* picture structure */
#define TOP_FIELD 1
#define BOTTOM_FIELD 2
#define FRAME_PICTURE 3
/* macroblock type */
#define MB_INTRA 1
#define MB_PATTERN 2
#define MB_BACKWARD 4
#define MB_FORWARD 8
#define MB_QUANT 16
/* motion_type */
#define MC_FIELD 1
#define MC_FRAME 2
#define MC_16X8 2
#define MC_DMV 3
/* mv_format */
#define MV_FIELD 0
#define MV_FRAME 1
/* chroma_format */
#define CHROMA420 1
#define CHROMA422 2
#define CHROMA444 3
/* extension start code IDs */
#define SEQ_ID 1
#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
/* inputtype */
#define T_Y_U_V 0
#define T_YUV 1
#define T_PPM 2
#define T_AVI 3
#define MAXM 16
#define MAXN 32
/* macroblock information */
struct mbinfo {
int mb_type; /* intra/forward/backward/interpolated */
int motion_type; /* frame/field/16x8/dual_prime */
int dct_type; /* field/frame DCT */
int mquant; /* quantization parameter */
int cbp; /* coded block pattern */
int skipped; /* skipped macroblock */
int MV[2][2][2]; /* motion vectors */
int mv_field_sel[2][2]; /* motion vertical field select */
int dmvector[2]; /* dual prime vectors */
double act; /* activity measure */
int var; /* for debugging */
};
/* motion data */
struct motion_data {
int forw_hor_f_code,forw_vert_f_code; /* vector range */
int sxf,syf; /* search range */
int back_hor_f_code,back_vert_f_code;
int sxb,syb;
};
/* type definitions for variable length code table entries */
typedef struct
{
unsigned char code; /* right justified */
char len;
} VLCtable;
/* for codes longer than 8 bits (excluding leading zeroes) */
typedef struct
{
unsigned short code; /* right justified */
char len;
} sVLCtable;
struct mpegOutSettings
{
/* general settings */
int useFP;
int verbose;
/* control flags */
int MplexVideo; /* multiplex video flag */
int MplexAudio; /* multiplex audio flag */
int UserEncodeVideo;
int UserEncodeAudio;
int EncodeVideo; /* encode video flag */
int EncodeAudio; /* encode audio flag */
int SaveTempVideo; /* 1 = do not remove temp video file after multiplexing */
int SaveTempAudio; /* 1 = do not remove temp audio file after multiplexing */
int B_W; /* do black and white, i.e. do no chromanance */
/* name strings */
char id_string[MAXPATH];
char iqname[MAXPATH], niqname[MAXPATH];
char statname[MAXPATH];
/* coding model parameters */
int video_type; /* type of video stream, mpeg1, mpeg2, etc */
int video_pulldown_flag; /* video is 24fps converted to 25.0 or 29.97fps */
int constrparms; /* constrained parameters flag (MPEG-1 only) */
int N; /* number of frames in Group of Pictures */
int M; /* distance between I/P frames */
int P; /* intra slice refresh interval */
int tc0; /* timecode of first frame */
int hours, mins, sec, tframe;
int fieldpic; /* use field pictures */
int write_sec; /* write a sequence end code */
int embed_SVCD_user_blocks;
/* sequence specific data (sequence header) */
int aspectratio; /* aspect ratio information (pel or display) */
int frame_rate_code; /* coded value of frame rate */
double frame_rate; /* frames per second */
double bit_rate; /* bits per second */
double max_bit_rate; /* maximum bit rate for variable bitrate mode */
double avg_bit_rate;
double min_bit_rate;
int auto_bitrate; /* automatically compute bitrate based on res and frame rate */
int vbv_buffer_size; /* size of VBV buffer (* 16 kbit) */
int constant_bitrate; /* constant bitrate flag */
int mquant_value; /* macroblock quantization value */
int maxquality; //(min mquant allowed);
int minquality; //(max mquant allowed unless ypu try to pass the max-bit-rate)
/* sequence specific data (sequence extension) */
int profile, level; /* syntax / parameter constraints */
int prog_seq; /* progressive sequence */
int chroma_format;
int low_delay; /* no B pictures, skipped pictures */
/* motion data */
struct motion_data motion_data[MAXM];
int xmotion, ymotion; /* x/y motion from frame to frame in pixels */
int automotion; /* automatically compute motion vectors based on xmotion, ymotion */
int maxmotion; /* max motion search windows for variable motion mode */
/* sequence specific data (sequence display extension) */
int write_sde; // write a Seq Dsply Ext
int video_format; /* component, PAL, NTSC, SECAM or MAC */
int color_primaries; /* source primary chromaticity coordinates */
int transfer_characteristics; /* opto-electronic transfer char. (gamma) */
int matrix_coefficients; /* Eg,Eb,Er / Y,Cb,Cr matrix coefficients */
int display_horizontal_size, display_vertical_size; /* display size */
/* picture specific data (picture coding extension) */
int dc_prec; /* DC coefficient precision for intra coded blocks */
int topfirst; /* display top field first */
/* picture display extension */
int write_pde;
int frame_centre_horizontal_offset;
int frame_centre_vertical_offset;
/* use only frame prediction and frame DCT (I,P,B,current) */
int frame_pred_dct_tab[3];
int conceal_tab[3]; /* use concealment motion vectors (I,P,B) */
int qscale_tab[3]; /* linear/non-linear quantizaton table */
int intravlc_tab[3]; /* intra vlc format (I,P,B,current) */
int altscan_tab[3]; /* alternate scan (I,P,B,current) */
int repeatfirst; /* repeat first field after second field */
int prog_frame; /* progressive frame */
/* rate control vars */
int Xi;
int Xp;
int Xb;
int r;
int d0i;
int d0p;
int d0b;
int reset_d0pb;
int avg_act;
int fixed_vbv_delay; /* force a 0xffff vbv_delay */
int min_frame_percent;
int pad_frame_percent;
/* audio vars */
int audio_mode;
int audio_layer;
int psych_model;
int audio_bitrate;
int emphasis;
int extension;
int error_protection;
int copyright;
int original;
/* multiplex vars */
unsigned long sectors_delay;
unsigned long video_delay_ms;
unsigned long audio_delay_ms;
unsigned long audio1_delay_ms;
unsigned long sector_size;
unsigned long packets_per_pack;
unsigned long audio_buffer_size;
unsigned long audio1_buffer_size;
unsigned long video_buffer_size;
int always_sys_header;
int use_computed_bitrate;
int mplex_type; /* type of program stream, mpeg1, mpeg2, etc */
int mplex_pulldown_flag; /* video stream is 24fps converted to 25.0 or 29.97fps */
int vcd_audio_pad; /* pad each vcd audio sector with zeros */
int align_sequence_headers; /* align sequence headers to a sector */
int user_mux_rate; /* force a particular mux rate */
int put_private2; /* put private stream 2's instead of padding packets */
int frame_timestamps; /* which frames to timestamp */
int VBR_multiplex;
int write_pec; /* write a program end code */
int mux_SVCD_scan_offsets;
unsigned int max_file_size;
unsigned int mux_start_time;
unsigned int mux_stop_time;
int reset_clocks;
int write_end_codes; /* write program end codes in split files */
int set_broken_link;
};
EXTERN int B_W;
EXTERN int PALDefaults;
EXTERN int BatchMode;
EXTERN int UseAdobeAPI;
EXTERN int MMXMode;
EXTERN unsigned int MMXAvail;
EXTERN int UseFP;
EXTERN mpegOutSettings tempSettings1;
EXTERN mpegOutSettings tempSettings2;
EXTERN int verbose;
EXTERN int FileOutError;
EXTERN int AbortMPEG;
EXTERN int VideoAvail;
EXTERN int vVideoCDAvail;
EXTERN int vSVCDAvail;
EXTERN int aVideoCDAvail;
EXTERN int aSVCDAvail;
EXTERN int vDVDAvail;
EXTERN int aDVDAvail;
EXTERN int AudioAvail;
EXTERN int InvalidVideo;
EXTERN int InvalidAudio;
EXTERN char VideoFilename[255];
EXTERN char AudioFilename[255];
EXTERN char Audio1Filename[255];
EXTERN char ProgramFilename[255];
EXTERN unsigned int currentFrame;
EXTERN unsigned int currentSample;
EXTERN unsigned int nSamples;
EXTERN int vbvUnderflows;
EXTERN int vbvOverflows;
EXTERN unsigned int min_bitrate, max_bitrate;
EXTERN unsigned int min_frame_bitrate, max_frame_bitrate;
EXTERN unsigned int min_mquant, max_mquant;
EXTERN double avg_mquant;
EXTERN double paddingSum; // video padding bits (cumulative)
EXTERN unsigned int maxPadding; // max video padding bits in frame
EXTERN double headerSum; // cumulative sum of video header bits
/* control flags */
EXTERN int MplexVideo;
EXTERN int MplexAudio;
EXTERN int UserEncodeVideo;
EXTERN int UserEncodeAudio;
EXTERN int EncodeVideo;
EXTERN int EncodeAudio;
EXTERN int SaveTempVideo;
EXTERN int SaveTempAudio;
/* audio stuff */
EXTERN int audio_mode;
EXTERN int audio_layer;
EXTERN int psych_model;
EXTERN int audio_bitrate;
EXTERN int emphasis;
EXTERN int extension;
EXTERN int error_protection;
EXTERN int copyright;
EXTERN int original;
EXTERN unsigned long audioSampleRate;
EXTERN int audioStereo;
EXTERN int audioSampleSize;
/* multiplex stuff */
EXTERN unsigned long sectors_delay;
EXTERN unsigned long video_delay_ms;
EXTERN unsigned long audio_delay_ms;
EXTERN unsigned long audio1_delay_ms;
EXTERN unsigned long sector_size;
EXTERN unsigned long packets_per_pack;
EXTERN unsigned long init_audio_buffer_size;
EXTERN unsigned long init_audio1_buffer_size;
EXTERN unsigned long init_video_buffer_size;
EXTERN int always_sys_header;
EXTERN int use_computed_bitrate;
EXTERN int mplex_type;
EXTERN int vcd_audio_pad;
EXTERN int mplex_pulldown_flag;
EXTERN int align_sequence_headers;
EXTERN int user_mux_rate;
EXTERN int put_private2;
EXTERN int frame_timestamps; /* which frames to timestamp */
EXTERN int VBR_multiplex;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -