/***********************************************************
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
The Netherlands.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI or Corporation for National Research Initiatives or
CNRI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

While CWI is the initial source for this software, a modified version
is made available by the Corporation for National Research Initiatives
(CNRI) at the Internet address ftp://ftp.python.org.

STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

******************************************************************/

#ifndef Py_YUV_H
#define Py_YUV_H
#ifdef __cplusplus
extern "C" {
#endif

/*
 * SVideo YUV 4:1:1 format.
 *
 * 4 consecutive quadwords describe 8 pixels on 2 lines, as depicted
 * below.  An array of (width/4) of the below structure describes 2
 * scan lines.
 *
 * +-------------------+
 * | 00 | 01 | 02 | 03 | . . .
 * +-------------------+
 * | 10 | 11 | 12 | 13 | . . .
 * +-------------------+
 */
struct yuv411 {
	struct {
		unsigned int dummy:8;
		unsigned int y0:8;
		unsigned int u0:2;
		unsigned int v0:2;
		unsigned int y1:8;
		unsigned int u1:2;
		unsigned int v1:2;
	} v[4];
};

#define YUV411_Y00(y)	(y).v[0].y0
#define YUV411_Y01(y)	(y).v[1].y0
#define YUV411_Y02(y)	(y).v[2].y0
#define YUV411_Y03(y)	(y).v[3].y0
#define YUV411_Y10(y)	(y).v[0].y1
#define YUV411_Y11(y)	(y).v[1].y1
#define YUV411_Y12(y)	(y).v[2].y1
#define YUV411_Y13(y)	(y).v[3].y1
#define YUV411_U00(y)	((y).v[0].u0<<6|(y).v[1].u0<<4|(y).v[2].u0<<2|(y).v[3].u0)
#define YUV411_U01(y)	YUV411_U00(y)
#define YUV411_U02(y)	YUV411_U00(y)
#define YUV411_U03(y)	YUV411_U00(y)
#define YUV411_U10(y)	((y).v[0].u1<<6|(y).v[1].u1<<4|(y).v[2].u1<<2|(y).v[3].u1)
#define YUV411_U11(y)	YUV411_U10(y)
#define YUV411_U12(y)	YUV411_U10(y)
#define YUV411_U13(y)	YUV411_U10(y)
#define YUV411_V00(y)	((y).v[0].v0<<6|(y).v[1].v0<<4|(y).v[2].v0<<2|(y).v[3].v0)
#define YUV411_V01(y)	YUV411_V00(y)
#define YUV411_V02(y)	YUV411_V00(y)
#define YUV411_V03(y)	YUV411_V00(y)
#define YUV411_V10(y)	((y).v[0].v1<<6|(y).v[1].v1<<4|(y).v[2].v1<<2|(y).v[3].v1)
#define YUV411_V11(y)	YUV411_V10(y)
#define YUV411_V12(y)	YUV411_V10(y)
#define YUV411_V13(y)	YUV411_V10(y)

/*
 * Compression Library YUV 4:2:2 format.
 *
 * 1 longword describes 2 pixels.
 *
 * +-------+
 * | 0 | 1 |
 * +-------+
 */
struct yuv422 {
	unsigned int u:8;
	unsigned int y0:8;
	unsigned int v:8;
	unsigned int y1:8;
};
#define YUV422_Y0(y)	(y).y0
#define YUV422_Y1(y)	(y).y1
#define YUV422_U0(y)	(y).u
#define YUV422_U1(y)	(y).u
#define YUV422_V0(y)	(y).v
#define YUV422_V1(y)	(y).v

/*
 * Compression library YUV 4:2:2 Duplicate Chroma format.
 *
 * This is like the previous format, but the U and V values are
 * duplicated vertically (and hence there is some redundancy in the
 * data).  With other words, lines 2*n and 2*n+1 have the same U and V
 * values but different Y values.
 */

/*
 * Conversion functions.
 */
void yuv_sv411_to_cl422dc(int, void *, void *, int, int);
void yuv_sv411_to_cl422dc_quartersize(int, void *, void *, int, int);
void yuv_sv411_to_cl422dc_sixteenthsize(int, void *, void *, int, int);

#ifdef __cplusplus
}
#endif
#endif /* !Py_YUV_H */
