Index: live.h
===================================================================
--- live.h	(revision 27)
+++ live.h	(revision 28)
@@ -0,0 +1,133 @@
+/*
+    Raydium - CQFD Corp.
+    http://raydium.cqfd-corp.org
+    License: GPL - GNU General Public License, see "gpl.txt" file.
+*/
+
+// Live textures functions
+
+// TODO:
+// 4 bpp live textures support
+
+#ifndef LIVE_H
+#define LIVE_H
+
+#ifndef WIN32
+#include <linux/types.h>
+#include <linux/videodev.h>
+#include <sys/mman.h>
+
+#define RAYDIUM_LIVE_DEVICE_DEFAULT	"/dev/video0"
+#define RAYDIUM_LIVE_SIZEX_DEFAULT	352
+#define RAYDIUM_LIVE_SIZEY_DEFAULT	288
+
+#define RAYDIUM_LIVE_DEVICE_AUTO	NULL
+#define RAYDIUM_LIVE_SIZE_AUTO		-1
+
+#define RAYDIUM_LIVE_FREE		0
+#define RAYDIUM_LIVE_CAPTURE_NONE	-1
+#define RAYDIUM_LIVE_CAPTURE_READ	1
+#define RAYDIUM_LIVE_CAPTURE_MMAP	2
+
+
+typedef struct raydium_live_Device 
+{
+  int fd;
+  struct video_capability cap;
+  struct video_window win;
+  struct video_picture vpic;
+
+  // for mmap captures
+  struct video_mbuf gb_buffers;
+  struct video_mmap gb_buf;
+
+  unsigned char *buffer;  // capture buffer
+  unsigned char *src;     // intermediate buffer
+  unsigned char *buffer2; // final buffer
+
+  char capture_style;
+  int frame;
+  char name[RAYDIUM_MAX_NAME_LEN];
+} raydium_live_Device;
+
+
+typedef struct raydium_live_Texture
+{
+  char state;
+  raydium_live_Device *device;
+  int texture;
+  void *OnRefresh;
+  int tx;
+  int ty;
+  int hardware_tx;
+  int hardware_ty;
+  int bpp;
+  unsigned char *data_source;
+} raydium_live_Texture;
+
+raydium_live_Device raydium_live_device[RAYDIUM_MAX_VIDEO_DEVICES];
+raydium_live_Texture raydium_live_texture[RAYDIUM_MAX_LIVE_TEXTURES];
+
+// mostly from tvset.c (thanks to vgrabber.c)
+#define READ_VIDEO_PIXEL(buf, format, depth, r, g, b)			\
+{									\
+	switch (format)							\
+	{								\
+		case VIDEO_PALETTE_GREY:				\
+			switch (depth)					\
+			{						\
+				case 4:					\
+				case 6:					\
+				case 8:					\
+					(r) = (g) = (b) = (*buf++ << 8);\
+					break;				\
+									\
+				case 16:				\
+					(r) = (g) = (b) = 		\
+						*((unsigned short *) buf);	\
+					buf += 2;			\
+					break;				\
+			}						\
+			break;						\
+									\
+									\
+		case VIDEO_PALETTE_RGB565:				\
+		{							\
+			unsigned short tmp = *(unsigned short *)buf;	\
+			(r) = tmp&0xF800;				\
+			(g) = (tmp<<5)&0xFC00;				\
+			(b) = (tmp<<11)&0xF800;				\
+			buf += 2;					\
+		}							\
+		break;							\
+									\
+		case VIDEO_PALETTE_RGB555:				\
+			(r) = (buf[0]&0xF8)<<8;				\
+			(g) = ((buf[0] << 5 | buf[1] >> 3)&0xF8)<<8;	\
+			(b) = ((buf[1] << 2 ) & 0xF8)<<8;		\
+			buf += 2;					\
+			break;						\
+									\
+		case VIDEO_PALETTE_RGB24:				\
+			(r) = buf[0] << 8; (g) = buf[1] << 8; 		\
+			(b) = buf[2] << 8;				\
+			buf += 3;					\
+			break;						\
+		case VIDEO_PALETTE_YUV420P:				\
+			(r) = buf[0]+1.140*buf[2];		 	\
+			(g) = buf[0]-0.394*buf[1]-0.581*buf[2]; 	\
+			(b) = buf[0]+2.028*buf[1];			\
+			buf += 3;					\
+			break;						\
+									\
+		default:						\
+			raydium_log("live: error: palette unknown");	\
+	}								\
+}						
+
+
+// endif WIN32
+#endif
+
+// endif LIVE_H
+#endif