encoderparams.hh

来自「Motion JPEG编解码器源代码」· HH 代码 · 共 284 行

HH
284
字号
#ifndef _ENCODERPARAMS_HH#define _ENCODERPARAMS_HH/* encoderparams - class holding all the various control parameters for    and individual encoder instance.  For speed a lot of address offsets/sizes   are computed once-and-for-all and held in this object.*//* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. *//* * Disclaimer of Warranty * * These software programs are available to the user without any license fee or * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims * any and all warranties, whether express, implied, or statuary, including any * implied warranties or merchantability or of fitness for a particular * purpose.  In no event shall the copyright-holder be liable for any * incidental, punitive, or consequential damages of any kind whatsoever * arising from the use of these programs. * * This disclaimer of warranty extends to the user of these programs and user's * customers, employees, agents, transferees, successors, and assigns. * * The MPEG Software Simulation Group does not represent or warrant that the * programs furnished hereunder are free of infringement of any third-party * patents. * * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware, * are subject to royalty fees to patent holders.  Many of these patents are * general enough such that they are unavoidable regardless of implementation * design. * *//* Modifications and enhancements (C) 2000,2001,2002,2003 Andrew Stevens *//* These modifications are free software; you can redistribute it *  and/or modify it under the terms of the GNU General Public License *  as published by the Free Software Foundation; either version 2 of *  the License, or (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */#include "config.h"#include "mjpeg_types.h"#include "syntaxconsts.h"/*  How many frames to read in one go*/#define READ_CHUNK_SIZE 3/*  How many frames encoding may be concurrently under way.  N.b. there is no point setting this greater than M.  Additional parallelism can be exposed at a finer grain by  parallelising per-macro-block computations. */#define MAX_WORKER_THREADS 4/* motion data */struct motion_data {	unsigned int forw_hor_f_code,forw_vert_f_code; /* vector range */	unsigned int sxf,syf; /* search range */	unsigned int back_hor_f_code,back_vert_f_code;	unsigned int sxb,syb;};struct RateCtl;class MPEG2EncOptions;class EncoderParams{public:	EncoderParams( const MPEG2EncOptions &options);	void Init(const MPEG2EncOptions &options);private:	void InitQuantMatrices(const class MPEG2EncOptions &options);	void InitEncodingControls(const class MPEG2EncOptions &options);	void RangeChecks();	void ProfileAndLevelChecks();public:	/**************	 *	 * Global MPEG parameters (set by supplied stream, never	 * change in a run) 	 *     *************/	unsigned int horizontal_size, vertical_size;		unsigned int aspectratio;	/* aspect ratio information (pel or display) */	unsigned int frame_rate_code;	/* coded value of playback display									 * frame rate */	int dctsatlim;			/* Value to saturated DCT coeffs to */	double frame_rate;		/* Playback display frames per second							   N.b. when 3:2 pullback is active							   this is higher than the frame							   decode rate.  */	double bit_rate;			/* bits per second */	bool seq_hdr_every_gop;	bool seq_end_every_gop;	/* Useful for Stills sequences... */	bool svcd_scan_data;	unsigned int vbv_buffer_code;      /* Code for size of VBV buffer (*										* 16 kbit) */	double vbv_buffer_size;	unsigned int still_size; /* If non-0 encode a stills sequence: 1								I-frame per sequence pseudo VBR. Each								frame sized to still_size KB */	unsigned int vbv_buffer_still_size;  /* vbv_buffer_size holds											still size.  Ensure still											size matches. */	bool constrparms;         /* constrained parameters flag, MPEG-1 only */	bool load_iquant; 	bool load_niquant;        /* use non-default quant. matrices */    int profile, level;         /* syntax / parameter constraints */	bool ignore_constraints;	/* Disabled conformance checking of								 * hor_size, vert_size and								 * samp_rate */    bool dualprime;             /* Allow dual prime motion compensation */				bool prog_seq; /* progressive sequence */	int low_delay; /* no B pictures, skipped pictures */    /*******	 *	 * sequence specific data (sequence display extension)	 *	 ******/		unsigned int video_format; /* component, PAL, NTSC, SECAM or MAC */	unsigned int color_primaries; /* source primary chromaticity coordinates */	unsigned int transfer_characteristics; /* opto-electronic transfer char. (gamma) */	unsigned int matrix_coefficients; /* Eg,Eb,Er / Y,Cb,Cr matrix coefficients */	unsigned int display_horizontal_size;  /* display size */	unsigned int display_vertical_size;	bool mpeg1;				/* ISO/IEC IS 11172-2 sequence */	bool fieldpic;			/* use field pictures */	bool pulldown_32;		/* 3:2 Pulldown of movie material */	bool topfirst;	/************	 *	 * Picture kind specific informatino (picture header flags)     *     ***********/		int frame_pred_dct_tab[3]; /* use only frame prediction and frame								  DCT (I,P,B) */	int qscale_tab[3];			/* linear/non-linear quantizaton table */	int intravlc_tab[3];		/* intra vlc format (I,P,B) */	int altscan_tab[3];			/* alternate scan (I,P,B */	unsigned int dc_prec;    /****************************	 * Encoder internal derived values and parameters	 *************************** */	int enc_width, 		enc_height;   /* encoded frame size (pels) multiples of 16 or 32 */		int phy_width, 		phy_height;   /* Physical Frame buffer size (pels) may differ						 from encoded size due to alignment						 constraints */	int enc_chrom_width,enc_chrom_height;	int phy_chrom_width,phy_chrom_height;	int lum_buffer_size, chrom_buffer_size;	int mb_width, mb_height;	/* frame size (macroblocks) */	/* Picture dimensioning (allowing for interlaced/non-interlaced coding) */	int phy_width2, phy_height2, enc_height2,		mb_height2, phy_chrom_width2;	int qsubsample_offset, 		fsubsample_offset;	int mb_per_pict;			/* Number of macro-blocks in a picture */  		struct motion_data *motion_data;    /* Selected intra/non_intra quantization matrices both ordinary*/	/* and inverted */	uint16_t *intra_q, *inter_q;	   /* **************************    * Global flags controlling encoding behaviour     ************************** */    double decode_frame_rate;	/* Actual stream frame                                 * decode-rate. This is lower than                                 * playback rate if 3:2 pulldown is                                 * active.								*/    int video_buffer_size;    /* Video buffer requirement target */    int N_max;				/* number of frames in Group of Pictures (max) */    int N_min;				/* number of frames in Group of Pictures (min) */    int M;					/* distance between I/P frames */    int M_min;			    /* Minimum distance between I/P frames */    bool closed_GOPs;	    /* Force all GOPs to be closed - useful                             * for satisfying requirements for                             * multi-angle DVD authoring */    int me44_red;			/* Sub-mean population reduction passes                            * for 4x4 and 2x2 */    int me22_red;			/* Motion compensation stages  */    int seq_length_limit;    double nonvid_bit_rate;	/* Bit-rate for non-video to assume for								   sequence splitting calculations */    double quant_floor;    /* quantisation floor [1..10] (0 for                                * CBR) */    double act_boost;		/* Quantisation reduction factor for blocks                                   with little texture (low variance) */    double boost_var_ceil;		/* Variance below which									 * quantisation boost cuts in */    int encoding_parallelism; /* Maximum number of concurrent worker threads                                 to be used for encoding  */    int max_active_ref_frames;    int max_active_b_frames;    bool parallel_read; /* Does the input reader / bufferer                               run as a seperate thread?                            */    int unit_coeff_elim;	/* Threshold of unit coefficient                                   density below which unit                                   coefficient blocks should be                                   zeroed.  < 0 implies DCT                                   coefficient should be included. */};#endif/*  * Local variables: *  c-file-style: "stroustrup" *  tab-width: 4 *  indent-tabs-mode: nil * End: */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?