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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
29 #include <sys/ioctl.h>
39 // Structures for surface management
44 unsigned long unknown[4];
52 unsigned long unknown;
53 unsigned long win_unknown;
56 unsigned long unknown2;
59 unsigned long unknown3;
60 unsigned long unknown4;
62 unsigned long unknown5;
63 unsigned long unknown6;
67 stbgfx_map_item_t map[3];
68 unsigned long other[2];
73 unsigned long handle; /* surface handle */
77 long unknown; //unsigned long
78 unsigned long depth; /* number of subplanes */
83 stbgfx_display_t display;
86 unsigned char *base[3];
90 // Structures for surface drawing
103 unsigned long dst_handle;
107 unsigned long height;
108 unsigned long src_handle;
118 #define GFX_FB_SFC_ALLOC _IOWR(0xfb,1,int*)
119 #define GFX_FB_SFC_FREE _IOW(0xfb,2,int)
120 #define GFX_FB_MAP _IOWR(0xfb,3,int*)
121 #define GFX_FB_SFC_UNMAP _IOW(0xfb,4,int)
122 #define GFX_FB_SET_PAL_1 _IOWR(0xfb,5,int*)
123 #define GFX_FB_SET_PAL_2 _IOW(0xfb,6,int*)
124 #define GFX_FB_OSD_SURFACE _IO(0xfb,7)
125 #define GFX_FB_SFC_SET_SHARE _IOW(0xfb,8,int)
126 #define GFX_FB_OSD_CUR_SETATTR _IOW(0xfb,9,int*)
127 #define GFX_FB_ATTACH _IOW(0xfb,11,int)
128 #define GFX_FB_SFC_DETACH _IOW(0xfb,12,int*)
129 #define GFX_FB_MOVE_DISPLAY _IOWR(0xfb,13,int)
130 #define GFX_FB_SET_DISPLAY _IOW(0xfb,14,int)
131 #define GFX_FB_OSD_CUR_MOVE_1 _IOW(0xfb,15,int*)
132 #define GFX_FB_OSD_CUR_MOVE_2 _IOW(0xfb,16,int)
133 #define GFX_FB_SET_OSD _IOW(0xfb,18,int)
134 #define GFX_FB_SET_DISP_CTRL _IOW(0xfb,21,int*)
135 #define GFX_FB_GET_DISP_CTRL _IOWR(0xfb,22,int*)
136 #define GFX_FB_SET_VIS_DEV_CTL _IOWR(0xfb,23,int*)
137 #define GFX_FB_GET_VIS_DEV_CTL _IOWR(0xfb,24,int*)
138 #define GFX_FB_OSD_BITBLT _IOW(0xfb,51,osd_bitblt_t*)
139 #define GFX_FB_OSD_FILLBLT _IOW(0xfb,53,osd_fillblt_t*)
140 #define GFX_FB_OSD_ADVFILLBLT _IOW(0xfb,54,osd_afillblt_t*)
141 #define GFX_FB_OSD_BLEND _IOW(0xfb,55,int*)
142 #define GFX_FB_OSD_ADVBLEND _IOW(0xfb,56,int*)
143 #define GFX_FB_OSD_RESIZE _IOW(0xfb,58,int*)
144 #define GFX_FB_ENGINE_WAIT _IOW(0xfb,60,int)
145 #define GFX_FB_RESET_ENGINE _IO(0xfb,61)
146 #define GFX_FB_SET_ENGINE_MODE _IOW(0xfb,62,int)
147 #define GFX_FB_GET_ENGINE_MODE _IO(0xfb,63)
148 #define GFX_FB_GET_SFC_INFO _IO(0xfb,64,int*)
149 #define GFX_FB_OSD_SFC_CLIP _IOW(0xfb,65,osd_clip_rec_t*)
150 #define GFX_FB_OSD_COLOURKEY _IOW(0xfb,67,int*)
151 #define GFX_FB_GET_SFC_PSEUDO _IOWR(0xfb,68,int*)
153 class SurfaceMVP : public Surface
156 SurfaceMVP(int id = 0);
159 int create(UINT width, UINT height);
161 unsigned long getSurfaceHandle();
163 int fillblt(int x, int y, int width, int height, unsigned int rgba);
164 void drawPixel(int x, int y, unsigned int c);
165 void drawHorzLine(int x1, int x2, int y, unsigned int c);
166 void drawVertLine(int x, int y1, int y2, unsigned int c);
167 int updateToScreen(int sx, int sy, int w, int h, int dx, int dy);
168 void readPixel(int x, int y, unsigned char* r, unsigned char* g, unsigned char* b);
169 void screenShot(char* fileName);
171 static void initConversionTables();
173 int blt(int fd, unsigned long shandle, int sx, int sy, int width, int height, unsigned long dhandle, int dx, int dy);
177 osd_surface_t surface;
179 void yuv2rgb(int y, int u, int v, unsigned char* pr, unsigned char* pg, unsigned char* pb);
180 void rgb2yuv(unsigned char r, unsigned char g, unsigned char b, unsigned char *y, unsigned char *u, unsigned char *v);
183 void c2rgba(unsigned long c, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a)
185 *a = (c & 0xff000000) >> 24;
186 *r = (c & 0x00ff0000) >> 16;
187 *g = (c & 0x0000ff00) >> 8;
188 *b = (c & 0x000000ff);
191 static int conv_YB[256];
192 static int conv_YG[256];
193 static int conv_YR[256];
194 static int conv_UB[256];
195 static int conv_UG[256];
196 static int conv_UR[256];
197 static int conv_VB[256];
198 static int conv_VG[256];
199 static int conv_VR[256];
201 static int conv_BY[256];
202 static int conv_GY[256];
203 static int conv_RY[256];
204 static int conv_BU[256];
205 static int conv_GU[256];
206 static int conv_RU[256];
207 static int conv_BV[256];
208 static int conv_GV[256];
209 static int conv_RV[256];