]> git.vomp.tv Git - vompclient-marten.git/blob - surfacemvp.h
Radio live prebuffering fix, compile problem with new demuxer stripaudio
[vompclient-marten.git] / surfacemvp.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 SURFACEMVP_H
23 #define SURFACEMVP_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 extern "C"
32 {
33   #include <jpeglib.h>
34 }
35
36 #include "defines.h"
37 #include "log.h"
38 #include "surface.h"
39
40 // Structures for surface management
41
42 typedef struct
43 {
44   unsigned long num;
45   unsigned long unknown[4];
46   unsigned long width;
47   unsigned long height;
48   char unknown2;
49 } stbgfx_display_t;
50
51 typedef struct
52 {
53   unsigned long unknown;
54   unsigned long win_unknown;
55   unsigned long addr;
56   unsigned long size;
57   unsigned long unknown2;
58   unsigned long width;
59   unsigned long height;
60   unsigned long unknown3;
61   unsigned long unknown4;
62   unsigned long width2;
63   unsigned long unknown5;
64   unsigned long unknown6;
65 } stbgfx_map_item_t;
66
67 typedef struct {
68   stbgfx_map_item_t map[3];
69   unsigned long other[2];
70 } stbgfx_map_t;
71
72 typedef struct
73 {
74   unsigned long handle; /* surface handle */
75   unsigned long width;
76   unsigned long height;
77   unsigned long flags;
78   long unknown;   //unsigned long
79   unsigned long depth;  /* number of subplanes */
80 } stbgfx_sfc_t;
81
82 typedef struct
83 {
84   stbgfx_display_t display;
85   stbgfx_map_t map;
86   stbgfx_sfc_t sfc;
87   unsigned char *base[3];
88 } osd_surface_t;
89
90
91 // Structures for surface drawing
92
93 typedef struct
94 {
95   unsigned long handle;
96   unsigned long x;
97   unsigned long y;
98   unsigned long width;
99   unsigned long height;
100   unsigned long colour;
101 } osd_fillblt_t;
102
103 typedef struct {
104   unsigned long dst_handle;
105   unsigned long dst_x;
106   unsigned long dst_y;
107   unsigned long width;
108   unsigned long height;
109   unsigned long src_handle;
110   unsigned long src_x;
111   unsigned long src_y;
112   unsigned long u1;
113   unsigned long u2;
114   unsigned char u3;
115 } osd_bitblt_t;
116
117 // Surface ioctls
118
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*)
153
154 class SurfaceMVP : public Surface
155 {
156   public:
157     SurfaceMVP(int id = 0);
158     ~SurfaceMVP();
159
160     int create(UINT width, UINT height);
161     void display();
162     unsigned long getSurfaceHandle();
163
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);
171
172     static void initConversionTables();
173
174     int blt(int fd, unsigned long shandle, int sx, int sy, int width, int height, unsigned long dhandle, int dx, int dy);
175
176   private:
177     int fdOsd;
178     osd_surface_t surface;
179
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);
182
183     // Implicit inlines
184     void c2rgba(unsigned long c, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a)
185     {
186       *a = (c & 0xff000000) >> 24;
187       *r = (c & 0x00ff0000) >> 16;
188       *g = (c & 0x0000ff00) >> 8;
189       *b = (c & 0x000000ff);
190     }
191
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];
201
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];
211
212 };
213
214 #endif