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

📄 xvid.h

📁 基于Linux的ffmepg decoder
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _Faraday_H_
#define _Faraday_H_

#ifdef __cplusplus
extern "C" {
#endif


/*
 * \defgroup global_grp   Global constants used in both encoder and decoder.
 *
 * This module describe all constants used in both the encoder and the decoder.
 * @{
 */

/*****************************************************************************
 *  API version number
 ****************************************************************************/

/*
 * \defgroup api_grp API version
 * @{
 */

#define API_VERSION ((2 << 16) | (1))/*< This constant tells you what Faraday's
                                      *   version this header defines.
				      *
 * You can use it to check if the host Faraday library API is the same as the one
 * you used to build you client program. If versions mismatch, then it is
 * highly possible that your application will segfault because the host Faraday
 * library and your application use different structures.
 * 
 */

/* @} */


/*****************************************************************************
 *  Error codes
 ****************************************************************************/


/*
 * \defgroup error_grp Error codes returned by Faraday API entry points.
 * @{
 */

#define Faraday_ERR_FAIL   -1 /*< Operation failed.
			    *
 * The requested Faraday operation failed. If this error code is returned from :
 * <ul>
 * <li>the Faraday_init function : you must not try to use an Faraday's instance from
 *                              this point of the code. Clean all instances you
 *                              already created and exit the program cleanly.
 * <li>Faraday_encore or Faraday_decore : something was wrong and en/decoding
 *                                  operation was not completed sucessfully.
 *                                  you can stop the en/decoding process or just 
 *									ignore and go on.
 * <li>Faraday_stop : you can safely ignore it if you call this function at the
 *                 end of your program.
 * </ul>
 */

#define Faraday_ERR_OK      0 /*< Operation succeed.
			    *
 * The requested Faraday operation succeed, you can continue to use Faraday's
 * functions.
 */

#define Faraday_ERR_MEMORY  1 /*< Operation failed.
			    *
 * Insufficent memory was available on the host system.
 */

#define Faraday_ERR_FORMAT  2 /*< Operation failed.
			    *
 * The format of the parameters or input stream were incorrect.
 */

/* @} */


/*****************************************************************************
 *  Color space constants
 ****************************************************************************/


/*
 * \defgroup csp_grp Colorspaces constants.
 * @{
 */

#define Faraday_CSP_RGB24  0  /*< 24-bit RGB colorspace (b,g,r packed) */
#define Faraday_CSP_YV12   1  /*< YV12 colorspace (y,v,u planar) */
#define Faraday_CSP_YUY2   2  /*< YUY2 colorspace (y,u,y,v packed) */
#define Faraday_CSP_UYVY   3  /*< UYVY colorspace (u,y,v,y packed) */
#define Faraday_CSP_I420   4  /*< I420 colorsapce (y,u,v planar) */
#define Faraday_CSP_RGB555 10 /*< 16-bit RGB555 colorspace */
#define Faraday_CSP_RGB565 11 /*< 16-bit RGB565 colorspace */
#define Faraday_CSP_USER   12 /*< user colorspace format, where the image buffer points
                            *   to a DEC_PICTURE (y,u,v planar) structure.
							*
							*   For encoding, image is read from the DEC_PICTURE
							*   parameter values. For decoding, the DEC_PICTURE 
                            *   parameters are set, pointing to the internal Faraday
                            *   image buffer. */
#define Faraday_CSP_EXTERN 1004 /*< Special colorspace used for slice rendering
                              *
                              * The application provides an external buffer to Faraday.
                              * This way, Faraday works directly into the final rendering
                              * buffer, no need to specify this is a speed boost feature.
                              * This feature is only used by mplayer at the moment, refer
                              * to mplayer code to see how it can be used. */
#define Faraday_CSP_YVYU   1002 /*< YVYU colorspace (y,v,y,u packed) */
#define Faraday_CSP_RGB32  1000 /*< 32-bit RGB colorspace (b,g,r,a packed) */
#define Faraday_CSP_NULL   9999 /*< NULL colorspace; no conversion is performed */

#define Faraday_CSP_VFLIP  0x80000000 /*< (flag) Flip frame vertically during conversion */

/* @} */

/* @} */

/*
 * \defgroup init_grp Initialization constants, structures and functions.
 *
 * This section describes all the constants, structures and functions used to
 * initialize the Faraday core library
 *
 * @{
 */


/*****************************************************************************
 *  CPU flags
 ****************************************************************************/


/*
 * \defgroup cpu_grp Flags for Faraday_INIT_PARAM.cpu_flags.
 *
 * This section describes all constants that show host cpu available features,
 * and allow a client application to force usage of some cpu instructions sets.
 * @{
 */


/*
 * \defgroup x86_grp x86 specific cpu flags
 * @{
 */

#define Faraday_CPU_MMX      0x00000001 /*< use/has MMX instruction set */
#define Faraday_CPU_MMXEXT   0x00000002 /*< use/has MMX-ext (pentium3) instruction set */
#define Faraday_CPU_SSE      0x00000004 /*< use/has SSE (pentium3) instruction set */
#define Faraday_CPU_SSE2     0x00000008 /*< use/has SSE2 (pentium4) instruction set */
#define Faraday_CPU_3DNOW    0x00000010 /*< use/has 3dNOW (k6-2) instruction set */
#define Faraday_CPU_3DNOWEXT 0x00000020 /*< use/has 3dNOW-ext (athlon) instruction set */
#define Faraday_CPU_TSC      0x00000040 /*< has TimeStampCounter instruction */

/* @} */

/*
 * \defgroup ia64_grp ia64 specific cpu flags.
 * @{
 */

#define Faraday_CPU_IA64     0x00000080 /*< Forces ia64 optimized code usage
 *
 * This flags allow client applications to force IA64 optimized functions.
 * This feature is considered exeperimental and should be treated as is.
 */

/* @} */

/*
 * \defgroup iniflags_grp Initialization commands.
 *
 * @{
 */

#define Faraday_CPU_CHKONLY  0x40000000 /*< Check cpu features
				      *
 * When this flag is set, the Faraday_init function performs just a cpu feature
 * checking and then fills the cpu field. This flag is usefull when client
 * applications want to know what instruction sets the host cpu supports.
 */

#define Faraday_CPU_FORCE    0x80000000 /*< Force input flags to be used
				      *
 * When this flag is set, client application forces Faraday to use other flags
 * set in cpu_flags. \b Use this at your own risk.
 */

/* @} */

/* @} */

/*****************************************************************************
 *  Initialization structures
 ****************************************************************************/

/* Structure used in Faraday_init function. */
	typedef struct
	{
		int cpu_flags;   /*< [in/out]
				  *
				  * Filled with desired[in] or available[out]
				  * cpu instruction sets.
				  */
		int api_version; /*< [out]
				  *
				  * Faraday_init will initialize this field with
				  * the API_VERSION used in this Faraday core
				  * library
				  */
		int core_build;  /*< [out]
				  * \todo Unused.
				  */
	}
	Faraday_INIT_PARAM;

/*****************************************************************************
 *  Initialization entry point
 ****************************************************************************/

/*
 * \defgroup inientry_grp Initialization entry point.
 * @{
 */

/*
 * \brief Initialization entry point.
 *
 * This is the Faraday's initialization entry point, it is only used to initialize
 * the Faraday internal data (function pointers, vector length code tables,
 * rgb2yuv lookup tables).
 *
 * \param handle Reserved for future use.
 * \param opt Reserved for future use (set it to 0).
 * \param param1 Used to pass an Faraday_INIT_PARAM parameter.
 * \param param2 Reserved for future use.
 */
	int Faraday_init(void *handle,
		      int opt,
		      void *param1,
		      void *param2);

/* @} */

/* @} */

/*****************************************************************************
 * Decoder constant
 ****************************************************************************/

/*
 * \defgroup decoder_grp Decoder related functions and structures.
 *
 *  This part describes all the structures/functions from Faraday's API needed for
 *  decoding a MPEG4 compliant streams.
 *  @{
 */

/*
 * \defgroup decframe_grp Flags for Faraday_DEC_FRAME.general
 *
 * Flags' description for the Faraday_DEC_FRAME.general member.
 *
 * @{
 */

/* Not used at the moment */
#define Faraday_QUICK_DECODE		0x00000010


/*
 * @}
 */

/*****************************************************************************
 * Decoder structures
 ****************************************************************************/

	typedef struct
	{
		int width;
		int height;
		void *handle;
	}
	Faraday_DEC_PARAM;


	typedef struct
	{
		int general;
		void *bitstream;
		int length;

		void *image;
		int stride;
		int colorspace;
	}
	Faraday_DEC_FRAME;


	// This struct is used for per slice rendering
	typedef struct 
	{
		void *y,*u,*v;
		int stride_y, stride_u,stride_v;
	} Faraday_DEC_PICTURE;


/*****************************************************************************
 * Decoder entry point
 ****************************************************************************/

/*
 * \defgroup  decops_grp Decoder operations
 *
 * These are all the operations Faraday's decoder can perform.
 *
 * @{
 */

#define Faraday_DEC_DECODE		0 /*< Decodes a frame
				   *
 * This operation constant is used when client application wants to decode a
 * frame. Client application must also fill Faraday_DEC_FRAME appropriately.
 */

#define Faraday_DEC_CREATE		1 /*< Creates a decoder instance
				   *
 * This operation constant is used by a client application in order to create
 * a decoder instance. Decoder instances are independant from each other, and
 * can be safely threaded.
 */

#define Faraday_DEC_DESTROY	2 /*< Destroys a decoder instance
				   *
 * This operation constant is used by the client application to destroy a
 * previously created decoder instance.
 */

/*
 * @}
 */

/*
 * \defgroup  decentry_grp Decoder entry point
 *
 * @{
 */

/*
 * \brief Decoder entry point.
 *
 * This is the Faraday'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 Faraday_DEC_PARAM or Faraday_DEC_FRAME structure
 * \param param2 Reserved for future use.
 */

	int Faraday_decore(void *handle,
			int opt,
			void *param1,
			void *param2);

⌨️ 快捷键说明

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