⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xvid.h

📁 用vc++实现的xvid编码器实现的压缩解压缩
💻 H
📖 第 1 页 / 共 2 页
字号:
 * This is the XviD's decoder entry point. The possible operations are * described in the \ref decops_grp section. * * \param handle Decoder instance handle. * \param opt Decoder option constant * \param param1 Used to pass a XVID_DEC_PARAM or XVID_DEC_FRAME structure * \param param2 Reserved for future use. */	int xvid_decore(void *handle,			int opt,			void *param1,			void *param2);/** @} *//** @} *//** * \defgroup encoder_grp Encoder related functions and structures. * * @{ *//***************************************************************************** * Encoder constants ****************************************************************************//** * \defgroup encgenflags_grp  Flags for XVID_ENC_FRAME.general * @{ */#define XVID_VALID_FLAGS		0x80000000 /**< Reserved for future use */#define XVID_CUSTOM_QMATRIX		0x00000004 /**< Use custom quantization matrices											* * This flag forces XviD to use custom matrices passed to encoder in * XVID_ENC_FRAME structure (members quant_intra_matrix and quant_inter_matrix) */#define XVID_H263QUANT			0x00000010 /**< Use H263 quantization											* * This flag forces XviD to use H263  quantization type */#define XVID_MPEGQUANT			0x00000020 /**< Use MPEG4 quantization.											* * This flag forces XviD to use MPEG4 quantization type */#define XVID_HALFPEL			0x00000040 /**< Halfpel motion estimation											** informs xvid to perform a half pixel  motion estimation. */#define XVID_ADAPTIVEQUANT		0x00000080/**< Adaptive quantization											** informs xvid to perform an adaptative quantization using a Luminance* masking algorithm */#define XVID_LUMIMASKING		0x00000100/**< Lumimasking flag											*											* \deprecated This flag is no longer used. */#define XVID_LATEINTRA			0x00000200/**< Unknown											*											* \deprecated This flag is no longer used. */#define XVID_INTERLACING		0x00000400/**< MPEG4 interlacing mode.											*											* Enables interlacing encoding mode */#define XVID_TOPFIELDFIRST		0x00000800/**< Unknown                                            *											* \deprecated This flag is no longer used. */#define XVID_ALTERNATESCAN		0x00001000/**<											*											* \deprecated This flag is no longer used. */#define XVID_HINTEDME_GET		0x00002000/**< Gets Motion vector data from ME system.											** informs  xvid to  return  Motion Estimation vectors from the ME encoder* algorithm. Used during a first pass. */#define XVID_HINTEDME_SET		0x00004000/**< Gives Motion vectors hint to ME system.											** informs xvid to  use the user  given motion estimation vectors as hints* for the encoder ME algorithms. Used during a 2nd pass. */#define XVID_INTER4V			0x00008000/**< Inter4V mode.											** forces XviD to search a vector for each 8x8 block within the 16x16  Macro* Block. This mode should  be used only if the XVID_HALFPEL mode is  activated* (this  could change  in the future). */#define XVID_ME_ZERO			0x00010000/**< Unused											** Do not use this flag (reserved for future use) */#define XVID_ME_LOGARITHMIC		0x00020000/**< Unused											** Do not use this flag (reserved for future use) */#define XVID_ME_FULLSEARCH		0x00040000/**< Unused											** Do not use this flag (reserved for future use) */#define XVID_ME_PMVFAST			0x00080000/**< Use PMVfast ME algorithm.											** Switches XviD ME algorithm to PMVfast */#define XVID_ME_EPZS			0x00100000/**< Use EPZS ME algorithm.											** Switches XviD ME algorithm to EPZS */#define XVID_GREYSCALE			0x01000000/**< Discard chroma data.											** This flags forces XviD to discard chroma data, this is not mpeg4 greyscale* mode, it simply drops chroma MBs using cbp == 0 for these blocks */#define XVID_GRAYSCALE			XVID_GREYSCALE /**< XVID_GREYSCALE alias 											** United States locale support. *//** @} *//** * \defgroup encmotionflags_grp  Flags for XVID_ENC_FRAME.motion * @{ */#define PMV_ADVANCEDDIAMOND8	0x00004000/**< Uses advanced diamonds for 8x8 blocks											** Same as its 16x16 companion option*/#define PMV_ADVANCEDDIAMOND16   0x00008000/**< Uses advanced diamonds for 16x16 blocks											** */#define PMV_HALFPELDIAMOND16 	0x00010000/**< Turns on halfpel precision for 16x16 blocks											** switches the search algorithm from 1 or 2 full pixels precision to 1 or 2 half pixel precision.*/#define PMV_HALFPELREFINE16 	0x00020000/**< Turns on halfpel refinement step											** After normal diamond search, an extra halfpel refinement step is  performed. Should always be used if* XVID_HALFPEL is on, because it gives a rather big increase in quality.*/#define PMV_EXTSEARCH16 		0x00040000/**< Extends search for 16x16 blocks											** Normal PMVfast predicts one  start vector and  does diamond search around this position. EXTSEARCH means that 2* more  start vectors  are used:  (0,0) and  median  predictor and diamond search  is done for  those, too.  Makes* search slightly slower, but quality sometimes gets better.*/#define PMV_EARLYSTOP16	   		0x00080000/**< Dynamic ME thresholding											** PMVfast and EPZS stop search  if current best is  below some dynamic  threshhold. No  diamond search  is done,* only halfpel  refinement (if active).  Without EARLYSTOP diamond search is always done. That would be much slower,* but not really lead to better quality.*/#define PMV_QUICKSTOP16	   		0x00100000/**< Dynamic ME thresholding											** like  EARLYSTOP, but not even halfpel refinement is  done. Normally worse quality, so it defaults to* off. Might be removed, too.*/#define PMV_UNRESTRICTED16   	0x00200000/**< Not implemented											** "unrestricted  ME"   is  a   feature  of MPEG4. It's not  implemented, so this flag is  ignored (not even* checked).*/#define PMV_OVERLAPPING16   	0x00400000/**< Not implemented											** Same as above*/#define PMV_USESQUARES16		0x00800000/**< Use square pattern											** Replace  the  diamond search  with a  square search. */#define PMV_HALFPELDIAMOND8 	0x01000000/**< see 16x16 equivalent											** Same as its 16x16 companion option */#define PMV_HALFPELREFINE8 		0x02000000/**< see 16x16 equivalent											** Same as its 16x16 companion option */#define PMV_EXTSEARCH8 			0x04000000/**< see 16x16 equivalent											** Same as its 16x16 companion option */#define PMV_EARLYSTOP8	   		0x08000000/**< see 16x16 equivalent											** Same as its 16x16 companion option */#define PMV_QUICKSTOP8	   		0x10000000/**< see 16x16 equivalent											** Same as its 16x16 companion option */#define PMV_UNRESTRICTED8   	0x20000000/**< see 16x16 equivalent											** Same as its 16x16 companion option */#define PMV_OVERLAPPING8   		0x40000000/**< see 16x16 equivalent											** Same as its 16x16 companion option */#define PMV_USESQUARES8			0x80000000/**< see 16x16 equivalent											** Same as its 16x16 companion option *//** @} *//***************************************************************************** * Encoder structures ****************************************************************************/	/** Structure used for encoder instance creation */	typedef struct	{		int width;                    /**< [in]									   *									   * Input frame width. */		int height;                   /**< [in]									   *									   * Input frame height. */		int fincr;                    /**< [in]									   *									   * Time increment (fps = increment/base). */		int fbase;                    /**< [in]									   *									   * Time base (fps = increment/base). */		int rc_bitrate;               /**< [in]									   *									   * Sets the target bitrate of the encoded stream, in bits/second. **/		int rc_reaction_delay_factor; /**< [in]									   *									   * Tunes how fast the rate control reacts - lower values are faster. */		int rc_averaging_period;      /**< [in]									   *									   * Tunes how fast the rate control reacts - lower values are faster. */		int rc_buffer;	              /**< [in]									   *									   * Tunes how fast the rate control reacts - lower values are faster. */		int max_quantizer;            /**< [in]									   *									   * Sets the upper limit of the quantizer. */		int min_quantizer;            /**< [in]									   *									   * Sets the lower limit of the quantizer. */		int max_key_interval;         /**< [in]									   *									   * Sets the maximum interval between key frames. */		void *handle;                 /**< [out]									   *									   * XviD core lib will set this with the creater encoder instance. */	}	XVID_ENC_PARAM;	typedef struct	{		int x;		int y;	}	VECTOR;	typedef struct	{		int mode;				/* macroblock mode */		VECTOR mvs[4];	}	MVBLOCKHINT;	typedef struct	{		int intra;				/* frame intra choice */		int fcode;				/* frame fcode */		MVBLOCKHINT *block;		/* caller-allocated array of block hints (mb_width * mb_height) */	}	MVFRAMEHINT;	typedef struct	{		int rawhints;			/* if set, use MVFRAMEHINT, else use compressed buffer */		MVFRAMEHINT mvhint;		void *hintstream;		/* compressed hint buffer */		int hintlength;			/* length of buffer (bytes) */	}	HINTINFO;	/** Structure used to pass a frame to the encoder */	typedef struct	{		int general;                       /**< [in]											*											* Sets general options flag (See \ref encgenflags_grp) */		int motion;                        /**< [in]											*											* Sets Motion Estimation options */		void *bitstream;                   /**< [out]											*											* Output MPEG4 bitstream buffer pointer */		int length;                        /**< [out]											*											* Output MPEG4 bitstream length (bytes) */		void *image;                       /**< [in]											*											* Input frame */		int colorspace;                    /**< [in]											*											* input frame colorspace */		unsigned char *quant_intra_matrix; /**< [in]											*											* Custom intra quantization matrix */		unsigned char *quant_inter_matrix; /**< [in]											*											* Custom inter quantization matrix */		int quant;                         /**< [in]											*											* Frame quantizer :											* <ul>											* <li> 0 (zero) : Then the  rate controler chooses the right quantizer											*                 for you.  Typically used in ABR encoding, or first pass of a VBR											*                 encoding session.											* <li> !=  0  :  Then you  force  the  encoder  to use  this  specific											*                  quantizer   value.     It   is   clamped    in   the   interval											*                  [1..31]. Tipically used  during the 2nd pass of  a VBR encoding											*                  session. 											* </ul> */		int intra;                         /**< [in/out]											*											* <ul>											* <li> [in] : tells XviD if the frame must be encoded as an intra frame											*     <ul>											*     <li> 1: forces the encoder  to create a keyframe. Mainly used during											*              a VBR 2nd pass.											*     <li> 0:  forces the  encoder not to  create a keyframe.  Minaly used											*               during a VBR second pass											*     <li> -1: let   the  encoder   decide  (based   on   contents  and											*              max_key_interval). Mainly  used in ABR  mode and during  a 1st											*              VBR pass. 											*     </ul>											* <li> [out] : When first set to -1, the encoder returns the effective keyframe state											*              of the frame. 											* </ul>                                            */		HINTINFO hint;                     /**< [in/out]											*											* mv hint information */	}	XVID_ENC_FRAME;	/** Encoding statistics */	typedef struct	{		int quant;               /**< [out]								  *								  * Frame quantizer used during encoding */		int hlength;             /**< [out]								  *								  * Header bytes in the resulting MPEG4 stream */		int kblks;               /**< [out]								  *								  * Number of intra macro blocks  */		int mblks;               /**< [out]								  *								  * Number of inter macro blocks */		int ublks;               /**< [out]								  *								  * Number of skipped macro blocks */	}	XVID_ENC_STATS;/***************************************************************************** * Encoder entry point ****************************************************************************//** * \defgroup  encops_grp Encoder operations * * These are all the operations XviD's encoder can perform. * * @{ */#define XVID_ENC_ENCODE		0 /**< Encodes a frame				   * * This operation constant is used when client application wants to encode a * frame. Client application must also fill XVID_ENC_FRAME appropriately. */#define XVID_ENC_CREATE		1 /**< Creates a decoder instance				   * * This operation constant is used by a client application in order to create * an encoder instance. Encoder instances are independant from each other. */#define XVID_ENC_DESTROY	2 /**< Destroys a encoder instance				   * * This operation constant is used by the client application to destroy a * previously created encoder instance. *//** @} *//** * \defgroup  encentry_grp Encoder entry point * * @{ *//** * \brief Encoder entry point. * * This is the XviD's encoder entry point. The possible operations are * described in the \ref encops_grp section. * * \param handle Encoder instance handle * \param opt Encoder option constant * \param param1 Used to pass XVID_ENC_PARAM or XVID_ENC_FRAME structures. * \param param2 Optionally used to pass the XVID_ENC_STATS structure. */	int xvid_encore(void *handle,					int opt,					void *param1,					void *param2);/** @} *//** @} */#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

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