2 Copyright 2004-2005 Chris Tallon
3 Portions copyright 2004 Jon Gettler
5 This file is part of VOMP.
7 VOMP is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 VOMP is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with VOMP; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 #include <sys/ioctl.h>
40 // Structures for surface management
45 unsigned long unknown[4];
53 unsigned long unknown;
54 unsigned long win_unknown;
57 unsigned long unknown2;
60 unsigned long unknown3;
61 unsigned long unknown4;
63 unsigned long unknown5;
64 unsigned long unknown6;
68 stbgfx_map_item_t map[3];
69 unsigned long other[2];
74 unsigned long handle; /* surface handle */
78 long unknown; //unsigned long
79 unsigned long depth; /* number of subplanes */
84 stbgfx_display_t display;
87 unsigned char *base[3];
91 // Structures for surface drawing
100 unsigned long colour;
104 unsigned long dst_handle;
108 unsigned long height;
109 unsigned long src_handle;
119 #define GFX_FB_SFC_ALLOC _IOWR(0xfb,1,int*)
120 #define GFX_FB_SFC_FREE _IOW(0xfb,2,int)
121 #define GFX_FB_MAP _IOWR(0xfb,3,int*)
122 #define GFX_FB_SFC_UNMAP _IOW(0xfb,4,int)
123 #define GFX_FB_SET_PAL_1 _IOWR(0xfb,5,int*)
124 #define GFX_FB_SET_PAL_2 _IOW(0xfb,6,int*)
125 #define GFX_FB_OSD_SURFACE _IO(0xfb,7)
126 #define GFX_FB_SFC_SET_SHARE _IOW(0xfb,8,int)
127 #define GFX_FB_OSD_CUR_SETATTR _IOW(0xfb,9,int*)
128 #define GFX_FB_ATTACH _IOW(0xfb,11,int)
129 #define GFX_FB_SFC_DETACH _IOW(0xfb,12,int*)
130 #define GFX_FB_MOVE_DISPLAY _IOWR(0xfb,13,int)
131 #define GFX_FB_SET_DISPLAY _IOW(0xfb,14,int)
132 #define GFX_FB_OSD_CUR_MOVE_1 _IOW(0xfb,15,int*)
133 #define GFX_FB_OSD_CUR_MOVE_2 _IOW(0xfb,16,int)
134 #define GFX_FB_SET_OSD _IOW(0xfb,18,int)
135 #define GFX_FB_SET_DISP_CTRL _IOW(0xfb,21,int*)
136 #define GFX_FB_GET_DISP_CTRL _IOWR(0xfb,22,int*)
137 #define GFX_FB_SET_VIS_DEV_CTL _IOWR(0xfb,23,int*)
138 #define GFX_FB_GET_VIS_DEV_CTL _IOWR(0xfb,24,int*)
139 #define GFX_FB_OSD_BITBLT _IOW(0xfb,51,osd_bitblt_t*)
140 #define GFX_FB_OSD_FILLBLT _IOW(0xfb,53,osd_fillblt_t*)
141 #define GFX_FB_OSD_ADVFILLBLT _IOW(0xfb,54,osd_afillblt_t*)
142 #define GFX_FB_OSD_BLEND _IOW(0xfb,55,int*)
143 #define GFX_FB_OSD_ADVBLEND _IOW(0xfb,56,int*)
144 #define GFX_FB_OSD_RESIZE _IOW(0xfb,58,int*)
145 #define GFX_FB_ENGINE_WAIT _IOW(0xfb,60,int)
146 #define GFX_FB_RESET_ENGINE _IO(0xfb,61)
147 #define GFX_FB_SET_ENGINE_MODE _IOW(0xfb,62,int)
148 #define GFX_FB_GET_ENGINE_MODE _IO(0xfb,63)
149 #define GFX_FB_GET_SFC_INFO _IO(0xfb,64,int*)
150 #define GFX_FB_OSD_SFC_CLIP _IOW(0xfb,65,osd_clip_rec_t*)
151 #define GFX_FB_OSD_COLOURKEY _IOW(0xfb,67,int*)
152 #define GFX_FB_GET_SFC_PSEUDO _IOWR(0xfb,68,int*)
154 class SurfaceMVP : public Surface
157 SurfaceMVP(int id = 0);
160 int create(UINT width, UINT height);
162 unsigned long getSurfaceHandle();
164 int fillblt(int x, int y, int width, int height, unsigned int rgba);
165 void drawPixel(int x, int y, unsigned int c);
166 void drawHorzLine(int x1, int x2, int y, unsigned int c);
167 void drawVertLine(int x, int y1, int y2, unsigned int c);
168 int updateToScreen(int sx, int sy, int w, int h, int dx, int dy);
169 void readPixel(int x, int y, unsigned char* r, unsigned char* g, unsigned char* b);
170 void screenShot(char* fileName);
172 static void initConversionTables();
174 int blt(int fd, unsigned long shandle, int sx, int sy, int width, int height, unsigned long dhandle, int dx, int dy);
178 osd_surface_t surface;
180 void yuv2rgb(int y, int u, int v, unsigned char* pr, unsigned char* pg, unsigned char* pb);
181 void rgb2yuv(unsigned char r, unsigned char g, unsigned char b, unsigned char *y, unsigned char *u, unsigned char *v);
184 void c2rgba(unsigned long c, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a)
186 *a = (c & 0xff000000) >> 24;
187 *r = (c & 0x00ff0000) >> 16;
188 *g = (c & 0x0000ff00) >> 8;
189 *b = (c & 0x000000ff);
192 static int conv_YB[256];
193 static int conv_YG[256];
194 static int conv_YR[256];
195 static int conv_UB[256];
196 static int conv_UG[256];
197 static int conv_UR[256];
198 static int conv_VB[256];
199 static int conv_VG[256];
200 static int conv_VR[256];
202 static int conv_BY[256];
203 static int conv_GY[256];
204 static int conv_RY[256];
205 static int conv_BU[256];
206 static int conv_GU[256];
207 static int conv_RU[256];
208 static int conv_BV[256];
209 static int conv_GV[256];
210 static int conv_RV[256];