/*******************************************************************
                YUV frame treating interface
 *******************************************************************/

#ifndef FRAME_H
#define FRAME_H

#define UCHAR_CLIP_TABLE_OFFSET 384

typedef struct {
	int chroma_format;
	int progressive;

	int remap;

	int yo; /* y offset */
	
	int yg;

	int bu;

	int gu;
	int gv;

	int rv;

} BGR_CONVERSION_PARAMETER;

typedef struct {
	int height;
	int width;

	unsigned char *y;
	unsigned char *u;
	unsigned char *v;

	BGR_CONVERSION_PARAMETER prm;
} FRAME;

/* typedef void (__stdcall * FRAME2BGR)(FRAME *, unsigned char *, int); */
/* typedef void (* UPSAMPLE_CHROMA)(FRAME *); */

#ifdef __cplusplus
extern "C" {
#endif

#ifndef FRAME_C
extern const unsigned char uchar_clip_table[1024];
extern FRAME *new_frame(int width, int height, BGR_CONVERSION_PARAMETER *prm);
extern void delete_frame(FRAME *p);
extern int copy_frame(FRAME *in, FRAME *out);

extern void upsample_chroma(FRAME *p);
/* extern void upsample_chroma_mmx(FRAME *p); */
extern void __stdcall yuv444_to_bgr(FRAME *top, FRAME *bottom, unsigned char *out, int out_step);
/* extern void __stdcall yuv444_to_bgr_mmx(FRAME *in, unsigned char *out, int out_step); */
#endif
	
#ifdef __cplusplus
}
#endif

#endif