[cvs] / xvidcore / src / divx4.h Repository:
ViewVC logotype

View of /xvidcore/src/divx4.h

Parent Directory Parent Directory | Revision Log Revision Log

Revision - (download) (annotate)
Thu Sep 11 14:12:16 2003 UTC (20 years ago) by edgomez
Branch: dev-api-4
Changes since +1 -1 lines
   * Win32 files switched to Unix format.
      Ok, on IRC, we sorted out what was b0rking the project files each
      time I commit them in DOS format. In fact the Unix CVS does upload
      DOS format files if i commit them, and then Win32 CVS users get
      double \r\n files. So the best is to use unix format in CVS. This
      way, the checked out versions are right for Win32 users.

      NB: this imply a unix2dos conversion when doing a release from a
          Unix box. I think it's better than current policy, but
          automatic tarballs/zip of the tree should take care of that.

    * odivx and xvid_stat examples removed. Associated project files
      have been removed as well.

    * The divx4 compatibility layer has been removed. Associated options
      in the configure script removed. libxvidcore.def has no more need
      to be an autoconf generated file.

    * rawdec removed. It has never been used and will never be.

    * Added major api appending to the macosx module build.
 *  - DivX 4.x compatibility layer (Deprecated and not up2date code) -
 *  Copyright(C) 2001-2003 Peter Ross <pross@xvid.org>
 *  This program is 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
 *  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
 * $Id: divx4.h,v 2003/09/11 14:12:16 edgomez dead $

#ifndef _DIVX4_H_
#define _DIVX4_H_

#ifdef __cplusplus
extern "C" {

 * Decoder part

/* decore commands */
#define DEC_OPT_INIT		1
#define DEC_OPT_RELEASE		2
#define DEC_OPT_SETPP		3
#define DEC_OPT_SETOUT		4
#define DEC_OPT_FRAME		5
#define DEC_OPT_FRAME_311	6
#define DEC_OPT_SETPP2		7
#define DEC_OPT_VERSION		8

/* return values */
#define DEC_OK			0
#define DEC_MEMORY		1
#define DEC_BAD_FORMAT		2
#define DEC_EXIT		3

/* yuv colour formats */
#define DEC_YUY2		1
#define DEC_YUV2 		DEC_YUY2
#define DEC_UYVY		2
#define DEC_420			3
#define DEC_YV12		13

/* rgb colour formats */
#define DEC_RGB32		4
#define DEC_RGB24		5
#define DEC_RGB555		6
#define DEC_RGB565		7

#define DEC_RGB32_INV		8
#define DEC_RGB24_INV		9
#define DEC_RGB555_INV 		10
#define DEC_RGB565_INV 		11

/* return pointers to initial buffers
   equivalent to XVID_CSP_USER */
#define DEC_USER		12

/* output structure for DEC_USER */
	typedef struct
		void *y;
		void *u;
		void *v;
		int stride_y;
		int stride_uv;

	typedef struct
		unsigned long mp4_edged_ref_buffers_size;
		unsigned long mp4_edged_for_buffers_size;
		unsigned long mp4_edged_back_buffers_size;
		unsigned long mp4_display_buffers_size;
		unsigned long mp4_state_size;
		unsigned long mp4_tables_size;
		unsigned long mp4_stream_size;
		unsigned long mp4_reference_size;

	typedef struct
		void *mp4_edged_ref_buffers;
		void *mp4_edged_for_buffers;
		void *mp4_edged_back_buffers;
		void *mp4_display_buffers;
		void *mp4_state;
		void *mp4_tables;
		void *mp4_stream;
		void *mp4_reference;

	typedef struct
		int x_dim;				/* frame width */
		int y_dim;				/* frame height */
		int output_format;
		int time_incr;
		DEC_BUFFERS buffers;

	typedef struct
		void *bmp;				/* pointer to output buffer */
		void *bitstream;		/* input bit stream */
		long length;			/* length of bitstream */
		int render_flag;
		unsigned int stride;

	typedef struct
		int intra;
		int *quant_store;
		int quant_stride;

/* configure postprocessing */
	typedef struct
		int postproc_level;		/* ranging from 0 to 100 */

	int decore(unsigned long handle,
			   unsigned long dec_opt,
			   void *param1,
			   void *param2);

 * Encoder part

    Structure passed as an argument when creating encoder.
    You have to initialize at least x_dim and y_dim ( valid range:
	0<x_dim<=1920, 0<y_dim<=1280, both dimensions should be even ).
    You can set all other values to 0, in which case they'll be initialized
    to default values, or specify them directly.
    On success 'handle' member will contain non-zero handle to initialized 
	typedef struct _ENC_PARAM_
		int x_dim;				/* the x dimension of the frames to be encoded */
		int y_dim;				/* the y dimension of the frames to be encoded */
		float framerate;		/* the frame rate of the sequence to be encoded, in frames/second */
		int bitrate;			/* the bitrate of the target encoded stream, in bits/second */
		int rc_period;			/* the intended rate control averaging period */
		int rc_reaction_period;	/* the reaction period for rate control */
		int rc_reaction_ratio;	/* the ratio for down/up rate control */
		int max_quantizer;		/* the upper limit of the quantizer */
		int min_quantizer;		/* the lower limit of the quantizer */
		int max_key_interval;	/* the maximum interval between key frames */
		int use_bidirect;		/* use bidirectional coding */
		int deinterlace;		/* fast deinterlace */
		int quality;			/* the quality of compression ( 1 - fastest, 5 - best ) */
		int obmc;				/* flag to enable overlapped block motion compensation mode */
		void *handle;			/* will be filled by encore */

/* encore2 */

    Structure passed as a first argument when encoding a frame.
    Both pointers should be non-NULL. You are responsible for allocation
    of bitstream buffer, its size should be large enough to hold a frame.
    Checks for buffer overflow are too expensive and it will be almost
    impossible to recover from such overflow. Thus, no checks for buffer
    overflow will be done.
    Theoretical upper limit of frame size is around 6 bytes/pixel
    or 2.5 Mb for 720x576 frame.
    On success 'length' will contain number of bytes written into the stream.
	typedef struct _ENC_FRAME_
		void *image;		/* the image frame to be encoded */
		void *bitstream;	/* the buffer for encoded bitstream */
		int length;			/* the length of the encoded bitstream */
		int colorspace;		/* the format of image frame */
		int quant;			/* quantizer for this frame; only used in VBR modes */
		int intra;			/* force this frame to be intra/inter; only used in VBR 2-pass */
		void *mvs;			/* optional pointer to array of motion vectors */

    Structure passed as a second optional argument when encoding a frame.
    On successful return its members are filled with parameters of encoded
	typedef struct _ENC_RESULT_
		int is_key_frame;	/* the current frame is encoded as a key frame */
		int quantizer;		/* the quantizer used for this frame */
		int texture_bits;	/* amount of bits spent on coding DCT coeffs */
		int motion_bits;	/* amount of bits spend on coding motion */
		int total_bits;		/* sum of two previous fields */

/* the prototype of the encore() - main encode engine entrance */
	int encore(void *handle,	/* handle  - the handle of the calling entity, must be unique */
			   int enc_opt,		/* enc_opt - the option for encoding, see below */
			   void *param1,	/* param1  - the parameter 1 (its actually meaning depends on enc_opt */
			   void *param2);	/* param2  - the parameter 2 (its actually meaning depends on enc_opt */

/* encore options (the enc_opt parameter of encore()) */
#define ENC_OPT_INIT    0		/* initialize the encoder, return a handle */
#define ENC_OPT_RELEASE 1		/* release all the resource associated with the handle */
#define ENC_OPT_ENCODE  2		/* encode a single frame */
#define ENC_OPT_ENCODE_VBR 3	/* encode a single frame, not using internal rate control algorithm */

#define ENCORE_VERSION		20010807

/* return code of encore() */
#define ENC_FAIL		-1
#define ENC_OK			0
#define	ENC_MEMORY		1
#define ENC_BAD_FORMAT		2

/** Common 24-bit RGB, order of components b-g-r **/
#define ENC_CSP_RGB24 	0

/** Planar YUV, U & V subsampled by 2 in both directions, 
    average 12 bit per pixel; order of components y-v-u **/
#define ENC_CSP_YV12	1

/** Packed YUV, U and V subsampled by 2 horizontally,
    average 16 bit per pixel; order of components y-u-y-v **/
#define ENC_CSP_YUY2	2

/** Same as above, but order of components is u-y-v-y **/
#define ENC_CSP_UYVY	3

/** Same as ENC_CSP_YV12, but chroma components are swapped ( order y-u-v ) **/
#define ENC_CSP_I420	4

/** Same as above **/

#ifdef __cplusplus

#endif	/* _DIVX4_H_ */

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4