]> git.vomp.tv Git - vompclient.git/blob - surface.h
Connection failed detection
[vompclient.git] / surface.h
1 /*
2     Copyright 2004-2005 Chris Tallon
3     Portions copyright 2004 Jon Gettler
4
5     This file is part of VOMP.
6
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.
11
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.
16
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
20 */
21
22 #ifndef SURFACE_H
23 #define SURFACE_H
24
25 #include <stdio.h>
26 #include <string.h>
27 #include <unistd.h>
28 #include <sys/mman.h>
29 #include <sys/ioctl.h>
30
31 // Structures for surface management
32
33 typedef struct
34 {
35   unsigned long num;
36   unsigned long unknown[4];
37   unsigned long width;
38   unsigned long height;
39   char unknown2;
40 } stbgfx_display_t;
41
42 typedef struct
43 {
44   unsigned long unknown;
45   unsigned long win_unknown;
46   unsigned long addr;
47   unsigned long size;
48   unsigned long unknown2;
49   unsigned long width;
50   unsigned long height;
51   unsigned long unknown3;
52   unsigned long unknown4;
53   unsigned long width2;
54   unsigned long unknown5;
55   unsigned long unknown6;
56 } stbgfx_map_item_t;
57
58 typedef struct {
59   stbgfx_map_item_t map[3];
60   unsigned long other[2];
61 } stbgfx_map_t;
62
63 typedef struct
64 {
65   unsigned long handle; /* surface handle */
66   unsigned long width;
67   unsigned long height;
68   unsigned long flags;
69   long unknown;   //unsigned long
70   unsigned long depth;  /* number of subplanes */
71 } stbgfx_sfc_t;
72
73 typedef struct
74 {
75   stbgfx_display_t display;
76   stbgfx_map_t map;
77   stbgfx_sfc_t sfc;
78   unsigned char *base[3];
79 } osd_surface_t;
80
81
82 // Structures for surface drawing
83
84 typedef struct
85 {
86   unsigned long handle;
87   unsigned long x;
88   unsigned long y;
89   unsigned long width;
90   unsigned long height;
91   unsigned long colour;
92 } osd_fillblt_t;
93
94 typedef struct {
95   unsigned long dst_handle;
96   unsigned long dst_x;
97   unsigned long dst_y;
98   unsigned long width;
99   unsigned long height;
100   unsigned long src_handle;
101   unsigned long src_x;
102   unsigned long src_y;
103   unsigned long u1;
104   unsigned long u2;
105   unsigned char u3;
106 } osd_bitblt_t;
107
108 // Font stuff
109
110 typedef struct bogl_font {
111   char *name;     /* Font name. */
112   int height;     /* Height in pixels. */
113   int spacing;     /* Vertical spacing in pixels. */
114   unsigned long *content;   /* 32-bit right-padded bitmap array. */
115   short *offset;      /* 256 offsets into content. */
116   unsigned char *width;   /* 256 character widths. */
117 } osd_font_t;
118
119 extern osd_font_t font_CaslonRoman_1_25;
120 extern osd_font_t font_helvB24;
121 extern osd_font_t font_helvB18;
122
123 // Surface ioctls
124
125 #define GFX_FB_SFC_ALLOC  _IOWR(0xfb,1,int*)
126 #define GFX_FB_SFC_FREE   _IOW(0xfb,2,int)
127 #define GFX_FB_MAP    _IOWR(0xfb,3,int*)
128 #define GFX_FB_SFC_UNMAP  _IOW(0xfb,4,int)
129 #define GFX_FB_SET_PAL_1  _IOWR(0xfb,5,int*)
130 #define GFX_FB_SET_PAL_2  _IOW(0xfb,6,int*)
131 #define GFX_FB_OSD_SURFACE  _IO(0xfb,7)
132 #define GFX_FB_SFC_SET_SHARE  _IOW(0xfb,8,int)
133 #define GFX_FB_OSD_CUR_SETATTR  _IOW(0xfb,9,int*)
134 #define GFX_FB_ATTACH   _IOW(0xfb,11,int)
135 #define GFX_FB_SFC_DETACH _IOW(0xfb,12,int*)
136 #define GFX_FB_MOVE_DISPLAY _IOWR(0xfb,13,int)
137 #define GFX_FB_SET_DISPLAY  _IOW(0xfb,14,int)
138 #define GFX_FB_OSD_CUR_MOVE_1 _IOW(0xfb,15,int*)
139 #define GFX_FB_OSD_CUR_MOVE_2 _IOW(0xfb,16,int)
140 #define GFX_FB_SET_OSD    _IOW(0xfb,18,int)
141 #define GFX_FB_SET_DISP_CTRL  _IOW(0xfb,21,int*)
142 #define GFX_FB_GET_DISP_CTRL  _IOWR(0xfb,22,int*)
143 #define GFX_FB_SET_VIS_DEV_CTL  _IOWR(0xfb,23,int*)
144 #define GFX_FB_GET_VIS_DEV_CTL  _IOWR(0xfb,24,int*)
145 #define GFX_FB_OSD_BITBLT _IOW(0xfb,51,osd_bitblt_t*)
146 #define GFX_FB_OSD_FILLBLT  _IOW(0xfb,53,osd_fillblt_t*)
147 #define GFX_FB_OSD_ADVFILLBLT _IOW(0xfb,54,osd_afillblt_t*)
148 #define GFX_FB_OSD_BLEND  _IOW(0xfb,55,int*)
149 #define GFX_FB_OSD_ADVBLEND _IOW(0xfb,56,int*)
150 #define GFX_FB_OSD_RESIZE _IOW(0xfb,58,int*)
151 #define GFX_FB_ENGINE_WAIT  _IOW(0xfb,60,int)
152 #define GFX_FB_RESET_ENGINE _IO(0xfb,61)
153 #define GFX_FB_SET_ENGINE_MODE  _IOW(0xfb,62,int)
154 #define GFX_FB_GET_ENGINE_MODE  _IO(0xfb,63)
155 #define GFX_FB_GET_SFC_INFO _IO(0xfb,64,int*)
156 #define GFX_FB_OSD_SFC_CLIP _IOW(0xfb,65,osd_clip_rec_t*)
157 #define GFX_FB_OSD_COLOURKEY  _IOW(0xfb,67,int*)
158 #define GFX_FB_GET_SFC_PSEUDO _IOWR(0xfb,68,int*)
159
160 extern "C"
161 {
162   #include <jpeglib.h>
163 }
164
165 #include "defines.h"
166 #include "log.h"
167
168 class Surface
169 {
170   public:
171     Surface(int id = 0);
172     ~Surface();
173
174     static Surface* getScreen();
175     static int getFontHeight();
176
177     int create(UINT width, UINT height);
178     void display();
179     unsigned long getSurfaceHandle();
180
181     int fillblt(int x, int y, int width, int height, unsigned int c);
182     void drawPixel(int x, int y, unsigned int c);
183     void drawHorzLine(int x1, int x2, int y, unsigned int c);
184     void drawVertLine(int x, int y1, int y2, unsigned int c);
185     int updateToScreen(int sx, int sy, int w, int h, int dx, int dy);
186
187     int drawText(char* text, int x, int y, int r, int g, int b);
188     int drawTextRJ(char* text, int x, int y, int r, int g, int b);
189     int drawTextCentre(char* text, int x, int y, int r, int g, int b);
190     int getCharWidth(char c);
191     void readPixel(int x, int y, unsigned char* r, unsigned char* g, unsigned char* b);
192     void yuv2rgb(int y, int u, int v, unsigned char* pr, unsigned char* pg, unsigned char* pb);
193     void screenShot(char* fileName);
194
195     static void initConversionTables();
196
197     static int blt(int fd, unsigned long shandle, int sx, int sy, int width, int height, unsigned long dhandle, int dx, int dy);
198
199     const static int SCREEN = 1;
200     const static int BUFFER = 2;
201
202     // Implicit inlines
203     void c2rgba(unsigned long c, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a)
204     {
205       *a = (c & 0xff000000) >> 24;
206       *r = (c & 0x00ff0000) >> 16;
207       *g = (c & 0x0000ff00) >> 8;
208       *b = (c & 0x000000ff);
209     }
210
211     unsigned long rgba(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
212     {
213       return (a<<24) | (r<<16) | (g<<8) | b;
214
215     }
216
217   private:
218     static Surface* screen;
219     static osd_font_t* font;
220
221     int fdOsd;
222
223     osd_surface_t surface;
224
225     void rgb2yuv(unsigned char r, unsigned char g, unsigned char b, unsigned char *y, unsigned char *u, unsigned char *v);
226
227     static int conv_YB[256];
228     static int conv_YG[256];
229     static int conv_YR[256];
230     static int conv_UB[256];
231     static int conv_UG[256];
232     static int conv_UR[256];
233     static int conv_VB[256];
234     static int conv_VG[256];
235     static int conv_VR[256];
236
237     static int conv_BY[256];
238     static int conv_GY[256];
239     static int conv_RY[256];
240     static int conv_BU[256];
241     static int conv_GU[256];
242     static int conv_RU[256];
243     static int conv_BV[256];
244     static int conv_GV[256];
245     static int conv_RV[256];
246
247 };
248
249 #endif