diff vidix/vidix.h @ 3991:dcc632dd2097

preliminary version
author nick
date Sat, 05 Jan 2002 10:13:25 +0000
parents
children 0d9de811e312
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vidix/vidix.h	Sat Jan 05 10:13:25 2002 +0000
@@ -0,0 +1,215 @@
+/*
+ * vidix.h
+ * VIDIX - VIDeo Interface for *niX
+ *   This interface is introduced as universal one to MPEG decoder,
+ *   BES == Back End Scaler and YUV2RGB hw accelerators.
+ * In the future it may be expanded up to capturing and audio things.
+ * Main goal of this this interface imlpementation is providing DGA
+ * everywhere where it's possible (unlike X11 and other).
+ * Copyright 2002 Nick Kurshev
+ * Licence: GPL
+ * This interface is based on v4l2, fbvid.h, mga_vid.h projects
+ * and personally my ideas.
+ * NOTE: This interface is introduces as driver interface.
+ * Don't use it for APP.
+*/
+#ifndef VIDIX_H
+#define VIDIX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define VIDIX_VERSION 100
+
+			/* returns driver version */
+extern unsigned vixGetVersion( void );
+
+			/* Probes video hw. Returns 0 if ok else errno */
+extern int	vixProbe( void );
+			/* Initializes driver. Returns 0 if ok else errno */
+extern int	vixInit( void );
+			/* Destroys driver */
+extern void	vixDestroy( void );
+
+typedef struct vidix_capability_s
+{
+	char	name[32];	/* Driver name */
+#define TYPE_OUTPUT	0x00000000	/* Is a video capture device */
+#define TYPE_CAPTURE	0x00000001	/* Is a CODEC device */
+#define TYPE_CODEC	0x00000002	/* Is a video output device */
+#define TYPE_FX		0x00000004	/* Is a video effects device */
+	int	type;		/* Device type, see below */
+	int	inputs;		/* Num video inputs */
+	int	outputs;	/* Num video outputs */
+	int	in_audios;	/* Num audio inputs */
+	int	out_audios;	/* Num audio outputs */
+	int	maxwidth;
+	int	maxheight;
+	int	minwidth;
+	int	minheight;
+	int	maxframerate;   /* -1 if unlimited */
+#define FLAG_NONE		0x00000000 /* No flags defined */
+#define FLAG_DMA		0x00000001 /* Card can use DMA */
+#define FLAG_UPSCALER		0x00000010 /* Card supports hw upscaling */
+#define FLAG_DOWNSCALER		0x00000020 /* Card supports hw downscaling */
+#define FLAG_SUBPIC		0x00001000 /* Card supports DVD subpictures */
+	unsigned flags;		/* Feature flags, see below */
+	unsigned short vendor_id;
+	unsigned short device_id;
+	unsigned reserved[4];
+}vidix_capability_t;
+
+			/* Should fill at least type before init.
+			   Returns 0 if ok else errno */
+extern int	vixGetCapability(vidix_capability_t *);
+
+typedef struct vidix_fourcc_s
+{
+	unsigned fourcc;
+#define VID_DEPTH_NONE		0x0000
+#define VID_DEPTH_1BPP		0x0001
+#define VID_DEPTH_2BPP		0x0002
+#define VID_DEPTH_4BPP		0x0004
+#define VID_DEPTH_8BPP		0x0008
+#define VID_DEPTH_12BPP		0x0010
+#define VID_DEPTH_15BPP		0x0020
+#define VID_DEPTH_16BPP		0x0040
+#define VID_DEPTH_24BPP		0x0080
+#define VID_DEPTH_32BPP		0x0100
+	unsigned depth;
+#define VID_CAP_NONE			0x0000
+#define VID_CAP_EXPAND			0x0001 /* if overlay can be bigger than source */
+#define VID_CAP_SHRINK			0x0002 /* if overlay can be smaller than source */
+#define VID_CAP_BLEND			0x0004 /* if overlay can be blended with framebuffer */
+#define VID_CAP_COLORKEY		0x0008 /* if overlay can be restricted to a colorkey */
+#define VID_CAP_ALPHAKEY		0x0010 /* if overlay can be restricted to an alpha channel */
+#define VID_CAP_COLORKEY_ISRANGE	0x0020 /* if the colorkey can be a range */
+#define VID_CAP_ALPHAKEY_ISRANGE	0x0040 /* if the alphakey can be a range */
+#define VID_CAP_COLORKEY_ISMAIN		0x0080 /* colorkey is checked against framebuffer */
+#define VID_CAP_COLORKEY_ISOVERLAY	0x0100 /* colorkey is checked against overlay */
+#define VID_CAP_ALPHAKEY_ISMAIN		0x0200 /* alphakey is checked against framebuffer */
+#define VID_CAP_ALPHAKEY_ISOVERLAY	0x0400 /* alphakey is checked against overlay */
+	unsigned flags;
+}vidix_fourcc_t;
+
+			/* Returns 0 if ok else errno */
+extern int	vixQueryFourcc(vidix_fourcc_t *);
+
+typedef struct vidix_yuv_s
+{
+	unsigned y,u,v;
+}vidix_yuv_t;
+
+typedef struct vidix_rect_s
+{
+	unsigned x,y,w,h;	/* in pixels */
+	vidix_yuv_t pitch;	/* bytes per line */
+}vidix_rect_t;
+
+typedef struct vidix_color_key_s
+{
+#define CKEY_FALSE	0
+#define CKEY_TRUE	1
+#define CKEY_EQ		2
+#define CKEY_NEQ	3
+	unsigned	op;		/* defines logical operation */
+	unsigned char	red;
+	unsigned char	green;
+	unsigned char	blue;
+	unsigned char	reserved;
+}vidix_ckey_t;
+
+typedef struct vidix_video_key_s
+{
+#define VKEY_FALSE	0
+#define VKEY_TRUE	1
+#define VKEY_EQ		2
+#define VKEY_NEQ	3
+	unsigned	op;		/* defines logical operation */
+	unsigned char	key[8];
+}vidix_vkey_t;
+
+typedef struct vidix_playback_s
+{
+	unsigned	fourcc;		/* app -> driver: movies's fourcc */
+	unsigned	capability;	/* app -> driver: what capability to use */
+	unsigned	blend_factor;	/* app -> driver: blenfing factor */
+	vidix_rect_t	src;            /* app -> driver: original movie size */
+	vidix_rect_t	dest;           /* app -> driver: destinition movie size. driver->app dest_pitch */
+	vidix_ckey_t	ckey;		/* app -> driver: color key */
+	vidix_vkey_t	vkey;		/* app -> driver: video key */
+#define KEYS_PUT	0
+#define KEYS_AND	1
+#define KEYS_OR		2
+#define KEYS_XOR	3
+	unsigned	key_op;		/* app -> driver: keys operations */
+}vidix_playback_t;
+
+			/* Returns 0 if ok else errno */
+extern int	vixConfigPlayback(const vidix_playback_t *);
+
+typedef struct vidix_dga_s
+{
+	unsigned	frame_size;		/* app -> driver */
+	unsigned	num_frames;		/* app -> driver; after call: driver -> app */
+#define LVO_MAXFRAMES 32
+	unsigned	offsets[LVO_MAXFRAMES];	/* driver -> app */
+	vidix_yuv_t	offset;			/* driver -> app: relative offsets within frame for yuv planes */
+	void*		dga_addr;		/* driver -> app: linear address */
+}vidix_dga_t;
+
+			/* Returns 0 if ok else errno */
+extern int	vixMapPlayback(vidix_dga_t *);
+
+			/* Returns 0 if ok else errno */
+extern int 	vixPlaybackOn( void );
+
+			/* Returns 0 if ok else errno */
+extern int 	vixPlaybackOff( void );
+
+			/* Returns 0 if ok else errno */
+extern int 	vixPlaybackFrameSelect( unsigned frame_idx );
+
+typedef struct vidix_video_eq_s
+{
+/* end-user app can have presets like: cold-normal-hot picture and so on */
+	int		brightness;	/* -1000 : +1000 */
+	int		contrast;	/* -1000 : +1000 */
+	int		saturation;	/* -1000 : +1000 */
+	int		hue;		/* -1000 : +1000 */
+	int		red_intense;	/* -1000 : +1000 */
+	int		green_intense;  /* -1000 : +1000 */
+	int		blue_intense;   /* -1000 : +1000 */
+}vidix_video_eq_t;
+
+			/* Returns 0 if ok else errno */
+extern int 	vixPlaybackGetEq( vidix_video_eq_t * );
+
+			/* Returns 0 if ok else errno */
+extern int 	vixPlaybackSetEq( const vidix_video_eq_t * );
+
+typedef struct vidix_slice_s
+{
+	void*		address;		/* app -> driver */
+	unsigned	size;			/* app -> driver */
+	vidix_rect_t	slice;			/* app -> driver */
+}vidix_slice_t;
+
+typedef struct vidix_dma_s
+{
+	vidix_slice_t	src;                    /* app -> driver */
+	vidix_slice_t	dest;			/* app -> driver */
+#define LVO_DMA_NOSYNC		0
+#define LVO_DMA_SYNC		1       /* means: wait vsync or hsync */
+	unsigned	flags;			/* app -> driver */
+}vidix_dma_t;
+
+			/* Returns 0 if ok else errno */
+extern int 	vixPlaybackCopyFrame( const vidix_dma_t * );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif